- •Задание на курсовую работу
- •2. Описание алгоритма программы
- •2.1 Использование ресурсов
- •2.2 Основная программа
- •2.3 Подпрограмма обработки прерывания таймера
- •2.4 Подпрограмма обработки прерывания таймера 0. Режимы работы устройства
- •2.5. Подпрограммы индикации
- •2.6. Подпрограмы счета времени
- •2.7. Опрос клавиатуры
- •3. Дополнительное задание
2. Описание алгоритма программы
Программа организована с использованием прерываний по таймеру 0, который тактируется системной частотой поделенной на 256. Таймер предварительно загружается числом 100, что задает период генерации прерываний по переполнению таймера каждые 5 мс, обеспечивая высокую точность хода часов, при условии использования качественного кварцевого резонатора. При использовании кварцевого резонатора 8 МГц длительность цикла инструкции равна 0.125 мкс. С учетом этого, при записи числа n в регистр таймера 0 TCNT0 период его переполнения определяется по выражению:
(256-n)*256*0,125 мкс
Таким образом запись числа 100 обеспечит период переполнения 5мс с высокой для счета реального времени точностью:
(256-100)*256*0,125*
=4,992мс.
Вся программа разбита на несколько частей – это основная программа и подпрограммы прерывания по переполнению таймера/счетчика, счета времени, вывода на индикацию, сканирования клавиатуры и анализа нажатой клавиши.
В основной программе настраивается МК и ожидается прерывание по переполнению таймера-счетчика где наращивается счетчик срабатываний (когда его значение станет равным 200, то это значит, что прошла 1сек и вызывается подпрограмма счета времени), вызываются подпрограммы вывода на индикацию и сканирования (которая в свою очередь вызывает подпрограмму анализа нажатой клавиши), а также реализуется механизм мигания вводимого сегмента при установке начального времени.
2.1 Использование ресурсов
Использование периферийных устройств:
Таймер/счетчик0 – счетчик импульсов с периодом 5мс;
7 линий порта D – подключение клавиатуры 3х4 и управление анодами цифровых индикаторов;
8 линий порта A – сегментные линии индикаторов;
8 линий порта С – линейка светодиодов;
Используемые регистры:
r0 – используется при работе с таблицей данных, в нем содержится считанное значение из таблицы данных по адресу Z;
r1 – число секунд;
r2 – число минут;
r3 – число часов;
r6, r27, r28 – используется для дребезга в подпрограмме для сканирования клавиатуры;
r9 – счетчик таймера;
r7 – переменная кнопки;
r10, r11– используются в подпрограмме для сканирования клавиатуры;
r18, r15 – используется в подпрограмме KLAV несут в себе информацию о минутах и часах;
r19 – число заданных минут;
r20 – число заданных часов;
r21 – флаг первого запуска программы;
r22 – строка светодиодов;
r23 – направление движения бегущей точки;
r24 – флаг завершения отсчета заданного времени
r25 – режим работы таймера;
r29 – несет в себе информацию о месте положения ввода числа на индикаторе.
r16, r17, r30 – используются в качестве вспомогательных.
Рис. 2.1.1 – Таблица рабочих регистров
2.2 Основная программа
При подаче питания и выполнении условий сброса выполняется процедура сброса (Reset) для инициализации системных устройств. В качестве внешнего прерывания используется прерывание Int1, которое позволяет отслеживать изменение сигнала на выводе PD.3 . Стандартное имя прерывания – External_1. Для разрешения этого прерывания необходимо установить в “1” седьмой бит (“int1”) регистра маски прерывания GIMSK . Биты управления видом сигнала прерывания 1( Interrupt Sense Control – ISC11 и ISC10) в регистре управления процессора MCUCR определяют, активизируется ли внешнее прерывание по срезу(фронту) импульса или по уровню на контакте PD.3. В данной работе прерывание активизируется по фронту сигнала, т.е. биты ISC11 и ISC10 установлены в “1” (так фиксируется факт отжатия кнопки). При возникновении события, вызывающего прерывание, в регистре основных флагов прерывания GIFR устанавливается в логическую единицу бит INTF1. Линии портов настраиваются на нужные уровни. Порт А необходимо настроить на выход, старшую тетраду порта D на выход и младшую на вход. Старшая тетрада порта D используется и для реализации индикации. Т.е. подавая на один из этих выходов логический “0” сканируется клавиатура и одновременно зажигается нужный индикатор. Порт С настраивается на выход. Вывод PD3 настраивается на ввод с подтяжкой. Далее обнуляются используемые в программе регистры или заносятся в них нужные значения. Настраиваются таймеры и заносятся нужные значения в регистры управления МК. Прерывание по переполнению таймера становится активным после разрешения глобальных прерываний. Далее программа зацикливается, и в этом случае вся обработка будет происходить по прерыванию таймера 0.
Р
Рис. 2.2.2 – INIT
– подпрограмма задающая начальные
данные
