单总线的优点:
- 节省IO口,发送时可以将单片机的RXD设置为普通IO进行软件模拟发送,发送完设置为串口接收。
- 避免通信干扰,由于是通过IO口对三极管/MOS管进行拉高拉低,外部信号不易对IO口进行干扰,EMI(电磁干扰)也不容易单片机造成影响。
单总线的缺点:
- 异步半双工
- 通信速率不能太高
硬件电路如下:
该电路中,数据通过TXD发出,当TXD发出高电平信号时,三极管Q2导通接地,此时
总线上为低电平,当TXD发出低电平信号时,三极管Q2截止,由于上拉电阻的存在,此时
总线为高电平信号;同理,RXD接收数据时,总线为高电平时RXD为低电平,总线为低电平
时RXD为高电平;Q1、Q2两个三极管在电路中类似非门,发出的数据和接收的数据经过三
极管后将被取反,因此,总线上读出的数据是被取反后的数据,但是由于主机和从机都使
用了该串口转总线电路,实际接收到的数据是被取反了两次的数据,取反两次的数据和被
取反之前的数据保持一致。
软件设计:
1.自发自收
正常情况下,该电路会出现自发自收的情况,导致通信不正常。所以需要在发送时禁止接受中断,发送完再打开。
- 总线被TXD拉低,正常状态下,串口空闲时是高电平,此时三极管打开,总线被拉低,导致无法接收数据,所以发完要禁止发送,同时将TXD设置为普通IO口并拉低。
- 由于以上的这些特性,通信是异步半双工,所以在通信协议上需要设置为主从模式,主机间隔一定时间发送数据,从机需要立即响应,同时从机要开一个定时器,当超时没有接收到数据,需要主动发起握手,如果握手失败,需要进一步处理,避免出现故障。
通信效果如下,粉色为从机的TXD,蓝色为从机的RXD