Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 209 шение прерываний), этот регистр имеет ряд флагов, отражающих резуль таты работы различных операций. Полное описание регистра SREG смотрите в Шаге 6. В данном случае нас интересует лишь один из таких флагов — флаг нулевого результата (флаг Z). Этот флаг устанавливается в том случае, когда при выполнения очередной команды результат окажется равным нулю. Например при вычитании двух чисел, сдвиге разрядов числа или в результате опера ции сравнения. В нашем случае на значение флага влияет команда dec (строка 34). Если в результате действия этого оператора содержимое регистра окажется равным нулю, то флаг Z устанавливается в единицу. В противном случае он сбрасывается в ноль. Флаг Z будет хранить записанное в него значение до тех пор, пока какая-нибудь другая команда его не изменит. Какие из команд оказывают влияние на флаг Z, а какие нет, можно узнать из приложения. Команда brne использует флаг Z в качестве условия. Команда выпол няет переход только в том случае, если флаг Z сброшен. То есть когда результат предыдущей команды не равен нулю. В нашей программе (листинг 5.5) подобный оператор применяется в строке 35. Листинг 5.5 ,## Пример 3 ## ,## Программа переключения светодиода ## ;## с использованием антидребезга ## ,############################################## Псевдокоманды управления 1 include "tn2313def inc" 2 list Присоединение файла описаний Включение листинга 3 .def temp = R16 4 def loop = R17 Определение главного рабочего регистра Определение регистра организации цикла ; ----------------------------------------------- Начало программного кода 5 cseg ; Выбор сегмента программного кода 6 огд 0 , Установка текущего адреса на ноль , ------------------------------------------------- Инициализация стека 7 ldi temp, RAMEND ; Выбор адреса вершины стека 8 out SPL, temp , Запись его в регистр стека , ------------------------------------------------- Инициализация портов ВВ 9 10 Записываем ноль в регистр temp Записываем этот ноль в DDRD (порт PD на ввод) 11 12 13 14 temp, О DDRD, temp ldi out ldi temp. OxFF , Записываем out DDRB, temp ; Записываем out PORTB, temp ; Записываем out PORTD, temp ; Записываем число $FF в регистр temp temp в DDRB (порт РВ на вывод) temp в PORTB (потушить светодиод) temp в PORTD (включаем внутр резист ) Инициализация компаратора 15 ldi temp, 0x80 , Выключение компаратора 16 out ACSR, temp Начало основного цикла
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==