Белов, А.В. Микроконтроллеры 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 мсек
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==