MOV COUNT1+1,CCAP0H
MOV COUNT1+2,CCAP0L
CLR C ;Calculate two captures’ differences
MOV A,COUNT1+2
SUBB A,COUNT0+2
MOV LENGTH+2,A
MOV A,COUNT1+1
SUBB A,COUNT0+1
MOV LENGTH+1,A
MOV A,COUNT1
SUBB A,COUNT0
MOV LENGTH,A ;LENGTH saved is the captured pulse width
ISREXIT:
POP PSW
POP ACC
RETI
MAIN:
MOV SP, #5FH
MOV P0M0, #00H
MOV P0M1, #00H
MOV P1M0, #00H
MOV P1M1, #00H
MOV P2M0, #00H
MOV P2M1, #00H
MOV P3M0, #00H
MOV P3M1, #00H
MOV P4M0, #00H
MOV P4M1, #00H
MOV P5M0, #00H
MOV P5M1, #00H
CLR A
MOV CNT,A ;User variable initialization
MOV COUNT0,A
MOV COUNT0+1,A
MOV COUNT0+2,A
MOV COUNT1,A
MOV COUNT1+1,A
MOV COUNT1+2,A
MOV LENGTH,A
MOV LENGTH+1,A
MOV LENGTH+2,A
MOV CCON,#00H
MOV CMOD,#09H ;PCA clock is the system clock, enable PCA timing interrupt
MOV CL,#00H
MOV CH,#0H
MOV CCAPM0,#11H ;PCA module 0 is 16-bit capture mode (falling edge capture)
; MOV CCAPM0,#21H ;PCA module 0 is 16-bit capture mode (rising edge capture)
; MOV CCAPM0,#31H ;PCA module 0 is 16-bit capture mode (falling and rising edge capture)
MOV CCAP0L,#00H
MOV CCAP0H,#00H
SETB CR ;Start PCA timer
SETB EA
JMP $