Реферат: Разработка часов на микроконтроллере PIC16F84
Блок схема разрабатываемой программы приведена на рисунке 8.Она состоит из блока началиных установок в который входят процедуры обнуления переменных используемых в программе, установки направления портов, установки нужного коэффициента предделителя, тест работоспособности индикаторов. Блока вывода на идикацию в катором осуществляется преодразование двоичного кода в код семисегментных индикаторов, формируются необходимые задержки времени для динамической индикации, также контроль вывода выбронного пользователем режима индикации (режим часы : минуты и минуты : секунды ). Участок программы сканирования клавиатуры отвечает за выбор режима индикации и установку времени вводимых с клавиатуры, в следующей последовательности в режиме (часы : минуты ) кропкой установки времени может быть изменено только значение раздела часов а в режиме (минуты : секунды) только минут.
Самая ответственная часть программы это обработка прерывания полученного от встроенного таймера микроконтроллера от неё зависит точность хода часов т.е ошибки в этой части программы приводят к значительному отстованию или опережению хода часов тамже может быть осуществлена точная подстройка. Рассмотрим получение интервала в 1 секунду с помощью таймера, при конфигурации таймера его надо подключить к внутреннему генератору который по заданию вырабатывает частоту 4,00 Мгц после такого подключения в данном микроконтроллере на таймер будет подаватся частота генератора (Fг)/4 и будет равна 1000000 гц с помощью встроенного предделителя она делится на 64 и на таймер приходит уже 15625 гц. После этого нам необходимо разделить это число на такоеже чтобы получить частоту колебаний в 1гц. Из за небольшой разрядности таймера (8) эта процедура делается в два этапа длем на 125 и еще раз на столько же. Сразу после этого прибавляем 1 к регистру секунд (в программе sek).Результат приведен ниже :
1. F(г)=4 мГц/4=1000000
2. 1000000/64=15625
3. 15625/125=125
4. 125/125=1 Гц
LIST p=16F84A ; указатель процессора
include
org 0x00 ; Вектор сброса
Goto Start
;***************************************************************
org 004 ;Начало процедуры обработки прерывания
movwf temp ; Сохранение рабочего регистра W в регистре temp
clrwdt ;Очистка сторожевого таймера для предотврашения
call Int1 ; сброса процессора каждый 18мс
movlw b'10100000' ; Разрешаем прерывания от таймера
movwf INTCON ;
movf temp,w ;Востанавливаем значение рабочего регистра
clrwdt ;Очистка сторожевого таймера
return ;Выход из процедуры обработки прерывания
;****************************************************************
org 0x10
segment ; Таблица преобразования DEC -> семисегментный код.
CLRF PCLATH
ADDWF PCL, F
dt 07E, b'00001100', 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE
Data1 ;*************десятки
CLRF PCLATH