Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
242 Микроконтроллеры AVR от азов программирования... 34 ldi temp, OxFF 35 out DDRB, temp 36 out PORTB, temp 37 out PORTD, temp Записываем число $FF в регистр temp Записываем temp в DDRB (порт РВ на вывод) Записываем temp в PORTB (потушить светодиод) Записываем temp в PORTD (включаем внутр.резист. ) Инициализация таймера Т1 ldi temp, OxOD out TCCR1B, temp ldi tenp, high(kdel) out OCR1AH, temp ldi temp, low(kdel) out OCR1AL, temp Выбор режима таймера Старший полубайт кода совпадения Запись в регистр совпадения старш. полубайта Младший полубайт кода совпадения Запись в регистр совпадения младш полубайта Определение маски прерываний 44 45 ldi out temp, 0601000000 TIM§K, temp Байт маски. Разрешено одно прерывание (№4) Записываем маску Инициализация компаратора 46 47 ldi temp, 0x80 ; Выключение компаратора out ACSR, temp Начало основной программы 48 main: ldi rab, 0600010000 49 sts but, rab 50 sei 51 ml : rjmp ml Запись начального значения Запись содержимого регистра rab в ОЗУ Разрешение прерываний Пустой бесконечный цикл Подпрограмма обработки прерываний 52 53 prtiml . push push temp rab , Сохраняем регистр temp ; Сохраняем регистр rab 54 Ids rab, but ; Читаем содержимое rab из ОЗУ 55 in temp, PIND ; Считываем содержимое порта PD 56 sbrs temp, 0 ; Проверка младшего разряда 57 rjmp p2 '■ Если не ноль, переходим к сдвигу влево -- Сдвиг вправо 58 P1 lsr rab Сдвиг содержимого рабочего регистра 59 brcc p3 . Если не дошло до конца регистра пропустить 60 ldi rab, ОЫООООООО ; Запись начального значения 61 rjmp p3 В конец -- Сдвиг влево 62 p2: lsl rab Сдвиг содержимого рабочего регистра 63 brcc p3 . Если не дошло до конца регистра пропустить 64 ldi rab, 0b00000001 ; Запись начального значения Конец процедуры обработки прерывания 65 рЗ ldi temp, OxFF ; Запись в temp числа $FF 66 еог temp, rab ; Инверсия содержимого rab (исключающее ИЛИ) 67 out PORTB, temp ; Вывод текущего значения в порт РВ 68 sts but, rab ; Запись регистра rab в ОЗУ 69 pop rab ; Восстанавливаем регистр rab 70 pop temp ; Восстанавливаем регистр temp 71 reti В нашей программе весь процесс резервирования занимает всего три строки (строки 6 — 8): ♦ в строке 6 выбирается нужный нам сегмент памяти (сегмент памя ти данных); ♦ в строке 7 выбирается новое значение для указателя в этом сегменте; ♦ в строке 8 происходит собственно резервирование.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==