新手上路MCU 发表于 2018-6-11 10:40:31

串口通信显示乱码

#include"reg52.h"
typedef unsigned char uchar;
uchar flag,i,dat;
uchar code table[]="I LOVE YOU";

void Ustarint()
{
        TMOD=0x20;
        TH1=0xfd;                //波特率9600
        TL1=0xfd;
        TR1=1;
    SM0=0;
        SM1=1;
        REN=1;
       
        ES=1;
        EA=1;
}
void main()
{
        Ustarint();
        while(1)
        {
          if(flag==1)
          {
                  ES=0;
                for(i=0;i<10;i++)
                {
                        SBUF=table;
                        while(!TI);
                        TI=0;
                }
                SBUF=dat;
                while(!TI);
                TI=0;
                ES=1;
                flag=0;


          }
        }
}
void UStar() interrupt 4
{
   
   dat=SBUF;
   RI=0;
   flag=1;


}
串口助手输入I LOVE YOU 显示乱码

HC6800-ES-V2.0 发表于 2018-6-12 07:21:17

如果你的晶振是12M,则最大只能4800的波特率,且必须加倍。

wx_JUGMqXG2 发表于 2019-7-29 17:41:54

HC6800-ES-V2.0 发表于 2018-6-12 07:21
如果你的晶振是12M,则最大只能4800的波特率,且必须加倍。

并非最大4800吧。而且市面上大多的开发教程都是用9600的波特率。

wx_JUGMqXG2 发表于 2019-7-29 17:43:56

同样遇到这个问题,换其他型号的单片机就不会,我用了一下以前的开发板,反而可以。新入手普中的开发板,研究不深。

wx_JUGMqXG2 发表于 2019-7-29 17:59:47

刚刚尝试了一下,可以这么修改:

源程序:

void Ustarint()
{
      TMOD=0x20;
      TH1=0xfd;                //波特率9600
      TL1=0xfd;
      TR1=1;
    SM0=0;
      SM1=1;
      REN=1;
      
      ES=1;
      EA=1;
}
********************************
修改为:
void UsartInit()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X00;                        //波特率不加倍
        TH1=0XFf;                                //计数器初始值设置,注意波特率是9600的
        TL1=0XFf;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}
页: [1]
查看完整版本: 串口通信显示乱码