Процедура INKEY начинается с загрузки счетчика сбросов SSBR числом 114. Затем разрешается прерывание от таймера и запускается сам таймер с предделителем на 8. С помощью него задается время, отведенное на набор кода. Оно равно примерно 1 минуту. Далее проверяются ячейки памяти NK0, NK1, NK2 и NK3.
Если во всех их содержатся нулевые значения (сразу после инициализации), то подпрограмма переходит к начальному вводу ключа. Делается это так. Производится опрос клавиатуры и ожидается нажатие клавиши с кодом 11 «Е». Как только это произошло, выдается сигнал на включение светодиода, загружается счетчик нажатий клавиш SN числом 4. После осуществляется ввод четырех первых кодов и последовательный занос их в ячейки памяти NK0, NK1, NK2 и NK3. После четырех нажатий выдается сигнал на выключение светодиода, устанавливается флажок KVER=1 и производится выход из подпрограммы.
Если в ячейках памяти NK0, NK1, NK2 и NK3 содержится ненулевой ключ, то подпрограмма переходит к вводу ключа и его проверки. Делается это так. Производится опрос клавиатуры и ожидается нажатие клавиши с кодом 10 «Т». Как только это произошло, выдается сигнал на включение светодиода и производится последовательный ввод ключа в ячейки памяти VK0, VK1, VK2 и VK3, до нажатия клавиши с кодом 11 «Е». После нажатия этой клавиши нажатий.
Рис.5.10. Схема алгоритма подпрограммы INKEY.
выдается сигнал на выключение светодиода, запускается процедура проверки PROV и происходит выход из подпрограммы.
Структурная схема алгоритма подпрограммы PROV приведена на рис.5.11.
Рис.5.11. Структурная схема алгоритма подпрограммы PROV
В ней производится последовательное сравнение содержимого ячеек памяти VK0, VK1, VK2 и VK3 с содержимым ячеек NK0, NK1, NK2 и NK3 соответственно. При совпадении содержимых устанавливается флажок KVER=1, в противном случае KVER=0 и происходит выход из подпрограммы.
Прерывания от таймера обрабатывает подпрограмма OPTMR1. Структурная схема алгоритма приведена на рис.5.12. Она начинается с уменьшения счетчика сброса SSBR на единицу. Далее следует проверка на ноль. Если SSBR=0, то осуществляется запрет прерывания от таймера и переход на метку MET1, в противном случае происходит запуск таймера с предделителем на 8 и выход из подпрограммы.
Рис.5.12. Структурная схема обработки прерывания от таймера TMR1
Структурная схема подпрограммы работы с клавиатурой RUNKEY приведена на рис.5.13. Начинается подпрограмма с опроса клавиатуры. Затем осуществляется анализ кода нажатой клавиши.
Если он равен 10, то это значит, что нажата клавиша «Т» - «передача». При этом подается сигнал на включение светодиода, запрещается прерывания от детектора правильного кода, включается передатчик, осуществляется передача идентификационного номера автомобиля, для контроля доступа на охраняемую автостоянку, выключается передатчик, разрешаются прерывания от детектора правильного кода, включается подпрограмма задержки на 0,5 секунды, выключается светодиод и вновь осуществляется опрос клавиатуры.
Если код нажатой клавиши не равен 10, то запускается режим AHJ. При этом загружается счетчик сбросов SSBR числом 57, разрешается прерывание от таймера, запускается таймер с предделителем на 8, подается сигнал на включение светодиода, сбрасывается содержимое ячеек памяти VK0, VK1, VK2 и VK3 в ноль и передается управление подпрограмме INKEY по метке MET2.
Рис.5.13. Структурная схема алгоритма подпрограммы RUNKEY.
5.2 Разработка управляющей программы
При разработке программы использовался программный продукт MPLABv.3.22 производства фирмы Microchip. Он представляет собой интегрированную среду, включающую в себя программный эмулятор, внутрисхемный эмулятор и встроенный текстовый редактор и распространяется свободно этой фирмой. Этот пакет поддерживает серии микроконтроллеров, начиная с PIC 16C5X и заканчивая PIC 17CXX. При разработке и отладке использовался программный эмулятор этого пакета.
Головная программа написана по алгоритму, схема которого приведена на рис.5.1.
; головная программа
listp=16c73a, f=inhx8m
#include 16c73a.inc
;-------------------------------------------------------------------------------
CCequ 20 ;присвоение символических имен
RPRequ 21 ;используемым регистрам
RPRTMR1 equ 22
KK equ 24
SPER equ 25
SPOS equ 26
SPOP equ 27
SSIG equ 28
NK0 equ 29
NK1 equ 2A
NK2 equ 2B
NK3 equ 2C
VK0 equ 2D
VK1 equ 2E
VK2 equ 2F
VK3 equ 30
SN equ 31
BUK equ 32
KVER equ 33
SSBR equ 34
;--------------------------------------------------------------------------------
org 0
gotoBegin ;переход к началу программы
org 4
callRZINT ;переход к обработчику прерываний
;------------------------------------------------------------------------------
Begin: bcfSTATUS, RP0 ;переход к 0 банку памяти
clrfINTCON ;настройка регистров
clrfPIR2 ;специальных функций
movlwB’00111100’
movwfT!CON
bsfSTATUS, RP0 ;переход к 1 банку памяти
movlwB’11000000’ ;настройка регистров
movwfOPTION ;специальных функций
clrf TRISA
movlw B’11100001’
movwf TRISB
movlw B’00110111’
movwf TRISC
clrf PCON
;----------------------------------------------------------------------------------
bcfSTATUS, RP0 ;переход к 0 банку памяти
clrfPORTA ;настройка выходных портов
bcfPORTC, RC7
;----------------------------------------------------------------------------------
movlw 1
movwfCC ;начальная установка слова состояния
movlw 2
movwfSU ;начальная установка счетчика ударов
;-----------------------------------------------------------------------------------
btfss CC, 0
goto Trev
btfsc CC, 1
goto Og
call Ohrana ;вызовподпрограммы Ohrana
goto Start
goto Start
goto Start
end
В состав головной программы входит подпрограмма режима охраны Ohrana. Согласно алгоритму, схема которого представлена на рис.5.2. была написана подпрограмма Ohrana. Текст ее приведен ниже.
; подпрограмма Ohrana
Ohrana:
bcf STATUS, RP0 ;переход к 0 банку памяти
bsf PORTA, RA1 ;блокирование зажигания
bsf PORTA, RA3 ;сигнал закрытия ЦЗ
call Del1 ;задержка 1 с
bcf PORTA, RA3
movlw B’10011000’ ;разрешение прерываний
movwf INTCON ;от датчиков
Mor: bsf PORTA, RA4 ;вкл. светодиода
call Del1 ;задержка 1 с
bcf PORTA, RA4 ;выкл. светодиода
call Del1 ;задержка 1 с
goto Mor
Прерывания от датчиков, таймера и детектора правильного кода будут обрабатываться подпрограммой RZINT, текст которой показан ниже. Она написана согласно алгоритму, схема которого показана на рис.5.3.
; подпрограмма RZINT
RZINT:
movf INTCON, 0 ;запоминание разрешенных
movwf RPR ;или запрещенных прерываний
movf PIE1, 0 ;
movwf RPRTMR1 ;
bcf INTCON, 7 ;запрет всех прерываний
bcf PIE1, 0 ;
btfsc INTCON, RBIF ;определение источника прерывания
goto AAA ;переход если прерывание от порта В
A11: btfsc PIR1, TMR1IF
gotoBBB ;переход если прерывание от таймера
btfscINTCON, INIF
gotoCCC ;переход если прерывание от ДК
redfie ;возврат
AAA: btfssPORTB, RB5 ;определение источника прерывания
gotoAA1 ;переход если прерывание от ДД
btfscPORTB, RB6
gotoBB1 ;переход если прерывание от УЛЗД
btfscPORTB, RB7
gotoCC1 ;переход если прерывание от ДУ
gotoA11
AA1: movlw 2
movwfCC ;установка режима “Тревога”
gotoBeg
BB1: movlw 2
movwfCC ;установка режима “Тревога”
gotoBeg
CC1: callOPDU ;вызов подпрограммы OPDU
gotoBeg
BBB: callOPTMR1 ;вызов подпрограммы OPTMR1
goto Beg
CCC: call OPPK ;вызовподпрограммы OPPK
goto Beg
Beg: movfRPR, 0 ;восстановление запомненных
movwfINTCON ;разрешенных или запрещенных
movfRPRTMR1, 0 ;прерываний
movwfPEI1 ;
gotoStart
В состав подпрограммы обработки прерываний RZINT входит подпрограмма обработки прерывания от датчика ударов OPDU, текст которой приведен ниже а схема алгоритма на рис.5.4.
; подпрограмма OPDU
OPDU:
bsfINTCON, 7 ;разрешение прерываний от датчиков
bsfPORTA, RA5 ;включение сирены
callDel05 ;задержка на 0,5 с
bcfPORTA, RA5 ;выкл. сирены
decfSU, 1 ;декремент счетчика ударов
btfscSTATUS, Z
gotoPPP ;переход если счетчик ударов равен 0
callDel3 ;задержка на 3с
movlw 2
movwfSU ;восстановление счетчика ударов
gotoStart
PPP: movlw 2
movwfSU ;восстановление счетчика ударов
movwfCC ;установка режима “Тревога”
gotoStart
Также в состав подпрограммы RZINT входит подпрограмма обработки прерывания от таймера TMR1. Ее текст приведен ниже, а схема алгоритма на рис.5.12.
; подпрограмма OPTMR1
OPTMR1:
decfSSBR, 1 ;декремент счетчика сбросов
btfscSTATUS, Z
gotoFFF ;переход если счетчик сбросов равен 0
bcfPIR1, 0 ;сброс флага прерывания от таймера
bsfT1CON, 0 ;запуск таймера
return ;возврат
FFF: bcfPIE1, 0 ;запрет прерывания от таймера
gotoMET1
6. РАЗРАБОТКА КОНСТРУКЦИИ КОДОВОГО БРЕЛКА
Целью разработки является определение габаритов, конструкции и внешнего вида кодового брелка. Для правильной и удобной компоновки пульта управления нужно учитывать рекомендации эргономики и инженерной психологии с целью приспособления изделия к человеку при полном ограждении человека от отрицательных последствий использования товара. Конструкция его должна облегчать обслуживание, наблюдение за ним и контроль. Следует также учитывать конкретную психологию процесса, т.е. наиболее рациональные условия эксплуатации, при которых снижается расход энергии пользователя и сводится к минимуму его утомление.
При конструировании пульта управления следует руководствоваться ГОСТ 16456-70, который содержит 23 эргономических показателя, и ГОСТ 22973-78.
В настоящее время имеются ГОСТы определенных эргономических требований к пультам управления и контроля, приборам и сигнализаторам, циферблатам и указателям приборов, надписям, безтекстовым обозначениям и символике, ручным и ножным органам управления и др.