Hello, World! Или включаем светодиодик.
На плате Xplained Mini присутствует светодиод на порту PC0 и кнопка на порту PC5. Будем на кнопочку давить и ожидать, что светодиодик погаснет=)
Давайте писать код. Определим константы:
uint8_t const maskLED = 0b00000001; uint8_t const maskSwitch = 0b00100000; uint8_t const Switch = 5;
Теперь напишем функцию, которая читает кнопку:
uint8_t GetSwith (PORT_t volatile *switchPort, uint8_t mask) { return (switchPort->IN & mask); }
Здесь все просто - читаем регистр IN порта и по маске отсекаем всё лишнее.
Теперь функция включения светика:
void SetLEDPort (PORT_t volatile *ledPort, uint8_t value, uint8_t mask) { ledPort->OUT = ledPort->OUT & ~mask | value; }
Здесь также по маске стираем значение порта и выставляем новое.
Ну и главная функция:
int main(void) { PORT_t volatile *ledPort = &PORTC; PORT_t volatile *switchPort = &PORTC; ledPort->DIR = maskLED; while (1) { uint8_t value = (GetSwith(switchPort, maskSwitch) >> Switch); SetLEDPort(ledPort, value, maskLED); } }
Т.к. кнопка и светодиод физически висят на разных битах, то смещением вправо на 5 бит мы значение кнопки ставим на место светодиода.
И самое важное - для программирования необходим всего один проводок, не считая нулевого. По нему же работает внутрисхемная отладка.
Размер кода - 106 байт с оптимизацией O3.
Скоро освоим таймер! А потом и АЦП.
До новых ВСТРЕЧ!
0 Комментариев
Рекомендуемые комментарии
Комментариев нет
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.