CLRF STATUS ;清状态寄存器口
BSF STATUS,RP0 ;BANK-1
;------------------------------------------------
MOVLW 0FH ;00001111设定:RB口不用上拉,分频器配给WDT
MOVWF OPTION_ ;分频比设为1:256
MOVLW 02H ;00000010转换结果左对齐,只选3个A/D通道RA0/AN0,RA1,RA3
MOVWF ADCON1 ;选择VDD和VSS作参考源
;------------------------------------------------
MOVLW 00H
MOVWF TRISC ;PORTC所有管脚设为输出
MOVLW 01H ;
MOVWF TRISB ;RB0=输入
MOVLW 0FFH ;
MOVWF TRISA ;
;------------------------------------------------
BCF STATUS,RP0 ;BANK-0
;------------------------------------------------
MOVLW 01001001B ;01001001选择:时钟时钟源为FOSC/8,允许ADC工作
MOVWF ADCON0 ;通道AN1,暂时不启动转换过程
BCF PIR1, ADIF ;清除A/D中断标志位
;------------------------------------------------
MOVLW 00H ;
MOVWF PORTC ;
MOVLW 0FFH ;
MOVWF PORTB ;
;*****************************************************
LOOP:
NOP ;
NOP ;
;*****************************************************
RCV:
BTFSC PORTB,RMT
GOTO LOOP ;是干扰退出
MOVLW 10
MOVWF CNT1 ;10*256*10us
CLRF CNT2
CLRF CNT0
RCV1:
MOVLW 170 ;低电平大于256-170=86*10US=860US错误
MOVWF CNT0
RCV1_HI:
GOTO $+1
NOP
BTFSC PORTB,RMT
INCF CNT3,1
BTFSS PORTB,RMT
CLRF CNT3
BTFSC CNT3,2 ;高电平大于8*10US=80US则为有效高电平
GOTO RCV11
INCFSZ CNT0,1
GOTO RCV1_HI ;低电平大于700US则是错误的
GOTO LOOP
;*************************************************
RCV11:
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 RCV11
DECFSZ CNT1,1
GOTO RCV11
GOTO LOOP ;高电平大于10*256*10US=25.6MS则是错误的
;**************************************************
RCV4:
MOVLW 4
SUBWF CNT1,0 ;高电平小于6*256*10US=15.36MS则是错误的
BTFSC STATUS,C ;
GOTO LOOP
;-----------------------------------------
MOVLW 16
本文关键字:程序 PIC单片机,单片机-工控设备 - PIC单片机