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

2020-01-27 11:33发布

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


(原文件名:1.jpg)


(原文件名:2.jpg)

不知道为什么会这样子,调了一天还没找到原因。
希望各位大哥帮帮忙啊。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
little_Monkey
1楼-- · 2020-01-27 16:18
485是半双工的,发送数据前检查是否空闲
iixin
2楼-- · 2020-01-27 18:54
 精彩回答 2  元偷偷看……
lylatyou
3楼-- · 2020-01-27 19:28
485速度可以做得比232还快。80%原因是楼主的RW控制没做好。

发送完成后不能立刻把RW置为接收状态的,应该发送移位寄存器已经空了后才能。最好再加几百微秒延迟,因为不同的芯片RW转换延迟不一样。
uzufk
4楼-- · 2020-01-27 23:01
3楼对解!

收发切换要加延时, 延时长短和你的波特率有关!
gallle
5楼-- · 2020-01-28 00:36
回复【3楼】lylatyou 张伯伦
485速度可以做得比232还快。80%原因是楼主的rw控制没做好。
发送完成后不能立刻把rw置为接收状态的,应该发送移位寄存器已经空了后才能。最好再加几百微秒延迟,因为不同的芯片rw转换延迟不一样。
-----------------------------------------------------------------------

这个是有道理的!
zywh
6楼-- · 2020-01-28 00:43
回复【3楼】lylatyou  张伯伦
485速度可以做得比232还快。80%原因是楼主的rw控制没做好。
发送完成后不能立刻把rw置为接收状态的,应该发送移位寄存器已经空了后才能。最好再加几百微秒延迟,因为不同的芯片rw转换延迟不一样。
-----------------------------------------------------------------------


按照你说的做了,加了一个Delay_us(1000);的延时,485还是发送乱码,我的波特率9600,晶振11.0592MHZ,
不知道是不是这样写:

//发送一个char
void SendData_1(unsigned char dat)
{
        RS_1 = 1;                        //使能发送
        SBUF = dat;                        //Send current data
        while(!TI);                        //Wait for the previous data is sent 等待前一个转换结束
        TI = 0;                                //Clear TI flag,清除TI标志位
        Delay_us(1000);
        RS_1 = 0;                        //发送完毕置位使能接收
}

//发送一个字符串
void SendString_1(unsigned char *s)
{
        while(*s)                //Check the end of the string
        {
                SendData_1(*s++);                //Send current char and increment string ptr
        }
}





                SendString_1("$03");                        //发送本机地址
                SendString_1(SendBuff);                //发送数据
                SendString_1(" ");                        //发送回车换行

一周热门 更多>