📄 main.asm
字号:
;/**************************************************************/
;* Clock example for FS9821.(1s->1 interrupt) */
;* Function Arthurs Time Version Description */
;* Total Gavannis.hsu 2005/01/09 0.1 Test version */
;* Q1:can't 1s one interrupt? A1.YES */
;* Q2:The TMCLK depends on the MCK? A2:NO,depends on ECK */
;/**************************************************************/
INCLUDE macro_FS9821.asm
INCLUDE Def_Mem_FS9821.asm
;Define
SecTemp equ 0b0h
MinTemp equ 0b1h
HourTemp equ 0b2h
FLAG equ 0b3h
LED1Temp equ 0b4h
LED2Temp equ 0b5h
LED3Temp equ 0b6h
LED4Temp equ 0b7h
LED5Temp equ 0b8h
LED6Temp equ 0b9h
NUMTemp1 equ 0bAH
NUMTemp2 equ 0bBH
BLtemp equ 0bCH
ORG 00H
GOTO INIT
ORG 04h
BTFSS INTF,5
CALL TimerISR
GOTO MAIN
INIT:
MOVLW 80h ;Clear data memory
MOVWF FSR0
CLEARRAM:
CLRF IND0
INCFSZ FSR0,F
GOTO CLEARRAM
;Select CLK Source
CLKINI:
MOVLW 00100001B ;Set CLK Source & Timer
MOVWF MCK
NOP
;/*Set Timer initial*/
;Enable Timer
TIMERINI:
MOVLW 00h
MOVWF TMCON
NOP
MOVLW 90h ;Set Timer Interrupt Enable
MOVWF INTE
NOP
MOVLW 0fh
MOVWF TMCON
NOP
MAIN:
HALT
;/*Timer Work*/
TimerISR:
CLRF INTF ;Clear Timer Flag
MOVLF 00H,TMCON ;Reset Timer
MOVLF 90h,INTE ;Set Timer Interrupt Enable
MOVLF 0FH,TMCON ;Set Timer Paramaters(1s)
NOP
MOVFW SecTemp
ADDLW 01H
SUBLW 3CH ;-60
BTFSS STATUS,0
GOTO AddSec
;MIN:
MOVLF 00H,SecTemp
MOVFW MinTemp
SUBLW 3BH ;-59
BTFSS STATUS,0
GOTO AddMin
;HOUR:
MOVLF 00H,MinTemp
GOTO AddHour
MOVFW HourTemp
SUBLW 17H ;-23
BTFSS STATUS,0
GOTO SUM
GOTO ResetHour
SUM:
NOP
;Set LCD Display
LCD_Display:
;//LED DISPLAY
; Display (: :)
COMF LCD1,F
MOVFW LCD1
ANDLW 50H
MOVWF LCD1
;Hour2
MOVFF HourTemp,AL
CALL TimeHex2BCD
MOVFW BL
ANDLW 0FH
MOVWF LED3Temp
MOVFW LED3Temp
Call lcd_num
MOVWF LCD2
;Min1
MOVFF MinTemp ,AL
CALL TimeHex2BCD
MOVFF BL,BLtemp
MOVFW BLtemp
ANDLW 0F0H
MOVWF LED3Temp
RRF LED3Temp,F
RRF LED3Temp,F
RRF LED3Temp,F
RRF LED3Temp,F
MOVFW LED3Temp
MOVFW LED3Temp
CALL lcd_num
MOVWF LCD3
;Min2
MOVFW BLtemp
ANDLW 0FH
MOVWF LED4Temp
MOVFW LED4Temp
CALL lcd_num
MOVWF LCD4
;Sec1
MOVFF SecTemp,AL
CALL TimeHex2BCD
MOVFF BL,BLtemp
MOVFW BL
ANDLW 0F0H
MOVWF LED5Temp
MOVFW BLtemp
ANDLW 00FH
MOVWF LED6Temp
RRF LED5Temp,F
RRF LED5Temp,F
RRF LED5Temp,F
RRF LED5Temp,F
MOVFW LED5Temp
CALL lcd_num
MOVWF LCD5
;Sec2
MOVFW LED6Temp
Call lcd_num
MOVWF LCD6
MOVLW 27h; ;Set LCD Driver
MOVWF LCDENR
RETFIE
AddSec:
MOVFW SecTemp
ADDLW 01H
MOVWF SecTemp
GOTO SUM
AddMin:
MOVFW MinTemp
ADDLW 01H
MOVWF MinTemp
GOTO SUM
AddHour:
MOVFW HourTemp
ADDLW 01H
MOVWF HourTemp
GOTO SUM
ResetHour:
MOVLW 00H
MOVWF HourTemp
GOTO SUM
;/*For Time Use<0x63H->99>*/
TimeHex2BCD:
CLRF BL
CLRF BLTemp
MOVFF AL,BLTemp
DEC: ;A=A-10,if A>=10 ,B=B+1
MOVFW BLTemp
SUBLW 0AH
BTFSS STATUS,1
GOTO ADDH
GOTO Break
ADDH: ;
SUBLW 00H
BTFSC STATUS,0 ;EQU = 10
GOTO EQU
MOVWF BLTemp
INCF BL,F
GOTO DEC
EQU: if A=10
MOVLF 00H,BLTemp
INCF BL,F
GOTO DEC
EQU1: ;if A=10,for Display
MOVLF 00H,BLTemp
INCF BL,F
RETURN
Break:
MOVFW BLTemp ;SLOVE =10 Question, 0x0A = 10
SUBLW 0AH
BTFSC STATUS,0 ;EQU = 10
CALL EQU1
CLRF STATUS
RLF BL,F
RLF BL,F
RLF BL,F
RLF BL,F
MOVFW BL
IORWF BLTemp,W
MOVWF BL
RETURN
;LCD Table & Math libary
INCLUDE LCDINDX.ASM
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -