找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机串口接受数据有乱码

查看数: 6804 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-9-14 21:02

正文摘要:

各位大佬,一个简单的串口发送程序,代码如下 void main() {    UartInit();    while(1)    {          UsartSend(12345);      &nbs ...

回复

ID:117433 发表于 2017-9-21 11:22
有乱码是正常的,只要不是每次都是乱码,我的经验就是,在发送端把要发的数据*2发送,然后在接收断做个判断,错的就直接舍去,然后就留下没有乱码的了
ID:197626 发表于 2017-9-15 15:36
STCSTC 发表于 2017-9-15 12:43
#include
unsigned char SendTemp[7];

谢谢大佬,看了你的程序后,我就把for循环改了一下,把for(i=6;i>=0;i--)改成了for(i=0;i<7;i++)然后就能正确就收数据了,但是我还是不明白,这两个明显是一个意思呀,为什么结果却不同呢
ID:197626 发表于 2017-9-15 15:16
笨笨兔 发表于 2017-9-15 09:58
你看一下波特率,包括串口助手

晶振是11.0592MHz,波特率4800
ID:233291 发表于 2017-9-15 12:43

重写了完整的代码,试一下

本帖最后由 STCSTC 于 2017-9-15 13:01 编辑

#include<reg51.h>
unsigned char SendTemp[7];


void UartInit(void)                //4800bps@11.0592MHz
{
     TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFA;
    TL1 = TH1;
    PCON = 0x00;
    TR1 = 1;
}

void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 180;
        j = 73;
        do
        {
                while (--j);
        } while (--i);
}


void UsartSend(unsigned int temp)
{
  unsigned char i;
  SendTemp[0]=temp/10000 + 48;                         //百位
  SendTemp[1]=temp % 10000 / 1000 + 48;                 //十位
  SendTemp[2]=temp % 1000 / 100 + 48;                 //个位
  SendTemp[3]='.';
  SendTemp[4]=temp % 100 / 10 + 48;                         //十分位
  SendTemp[5]=temp % 10 + 48;                                 //百分位
  SendTemp[6]='\n';

  for(i=0;i<7;i++)
  {

       SBUF=SendTemp;
           while(!TI);                                   //等待发送完成
           TI=0;

  }
}

void main()
{
   UartInit();
   while(1)
   {
      UsartSend(12345);
     Delay100ms();
   }
}

串口发送.JPG (15.48 KB, 下载次数: 57)

串口发送.JPG
ID:158375 发表于 2017-9-15 09:58
你看一下波特率,包括串口助手
ID:158375 发表于 2017-9-15 09:53
你用的是多少 Mhz 的晶体呢?
估计是波特率不合适。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表