微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口程序,字符串可以正常显示,但是不能直接定义字符

串口程序,字符串可以正常显示,但是不能直接定义字符

时间:10-02 整理:3721RD 点击:
刚刚做一个简单的串口程序,就是不停的往电脑发数据,程序如下(PS 当用字符串数组 可以正常显示,但是直接定义一个字符,为什么不行?)
#include<reg51.h>
void UsartConfiguration();
void main()
{
    unsigned char x,y;
   //int i;
         x='h';
         y='j';
        while(1)
        {  
                 SBUF=x;
                while(!TI);                         //等待发送数据完成
            TI=0;
                SBUF=y;
                while(!TI);                         //等待发送数据完成
            TI=0;            
        }
}
void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
        TI=0;
}

串口助手 显示一堆乱码?为什么用字符数组 可以正常显示,用字符就不行啊?

while(1)
{
  if(RI)
  {
    RI=0;
        SBUF=x;
        while(!TI);
        TI=0;
        SBUF=y;
        while(!TI);
        TI=0;
  }
}

请问判断RI 这是为啥呢?

  1. #include<reg52.h>
  2. void UsartConfiguration();
  3. void delay20ms()
  4. {
  5.   unsigned int x,y;
  6.   for(x=20;x>0;x--)
  7.   for(y=110;y>0;y--);
  8. }
  9. void main()
  10. {
  11.     unsigned char x,y;
  12.         x='h';
  13.         y='j';
  14.         UsartConfiguration();
  15.         while(1)
  16.         {  
  17.                  SBUF=x;
  18.             while(!TI);                         //等待发送数据完成
  19.                 TI=0;
  20.             SBUF=y;
  21.             while(!TI);                         //等待发送数据完成
  22.                 TI=0;
  23.                 delay20ms();
  24.         }
  25. }

  26. void UsartConfiguration()
  27. {
  28.         SCON=0X50;                        //设置为工作方式1
  29.         TMOD=0X20;                        //设置计数器工作方式2
  30. //        PCON=0X80;                        //波特率加倍
  31.         TH1=0XFD;                                //计数器初始值设置,注意波特率是9600的 晶振11.0592MHz
  32.         TL1=0XFD;
  33. //        ES=1;                                                //打开接收中断
  34. //        EA=1;                                                //打开总中断
  35.         TR1=1;                                        //打开计数器
  36. //        TI=0;
  37. }

复制代码

1.串口速率低,增加延时函数大约20ms
2.实验板为STC89C52,故头文件改为reg52.h
3.计数器初值改为0xFD,波特率是9600的  实验板晶振11.0592MHz
4.串口助手截图。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top