那年,我只是听说过rs485通讯;那年,我只是从代码上了解了RS485通讯;那年,我将rs485通讯从stc代码移植到了avr的atmega16上;那年,调试的时候花掉了我大部分时间……
Rs485通讯的关键代码如下:
1) SETBIT(PORTD, RS485EN);
2) delayXus(5);
3) UartSendDataBuf( sUartData.SendDataBuff,sUartData.SendRtuFramLenth );
4) delayXms(2);
5) CLEARBIT(PORTD, RS485EN);
只有短短的5行。可是这5行代码,让我喜欢,让我忧。终究其原因,还是我对rs485通讯理解不够深入,调试经验缺乏。现在写出来,也不怕献丑,只为网友能够少走一些弯路,多享受一分成功后的喜悦。
第一行语句是将rs485的芯片max485的使能发送引脚提高,使能发送;
第二行语句是等待芯片完成使能信号处理;
第三行语句只是简单的串口发送数据;
第四行语句就是超级重点了。是等待发送数据完成后,释放使能发送引脚。这个时间要是短了,就会造成发送的数据最后1位(几位)变成0.例如发送0x55,那么接收很可能为0x54。如果等待时间长了,那么就会造成严重的宕机事故。因为,此时发送引脚还未释放,另一端数据又开始发送了。
第五行语句只是释放引脚,完成一次发送任务。
关键的第四行等待时间语句,关键的位置。大家要调试rs485时一定要注意啊!这个延时要根据自己选用的串口波特率来计算得出,切不可盲目copy别人的源代码。
不早了,祝各位晚安,周末愉快!!
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。