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

Шаг 5. Переходим непосредственно к разработке устройств и программ 241 операции мы уже выполняли в предыдущей программе. Различия начи ­ наются в строке 6. Тут мы впервые сталкиваемся с процедурой резервирования ячеек ОЗУ. Правда, зарезервируем мы для начала всего одну ячейку. Процесс резервирования похож на процесс автоматического размещения команд в программной памяти (см. раздел 5.2). Здесь также используется указа ­ тель текущего адреса. При резервировании ячеек указатель перемещается от нулевого адреса вверх, в сторону увеличения адресов. Если очередная директива byte резервирует N ячеек памяти, то и указатель перемеща ­ ется на N позиций. Листинг 5.13 'Шшшшштшшшшшшшшшя , НН Пример 7 ## , ## "Бегущие огни" tttt , ## с использованием прерываний от таймера tttt ; fttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt 1 . include "tn2313def . inc" 2 . list 3 .def temp = R16 4 def rab = = R17 5 equ kdel = 780 6 .dseg 7 ■ org 0x60 8 buf . byte 1 9 cseg 10 org 0 11 start rjmp lnit 12 reti 13 reti 14 reti 15 rjmp prtiml 16 reti 17 reti 18 reti 19 reti 20 reti 21 reti 22 reti 23 reti 24 reti 25 reti 26 reti 27 reti 28 reti 29 reti Псевдокоманды управления , Присоединение файла описаний , Включение листинга ; Определение главного рабочего регистра , Определение рабочего регистра для команд сдвига Резервирование ячеек памяти ; Выбираем сегмент ОЗУ , Устанавливаем текущий адрес сегмента , Один байт для хранения рабочего значения Начало программного кода ; Выбор сегмента программного кода , Установка текущего адреса на ноль Переопределение векторов прерываний ; Переход на начало программы ; Внешнее прерывание О , Внешнее прерывание 1 ; Таймер/счетчик 1, захват ; Таймер/счетчик 1, совпадение, канал А ; Таймер/счетчик 1, прерывание по переполнению ; Таймер/счетчик 0, прерывание по переполнению ; Прерывание UART прием завершен ; Прерывание UART регистр данных пуст ; Прерывание UART передача завершена ; Прерывание по компаратору ; Прерывание по изменению на любом контакте ; Таймер/счетчик 1. Совпадение, канал В ; Таймер/счетчик 0 Совпадение, канал В ; Таймер/счетчик 0. Совпадение, канал А ; USI готовность к старту ; USI Переполнение , EEPROM Готовность ; Переполнение охранного таймера Модуль инициализации ---------- Инициализация стека ноль в регистр temp этот ноль в DDRD (порт PD на ввод) 30 ldi temp, RAMEND , Выбор адрес 31 out SPL, temp , Запись его , --- -------------------- Инициализация портов BB 32 ldi temp, 0 ; Записываем 33 out DDRD, temp , Записываем ;а вершины стека в регистр стека

RkJQdWJsaXNoZXIy MTExODQxMg==