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

Шаг 5. Переходим непосредственно к разработке устройств и программ 269 ♦ переменная count, которая будет использоваться для определения кода нажатого датчика; ♦ переменная temp, предназначенная для вспомогательных целей. Листинг 5.16 Project . Prog 8 Version . 1 Date : 31 01.2006 Author . Belov Comments' Сигнализатор «Семь нот» Chip type : ATtiny2313 Clock frequency : 4,000000 MHz 1 «include <tiny2313 h> // Объявление и инициализация массива коэффициентов деления 2 flash unsigned int tabkd[7] = {4748,4480,4228,3992,3768,3556,3356}; 3 void main(void) 4 unsigned char count; // Определяем переменную count 5 unsigned char temp; // Определяем переменную temp 6 7 P0RTB=0x00, // Инициализация порта PB DDRB=0x08, 8 9 P0RTD=0x7F, // Инициализация порта PD DDRD=0x00; 10 ACSR=0x80; // Инициализация (отключение) компаратора 11 TCCR1A=0x00; // Инициализация таймера счетчика Т1 12 TCCR1B=0x09; 13 14 15 16 17 while (1) ml . temp=PIND, for (count=0; count<7, count++) // Цикл сканирования датчиков if (( temp&1 )==0) goto m2, temp »= 1; TC(I r 1A=0 x 00; goto ml; // Проверка младшего бита переменной temp // Сдвиг содержимого temp // Выключение звука // Переход на начало 20 m2: OCR1A=tabkd[count], // Запись коэффициента деления таймера. 21 TCCR1A=0x40; // Включение звука Строки 6 — 12 занимает модуль инициализации. Здесь настраиваются порты ввода вывода (строки 6 — 9), компаратор (строка 10) и таймер Т1 (строки 11,12). При настройке в управляющие регистры микроконтрол ­ лера записываются те же самые коды, которые мы записывали в те же регистры в программе на Ассемблере (см. листинг 5.15). Основной цикл программы занимает строки 13 — 21. В строке 14 про ­ грамма читает содержимое порта PD и помещает прочитанный байт в переменную temp. Этот байт, как вы понимаете, содержит информацию о состоянии датчиков. В строках 15 — 17 находится цикл сканирования датчиков. В качестве параметра цикла используется переменная count. Цикл выполняется, пока значение переменной count меньше семи. В теле цикла происходит проверка младшего бита переменной temp (строка 16).

RkJQdWJsaXNoZXIy MTExODQxMg==