下降沿触发在硬件上可以用INT0,INT1中断来实现,当中断不够用的时候,可以考虑软件实现,如下:
;上升沿触发:/A×B为高启动计数
;下降沿触发:A×/B为高启动计数
;这是个计数器,若有上升沿或下降沿,则计数.count+/A×B--->count
;设R0为计数单元地址,P1.0为信号输入口,00H,01H分别记录A(本次采样得到的值),B(上次采样得到的值)状态
;上升沿触发:
MOV C,P1.0 ;采样B值
MOV 01H, C ;放入01H中
ANL C,00H
;/A(00H)×B(01H)的值送C
CLR
A
;COUNT+C送COUNT,先把ACC清零,确保加的是CY
ADDC A,@R0
;这个指令其实是ACC,CY,@R0三个相加,所以,是COUNT+C+0--->COUNT
MOV @R0, A
MOV C,01H
;/B送A,更新A值
CPL C
MOV 00H,C
下降沿触发:
MOV C,P1.0
MOV 01H,C
CPL
C
;/B
ANL C,01H
;A×/B-->C
CLR
A
;作十六位加计数
ADDC A,@R0
MOV @R0, A
INC R0
CLR A
ADDC A,@R0
MOV @R0,A
MOV C,01H
;刷新A值
MOV 00H,C