loliweive 发表于 2014-5-16 09:07
听闻楼主有远距离多机通信编程的经历,希望楼主可以讲一讲RS485总线在工程中的应用实例,谢谢! ...
485通讯跟普通串口通讯方式有一个最大的区别是,485通讯要多增加一个IO口来控制数据流的方向,输出低电平时表示接受数据的状态,输出高电平时表示发送数据的状态。485的通讯协议一般都是用主机对从机广播呼叫的模式。即平时所有从机处于接受数据的状态(流控IO口处于低电平),主机发送呼叫某个从机的地址,相应的从机收到数据后,马上切换到发送数据的状态(流控IO口处于高电平),然后往主机返回对应的数据,从机对主机发送完数据之后,从机又马上切换到接受数据的状态(流控IO口处于低电平)。从机在发送数据时,在程序上有一个要特别注意的细节:
void eusart_send(unsigned char ucSendData)
{
ES = 0; //关串口中断
TI = 0; //清零串口发送完成中断请求标志
rede_dr=1; //流控IO,切换至发送数据的状态,准备发送数据,
delay_short(4); //此处最关键,必须插入几个空延时,等待芯片切换到发送数据的状态
SBUF =ucSendData; //发送一个字节
delay_short(400);
rede_dr=0; //流控IO,发送完数据之后,务必马上把从机切换回接收数据的状态,把总线释放
TI = 0; //清零串口发送完成中断请求标志
ES = 1; //允许串口中断
} |