标题: 求助!单片机和电脑进行485通讯,电脑接收到乱码! [打印本页]

作者: 饮酒作乐    时间: 2020-6-9 16:35
标题: 求助!单片机和电脑进行485通讯,电脑接收到乱码!
刚拿到一块板子,准备写个小程序测试一下485.谁知道,怎么都调不出来!
单片机型号:STC12C5608AD
程序:
  1. #include <STC12C5630AD.H>

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar flag = 1;
  5. sbit LED = P1^6;

  6. void UartInit ( )                //9600bps@11.0592MHz
  7. {
  8.         PCON &= 0x7F;                //波特率不倍速
  9.         SCON = 0x50;                //8位数据,可变波特率
  10.         AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
  11.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  12.         TMOD &= 0x0F;                //清除定时器1模式位
  13.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  14.         TL1 = 0xFD;                //设定定时初值
  15.         TH1 = 0xFD;                //设定定时器重装值
  16.         ET1 = 0;                //禁止定时器1中断
  17.         TR1 = 1;                //启动定时器1
  18.         ES = 1;
  19.         EA = 1;
  20. }
  21. void Uart_interrupt ( ) interrupt 4
  22. {
  23.         TI = 0;
  24.         flag = 0;
  25.        
  26. }
  27. void main ()
  28. {
  29.         UartInit( );
  30.         while(1)
  31.         {
  32.                 if( flag == 1)
  33.                 {
  34.                         SBUF = 0x20;
  35.                 }
  36.                 if( flag == 0)
  37.                 {
  38.                         LED = 0;
  39.                 }
  40.         }
  41. }
复制代码
电路原理图:
另外,,485芯片是6LB184,单片机是5V单片机,因此485芯片控制引脚连接的也是 5V ,不知道有没有影响。波特率的初始化,我是从 STC 的下载程序上找到的。试了很多个初始化了。都不行

485.png (24.76 KB, 下载次数: 164)

这是485部分的原理图

这是485部分的原理图

作者: 51hei**1140    时间: 2020-6-9 16:35
你好!
1、单片机晶振采用的多少
2、上位机和单片机波特率要一致
3、485的DE控制要对
4、上位机485接收采用的什么模块
5、如需帮助,可以联系我
作者: MikeCai    时间: 2020-6-10 09:03
1)485 是半双工的,即,发送时,不能接收,所以max485 的RE,DE 不要接到 VCC ,另加一个读写控制脚来选择发送,接收;发送完毕,立即换为接收。
2)发送,接收方的波特率等要相同
作者: 饮酒作乐    时间: 2020-6-10 10:06
MikeCai 发表于 2020-6-10 09:03
1)485 是半双工的,即,发送时,不能接收,所以max485 的RE,DE 不要接到 VCC ,另加一个读写控制脚来选择 ...

只用来发送,不准备用来接收也不可以直接接VCC么
。还有就是A B口需要接上拉电阻和下拉电阻么?不接的话有什么影响,可不可以通过软件解决
作者: lichaooo    时间: 2020-6-10 13:25
120欧电阻呢
作者: 饮酒作乐    时间: 2020-6-11 13:36
lichaooo 发表于 2020-6-10 13:25
120欧电阻呢

短距离也需要匹配120Ω电阻吗?

作者: 饮酒作乐    时间: 2020-6-11 14:28
lichaooo 发表于 2020-6-10 13:25
120欧电阻呢

刚才焊上去试了。没用。问题不在这
作者: ^_^【练习^_^    时间: 2020-6-11 15:19
波特率是不是不同步,波特率不同步会收到乱码
作者: lsgzq    时间: 2020-6-11 18:05
串口芯片的2、3脚是收发控制脚,这个脚接收的时候必须是低电平,发送的时候必须是高电平,楼主把23脚直接接VCC,芯片处于发送状态,怎么能正常接收哪?
作者: 饮酒作乐    时间: 2020-6-16 08:05
已经解决了。原因是晶振没有起振。

作者: 饮酒作乐    时间: 2020-8-7 16:49
STC烧写程序时特别注意:选择使用内部时钟是默认勾选的。一定要仔细看
作者: yhy08090    时间: 2021-5-13 17:09
饮酒作乐 发表于 2020-6-16 08:05
已经解决了。原因是晶振没有起振。

这个怎么排查哦。我现在也是收到乱码
作者: 雪玉寐影    时间: 2022-5-25 16:08
RE_DE接VCC,那么整条485只有你这个站点可以发,别的所有站点都只能收!
作者: ZHAOBAO511    时间: 2022-5-25 16:21
有那种不需要控制脚的485IC
作者: 这一生只为你    时间: 2022-5-27 19:41
把AB两端的接线倒换一下试试,有可能是接错了。 这个必须得A接A,B接B
作者: laowang123222    时间: 2022-5-27 22:43
看看波特率设置对不对,还有就是485的供电电压
作者: pppoe1234567    时间: 2022-5-29 00:21
看下晶振是否起振芯片是否正常启动了,对一下上下位机的波特率。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1