📄 subroutine.asm
字号:
MOV A,01H
XOR A,R_ALARMNUMBER
SNZ Z
JMP L_PROCUPALARMMINUTE2
JMP L_PROCUPALARMMINUTE1
L_PROCUPALARMMINUTE1:
INC R_ALARMMINUTE1
MOV A,3BH
SUB A,R_ALARMMINUTE1
SZ C
RET
CLR R_ALARMMINUTE1
RET
L_PROCUPALARMMINUTE2:
INC R_ALARMMINUTE2
MOV A,3BH
SUB A,R_ALARMMINUTE2
SZ C
RET
CLR R_ALARMMINUTE2
RET
L_PROCUPALARMON_OFF:
MOV A,R_ALARMNUMBER
XOR A,01H
SZ Z
JMP L_PROCESSALARM1ON_OFF
MOV A,R_ALARMNUMBER
XOR A,02H
SZ Z
JMP L_PROCESSALARM2ON_OFF
JMP L_PROCESSALARM3ON_OFF
L_PROCESSALARM1ON_OFF:
MOV A,04H
XORM A,R_FLAG2
MOV A,0AAH ;;ALARM OFF
SZ F_ALARM1
MOV A,0BH ;;ALARM ON
MOV R_ALARMON,A
RET
L_PROCESSALARM2ON_OFF:
MOV A,08H
XORM A,R_FLAG2
MOV A,0AAH
SZ F_ALARM2
MOV A,0BH
MOV R_ALARMON,A
; RET
L_PROCESSALARM3ON_OFF:
RET
;;--------------------------------------------
L_SETSOLARTERMLEDMODE:
SET F_STLEDINTIAL
INC R_STLEDMODE
MOV A,02H
SUB A,R_STLEDMODE
SZ C
RET
CLR R_STLEDMODE
RET
;;--------------------------------------------
L_PROCESSDOWN:
SNZ F_KEYMOVE
JMP L_SETINTEGERALARMON_OFF
SZ R_SETMODE1.0
JMP L_PROCDECYEAR
SZ R_SETMODE1.1
JMP L_PROCDECMONTH
SZ R_SETMODE1.2
JMP L_PROCDECDATE
SZ R_SETMODE1.3
JMP L_PROCDECHOUR
SZ R_SETMODE1.4
JMP L_PROCDECMINUTE
SZ R_SETMODE2.0
JMP L_PROCDECALARMNUMBER
SZ R_SETMODE2.1
JMP L_PROCDECALARMHOUR
SZ R_SETMODE2.2
JMP L_PROCDECALARMMINUTE
SZ R_SETMODE2.3
JMP L_PROCDECALARMON_OFF
RET
L_PROCDECYEAR:
SET F_UPDATEDATE
DEC R_YEAR_SOLAR
MOV A,0H
XOR A,R_YEAR_SOLAR
SNZ Z
RET
MOV A,1FH
MOV R_YEAR_SOLAR,A
RET
L_PROCDECMONTH:
SET F_UPDATEDATE
DEC R_MONTH_SOLAR
MOV A,R_MONTH_SOLAR
XOR A,0H
SNZ Z
RET
MOV A,0CH
MOV R_MONTH_SOLAR,A
RET
L_PROCDECDATE:
SET F_UPDATEDATE
DEC R_DATE_SOLAR
MOV A,R_DATE_SOLAR
XOR A,0H
SNZ Z
RET
MOV A,R_MONTH_SOLAR
MOV TBLP,A
MOV A,LOW T_MONTHDAYS_WEEK
ADDM A,TBLP
CALL SBR_GETMONTHDAYS
MOV R_DATE_SOLAR,A
RET
L_PROCDECHOUR:
DEC R_HOUR
MOV A,R_HOUR
XOR A,0H
SNZ Z
RET
MOV A,18H
MOV R_HOUR,A
RET
L_PROCDECMINUTE:
DEC R_MINUTE
MOV A,R_MINUTE
XOR A,0FFH
SNZ Z
RET
MOV A,3BH
MOV R_MINUTE,A
RET
L_PROCDECALARMNUMBER:
DEC R_ALARMNUMBER
MOV A,R_ALARMNUMBER
XOR A,0H
SNZ Z
RET
MOV A,02H
MOV R_ALARMNUMBER,A
RET
L_PROCDECALARMHOUR:
MOV A,01H
XOR A,R_ALARMNUMBER
SNZ Z
JMP L_PROCDECALARMHOUR2
JMP L_PROCDECALARMHOUR1
L_PROCDECALARMHOUR1:
DEC R_ALARMHOUR1
MOV A,R_ALARMHOUR1
XOR A,0H
SNZ Z
RET
MOV A,18H
MOV R_ALARMHOUR1,A
RET
L_PROCDECALARMHOUR2:
DEC R_ALARMHOUR2
MOV A,R_ALARMHOUR2
XOR A,0H
SNZ Z
RET
MOV A,18H
MOV R_ALARMHOUR2,A
RET
L_PROCDECALARMMINUTE:
MOV A,01H
XOR A,R_ALARMNUMBER
SNZ Z
JMP L_PROCDECALARMMINUTE2
JMP L_PROCDECALARMMINUTE1
L_PROCDECALARMMINUTE1:
DEC R_ALARMMINUTE1
MOV A,R_ALARMMINUTE1
XOR A,0FFH
SNZ Z
RET
MOV A,3BH
MOV R_ALARMMINUTE1,A
RET
L_PROCDECALARMMINUTE2:
DEC R_ALARMMINUTE2
MOV A,R_ALARMMINUTE2
XOR A,0FFH
SNZ Z
RET
MOV A,3BH
MOV R_ALARMMINUTE2,A
RET
L_PROCDECALARMON_OFF:
JMP L_PROCUPALARMON_OFF
;;--------------------------------------------
L_SETINTEGERALARMON_OFF:
MOV A,20H
XORM A,R_LEDFLAG
RET
;;********************************************
SBR_CHECKALARM:
SNZ F_MINUTE
RET
CLR F_MINUTE
L_CHECKALARM1:
SNZ F_ALARM1
JMP L_CHECKALARM2
MOV A,R_ALARMHOUR1
XOR A,R_HOUR
SNZ Z
JMP L_CHECKALARM2
MOV A,R_ALARMMINUTE1
XOR A,R_MINUTE
SNZ Z
JMP L_CHECKALARM2
SET F_ALARMON
RET
L_CHECKALARM2:
SNZ F_ALARM2
JMP L_CHECKALARM3
MOV A,R_ALARMHOUR2
XOR A,R_HOUR
SNZ Z
JMP L_CHECKALARM3
MOV A,R_ALARMMINUTE2
XOR A,R_MINUTE
SNZ Z
JMP L_CHECKALARM3
SET F_ALARMON
; RET
L_CHECKALARM3:
RET
;;********************************************
SBR_CHECKINTEGERALARM:
SNZ F_HOUR
RET
CLR F_HOUR
SNZ R_LEDFLAG.5
RET
MOV A,C_INTEGERALS
SUB A,R_HOUR
SZ C
JMP $+2 ;;C_INTEGERALS>=R_HOUR
JMP L_CHECKINTEGERALENDCLOCK ;;C_INTEGERALS<R_HOUR
SZ Z
JMP L_INTEGERALARMON ;;C_INTEGERALS=R_HOUR
; RET ;;C_INTEGERALS>R_HOUR
L_CHECKINTEGERALENDCLOCK:
MOV A,C_INTEGERALE
SUB A,R_HOUR
SZ C
JMP L_INTEGERALARMON ;;C_INTEGERALE>=R_HOUR
RET ;;C_INTEGERALE<R_HOUR
L_INTEGERALARMON:
SET F_INTEGERALARMON
RET
;;********************************************
SBR_CLOCK:
SNZ F_SECOND
RET
CLR F_SECOND
INC R_SECOND
MOV A,3BH
SUB A,R_SECOND
SZ C
RET
CLR R_SECOND ;;R_SECOND=3CH
CLR F_UPTEMPERATURE
SET F_MINUTE
INC R_MINUTE
MOV A,3BH
SUB A,R_MINUTE
SZ C
RET ;;R_MINUTE<3CH
CLR R_MINUTE ;;R_MINUTE=3CH(60)
SET F_HOUR
INC R_HOUR
MOV A,R_HOUR
SUB A,18H
SNZ C
RET ;;R_HOUR<24
SZ Z ;;R_HOUR>=24
JMP $+3 ;;R_HOUR=24
MOV A,01H ;;R_HOUR>24
MOV R_HOUR,A
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
INC R_MONTH_SOLAR
MOV A,0CH
SUB A,R_MONTH_SOLAR
SZ C
RET ;;R_MONTH_SOLAR<=0CH(12)
MOV A,01H ;;R_MONTH_SOLAR>0CH
MOV R_MONTH_SOLAR,A
INC R_YEAR_SOLAR
RET
;;********************************************
;;INPUT VALIABLE:ACC
;;OUTPUT VALIABLE:ACC
;;********************************************
SBR_CONVERTCLOCKMODE:
MOV R_TEMP0,A
SNZ F_HOURMODE
RET ;;24 HOUR
SET R_LEDFLAG.0 ;;12 HOUR
SET R_LEDFLAG.1
XOR A,0CH ;;R_TEMP0 IS HOUR
SZ Z
JMP L_AFTERNOON12
MOV A,R_TEMP0
SUB A,0CH
SNZ C
JMP L_MONING ;;MONING
MOV R_TEMP0,A
XOR A,0CH
SNZ Z ;;CHECK IF IT IS 0 CLOCK
JMP L_AFTERNOON ;;NOT 0 O'CLOCK
L_MONING: ;;IS 0 O'CLOCK
MOV A,R_TEMP0
CLR R_LEDFLAG.0
RET
L_AFTERNOON12:
MOV A,0CH
MOV R_TEMP0,A
L_AFTERNOON:
MOV A,R_TEMP0
CLR R_LEDFLAG.1
RET
;;********************************************
SBR_STOPADJUSTTIME:
SNZ F_KEYMOVE
RET
; JMP L_CHECKSTOADJUSTTIME
L_CHECKSTOADJUSTTIME:
MOV A,C_ADJUSTTIME
SUB A,R_ADJUSTTIME
SZ C
RET
CLR F_KEYMOVE
CLR R_SETMODE1
CLR R_SETMODE2
CLR R_ADJUSTTIME
RET
;;********************************************
SBR_SETSOLARTERMLEDMODE:
SZ R_STLEDMODE
JMP $+2
JMP L_SOLARTERMLEDMODE1
MOV A,01H
XOR A,R_STLEDMODE
SZ Z
JMP L_SOLARTERMLEDMODE2
JMP L_SOLARTERMLEDMODE3
;;--------------------------------------------
;;THE CURRENT SOLAR TERM LED ALWAYS ON,AND OTHER LEDS OFF
L_SOLARTERMLEDMODE1:
SNZ F_STLEDINTIAL
RET
CLR F_STLEDINTIAL
M_MOV R_SOLARTERMIDLBAK,R_SOLARTERMIDL
M_MOV R_SOLARTERMIDMBAK,R_SOLARTERMIDM
M_MOV R_SOLARTERMIDHBAK,R_SOLARTERMIDH
RET
;;-------------------------------------------
L_SOLARTERMLEDMODE2:
SNZ F_STLEDINTIAL
JMP L_SOLARTERMLEDFLASH
CLR F_STLEDINTIAL
MOV A,0FFH
MOV R_SOLARTERMIDLBAK,A
MOV R_SOLARTERMIDMBAK,A
MOV R_SOLARTERMIDHBAK,A
RET
L_SOLARTERMLEDFLASH:
SNZ F_STLEDFLASH
RET
CLR F_STLEDFLASH
MOV A,R_SOLARTERMIDL
XORM A,R_SOLARTERMIDLBAK
MOV A,R_SOLARTERMIDM
XORM A,R_SOLARTERMIDMBAK
MOV A,R_SOLARTERMIDH
XORM A,R_SOLARTERMIDHBAK
RET
;;--------------------------------------------
L_SOLARTERMLEDMODE3:
SNZ F_STLEDFLASH
RET
SZ F_STLEDINTIAL
JMP L_SOLARTERMLEDINTIAL
; JMP L_SOLARTERMLEDINTIALFINISHED
L_SOLARTERMLEDINTIALFINISHED:
SNZ F_LEFTMOVE
JMP L_SOLARTERMLEDRIGHTMOVE
JMP L_SOLARTERMLEDLEFTMOVE
L_SOLARTERMLEDINTIAL:
CLR F_STLEDINTIAL
SZ F_LEFTMOVE
JMP L_SOLARTERMLEDLEFTMOVEINTIAL
; JMP L_SOLARTERMLEDRIGHTMOVEINTIAL
L_SOLARTERMLEDRIGHTMOVEINTIAL:
CLR R_STLEDMOVEL
CLR R_STLEDMOVEM
CLR R_STLEDMOVEH
SET R_STLEDMOVEL.0
JMP L_INTIALSOLARTERMID
L_SOLARTERMLEDLEFTMOVEINTIAL:
SET R_STLEDMOVEL
SET R_STLEDMOVEM
SET R_STLEDMOVEH
; CLR R_STLEDMOVEH.7
; JMP L_INTIALSOLARTERMID
L_INTIALSOLARTERMID:
M_MOV R_SOLARTERMIDLBAK,R_SOLARTERMIDL
M_MOV R_SOLARTERMIDMBAK,R_SOLARTERMIDM
M_MOV R_SOLARTERMIDHBAK,R_SOLARTERMIDH
SZ F_LEFTMOVE
JMP L_GETLEFTMOVEFIANL
JMP L_GETRIGHTMOVEFIANL
;;----------------------------------------------
L_SOLARTERMLEDLEFTMOVE:
CLR C
RRC R_STLEDMOVEH
RRC R_STLEDMOVEM
RRC R_STLEDMOVEL
JMP L_INTIALSOLARTERMID
L_SOLARTERMLEDRIGHTMOVE:
CLR C
RLC R_STLEDMOVEL
RLC R_STLEDMOVEM
RLC R_STLEDMOVEH
SNZ R_STLEDMOVEH.7
JMP L_GETRIGHTMOVEFIANL
SET F_LEFTMOVE
SET F_STLEDINTIAL
; JMP L_GETRIGHTMOVEFIANL
;;--------------------------------------------
L_GETRIGHTMOVEFIANL:
MOV A,R_STLEDMOVEL
ORM A,R_SOLARTERMIDLBAK
MOV A,R_STLEDMOVEM
ORM A,R_SOLARTERMIDMBAK
MOV A,R_STLEDMOVEH
ORM A,R_SOLARTERMIDHBAK
JMP L_GETMOVEFIANLEXIT
;;--------------------------------------------
L_GETLEFTMOVEFIANL:
MOV A,R_STLEDMOVEL
ORM A,R_SOLARTERMIDLBAK
MOV A,R_STLEDMOVEM
ORM A,R_SOLARTERMIDMBAK
MOV A,R_STLEDMOVEH
ORM A,R_SOLARTERMIDHBAK
SZ R_STLEDMOVEL.0
JMP L_GETMOVEFIANLEXIT
CLR F_LEFTMOVE
SET F_STLEDINTIAL
; JMP L_GETMOVEFIANLEXIT
L_GETMOVEFIANLEXIT:
CLR F_STLEDFLASH
RET
;;********************************************
ISR_TIMER:
M_PUSH
SNZ F_BUZZERON
JMP L_BUZZEROFF
MOV A,0FEH
ANDM A,PBC
MOV A,01H
ORM A,PB
CLR F_BUZZERON
; JMP L_CHECK38A55MS
JMP L_TIMER250MS
L_BUZZEROFF:
MOV A,01H
ORM A,PBC
;L_CHECK38A55MS:
; SZ F_RESET
; INC R_DELAYCOUNT
L_TIMER250MS: ;;TIMER 0.25MS
INC R_TIMERNUMBER0
INC R_TIMERNUMBER1
INC R_TIMERNUMBER2 ;;250MS
MOV A,02H
XOR A,R_TIMERNUMBER2
SNZ Z
JMP L_TIMER05S
SZ F_STOPALARMING
INC R_DELAYCOUNT
MOV A,40H
XORM A,R_FLAG1 ;;CPL F_LEDFLASH
CLR R_TIMERNUMBER2
L_TIMER05S:
MOV A,04H
XOR A,R_TIMERNUMBER0
SNZ Z
JMP L_TIMER1S
MOV A,00001100B
XORM A,R_LEDFLAG ;;CPL DOT,0.5 SECOND FLASH ONE TIME
MOV A,01H
XORM A,R_FLAG3 ;;CPL F_STLEDFLASH
CLR R_TIMERNUMBER0
L_TIMER1S:
MOV A,R_TIMERNUMBER1
XOR A,08H
SNZ Z
JMP L_TIMEREXIT
SET F_SECOND ;;TIMER 1S
CLR R_TIMERNUMBER1
CLR R_TIMERNUMBER0
SZ F_KEYMOVE
INC R_ADJUSTTIME
L_TIMEREXIT:
M_POP
RETI
;;********************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -