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

Шаг 5. Переходим непосредственно к разработке устройств и программ 205 10 DDRD=OxOO; 11 TCCROA=OxOO; // Инициализация таймера/счетчика 0 12 TCCROB=OxOO, 13 TCNTO=OxOO; 14 OCROA=OxOO; 15 OCROB=OxOO; 16 TCCR1A=OxOO; // Инициализация таймера/счетчика 1 17 TCCR1B=OxOO; 18 TCNT1H=OxOO, 19 TCNT1L=OxOO; 20 ICR1H=OxOO; 21 ICR1L=OxOO; 22 OCR1H=OxOO, 23 OCR1L=OxOO; 24 OCR1BH=OxOO; 25 OCR1BL=OxOO, 26 GIMSK=OxOO; // Инициализация внешних прерываний 27 MCUCR=OxOO, 28 TIMSK=OxOO, // Инициализация прерываний от таймеров 29 USICR=OxOO, // Инициализация универсального последовательного интерфейса 30 ACSR=0x80; // Инициализация аналогового компаратора 31 while (1) 32 while (PIND.0==1) {} 33 if (PINB 0==1) 34 { PORTB 0=0: } 35 else 36 { P0RTB.0=1; } 37 while (PIND.O==O) {} Цикл не выполняет никаких действий. Он будет выполняться, пока его условие истинно. В качестве условия выбрано равенство младшего разряда регистра PORTD нулю. На языке СИ это записывается следую ­ щим образом: PORTD.O==1. В языке СИ различают оператор равенства и оператор присвоения: ♦ один символ «=» означает присвоение, ♦ запись типа А=5 означает присвоение переменной А значения 5; ♦ двойной символ «==» означает операцию сравнения, ♦ запись А==5 означает проверку на равенство значений переменной А и константы 5. Результат такого сравнения равен единице в случае, если А равно пяти, и равен нулю, если это не так. Поэтому цикл while в строке 32 программы продолжается до тех пор, пока значение разряда PORTD.O равно единице. То есть до тех пор, пока кнопка, подключенная к этому разряду, остается ненажатой. Как только кнопка окажется нажатой, цикл (строка 32) заканчивается, и программа перейдет к строке 33. В строках 33 — 36 находится оператор сравнения. Он выполняет задачу переключения светодиода. Для этого в его условии записана про ­

RkJQdWJsaXNoZXIy MTExODQxMg==