Главная страница Комбинированное использование портов 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [ 33 ] 34 35 36 37 38 39 40 MOVF
STMR.W
Счетчик секунд равен нулю?
ANDLW
Boooomr
Маскируем минуты.
BTFSS
STATUS.Z
Если да, то пропускаем команду.
BTFSS
STATUS,Z
Проверяем на 0. Если 0, то пропускаем.
RETLW
Если нет, возвращаемся.
DECF
MIN.SEC
Декрементируем счетчик секунд.
ALFWG.INAL
Устанавливаем сигнальный флаг будильника.
MOVLW
STMR
Загружаем S TMR в регистр косвенного адреса.
HOVLW
Устанавливаем таймер на интервал в 1 минуту.
MOVWF
MOVWF
MIN SEC
INC 60
Вызываем INCJO (инкрементируем секунды).
RETLW
lORLW
Проверяем на 0.
BTFSS
STATUS,Z
Если 0, то пропускаем.
CHKJ.MIN
GOTO
CHK AL TIM
иначе - продолжаем.
SWAPF
MIN SEC,W
Меняем местами тетрады минут и секунд.
ANDLW
В-0000111Г
Проверяем минуты.
Приращение
счетчика минут.
BTFSS
STATUS,Z
Если 0, то пропускаем команду.
- RETLW
Возвращаемся.
SWAPF
MIN SEC
Меняем местами тетрады регистра MIN SEC.
ALFLAG,INAL
Обнуляем бит INAL.
MOVF
MIN SEC,W
Перемещаем в регистр W.
ALFLAG.INAA
Обнуляем бит INAA.
ANDLW
В-0000111Г
Маскируем секунды.
P0RT A,BEP
Прекращаем звуковой сигнал.
BTFSS
STATUS,Z
Если не 0. пропускаем.
RETLW
DECF
MIN SEC
иначе декрементируем счетчик минут.
SWAPF
MIN SEC
Снова меняем местами терады.
INC 60
CALL
CHK SILNC TIM
Переходим к подпрограмме.
INCF
Инкрементируем регистр F0.
MOVLW
MTMR
Инкрементируем счетчик минут.
MOVF
F0,0
Пересылаем в регистр W.
MOVWF
ANDLW
BOOOOIIir
Маскируем старшие биты.
CALL
INCJO
XORLW
В 00001010
Если значение равно 10, то обнуляем.
lORLW
Проверяем на 0.
BTFSS
STATUS,Z
BTFSS
STATUS,Z
Если 0, пропускаем.
RETLW
иначе возвращаем 1.
- GOTO
CHK AL TIM
Проверяем время индикации.
MOVLW
B-11110000
Маскируем младшие разряды.
ANDWP
Приращение
счетчика часов.
SWAPF
Меняем местами тетрады регистра F0.
INCF
Инкрементируем.
HOVLW
HTMR
Загружаем адрес счетчика часов
MOVF
F0,0
Пересылаем в регистр W.
MOVWF
в регистр косвенного адреса.
SWAPF
Обратно меняем тетрады.
CALL
INC HR
Инкрементируем счетчик часов.
XORLW
Сравниваем с числом 6.
BTPSS
STATUS,Z
Если 0, то пропускаем команду,
:HK AL ПМ
RETLW
иначе возвращаем число, не равное 0 (NZ).
BTFSS
ALFWG, ALONOF
Проверяем флаг ALONOF, если О - выходим.
CLRF
Обнуляем F0.
RETLW
RETLW
Возвращаем 0.
BTFSC
ALFLAG, SILNC
Если изменений нет, то возвращаемся.
RETLW
CHKJILNC TIM
BTFSC
ALFLAG, INAL
Выполнено?
BTFSS
ALFLAG,SILNC
Проверяем, были ли изменения.
GOTO
CHK 1 MIN
Переходим к CHK 1JIN.
RETLW
Если нет, пропускаем.
RETLW
Если да, то возвращаемся.
SWAPF
MIN SEC,W
Вводим MIN SEC в регистр W с перестановкой тетрад
MOVF
HALARM.W
Сравниваем время будильника (часов)
AHDLW
BOOOOIIir
Маскируем секунды.
XORWF
HTHR.W
с реальным временем.
BTFSS
STATUS. Z
Если да.
BTFSS
STATUS.Z
Если равны, то переходим к сравнению минут,
RETLW
возвращаемся.
RETLW
иначе возвращаемся.
ALFLAG.SILNC
Обнуляем бит SILNC.
MOVF
MALARM.W
Сравниваем минуты.
MOVLW
Устанавливаем таймер на 1 мин.
XORWF
MTHR.W
MOVWF
MIN SEC
BTFSS
STATUS.Z
RETLW
RETLW
XORLW
; Сравниваем со значением 12 HEX.
CHKJE BOUNCE
BTFSS
STATUS,Z
; Если равно, то пропускаем следующую команду
BTFSC
ENTFLG.INKEYBEP;
Звуковой сигнал включен?
GOTO
CHK 13
; Иначе переходим к СНК 13.
GOTO
CHK DEB 1 ;
Если да, то декрементируем таймер.
BTFSS
TEMP,AM PM
; Проверяем флаг АМ РМ,
BTFSS
FLAG.KEY BEEP ;
Флаг звукового сигнала установлен?
GOTO
SET amJm
; если он не установлен, устанавливаем.
GOTO
CHK SERV ;
Если нет, то проверяем, обслуживается ли он.
FO,AM PM
; Сбрасываем флаг.
BTFSC
ALFLAG.INAA ;
Проверяем, установлен ли флаг INAA.
RETLW
; Возвращаемся.
GOTO
CHK BEP ON ;
Если да. проверяем, включен ли звук.
SET AH PM
CHK DEB 1
FO,AM PM
; Устанавливаем флаг АМ РМ.
ENTFLG.INKEYBEP;
Устанавливаем флаг.
CHKJ3
MOVF
DEBOUNCE.W ;
Пересылка в регистр W.
MOVF
FO.W
; Пересылаем в регистр W.
BTFSC
STATUS. Z ;
Если не 0. пропускаем.
XORLW
; Сравниваем с числом 13Н.
MOVLW
D-20- ;
иначе задаем 100 мс.
BTFSS
STATUS. Z
; При равенстве пропускаем следующую команду
MOVWF
DEBOUNCE ;
GOTO
RESTORE AM PM
BCF
P0RT A,BEP ;
Включаем звуковой сигнал.
SET 1 HR
DECFSZ
DEBOUNCE ;
Декрементируем, пока не 0.
MOVLW
Booooooor
; Загружаем 1.
GOTO
UP TMR 1 ;
Возвращаемся.
MOVWF
PORT.A.BEP ;
Отключаем таймер.
flESTORE AM PM
CHK SERV
BTFSC
TEMP, AM PM
; Пропускаем команду, если AM.
CLRF
DEBOUNCE
FO.AM FM
; Устанавливаем флаг АМ РМ.
POflT A.BEP
RETLW
BTFSS
FLAG,SERVICED ;
Если обслуживается, то попускаем команду.
GOTO
UP THR 1 ;
Возвращаемся.
FLAG,SERVICED ;
Обнуляем флажки.
FLACKED HIT ;
; Определение функций клавиш
FWG,KEY BEEP ;
ENTFLG,INKEYBEP;
ALARM KEY EQU
GOTO
UPJMR 1 ;
Возвращаемся.
СЕ KEY
SNOOZE KEY EQU
CHK BEP ON
am PM KEY EQU
BTFSS
PORT A,ВЕР ;
Проверяем бит ВЕР.
CLR ALARM.KEY EQU
GOTO
UP TMR 1 ;
Если 0, то ожидаем.
Snm EQU
GOTO
CHK DB 1 ;
Возвращаемся.
SERVICE.KEYS
INC HR
BTFSS
FWG,KEY HIT
; Если нет нажатой клавиши.
INCF
ro ;
Инкрементируем счетчик часов.
RETLW
; возвращаемся.
MOVF
FO,W ;
Пересылаем в регистр W.
BTFSC
FLAG,SERVICED
; Если обрабатывается.
MOVWF
TEMP
Сохраняем в ТЕНР.
RETLW
; возвращаемся.
ANDLW
ВООООШГ ;
Маскируем старшую тетраду
FLAG,SERVICED
; Установить флаг обработки.
XORLW
D10 ;
и сравниваем со значением 10.
MOVF
FLftG,W
; Определяем режим.
BTFSS
STATUS,Z ;
Если равно, то пропускаем команду.
ANDLW
BOOOOOOU
GOTO
INC AM PM
иначе переходим к INC AM PM.
BTFSC
STATUS,Z
; Если 00, тогда режим часов.
MOVLW
В00010000 ;
Загружаем 1 в старшую тетраду.
GOTO
RTMKS
; Переводим клавиатуру в режим часов.
MOVWF
MOVWF
TEMP
; Сохраняем в регистре TEMP.
GOTO
RESTORE am PM ;
Восстанавливаем АМ/РМ.
DECFSZ
TEMP
; Декрементируем регистр TEMP.
INC.AM pm
GOTO
; Если 0, пропускаем.
FO,AM PM ;
Обнуляем бит М/Ш.
GOTO
ATMKS
; Если 01, задаем режим будильника.
MOVF
FO.W ;
Пересылаем в W.
DECFSZ
TEMP :
Декрементируем TEMP.
RETLW
0 ;
Если 11, возвращаемся.
GOTO
DEMKS :
Если 10, переходим в режим ввода данных.
; Обработка клавиш в реальном времени.
RTWKS
CALL
CHK AL KEYS ;
Проверяем все клавиши.
lORLW
0 :
Сравниваем с 0.
BTFSC
STATUS, z :
Если 0,
RETLW
0 ;
то возвращаем 0,
MOVLW
SET KEY ;
иначе загружаем SET KEY.
XORWF
NEW KEY,W :
Сравниваем с NEW KEY.
. BTFSC
STATUS,Z ;
если не 0, то пропускаем.
GOTO
SERV SET RTM ;
Переходим к обработке клавиш режима часов
MOVLW
ALARM KEY ;
Проверяем клавиши будильника?
XORWF
NEW KEY,W ;
BTFSC
STATUS.Z ;
Если не 0, пропускаем,
GOTO
SERV ALARM RTM ;
иначе обрабатываем сигнал будильника.
IGNORE.KEY
RETLW
0 :
Возвращаемся.
; Обработка клавиш будильника.
ATMKS
CHK AL KfeYS ;
CALL
Проверяем все клавиши.
lORLW
0 ;
Сравниваем с 0.
BTFSC
STATUS.Z ;
Если не 0,
RETLW
0 ;
то пропускаем.
MOVLW
SET KEY ;
Клавиша нажата?
XORWF
NEW KE,W ;
BTFSC
STATUS,Z ;
Если не 0, то пропускаем.
GOTO
SERV SET ATM
MOVLW
ALARM KE ;
Проверяем клавишу ALARM.
XORWF
NEW KE.W ;
Нажата?
BTFSC
STATUS.Z ;
Если нет, пропустить.
GOTO
SERV ALARM ATM ;
иначе обработать.
GOTO
IGNOREJEY
; Обработка
клавиш ввода данных.
DEMKS
CALL
CHK AL KEYS ;
Проверяем все клавиши.
lORLW
0 :
Сравниваем с 0.
BTFSC
STATUS.Z ;
Если не 0, пропускаем.
RETLW
0 ;
иначе возвращаемся.
MOVLW
SET KEY :
Проверяем SET KEY.
XORWF
NEW KEY.W ;
BTFSC
STATUS.z :
Если не 0, пропускаем.
GOTO
DEMKS END :
иначе заканчиваем.
HOVLW
XORWF
BTFSC
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
BTFSS
GOTO
GOTO
DEHKSJND BTFSS GOTO MOVF MOVWF MOVF MOVWF BCF BTFSC BSF
DEMKS JND 1 BCF BCF BCF
SEfiV COM RET BSF RETLW
CE KEY NEWJPC.W STATUS, Z DEMKS END 1 ENTFLG, HR10 ENT HR 10 ENTFLG.HR ENT HRS ENTFLG,MIN10 ENT MIN 10 ENTFLG,MIN ENT.HIN ENT AH PM
ENTFLG,RTATS
LD RTM
MENTRY.W
MALARM
HENTRY,W
HALARM
FLAG, ALRMLED ALFUG, ALONOF FLAG,ALRMLED
FLAG,0 FLAG,1 FLAG,FLASH
FLAG,KE BEEP 0
Если нажат ключ отмены набора,
заканчиваем ввод. Десятки часов установлены? Если нет. ввести. Единицы часов введены? Если нет. ввести. Десятки минут введены? Если нет. ввести. Единицы минут введены? Если нет. ввести. Выполнить.
Проверить бит RTATS. Перейти к LD RTH.
Сбросить флаг ALRMLED.
Проверить флаг ALONOF (вкл./выкл.).
Если установлен, то установить ALRMLED.
Устанавливаем режим часов. /
Возвращаемся.
LD RTM
MOVF MENTRY,W
MOVWF MTMR
MOVP HENTRY,W
MOVWF HTMR
CLRF MSTMR
CLRF GOTO
BIT HR 10 MOVF BTFSC GOTO DECFSZ GOTO BSF BSF
STMR
DEMKS END 1
NEWJEY.W STATUS, Z LD HENTRY 0 NEW KEY,0 IGNORE KPr HENTRY, 4 ENTFLG,HRIO
Загружаем время.
Обнуляем счетчик секунд /
Возвращаемся.
NEW KEY перемещаем в регистр W. Если не О, пропускаем. Загружаем 0. Если 1, пропускаем. Игнорируем нажатие клавиши. Установить в 1. Устанавливаем флаг HR10.