Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
202 Микроконтроллеры AVR от азов программирования... Листинг 5.3 1 2 ;############################################## ,## ;## П ;######## . include . list Пример 2 эограмма переключения светодиода -------------------------------- Псевдокоманды ## ## /правления , Присоединение файла описаний : Включение листинга tn2313def inc" 3 def temp = R16 ; Определение главного рабочего регистра ; -------------- ------------ Начало программного кода 4 .cseg ; Выбор сегмента программного кода 5 . org 0 , Установка текущего адреса на ноль — -------------- Инициализация стека 6 ldi temp, RAMEND ; Выбор адреса вершины стека 7 out SPL, temp , Запись его в регистр стека — -------------- Инициализация портов ВВ 8 9 ldi out temp, 0 DDRD, temp ; Записываем ноль в регистр temp , Записываем этот ноль в DDRD (порт PD на ввод) 10 ldi temp, OxFF DDRB, temp ; Записываем число $FF в регистр temp ; Записываем temp в DDRB (порт РВ на вывод) 11 out 12 out PORTB, temp ; Записываем temp в PORTB (потушить светодиод) 13 out PORTD, temp ; Записываем temp в PORTD (включаем внутр.резист. ) — ---------------- Инициализация компаратора 14 ldi temp, 0x80 ACSR, temp ; Выключение компаратора 15 out ; -------------- -------------- Начало основного цикла 16 main . in temp, PIND ; Читаем содержимое порта PD 17 sbrc temp, 0 ; Проверка младшего разряда 18 rjmp main ; Если не ноль, переходим в начало ; -------------- -------------------------- Переключение светодиода 19 in temp, PINB ; Читаем содержимое порта РВ 20 sbrc temp, 0 ; Проверка младшего разряда 21 rjmp ml 22 sbi PORTB, 0 ; Установка выход РВО в единицу 23 rjmp m2 24 ml ■ cbi PORTB, 0 , Сброс РВО в ноль — -------------------------- Цикл ожидания отпускания кнопки 25 m2 in temp, PIND ; Читаем содержимое порта PD 26 sbrs temp, 0 , Проверка младшего разряда 27 rjmp m2 , Продолжить ожидание отпускания кнопки 28 rjmp main ; К началу цикла Описание программы (листинг 5.3) Первая часть программы (строки 1 — 15) полностью повторяет анало гичную часть программы из предыдущего примера (листинг 5.1). И это неудивительно, так как алгоритм инициализации не изменился. Зато значительно усложнился основной цикл программы. Теперь он значи тельно вырос по объему и занимает строки 16 — 28. В строке 16 произво дится чтение порта portd . Ч исло , прочитанное из порта, записывается в регистр temp. В строке 17 производится проверка младшего разряда прочитанного числа. Если младший бит равен единице (кнопка не нажата), то управле
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==