winnie 发表于 2009-3-24 14:00:40

单总线通信

我用了两片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

winnie 发表于 2009-3-24 14:00:56

;-----设置RB0口为输入状态,释放总线
   
   BSF PORTB,RB0

   BSF STATUS,RP0 ;BANK1
   BCF (TRISB^80H),RB0 ;                     //RB0还是输出啊?
   BCF STATUS,RP0 ;BANK0
页: [1]
查看完整版本: 单总线通信