总的时间来确定是1还是0
BTFSC STATUS,C ;
GOTO LOOP ;总的值大于255(即时间大于255*10US=2.55MS)则错误
;---------------------------------------
MOVLW 70
SUBWF CNT0,0
BTFSS STATUS,C ;
GOTO LOOP ;总的时间小于70*10US=700US则是错误的
MOVLW 130 ;130*10=1.3MS
SUBWF CNT0,0
BTFSC STATUS,C ;
GOTO COMPARE_H ;时间大于1.3MS转去确定是否1
BCF FLAGS2,BITIN ;时间在860US-1.3MS之间则是0
GOTO MOVDATA ;送数
;----------------------------------------
COMPARE_H:
MOVLW 150
SUBWF CNT0,0
BTFSS STATUS,C ;
GOTO LOOP ;小于150*10US=1.5MS,则错误
MOVLW 230
SUBWF CNT0,0
BTFSC STATUS,C ;
GOTO LOOP ;大于230*10US=2.3MS,则错误
BSF FLAGS2,BITIN ;时间在1.5MS-2.3MS之间则是1
;----------------------------------------
MOVDATA:
RLF CSR0A,1 ;将每一位移入相应寄存器
RLF CSR1A,1
BCF CSR0A,0
BTFSC FLAGS2,BITIN ;接收当前位送入CSR0.0
BSF CSR0A,0
DECFSZ CNT2,1 ;是否接收完16位
本文关键字:程序 PIC单片机,单片机-工控设备 - PIC单片机