MOVLW 3 ;
MOVWF CNT1 ;3*256*10us
CLRF CNT2 ;
CLRF CNT0 ;
;*************************************************
RCV3:
GOTO $+1 ;每一个循环10US
NOP
BTFSS PORTB,RMT
INCF CNT2,1
BTFSC PORTB,RMT
CLRF CNT2
BTFSC CNT2,3 ; 低电平大于8*10US=80US则为有效低电平,否则是一些干扰信号
GOTO RCV4
DECFSZ CNT0,1
GOTO RCV3
DECFSZ CNT1,1
GOTO RCV3
GOTO LOOP ;高电平大于3*256*10US=7.68MS则是错误的
;**************************************************
RCV4:
MOVLW 3
SUBWF CNT1,0 ;高电平小于1*256*10US=2.56MS则是错误的
BTFSC STATUS,C ;
GOTO LOOP
MOVLW 32
MOVWF CNT2 ;接收数据共32位,16位用户码,8位控制码加8位控制码的反码
RCV5:
CLRF CNT3
MOVLW 170 ;低电平大于256-170=86*10US=860US错误
MOVWF CNT0
MOVLW 56
MOVWF CNT1 ;高电平大于256-56=200*10US=2MS错误
RCV5_HI:
GOTO $+1
NOP
BTFSC PORTB,RMT
INCF CNT3,1
BTFSS PORTB,RMT
CLRF CNT3
BTFSC CNT3,2 ;高电平大于8*10US=80US则为有效高电平
GOTO RCV6
INCFSZ CNT0,1
GOTO RCV5_HI ;低电平大于860US则是错误的
GOTO LOOP
RCV6:
CLRF CNT3
RCV6_LO:
GOTO $+1
NOP
BTFSS PORTB,RMT
INCF CNT3,1
BTFSC PORTB,RMT
CLRF CNT3
BTFSC CNT3,3 ;低电平大于10*8US=80US则是有效低电平
GOTO COMPARE
INCFSZ CNT1,1
GOTO RCV6_LO ;高电平大于256-56=200*10US=2MS错误
GOTO LOOP
COMPARE:
MOVLW 170
SUBWF CNT0,1 ;CNT0的值减初始值等于实际低电平计数值
MOVLW 56
SUBWF CNT1,1 ;CNT1的值减初始值等于实际高电平计数值
MOVFW CNT1
ADDWF CNT0,1 ;将高低电平的计数加在一起并存入CNT0,通过比较高低电平总的时间来确定是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则是错误的
上一页 [1] [2] [3] [4] [5] [6] 下一页
上一篇:针对PIC微控制器的设计窍门