1. 通信线路故虚梁障:如果485通信的连接线路出现了问题,例如接触不良、短路或者开路等,就会导致通信中断。
2. 设备设置错误:如果设备的参帆和数设置错误,例如波特率、数据位、校验位等与对方不匹配,也会导致通信中断。
3. 噪声干扰:在工业环境下,由于电气噪声等原因可能会对485总线产生影响。这些噪声可以来自其他设备或者外部环境。当噪声超过一定程度时,就容易导致通信中断。
4. 软件程序问题:如果软件程序存在漏差轿运洞或者逻辑错误,在执行过程中可能会引起异常情况从而导致通讯中断。
5. 设备硬件故障:如果Smart或屏幕本身存在硬件故障(如芯片损坏),也有可能造成485通讯中断。
1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。这样,在发送数据的等待期间内,如果收到了数据,将不厅手缺能进入中断函数,也就不会保存的这个新收到的数据。
这种处理方法,就会遗漏收到的数据。
2.有人薯判在发送数据之前,并没有关闭串口中断,当 TI = 1 时,是可以进入中断程序的。
但是,却在中断函数中,将 TI 清零!
这样,在主函数中的while(TI ==0),将永远等不到发送结束的标志。
3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。
对此,做而论道发扮辩表自己常用的方法:
接收数据时,使用“中断方式”,清除 RI 后,用一个变量通知主函数,收到新数据。
发送数据时,也用“中断方式”,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
这样一来,收、发两者基本一致,编写程序也很规范、易懂。
更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。
有些人,不懂就不要瞎说,误导人啊PC机与单片机直接是不能进行通信的,
我们知道pc与单片机多采用232串口通信,你使用的是485方式,也是可以的,不过PC机直接不支持485 啊,于是乎,你要用一个RS232-485的转换埋颂器,单片机端直接用MAX485芯片就行了,这是硬件。
数据通信与232通信是一颂扰样的,不过485是半双工的,单片机端需要做收发控制。
单片机采用中断方式或扫描方式都行,给你一段中断程序,你参考一下:
com_interrupt(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer
if(RI) //处理接收中断
{
RI=0 //清除中断标志位
dat[n++]=SBUF
if(n>7)flg=1
}
}
flg是一个判断标志,如果你接收到7个数据后,标志置1,
在程序中处理为:
如果flg==1,你可以对你的dat数据处理,同时放n=0,等弯樱郑待下一次数据接收
OK
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)