📄 subroutine.asm
字号:
MOV A,R_RTCCTL
MOV R_RTCCTH,A
CLR R_RTCCTL
MLP_GETDECIMAL:
MOV A,R_RTCCTL
SUB A,R_RESISTORCTL
SNZ C
JMP L_CHECKRTCCTH ;;R_RTCCTL<R_RESISTORCTL
INC R_RTCDEC ;;R_RTCCTL>=R_RESISTORCTL
MOV R_RTCCTL,A
JMP MLP_GETDECIMAL
L_CHECKRTCCTH:
SZ R_RTCCTH
JMP L_RTCCTHNEQU0
JMP L_CHECKRTCINT
L_RTCCTHNEQU0:
MOV R_RTCCTL,A
INC R_RTCDEC
DEC R_RTCCTH
JMP MLP_GETDECIMAL
;;---------------------------------------------
L_CHECKRTCINT:
L_CHECKRTCINTLESS_8:
MOV A,10H
SUB A,R_RTCINT
SNZ C
JMP L_TEMPERATURELESS_8
; JMP L_CHECKRTCINTBIG50
L_CHECKRTCINTBIG50:
MOV A,R_RTCINT
SUB A,01H
SNZ C
JMP L_TEMPERATUREBIG50
SET F_TEMPTABLE
;;----------------------------------------------
L_GETTEMPERATURE:
INC R_TEMPTABLEP
MOV A,R_TEMPTABLEP
CALL SBR_GETRVSTEMPERATURE
MOV A,R_RTCINT
SUB A,R_RTCCTH
SNZ C
RET ;;R_RTCINT<R_RTCCTH
SNZ Z ;;R_RTCINT>=R_RTCCTH
JMP L_GETTEMPERATURE1 ;;R_RTCINT>R_RTCCTH
MOV A,R_RTCDEC ;;R_RTCINT=R_RTCCTH
SUB A,R_RTCCTL
SNZ C
RET ;;R_RTCDEC<R_RTCCTL
SNZ Z ;;R_RTCDEC>=R_RTCCTL
JMP L_GETTEMPERATURE1 ;;R_RTCDEC>R_RTCCTL
INC R_TEMPTABLEP ;;R_RTCDEC=R_RTCCTL
L_GETTEMPERATURE1:
DEC R_TEMPTABLEP
SZ F_UPTEMPERATURE ;;IF F_UPTEMPERATURE EQU 0,THEN INDICATED UPDATE TEMPERATURE
JMP L_GETTEMPERATUREFINISHED
M_MOV R_TEMPERATURE,R_TEMPTABLEP
SET F_UPTEMPERATURE
L_GETTEMPERATUREFINISHED:
CLR R_TEMPTABLEP
CLR F_CHARGINGOK
CLR F_TEMPTABLE
CLR R_RTCDEC
CLR R_RTCINT
CLR R_RTCCTL
CLR R_RTCCTH
CLR R_RESISTORCTL
CLR R_RESISTORCTH
RET
L_TEMPERATUREERROR: ;;IF TEST TEMPERATURE ERROR, THEN R_TEMPERATURE NOT CHANGE
;; MOV A,0B3H ;;BECAUSE TEMPERATURE CHANGE IS VERY SLOWLY
;; MOV R_TEMPERATURE,A
JMP L_GETTEMPERATUREFINISHED
L_TEMPERATURELESS_8:
MOV A,0H
MOV R_TEMPERATURE,A
JMP L_GETTEMPERATUREFINISHED
L_TEMPERATUREBIG50:
MOV A,3BH
MOV R_TEMPERATURE,A
JMP L_GETTEMPERATUREFINISHED
;;********************************************
;;HEX NUMBER CONVERT TO DECIMAL
;;THE INPUT VARIABLE LESS 100(DECIMAL)
SBR_HEXTODEC:
CLR R_TEMP0
CLR R_TEMP1
MOV R_TEMP0,A
SUB A,64H ;;INPUT VARIABLE BIG OR LESS 63H
SZ C
JMP L_BIG63H ;;BIG 63H
MOV A,R_TEMP0
MLP_HEXTODEC:
MOV R_TEMP0,A
SUB A,0AH
SNZ C
JMP SBR_HEXTODECEXIT
INC R_TEMP1
JMP MLP_HEXTODEC
SBR_HEXTODECEXIT:
MOV A,R_TEMP1
SWAP ACC
OR A,R_TEMP0
RET
L_BIG63H:
MOV A,R_TEMP0
RET
;;********************************************
;;SHOW SEVEN SEGMENT LED
SBR_LEDSCAN:
MOV A,1FH
ORM A,PA
MOV A,0E0H
ORM A,PB
MOV A,0FFH
MOV PC,A
MOV PD,A
MOV PE,A
MOV A,R_LEDCOMMONNUMBER
SUB A,0AH
SZ C
CLR R_LEDCOMMONNUMBER
MOV A,R_LEDCOMMONNUMBER
ADDM A,PCL
JMP L_SCANCOMMON0
JMP L_SCANCOMMON1
JMP L_SCANCOMMON2
JMP L_SCANCOMMON3
JMP L_SCANCOMMON4
JMP L_SCANCOMMON5
JMP L_SCANCOMMON6
JMP L_SCANCOMMON7
JMP L_SCANCOMMON8
JMP L_SCANCOMMON9
L_SCANCOMMON0:
SWAPA R_LEDSYEAR ;;SHOW THE HIGH NIBBLE OF YEAR
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDLBAK.0
CLR ACC.7
MOV PC,A
SWAPA R_LEDHOUR ;;SHOW THE HIGH NIBBLE OF HOUR
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDMBAK.0
CLR ACC.7
MOV PD,A
SWAPA R_LEDTEMPERATURE ;;SHOW THE HIGH NIBBLE OF TEMPERATURE
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDHBAK.0
CLR ACC.7
MOV PE,A
MOV A,0FEH
ANDM A,PA
JMP L_SCANCOMMONEXIT
L_SCANCOMMON1:
MOV A,R_LEDSYEAR ;;SHOW THE LOW NIBBLE OF YEAR
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDLBAK.1
CLR ACC.7
MOV PC,A
MOV A,R_LEDHOUR ;;SHOW THE LOW NIBBLE OF HOUR
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDMBAK.1
CLR ACC.7
MOV PD,A
MOV A,R_LEDTEMPERATURE ;;SHOW THE LOW NIBBLE OF TEMPERATURE
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDHBAK.1
CLR ACC.7
MOV PE,A
MOV A,0FDH
ANDM A,PA
JMP L_SCANCOMMONEXIT
L_SCANCOMMON2:
SWAPA R_LEDSMONTH ;;SHOW THE HIGH NIBBLE OF SOLAR MONTH
CALL SBR_GETLEDCHARACTER
SZ R_SETMODE2
JMP L_ENABLE0
CALL SBR_DISABLE0
L_ENABLE0:
SZ R_SOLARTERMIDLBAK.2
CLR ACC.7
MOV PC,A
SWAPA R_LEDMINUTE ;;SHOW THE HIGH NIBBLE OF MINUTE
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDMBAK.2
CLR ACC.7
MOV PD,A
SWAPA R_LEDLMONTH ;;SHOW THE HIGH NIBBLE OF LUNAR MONTH
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDHBAK.2
CLR ACC.7
MOV PE,A
MOV A,0FBH
ANDM A,PA
JMP L_SCANCOMMONEXIT
L_SCANCOMMON3:
MOV A,R_LEDSMONTH ;;SHOW THE LOW NIBBLE OF SOLAR MONTH
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDLBAK.3
CLR ACC.7
MOV PC,A
MOV A,R_LEDMINUTE ;;SHOW THE LOW NIBBLE OF MINUTE
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDMBAK.3
CLR ACC.7
MOV PD,A
MOV A,R_LEDLMONTH ;;SHOW THE LOW NIBBLE OF LUNAR MONTH
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDHBAK.3
CLR ACC.7
MOV PE,A
MOV A,0F7H
ANDM A,PA
JMP L_SCANCOMMONEXIT
L_SCANCOMMON4:
SWAPA R_LEDSDATE ;;SHOW THE HIGH NIBBLE OF SOLAR DATE
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDLBAK.4
CLR ACC.7
MOV PC,A
SWAPA R_LEDSECOND ;;SHOW THE HIGH NIBBLE OF SECOND
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDMBAK.4
CLR ACC.7
MOV PD,A
SWAPA R_LEDLDATE ;;SHOW THE HIGH NIBBLE OF LUNAR DATE
CALL SBR_GETLEDCHARACTER
CALL SBR_DISABLE0
SZ R_SOLARTERMIDHBAK.4
CLR ACC.7
MOV PE,A
MOV A,0EFH
ANDM A,PA
JMP L_SCANCOMMONEXIT
L_SCANCOMMON5:
MOV A,R_LEDSDATE ;;SHOW THE LOW NIBBLE OF SOLAR DATE
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDLBAK.5
CLR ACC.7
MOV PC,A
MOV A,R_LEDSECOND ;;SHOW THE LOW NIBBLE OF SECOND
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDMBAK.5
CLR ACC.7
MOV PD,A
MOV A,R_LEDLDATE ;;SHOW THE LOW NIBBLE OF LUNAR DATE
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDHBAK.5
CLR ACC.7
MOV PE,A
MOV A,0DFH
ANDM A,PB
JMP L_SCANCOMMONEXIT
L_SCANCOMMON6:
MOV A,R_LEDWEEK ;;SHOW THE WEEK
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDLBAK.6
CLR ACC.7
MOV PC,A
MOV A,10H
ORM A,R_LEDFLAG ;;TURN OFF ALARM LED
SZ F_ALARM1
JMP L_ALARMLEDON
SZ F_ALARM2
JMP L_ALARMLEDON
JMP L_ALARMLEDOFF
L_ALARMLEDON:
CLR R_LEDFLAG.4 ;;TURN ON ALARM LED
L_ALARMLEDOFF:
MOV A,R_LEDFLAG ;;SHOW THE AM,PM,DOT,ALARM,INTEGER TIME AND YEAR 20
XOR A,00100000B
SZ R_SOLARTERMIDMBAK.6
CLR ACC.7
MOV PD,A
MOV A,R_LEDDELTADAYS ;;SHOW THE LOW NIBBLE OF SOLARTERM DELTA DAYS
CALL SBR_GETLEDCHARACTER
SZ R_SOLARTERMIDHBAK.6
CLR ACC.7
MOV PE,A
MOV A,0BFH
ANDM A,PB
JMP L_SCANCOMMONEXIT
L_SCANCOMMON7:
SWAPA R_LEDDELTADAYS
CALL SBR_GETLEDCHARACTER;;SHOW THE HIGH NIBBLE OF SOLARTERM DELTA DAYS
CALL SBR_DISABLE0
SZ R_SOLARTERMIDLBAK.7
CLR ACC.7
MOV PC,A
SNZ R_SOLARTERMIDMBAK.7
JMP L_SHOWSEG24
MOV A,7FH
ANDM A,PD
L_SHOWSEG24:
SNZ R_SOLARTERMIDHBAK.7
JMP L_SHOWCOMMON7
MOV A,7FH
ANDM A,PE
L_SHOWCOMMON7:
MOV A,7FH
ANDM A,PB
JMP L_SCANCOMMONEXIT
L_SCANCOMMON8:
CALL SBR_GETCHARGINGTIME
JMP L_SCANCOMMONEXIT
L_SCANCOMMON9:
CALL SBR_TRANSMITCOMMAND
; JMP L_SCANCOMMONEXIT
L_SCANCOMMONEXIT:
INC R_LEDCOMMONNUMBER
RET
;;********************************************
SBR_KEYSCAN:
SZ F_DELAYT3
RET
SZ R_DEBOUNCE
DEC R_DEBOUNCE
L_KEYSCANPROCESS:
MOV A,PA
AND A,0E0H
MOV R_KEYNUM,A
XOR A,R_PREVKEY
SZ Z
JMP L_KEYKEEP
JMP L_KEYCHANGE
L_KEYKEEP:
SZ R_DEBOUNCE
RET
MOV A,R_PREVKEY ;;DEBOUNCE END
XOR A,0E0H
SZ Z
JMP L_KEYREALSE
SET F_VALIDKEY
SNZ F_KEYCHANGE
JMP L_KEYPRESSLONG ;;LONG KEY
CLR F_KEYCHANGE
;;-------------------------------------------
;;PRESS KEY(HIGH TO LOW)
SNZ R_KEYNUM.7
JMP L_PROCESSMOVE
SNZ R_KEYNUM.6
JMP L_PROCESSUP
SNZ R_KEYNUM.5
JMP L_PROCESSDOWN
RET
;;-------------------------------------------
;;
L_KEYREALSE:
CLR F_VALIDKEY
RET
;;-------------------------------------------
;;LONG PESS KEY(ALL LOW)
L_KEYPRESSLONG:
JMP L_KEYREALSE
; RET
;;-------------------------------------------
L_KEYCHANGE:
SET F_KEYCHANGE
MOV A,R_KEYNUM
MOV R_PREVKEY,A
MOV A,C_DEBOUNCE
MOV R_DEBOUNCE,A
RET
;;--------------------------------------------
L_PROCESSMOVE:
CLR R_ADJUSTTIME
SET F_KEYMOVE
SZ R_SETMODE2
JMP L_PROCESSSETALARM
SZ R_SETMODE1
JMP L_PROCESSSETCALENDAR
SET R_SETMODE1.0
RET
L_PROCESSSETCALENDAR:
RL R_SETMODE1
SNZ R_SETMODE1.5
RET
CLR R_SETMODE1.5
SET R_SETMODE2.0
RET
L_PROCESSSETALARM:
RL R_SETMODE2
SNZ R_SETMODE2.4
RET
CLR R_SETMODE2.4
CLR F_KEYMOVE
SZ F_ALARM1
JMP L_PROCESSALARMFIANL2
MOV A,18H
MOV R_ALARMHOUR1,A
CLR R_ALARMMINUTE2
L_PROCESSALARMFIANL2:
SZ F_ALARM2
RET
MOV A,18H
MOV R_ALARMHOUR2,A
CLR R_ALARMMINUTE2
RET
;;--------------------------------------------
L_PROCESSUP:
SNZ F_KEYMOVE
JMP L_SETSOLARTERMLEDMODE
SET F_NUMBERUP
SZ R_SETMODE1.0
JMP L_PROCUPYEAR
SZ R_SETMODE1.1
JMP L_PROCUPMONTH
SZ R_SETMODE1.2
JMP L_PROCUPDATE
SZ R_SETMODE1.3
JMP L_PROCUPHOUR
SZ R_SETMODE1.4
JMP L_PROCUPMINUTE
SZ R_SETMODE2.0
JMP L_PROCUPALARMNUMBER
SZ R_SETMODE2.1
JMP L_PROCUPALARMHOUR
SZ R_SETMODE2.2
JMP L_PROCUPALARMMINUTE
SZ R_SETMODE2.3
JMP L_PROCUPALARMON_OFF
RET
L_PROCUPYEAR:
SET F_UPDATEDATE
INC R_YEAR_SOLAR
MOV A,R_YEAR_SOLAR
SUB A,20H
SNZ C
RET
MOV A,01H
MOV R_YEAR_SOLAR,A
RET
L_PROCUPMONTH:
SET F_UPDATEDATE
INC R_MONTH_SOLAR
MOV A,R_MONTH_SOLAR
SUB A,0DH
SNZ C
RET
MOV A,01H
MOV R_MONTH_SOLAR,A
RET
L_PROCUPDATE:
SET F_UPDATEDATE
INC R_DATE_SOLAR
MOV A,R_MONTH_SOLAR
MOV TBLP,A
MOV A,LOW T_MONTHDAYS_WEEK
ADDM A,TBLP
CALL SBR_GETMONTHDAYS
SUB A,R_DATE_SOLAR
SZ C
RET
MOV A,01H
MOV R_DATE_SOLAR,A
RET
L_PROCUPHOUR:
INC R_HOUR
MOV A,18H
SUB A,R_HOUR
SZ C
RET
MOV A,01H
MOV R_HOUR,A
RET
L_PROCUPMINUTE:
INC R_MINUTE
MOV A,3BH
SUB A,R_MINUTE
SZ C
RET
CLR R_MINUTE
RET
L_PROCUPALARMNUMBER:
INC R_ALARMNUMBER
MOV A,02H
SUB A,R_ALARMNUMBER
SZ C
RET
MOV A,01H
MOV R_ALARMNUMBER,A
RET
L_PROCUPALARMHOUR:
MOV A,01H
XOR A,R_ALARMNUMBER
SNZ Z
JMP L_PROCUPALARMHOUR2
JMP L_PROCUPALARMHOUR1
L_PROCUPALARMHOUR1:
INC R_ALARMHOUR1
MOV A,18H
SUB A,R_ALARMHOUR1
SZ C
RET
MOV A,01H
MOV R_ALARMHOUR1,A
RET
L_PROCUPALARMHOUR2:
INC R_ALARMHOUR2
MOV A,18H
SUB A,R_ALARMHOUR2
SZ C
RET
MOV A,01H
MOV R_ALARMHOUR2,A
RET
L_PROCUPALARMMINUTE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -