当前位置: 代码迷 >> 单片机 >> 串口接收到的数据不正确,该怎么解决
  详细解决方案

串口接收到的数据不正确,该怎么解决

热度:149   发布时间:2016-04-28 16:21:26.0
串口接收到的数据不正确
我用串口调试助手发00   01   02   03,但接收到的是A0   B0   A4   C0等一些乱码,请教各位大侠!!

我的程序是C写的,用keil编译

#include   <at89x51.h>
#define   uint   unsigned   int
#define   uchar   unsigned   char

uint   i=0;
uchar   data   astring[10];

void   main()
{
    TMOD=0x20;       //初始化串口
    TL1=0xfd;
    TH1=0xfd;
    SCON=0xd8;
    PCON=0x80                                                                                                                   ;
    TR1=1;

    for(i=0;i <10;i++)         //接收数据
    {
        while(RI==0);
              RI=0;  
        astring[i]=SBUF;  
    }

  for(i=0;i <10;i++)             //发送数据
  {
      SBUF=astring[i];
      while(TI==0);
        TI=0;
    }
  TR1=0;
}




------解决方案--------------------
根据晶振频率计算你的波特率。
单片机的Rx和Tx不要直接连RS232.........估计你不会犯这样的错误。

可以一步一步找出原因:
单片机复位后先让它发送一个字母,比如“A”,以便测试你的发送是否正确,注意不要采用断电/上电的方式使单片机复位,这样的话PC会首先收到一个乱码;只要用一把镊子连一下复位端脚就可以了。
发送正确了,才可以继续测试你的接收。

你的问题是调试方法问题,过几年就有经验了,都是这么走过来的,多努力啊。
------解决方案--------------------
看你的设置:
1、你选择了串行工作方式3,它是11位的,1起始位、9数据位、1停止位,你串口助手设置得对吗
2、波特率对吗,用的晶振是多少,算错没有?
3、接线对吗,这看似简单,呵呵
4、用中断,把书看看
希望对你有所帮助
  相关解决方案