MOV A,P0 XRL A,P0有漏洞,而且无法判断沿变化,写一段,仅供参考 用的大循环扫描,也可以用定时器扫描,只要扫描频率有个两三K就可以了 X0 EQU P0.0 X1 EQU P0.1
X0BIT0 BIT 000H X1BIT0 BIT 001H
X0BIT BIT 010H X1BIT BIT 011H
X0BITL BIT 020H X1BITL BIT 021H
NUM0H EQU 030H NUM0L EQU 031H NUM1H EQU 032H NUM1L EQU 033H
ORG 0000H LJMP MAIN ORG 30H MAIN: MOV SP,#080H MOV R0,#030H WQR: MOV @R0,#00H INC R0 MOV A,R0 CJNE A,#080H,WQR NOP SETB X0BIT SETB X1BIT SETB X0BITL SETB X1BITL NOP
LOOP: NOP NOP MOV C,X0 JC JR00 JNB X0BIT0,JR01 AJMP JR02 JR00: JB X0BIT0,JR01 AJMP JR02 JR01: MOV X0BIT,C ;检测到两次一样则认为信号稳定 JR02: MOV X0BIT0,C ;保存本次扫描到的状态 MOV C,X1 JC JR10 JNB X1BIT0,JR11 AJMP JR12 JR10: JB X1BIT0,JR11 AJMP JR12 JR11: MOV X1BIT,C ;检测到两次一样则认为信号稳定 JR12: MOV X1BIT0,C ;保存本次扫描到的状态 JB X0BIT,LEW1 ;仅下降沿计一次 JNB X0BITL,LEW1 MOV A,NUM0L ADD A,#001H MOV NUM0L,A MOV A,NUM0H ADDC A,#000H MOV NUM0H,A ;此处未考虑溢出
LEW1: JB X1BIT,LEW2 ;仅下降沿计一次 JNB X1BITL,LEW2 MOV A,NUM1L ADD A,#001H MOV NUM1L,A MOV A,NUM1H ADDC A,#000H MOV NUM1H,A ;此处未考虑溢出
LEW2: MOV C,X0BIT MOV X0BITL,C MOV C,X1BIT MOV X1BITL,C ;保存本次状态 LJMP LOOP
END |