📄 221显示时间.asm
字号:
CHIP SN8P2714 ; Select the CHIP
//{{SONIX_CODE_OPTION
.Code_Option LVD LVD_M ; 2.0V Reset Enable LVD24 bit of PFLAG for 2.4V Low Voltage Indicator
.Code_Option RST_P0.3 Reset
.Code_Option Watch_Dog Always_ON ; Watchdog still enable even in Green and Sleep mode
.Code_Option High_Clk 4M_X'tal ;' Crystal/Resonator: 2Mhz~10Mhz
.Code_Option Fcpu #2 ; Fcpu = High_Clk/4
.Code_Option Security Enable
.Code_Option Noise_Filter Enable
//}}SONIX_CODE_OPTION
;-------------------------------------------------------------------------------
; Include Files
;-------------------------------------------------------------------------------
.nolist ; do not list the macro file
INCLUDESTD MACRO1.H
INCLUDESTD MACRO2.H
INCLUDESTD MACRO3.H
.list ; Enable the listing function
;-------------------------------------------------------------------------------
; Constants Definition
;-------------------------------------------------------------------------------
; ONE EQU 1
;-------------------------------------------------------------------------------
; Variables Definition
;-------------------------------------------------------------------------------
.DATA
org 0h ;Data section start from RAM address 0
ACCBUF DS 1
PFLAGBUF DS 1
SAVE_A DS 1
SAVE_ST DS 1
FLAG DS 1
FLAGA DS 1
FLAGB DS 1
FLAGC DS 1
ADFLAG DS 1
;---------------DS------1---
TIME_100US DS 1
TIME_10MS DS 1
TIME_30MS DS 1
TIME_10S DS 1
TIME_40MS DS 1
SYS_SEC DS 1
SYS_MIN DS 1
SYS_HOUR DS 1
TIME_50MS DS 1
TIME_60MS DS 1
BUZ_TIME DS 1
XS_CONT DS 1
WORK_TIME DS 1
FJ_CONT DS 1
TIME_5SEC DS 1
WORK_HOUR DS 1
TIME_60S DS 1
DELAY_TIME DS 1
REST_RAM DS 1
XD_CONT DS 1
HG_CONT DS 1
DEL_120 DS 1
TIME_1S DS 1
SHAN_5S DS 1
DISP_EN_RAM DS 1
;---------------DS------1--
KEY_RAM DS 1
BUZ_CONT DS 1
KEY_DELAY DS 1
KEY_LX_RAM DS 1
COUNT DS 1
DISP_CONT DS 1
DISP_COM DS 1
TIM_CONT DS 1
TIME_1MS DS 1
;---------------DS------1-
AD_TIMES DS 1
AD_RAM DS 1
AD_TEST DS 1
AD_CONT DS 1
TP_HOT DS 1
TP_COLD DS 1
TP_RAM DS 1
;---------------DS------1-
XS_DATA1 DS 1
XS_DATA2 DS 1
LCD_DATA1 DS 1
LCD_DATA2 DS 1
LCD_DATA3 DS 1
LCD_DATA4 DS 1
LCD_DATA5 DS 1
LCD_DATA6 DS 1
LCD_DATA7 DS 1
LCD_DATA8 DS 1
LCD_DATA9 DS 1
LCD_DATA10 DS 1
DEL_SAVE DS 1
;---------------DS------1-
AD_COUNT DS 1
;--------------------------------
DEL_TIME DS 1
;--------------------------------------------------------
;; I/O Variables Definition
;;--------------------------------------------------------
;P0
KEY1 EQU P0.0
;-------------------------------------------
;P2
BUZOUT EQU P2.0
KLED EQU P2.2
;-------------------------------------------
;P5
MOD_OUT EQU P5.0;
DAT EQU P5.1
WR EQU P5.2
CS EQU P5.3
MID_OUT EQU P5.4
;FLAG
BUZ EQU FLAG.1
KEY_YES EQU FLAG.2
ER_FG EQU FLAG.3
BUZ_EN EQU FLAG.4
FIR_FG EQU FLAG.5
SET_59S EQU FLAG.6
SHUN EQU FLAG.7
;----------------------------
;FLAGA
LT_FG EQU FLAGA.3
DS_FG EQU FLAGA.5
MIN_FG EQU FLAGA.6
HOUR_FG EQU FLAGA.7
;---------------------------
;FLAGB
ONE_FG EQU FLAGB.0
F1_FG EQU FLAGB.1
F2_FG EQU FLAGB.2
DISP_EN EQU FLAGB.4
DISP EQU FLAGB.5
;---------------------------------------------
AD_CS EQU 3;5;3
AD_FS EQU 15;15
;-------------------------------------------------------------------------------
; Code section
;-------------------------------------------------------------------------------
.CODE
ORG 0 ;Code section start
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP $+1
JMP PROGRAM_START ;Reset vector
;Address 4 to 7 are reserved
ORG 8
JMP INT_START ;Interrupt vector
ORG 10H
;=======================================
ORG 25H
;=======================================
INT_START:
B0XCH A, ACCBUF ; B0XCH doesn’t change C, Z flag
B0MOV A, PFLAG
B0MOV PFLAGBUF, A ; Save PFLAG register in a buffer
INTTC1HK: ; Check TC1 interrupt request
B0BCLR FTC0IRQ
B0BTS1 FTC1IEN ; Check TC1IENFTC0IEN
JMP INT_EXIT ; Jump check to next interrupt
B0BTS0 FTC1IRQ ; Check TC1IRQ
JMP INTTC1 ; Jump to TC1 interrupt service routine
INT_EXIT:
B0MOV A, PFLAGBUF
B0MOV PFLAG, A ; Restore PFLAG register from buffer
B0XCH A, ACCBUF ; Restore ACC value.
RETI ; Exit interrupt vector
;-------------------------------------------------------------------------------
; TC0 interrupt service routine
;-------------------------------------------------------------------------------
INTTC1:
B0BTS1 FTC1IEN ; Check TC0IEN
JMP INT_EXIT1 ; Jump to exit of IRQ
B0BTS1 FTC1IRQ ; Check TC0IRQ
JMP INT_EXIT1 ; Jump to exit of IRQ
B0BCLR FTC1IRQ
B0BCLR FTC1IRQ
;----------------------------------
MOV A,#5AH
B0MOV WDTR,A ;Clear watchdog timer
;==============================
INCMS TIME_100US
NOP
B0MOV A,TIME_100US
SUB A,#40D
B0BTS1 FC
JMP INT_EXIT1
CLR TIME_100US
B0MOV A,DEL_TIME
B0BTS1 FZ
DECMS DEL_TIME
NOP
;-----------------------------------
B0BTS1 BUZ_EN
JMP NEXT1
INCMS KEY_LX_RAM
NOP
NEXT1:
;-----------------------------------
INCMS TIME_1MS
NOP
B0MOV A,TIME_1MS
SUB A,#5D
B0BTS1 FC;SNZ C
JMP EXIT_REST_KEY
CLR TIME_1MS
EXIT_REST_KEY:
B0MOV A,BUZ_TIME;SZ BUZ_TIME
B0BTS1 FZ
DECMS BUZ_TIME
NOP
B0MOV A,DEL_120;SZ DEL_120
B0BTS1 FZ
DECMS DEL_120
NOP
;-----------------------------------
INCMS TIME_50MS
B0MOV A,TIME_50MS
SUB A,#20D
B0BTS1 FC;SNZ C
JMP GOTO_RETI3
CLR TIME_50MS
INCMS XS_CONT
NOP
GOTO_RETI3:
INCMS TIME_60MS
NOP
MOV A,#100D
SUB A,TIME_60MS
B0BTS0 FC;SZ C
JMP TIME_INT3
B0MOV TIME_60MS,A
B0BTS0 FIR_FG;SZ FIR_FG
JMP TIME_INT3
B0BTS1 DS_FG;SNZ DS_FG
JMP TIME_INT3
B0MOV A,DELAY_TIME;SZ DELAY_TIME
B0BTS1 FZ
JMP $+2
JMP TIME_INT2
B0BTS0 SET_59S;SZ SET_59S
JMP TIME_INT2
B0BSET SET_59S
CLR TIME_60S
MOV A,#60D
B0MOV TIME_1S,A
B0MOV A,DELAY_TIME;SZ DELAY_TIME
B0BTS1 FZ
DECMS DELAY_TIME
NOP
TIME_INT2:
B0MOV A,TIME_1S;SZ TIME_1S
B0BTS1 FZ
DECMS TIME_1S
NOP
TIME_INT3:
;-----------------------------------
B0BCLR SHUN
MOV A,#50D
SUB A,TIME_10MS
B0BTS1 FC;SNZ C
B0BSET SHUN
;-----------------------------------
INCMS TIME_10MS
B0MOV A,TIME_10MS
SUB A,#100D
B0BTS1 FC;SNZ C
JMP INT_EXIT1
CLR TIME_10MS
B0BTS0 KEY_YES;SZ KEY_YES
JMP EXIT_WAIT_GO
B0MOV A,TIME_10MS;SZ TIME_10S
B0BTS1 FZ
DECMS TIME_10S
NOP
MOV A,TIME_10MS;SZ TIME_10S
JMP EXIT_WAIT_GO
B0BCLR F1_FG
MOV A,#3D
B0MOV REST_RAM,A
EXIT_WAIT_GO:
;-----------------------------------------
B0MOV A,SHAN_5S;SZ SHAN_5S
B0BTS1 FZ
JMP $+4
B0BCLR MIN_FG
B0BCLR HOUR_FG
CLR TIM_CONT
B0MOV A,SHAN_5S;SZ SHAN_5S
B0BTS1 FZ
DECMS SHAN_5S
NOP
B0MOV A,BUZ_CONT;SZ BUZ_CONT
B0BTS1 FZ
B0BSET BUZ
B0MOV A,BUZ_CONT;SZ BUZ_CONT
B0BTS1 FZ
DECMS BUZ_CONT
NOP
B0BTS1 FIR_FG;SNZ FIR_FG
JMP EXIT_DEC_TIME_GO
B0MOV A,TIME_5SEC;SZ TIME_5SEC
B0BTS1 FZ
DECMS TIME_5SEC
NOP
B0MOV A,TIME_5SEC;SZ TIME_5SEC
B0BTS1 FZ
JMP EXIT_DEC_TIME_GO
CLR TIME_60S
B0MOV A,WORK_TIME
B0MOV DELAY_TIME,A
B0BCLR FIR_FG
EXIT_DEC_TIME_GO:
B0BTS0 FIR_FG;SZ FIR_FG
JMP TIME_NEXT_GO
INCMS TIME_60S
MOV A,#60D ;1SEC
SUB A,TIME_60S
B0BTS0 FC;SZ C
JMP TIME_NEXT_GO
CLR TIME_60S
B0BCLR SET_59S
TIME_NEXT_GO:
INCMS SYS_SEC
NOP
B0MOV A,SYS_SEC
SUB A,#60D
B0BTS1 FC;SNZ C
JMP INT_EXIT1
CLR SYS_SEC
;-----------------------------------------
INCMS SYS_MIN
NOP
B0MOV A,SYS_MIN
SUB A,#60D
B0BTS1 FC;SNZ C
JMP INT_EXIT1
CLR SYS_MIN
;-----------------------------------------
INCMS SYS_HOUR
B0MOV A,SYS_HOUR
SUB A,#24D
B0BTS1 FC;SNZ C
JMP INT_EXIT1
CLR SYS_HOUR
;-----------------------------------
; Exit interrupt service routine
;-----------------------------------
INT_EXIT1:
B0MOV A,PFLAGBUF ;Restore A and Pflag
B0MOV PFLAG,A ;Restore the PFlag
B0XCH A,ACCBUF ;Restore the Reg. A
;B0xch instruction do not change C,Z flag
RETI ;Exit the interrupt routine
;------------------------------------------------------------------------------
;脉冲输出
;------------------------------------
OUT_CLK:
B0BCLR WR;B0BSET WR
NOP
B0BSET WR;B0BCLR WR
RET
;------------------------------------
;段码输出
;------------------------------------
DATAOUT_1621:
B0MOV DISP_COM,A
MOV A,#8
B0MOV KEY_RAM,A
DATAOUT1:
B0BTS1 DISP_COM.7
B0BCLR DAT
B0BTS0 DISP_COM.7
B0BSET DAT
NOP
B0BCLR WR;B0BSET WR;CLK
RLCM DISP_COM
B0BSET WR;B0BCLR WR;CLK
DECMS KEY_RAM
JMP DATAOUT1
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -