Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

226 Микроконтроллеры AVR от азов программирования... Программа на языке СИ Возможный вариант той же программы, но на языке СИ, приведен в листинге 5.10. В этой программе впервые мы будем использовать пере ­ менную. До сих пор мы не применяли переменные лишь благодаря пре ­ дельной простоте предыдущих программ. Теперь же переменная нам понадобится для того, чтобы осуществлять операции сдвига. Переменная будет хранить текущее значение всех сдвигаемых битов так же, как в программе на Ассемблере их хранил регистр rab. Назовем переменную тем же именем, каким мы называли регистр. Описание пере ­ менной в нашей программе происходит в строке 4. Так как сдвигаемых битов должно быть всего восемь, то самый подходящий тип данных для нашей переменной — это unsigned char. Листинг 5.10 Project : Prog5 Пример 5 Бегущие огни Chip type Clock frequency Data Stack size ATtiny2313 4,000000 MHz 32 */ 1 «include <tiny2313 h> 2 «include <delay.h> 3 void main(void) { 4 unsigned char rab. // Вводим переменную rab 5 6 P0RTB=0xFF, // Инициализация порта В DDRB=OxFF, 7 8 P0RTD=0x7F; // Инициализация порта D DDRD=OxOO, 9 ACSR=0x80, // Инициализация аналогового компаратора 10 11 12 13 14 15 16 17 18 19 20 21 22 while (1) { if (PIND.0==1) // Проверка состояния переключателя { // Сдвиг вправо rab = 0Ы0000000; // Запись начального значения while (rab'=0) { PORTB=rab"0xFF , // Запись в порт с инверсией rab = rab »1, // Сдвиг разрядов delay_ms (200), // Задержка в 200 мсек } } else { // Сдвиг влево rab = ОЬОООООООІ: // Запись начального значения while (rab'=0) { P0RTB=rab~0xFF, // Запись в порт с инверсией rab = rab «1; // Сдвиг разрядов delay_ms (200); // Задержка в 200 мсек

RkJQdWJsaXNoZXIy MTExODQxMg==