图4-8 外部中断0中断服务程序流程图
外中断0服务程序:
INT0SERVE:
CLR EX0
JNB P3.1,INT0SERVE1
开外中断0,返回:
INT0RET: SETB EX0
RETI
INT0SERVE1: CLR A
MOV DPH,A
MOV DPL,A
对第一个低电平记时:
INT0SERVE2: JB P3.1,INT0SERVE3
INC DPTR
NOP
NOP
AJMP INT0SERVE2
判断第一个脉冲是否为2MS,小于就是一个干扰:
INT0SERVE3: MOV A,DPH
JZ INT0RET
CLR A
脉冲个数加1,在判断:
INT0SERVE4: INC A
INT0SERVE5: JNB P3.1,INT0SERVE5
MOV R1,#06H
一帧判定结束,低电平时脉冲个数加一:
INT0SERVE6: JNB P3.1,INT0SERVE4
LCALL DELAY513US
DJNZ R1,INT0SERVE6
DEC A
超过3MS一帧结束,然后对脉冲的个数进行判断:
DEC A
JZ FUNCTION0
DEC A
JZ DD4
DEC A
JZ DD3
DEC A
JZ DD2
DEC A
JZ DD1
DEC A
JZ DD
NOP
NOP
LJMP INT0RET
DD: LJMP FUNCTION5
NOP
NOP
LJMP INT0RET
DD1:LJMP FUNCTION4
NOP
NOP
LJMP INT0RET
DD2:LJMP FUNCTION3
NOP
NOP
LJMP INT0RET
DD3:LJMP FUNCTION2
NOP
NOP
LJMP INT0RET
DD4:LJMP FUNCTION1
NOP
NOP
LJMP INT0RET
FUNCTION0:……
脉冲需要的延时:
DELAY513US: MOV R5,#254
DELAY513US1:
DJNZ R4,DELAY513US1
RET
END
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页