以下是定时中断服务程序的全部代码,可以完成对8个事件的时间统计,并在时间满足条件时,调用子程序OUT01,是对外部开关的控制指令。通过这段程序,成功实现了一个定时器对多个事件的自动运行控制(以下程序仅供参考)。
TIME0: CLR TR0
PUSH PSW
PUSH ACC
MOV TL0,#22H;定时100ms重新启动定时器0
MOV TH0,#1CH
LINSHI: MOV A,2AH
CJNE A,#0FFH,DEA
SETB TR0
POP ACC
POP PSW
RETI
DEA: MOV A,2AH
CJNE A,#00H,DE1
MOV A,2CH
CJNE A,#00H,DE1
;SETB TR0
POP ACC
POP PSW
RETI
DE1: JNB 2AH.0,DEAL1
DE2: JNB 2AH.1,DEAL2
DE3: JNB 2AH.2,DEAL3
DE4: JNB 2AH.3,DEAL4I
DE5: JNB 2AH.4,DEAL5I
DE6: JNB 2AH.5,DEAL6I
DE7: JNB 2AH.6,DEAL7I
DE8: JNB 2AH.7,DEAL8I
LJMP FINISH
DEAL4I: LJMP DEAL4
DEAL5I: LJMP DEAL5
DEAL6I: LJMP DEAL6
DEAL7I: LJMP DEAL7
DEAL8I: LJMP DEAL8
DEAL1: JNB 2CH.0,DE2
INC 50H
MOV A,50H
CJNE A,#20,DE2
CLR 2CH.0
LCALL OUT01
mov 50h,#00h
LJMP DE2
DEAL2: JNB 2CH.1,DE3
INC 51H
MOV A,51H
CJNE A,#20,DE3
CLR 2CH.1
LCALL OUT01
MOV 51H,#00H
LJMP DE3
DEAL3: JNB 2CH.2,DE4
INC 52H
MOV A,52H
CJNE A,#20,DE4
CLR 2CH.2
LCALL OUT01
MOV 52H,#00H
LJMP DE4
DEAL4: JNB 2CH.3,DE5I
INC 53H
MOV A,53H
CJNE A,#20,DE5I
CLR 2CH.3
LCALL OUT01
MOV 53H,#00H
DE5I: LJMP DE5
DEAL5: JNB 2CH.4,DE6I
INC 54H
MOV A,54H
CJNE A,#20,DE6I
CLR 2CH.4
MOV 54H,#00H
LCALL OUT01
DE6I: LJMP DE6
DEAL6: JNB 2CH.5,DE7I
INC 55H
MOV A,55H
CJNE A,#20,DE7I
CLR 2CH.5
LCALL OUT01
MOV 55H,#00H
DE7I: LJMP DE7
DEAL7: JNB 2CH.6,DE8I
INC 56H
MOV A,56H
CJNE A,#20,DE8I
CLR 2CH.6
LCALL OUT01
MOV 56H,#00H
DE8I: LJMP DE8
DEAL8: JNB 2CH.7,FINISH
INC 57H
MOV A,57H
CJNE A,#20,FINISH
CLR 2CH.7
LCALL OUT01
MOV 57H,#00H
FINISH: MOV A,2CH
CJNE A,#00H,TUI
SETB TR0;SETB TR0
POP ACC
POP PSW
RETI
TUI: SETB TR0;开定时器
POP ACC
POP PSW
RETI
OUT01: MOV A,2CH
MOV P2,A
CLR G0
LCALL DELAY
CLR CLOCK
LCALL DELAY
SETB CLOCK
NOP
CLR CLOCK
SETB G0
LCALL DELAY
RET
[!--empirenews.page--]