Разработка таймера прямого хода

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?ится в данный момент и корректность введенной цифры. Помимо этого, каждые 5мс происходит вызов подпрограммы таймера/счетчика, где наращивается счетчик срабатываний (когда его значение станет равным 200, значит прошла 1сек) и вызывается подпрограмма счета времени, вывода на индикацию и сканирования клавиатуры.

Динамическая индикация осуществляется следующим образом: вначале в порт А выводится код, который зажигает сегменты индикатора, при которых светится требуемая цифра (0, 1, 2 тАж) и открывается первый транзисторный ключ, путем посылки 0 в PORTD.4. При этом будет отображаться только первый разряд индикатора. Через 5 мс необходимо закрыть первый транзисторный ключ, вывести в порт А код, который соответствует цифре, выводимой на второй разряд и открыть второй транзисторный ключ. При этом будет отображаться только второй разряд индикатора. Далее эта процедура повторяется для каждого разряда и после отображения четвертого разряда снова выводится первый разряд. Таким образом, время обновления каждого разряда составляет 5мс * 4 = 20 мс, при такой частоте обновления человеческий глаз не замечает мерцания и воспринимает индикацию как статическую.

Для выполнения этих действий будем использовать уже настроенный ранее таймер на период переполнения 5 мс. В подпрограмме обработки прерывания по переполнению таймера будем вызывать подпрограмму, которая и будет выполнять все вышеперечисленные действия.

Клавиатура сканируется с помощью логического 0, который подается на соответствующую линию при выводе на индикацию. Далее требуется опросить 3 младших разряда порта D, и если один из них равен 0, то это является признаком нажатия соответствующей кнопки. В этой подпрограмме также требуется реализовать процедуру антидребезга.

Чаще всего используется задержка длительностью 20мс и после этого снова опрашивается разряд порта D, на котором перед этим присутствовал 0. Если состояние не изменилось, то считается что кнопка нажата.

Целесообразно использовать уже настроенный таймер на переполнение через каждые 5 мс. Для реализации этого следует создать подпрограмму, которая будет выполнять опрос клавиатуры, и вызываться в подпрограмме обработки прерывания по переполнению таймера. Таким образом, подпрограмма будет выполняться через каждые 5 мс.

Т.к. сканирование клавиатуры и индикации выполняется с помощью одних линий, то опрос клавиатуры будет связан с индикацией. Например, если в данный момент на индикаторе отображается первый разряд (присутствует 0 на линии PORTD.4), то сейчас подается 0 на первую строку клавиатуры, и можно считать состояние только первых трех кнопок этой строки. Таким образом, номер разряда индикатора, который отображается в данный момент, будет номером строки клавиатуры, которую можно сканировать в данный момент.

таймер программирование схема микроконтроллер

2. Описание и назначение переменных

IND - вектор однобайтовых чисел, используется для хранения данных, выводимых на индикатор.

REGIM (R1) - содержит номер режима, в котором в данное время работает программа, может принимать значения:

- режим прямого хода таймера

- режим вывода цифры в 1-й разряд

- режим вывода цифры во 2-й разряд

- режим вывода цифры в 3-й разряд

- режим вывода цифры в 4-й разряд

COUNTER (R2) - счётчик срабатывания таймера. Применяется для организации мерцания символов на индикаторах, с периодом в 1 сек (0.5 сек горит, 0.5 сек не горит).

POINT (R3) - регистр состояния точки (H - сегмент 2-го индикатора), может принимать значения:

- не горит

- горит

BLINK (R4) - регистр мерцания символов на индикаторах, может принимать значения:

- горит

- не горит

HOUR_1 (R5) - счётчик часов, может принимать значения от 0 до 2

HOUR_2 (R6) - счётчик часов, может принимать значения от 0 до 3

MIN_1 (R7) - счётчик минут, может принимать значения от 0 до 5

MIN_2 (R8) - счётчик минут, может принимать значения от 0 до 9

SEC (R9) - счётчик секунд, может принимать значения от 0 до 59

MESTO (R10) - регистр для хранения текущего знакоместа, может принимать значения от 1 до 4

NOM_KNOP (R11) - регистр для хранения номера нажатой кнопки, может принимать значения от 1 до 12

MERC_T (R12) - флаг мерцания точки

MERC_С (R13) - флаг мерцания цифры

BLOK_VVODA (R14) - флаг установки блокировки ввода, может принимать значения:

- блокировка отключена

- блокировка включена

S_BLOK (R15) - счётчик, используемый для формирования "флага" блокировки ввода в подпрограмме сканирования клавиатуры (время блокировки)

Timer1, Timer2, Timer3, Timer4 (R18, R19, R20, R21) - регистры, используемые для хранения заданного времени, при достижении которого таймер останавливается.

R22, R23 - регистры, используемые в подпрограмме антидребезга.

TIM (R24) - флаг остановки таймера, при достижении заданного времени.

М (R25) - флаг обнуления значений часов, минут секунд, при начале работы таймера.

Описание переменных в Algorithm Builder приведено в приложении Б.

3. Описание основной программы и подпрограм

3.1 Основная программа (Reset)

Рисунок 3.1 - Блок-схема основной программы

В основной программе выполняем инициализацию стека - блок SP, настраиваем таймер на переполнение - блоки Timer 0, TIMSK. Настройка таймера: запись числа $04 в регистр управления таймером TCCR0, запись числа $02 в регистр TIMSK (разрешение прерывания по переполнению таймера 0). Далее заносится 1 в бит I (разрешение глобального прерывания) и вызов подпрограм