不知道为什么,rs232串口可以正常通讯,485通讯的时候会出现乱码。

2020-01-27 11:33发布

用的STC12C5A60S2的单片机,
rs232和485是用同一个端口,用两个短路冒切换,
同一个程序,rs232通讯非常正常,但是有些板子485会出乱码,
出乱码的板子,我换过485芯片,换过485旁边的120欧姆电阻和104电容,都没有效果,还是乱码。
附上原理图,


(原文件名:1.jpg)


(原文件名:2.jpg)

不知道为什么会这样子,调了一天还没找到原因。
希望各位大哥帮帮忙啊。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
zywh
1楼-- · 2020-01-29 00:42
回复【12楼】PenGH  
回复【11楼】zywh
-----------------------------------------------------------------------
看你的原理图,加上拉与下拉应当可以用。
-----------------------------------------------------------------------

今天给A接了上啦电阻,给B接了下拉电阻,电阻用4K7,
数据正确了,但是还有一个问题,
发送的间隔不能太快,
我的程序是上位机发送位号查询本机,本机收到位号再发送信息,
我用串口调试助手测的时候,时间间隔只能20MS以上,20MS以下,会有乱码,程序方面我用原来的程序,就是没有加延时的。

232方面,间隔1MS的话。。。数据都还是很正常的。

不知道跟电阻的大小有没有关系。
zywh
2楼-- · 2020-01-29 06:29
回复【12楼】PenGH  
-----------------------------------------------------------------------

还有一块板子,加了上拉下拉电阻也没用。

在使能输出的时候,要不要设置为推挽输出啊???
shmioy
3楼-- · 2020-01-29 11:17
1、你不是自动收发!控制使能是要时间的;
2、收发程序不全;上拉下拉与速度无关.
franklincanton
4楼-- · 2020-01-29 17:04
看了各位以上的讨论,学习了很多~先感谢一下再调试
ant_2009
5楼-- · 2020-01-29 20:28
 精彩回答 2  元偷偷看……
Adrian
6楼-- · 2020-01-29 22:24
//发送一个char
void SendData_1(unsigned char dat)
{
SBUF = dat;         //Send current data
while(!TI);         //Wait for the previous data is sent 等待前一个转换结束
TI = 0;         //Clear TI flag,清除TI标志位  
}

//发送一个字符串
void SendString_1(unsigned char *s)
{
RS_1 = 1;         //使能发送
Delay_us(1000);
while(*s)         //Check the end of the string
{
SendData_1(*s++);         //Send current char and increment string ptr
}
RS_1 = 0;         //发送完毕置位使能接收
Delay_us(1000);
}

----------------------这样100% 没问题,你那样用的话,RW切换太频繁,反应不过来的!尤其是使能发送后需要一个比较长的延时,自己试试多少合适吧。

一周热门 更多>