Главная страница  Комбинированное использование портов 

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.



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

© 2000 - 2022 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.