IRQ EQU 01H
TM0 EQU 02H
TM1 EQU 03H
TL0 EQU 04H
TH0 EQU 05H
PROGRAMME:
ORG 0000H
JMP RESET
RTNI
JMP TIMER0_INT ;T1 INT THEN GO TO T1_INT
RTNI
RTNI
RESET:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLEARRAM: ;CLEAR RAM 020H-3AFH,
LDI DPH ,07H
LDI DPM ,02H
LDI DPL ,0FH
LDI WDT ,1100B ;CLR WDT WDT=64ms
?CLinx:
LDI INX ,00H
CALL DataPointDec
LDA DPH ,BANK0
OR DPM ,BANK0
BNZ ?CLinx
;--------------------------------------------------------
LDI WDT ,1100B ;CLR WDT WDT=64ms
;--------------------------------------------------------
LDI PAOUT ,1111B ;set PA output
LDI PORTA ,1111B
LDI PFOUT ,1111B ;set PF output
LDI PORTF ,1111B
LDI TMP01 ,1111B
STA PIOUT ,BANK7 ;set PI output
LDI TMP01 ,1111B
STA PORTI ,BANK7
;-----------------------------
LDI TM1 ,1111B
LDI TM0 ,0111B ;T1RM=1111B--; 1/1 ;T1RM=1110B--;1/2 ;CLOCK/4
LDI TL0 ,06H ;T1RL=06H
LDI TH0 ,00H ;T1RH=00H----; /250 ;T1RH=08H----;/125
LDI IRQ ,0000B
LDI IE ,1000B ; T1 INTERRUPT ENABLE
LDI PA_BUF ,0FH
LDI PF_BUF ,0FH
LDI PI_BUF ,0FH
;========================================================
; main programme
;========================================================
MAIN:
LDI WDT ,1100B ;CLR WDT WDT=64ms
JMP TIME_CLOCK
RE_TIME_CLOCK:
JMP KEY_SCAN
RE_KEY_SCAN:
JMP KEY_PROCESS
RE_KEY_PROCESS:
JMP DISPLAY
RE_LED_DISP:
NOP
NOP
NOP
NOP
JMP MAIN
;========================================================
;数据指针减一子程序
;========================================================
DataPointDec:
SBIM DPL ,01H
EOR DPL ,BANK0
SBCM DPM ,BANK0
EOR DPM ,BANK0
SBCM DPH ,BANK0
RTNI
;=================================================
;timer0中断服务子程序
;=================================================TIMER0_INT:
STA ACC_BUF ,BANK0 ;备份ACC的值
LDI IRQ ,00H ;清TIMER0中断请求标志
;-----------------------------
COUNT_1MS:
ADIM CT0_1MS ,01H
SBI CT0_1MS ,04H
BNZ COUNT_5MS
LDI CT0_1MS ,00H
ORIM TIME_FLAG ,0001B ;设置“1ms到”标志
COUNT_5MS:
ADIM CT0_5MS ,01H ;5ms计数
LDI TMP_T0 ,00H
ADCM CT1_5MS ,BANK0 ;5ms计数
SBI CT0_5MS ,04H
BNZ TIMER1_INT_END
SBI CT1_5MS ,01H
BNZ TIMER1_INT_END
ORIM TIME_FLAG ,0010B ;设置“5ms到”标志
ORIM CLOCK_FLAG ,0001B ;设置时钟计时的5ms标志位
LDI CT0_5MS ,00H ;重置5ms计数器
LDI CT1_5MS ,00H ;重置5ms计数器
;-----------------------------
ADIM CT0_200MS ,01H
LDI TMP_T0 ,00H
ADCM CT1_200MS ,BANK0
SBI CT0_200MS ,08H
BNZ TIMER1_INT_END
SBI CT1_200MS ,02H
BNZ TIMER1_INT_END
ORIM TIME_FLAG ,0100B ;设置“0.2s到”标志
LDI CT0_200MS ,00H ;重置0.2S计数器
LDI CT1_200MS ,00H ;重置0.2S计数器
;-----------------------------
TIMER1_INT_END:
LDI IE ,1000B ;打开timer0中断
LDA ACC_BUF ,BANK0 ;返回ACC的值
RTNI |
|