⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subroutine.asm

📁 此款LED 数码万年历采用Holtek 公司开发的HT45R02 和HT38A5 微控制器设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		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 + -