标题: 请教关于STC89C52RC的串口高速发送数据问题 [打印本页]

作者: TEC    时间: 2022-1-28 01:41
标题: 请教关于STC89C52RC的串口高速发送数据问题
本帖最后由 TEC 于 2022-1-28 02:00 编辑

在测试上位机接收STC89C52RC单片机高速发送字节数据准确率的时候,发现一个现象,描述如下:
1、结尾没有延时(0xff自减到0),结束字节不是'\n',上位机显示的是乱码,16位显示有规律,波特率降到1200也不行。
2、结尾有延时(短了不行,0xff自减到0可以),结尾发送的不管是不是'\n',上位机都能正常显示字符。
3、结尾发送的是'\n',有没有延时,上位机都可以正常显示字符。
这是怎么回事呢?我在aduc7061板子上也会遇到同样的问题,aduc7061需要0x5ff自减到0的延时。
  1. #include<reg52.h>
  2. void usart_init()
  3. {
  4.         TMOD=0x20;
  5.         TH1=0xfd;
  6.         TL1=0xfd;
  7.         SM0=0;
  8.         SM1=1;
  9.         REN=1;
  10.         ES=1;
  11.         EA=1;
  12.         TR1=1;
  13. }
  14. void main()
  15. {
  16.         unsigned int z;
  17.         usart_init();
  18.         while(1)
  19.         {
  20.                 //z=0xff;//延时初值
  21.                 ES=0;
  22.                 TI=0;
  23.                 SBUF='a';
  24.                 while(!TI);
  25.                 TI=0;
  26.                 SBUF='b';
  27.                 while(!TI);
  28.                         TI=0;
  29.                 SBUF='c';
  30.                 while(!TI);
  31.                         TI=0;
  32.                 SBUF='d';
  33.                 while(!TI);
  34.                         TI=0;
  35.                 SBUF='e';
  36.                 while(!TI);
  37.                         TI=0;
  38.                 SBUF='g';
  39.                 while(!TI);
  40.                         TI=0;
  41.                 SBUF='h';
  42.                 while(!TI);
  43.                 TI=0;
  44.         //        SBUF='\n'; //加结束符,正常显示
  45.         //        while(!TI);
  46.         //        TI=0;
  47.                 ES=1;
  48. //        while(z--);//加延时,显示正常。
  49.         }
  50. }
复制代码






作者: lkc8210    时间: 2022-1-28 10:44
代码1没问题啊~




作者: TEC    时间: 2022-1-28 13:42
lkc8210 发表于 2022-1-28 10:44
代码1没问题啊~

哦,谢谢。我又试了一下,在其中一块单片机上有问题,这块单片机烧完程序后提示芯片可能是翻新的。在另外89C52RC、89C52上测试是好的。
作者: 188610329    时间: 2022-1-28 19:38
STC89C52RC, 用40MHz 晶振,单片机设置为6T模式,串口设置 SCON = 0x90; (模式2)  加上 PCON里面设置串口速率倍频,最终串口速率达到 2.5MHz  连续发送信息到电脑,无任何乱码。(用的还是杜邦线)

所以,你这问题,最大的可能,要么波特率计算错误,要么电脑端串口助手有问题,要么就是硬件问题。




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