|
我用了两片pic12f629模拟单总线通信,一个模拟主机,一个模拟从机,当从机向主机发送数据“0”时,总线上的电平在1.0v左右,这样主机就认为接受到了“1”,而当主机发送复位脉冲从机应答的时候总线上的电平却能降到0v,这是为什么呢?
主机接收代码:
RECEIVE_START
RRF INDF,1
BSF STATUS,RP0 ;BANK1
BCF (TRISB^80H),RB0 ;设置RB0口为输出状态
BCF STATUS,RP0 ;BANK0
BCF PORTB,RB0
MOVLW 0EH ;DELAY 46US
MOVWF DELAY_COUNT1
DECFSZ DELAY_COUNT1,1
GOTO $-1
;-----设置RB0口为输入状态,释放总线
BSF PORTB,RB0
BSF STATUS,RP0 ;BANK1
BCF (TRISB^80H),RB0 ;
BCF STATUS,RP0 ;BANK0
;就在这个时刻之后从机发送信号,如果发送“0”则总线上电平是1v
;---------------------------
MOVLW 06H ;主机延时20us后开始采样
MOVWF DELAY_COUNT1
DECFSZ DELAY_COUNT1,1
GOTO $-1
BTFSS PORTB,RB0
GOTO RECORD_0
GOTO RECORD_1
RECORD_0
MOVLW 07H ;巡检42us
MOVWF DELAY_COUNT1
BTFSC PORTB,RB0
GOTO RECEIVE_FAILER
DECFSZ DELAY_COUNT1,1
GOTO $-3
BCF INDF,07H
GOTO BIT_END
RECORD_1
MOVLW 07H ;巡检42us
MOVWF DELAY_COUNT1
BTFSS PORTB,RB0
GOTO RECEIVE_FAILER
DECFSZ DELAY_COUNT1,1
GOTO $-3
BSF INDF,07H
GOTO BIT_END
BIT_END
MOVLW 18H ;在120us内检测从器件的高电平信号
MOVWF DELAY_COUNT1
BTFSC PORTB,RB0
GOTO STOP_BIT
DECFSZ DELAY_COUNT1,1
GOTO $-3
GOTO RECEIVE_FAILER
STOP_BIT
MOVLW 06H ;巡检32us
MOVWF DELAY_COUNT1
BTFSS PORTB,RB0
GOTO RECEIVE_FAILER
DECFSZ DELAY_COUNT1,1
GOTO $-3 |
|