Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 307 ключевой комбинации. В строке 21 резервируется буфер длиной bsize, в котором будет храниться сама комбинация. После резервирования ячеек мы переходим в сегмент программ ного кода (строка 22). И начинаем формирование программы с нуле вого адреса (команда org в строке 23). Программный код начинается с таблицы переопределения векторов прерываний (строки 24 — 42). Как видите, в данном случае мы будем использовать два вида прерываний. Это прерывание по совпадению в канале А таймера/счетчика 1 (строка 28) и прерывание по переполнению того же таймера (строка 29). Первое прерывание используется для формирования защитной задержки в 48 мс. А второе — для формирования контрольного промежутка вре мени в 1 с. Для обоих видов прерываний назначена одна и та же про цедура обработки: ргорг. Почему одна и та же и как она работает, мы узнаем чуть позже. В строках 44 — 61 расположен модуль инициализации. Начинается инициализация с программирования портов ввода-вывода (строки 46 — 53). Все разряды порта PD и большая часть разрядов порта РВ кон фигурируются как входы. И лишь два разряда РВ.З и РВ.4 конфигуриру ются как выходы. Разряд РВ.4 используется для управления механизмом замка. А раз ряд РВ.З вообще пока не используется (зарезервирован). Его мы будем использовать как выход звука, когда будем объединять в одно устрой ство наш кодовый замок и музыкальную шкатулку. Для всех разрядов обоих портов, настроенных на ввод, включаются внутренние нагрузоч ные резисторы. На обоих выходах (РВ.З и РВ.4) устанавливается низкий логический уровень. В строках 54, 55 программируется аналоговый компаратор. Программирование таймера/счетчика 1 производится в строках 56 —61. Сначала в обе половинки регистра совпадения (OCR1 АН, OCR1AL) запи сывается код, определяющий длительность защитной задержки (строки 56 — 59). Затем в регистр состояния TCCR1B записывается код 0x03 (строки 60, 61). При записи этого кода таймер/счетчик 1 переводится в режим Normal с использованием предварительного делителя. А коэффи циент предварительного деления становится равным 1/64. Строки 62 — 119 занимает основной цикл программы, строки 120 — 174 — набор вспомогательных подпрограмм, а строки 175 и 176 — процедура обработки прерываний. Рассмотрение программы удобнее начать со вспомогательных процедур. И первая процедура, которую мы рассмотрим, — это процедура ввода и предварительной обработки кода состояния клавиатуры. Процедура представляет собой подпрограмму с именем incod и расположена в строках 120 — 140. В процессе работы процедура использует регистровую
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==