英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 单总线通信 [打印本页]

作者: winnie    时间: 2009-3-24 14:00
标题: 单总线通信
我用了两片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
;-----设置RB0口为输入状态,释放总线
   
   BSF PORTB,RB0

   BSF STATUS,RP0 ;BANK1
   BCF (TRISB^80H),RB0 ;                       //RB0还是输出啊?
   BCF STATUS,RP0 ;BANK0




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2