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

260 Микроконтроллеры AVR от азов программирования... — ---------------- Инициализация компаратора 35 ldi temp, 0x80 ACSR, temp 36 out ---------------- Инициализация таймера/счетчика 37 ldi temp, 0x09 TCCR1B, temp temp, 0x00 TCCR1A, temp 38 39 mV 40 out ldi out , Выбор режима ; Отключение звука Начало основного цикла программы 41 main: cl г count ; Обнуление счетчика опроса клавиш 42 in temp, PIND ; Чтение порта D 43 m2: lsr temp ; Сдвигаем входной байт 44 brcc m3 ; Если текущий разряд был равен 0 45 inc count , Увеличиваем показание счетчика 46 cpi count, 7 , Сравнение (7 - конец сканирования) 47 brne m2 ; Если не конец, продолжить 48 rjmp ml ; Если не одна клавиша не нажата 49 m3: lsl count , Умножение номера кнопки на 2 50 mov YL, count ; Создаем первое слагаемое 51 ldi YH, 0 ; Старший его байт равен нулю 52 ldi ZL, low(tabkd*2) , Второе слагаемое - начало таблицы tabkd 53 ldi ZH, high(tabkd*2) 54 add ZL, YL ; Складываем два 16-разр. слагаемых 55 adc ZH, YH 56 1pm YL, Z+ ; Читаем младший байт коэфф, деления 57 1pm YH, Z , Читаем младший байт коэфф, деления 58 out 0CR1AH, YH ; Вспомогательное значение 59 out 0CR1AL, YL , Записать в старш часть регистра совпадения 60 ldi temp, 0x40 , Включить звук 61 out TCCR1A, temp 62 rjmp main ***** ************** ************************ **************** ★ * Таблица коэффициентов деления ** ; ***** ************** ************************ **************** 63 tabkd . dw 4748,4228,3768,3556,3168,2822,2514 Описание программы (листинг 5.15) Четыре первые строки программы (строки 1 — 4), я думаю, пояснений не требуют. Все эти команды знакомы нам по предыдущему примеру. Строки 5 — 25 занимает таблица переопределения векторов прерываний. Мы при ­ менили эту таблицу, несмотря на то, что данная программа не использует прерываний. Именно поэтому во всех ячейках таблицы, кроме ячейки с нулевым адресом, поставлены команды-заглушки. Для серьезных проек ­ тов применение таблицы считается обязательным. Это повышает надеж ­ ность работы программы, а также повышает ее наглядность. Строки 26 — 40 занимает модуль инициализации. Начинается он с инициализации стека (строки 26, 27). Затем производится инициализа ­ ция портов ввода-вывода. Команды инициализации портов занимают строки 28 — 34. Порт РВ настраивается таким образом, что линия РВ.З работает в режиме вывода информации, а остальные линии — в режиме ввода. Все

RkJQdWJsaXNoZXIy MTExODQxMg==