if_else高级工程师 2022-08-28 10:27 采纳率: 33.3%
浏览 39
已结题

单片机串口通信中的字符串输出问题

为什么串口通信中不用while(TI)输出的字符串就会出现输出字符串乱码

# include "reg52.h"
# include "intrins.h"

sfr AUXR = 0x8e;

void UartInit()
{
    SCON |= 0x50;
    PCON &= 0x00;
    AUXR |= 0x01;
    
    TMOD |= 0x20;
    
    TL1 = 0xFD;
    TH1 = 0xFD;
    
    TCON = 0x40;    
}

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

    _nop_();
    _nop_();
    i = 43;
    j = 6;
    k = 203;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}




void startputzifuchuan(char *str)
{
    while(*str != '\0')
    {
        SBUF = *str;
        while(!TI);
        TI = 0;
        ++str;
}
}
void main()
{
    UartInit();
    while(1)
    {
        Delay1000ms();
        startputzifuchuan("hello word\r\n");
}
}

img

# include "reg52.h"
# include "intrins.h"

sfr AUXR = 0x8e;

void UartInit()
{
    SCON |= 0x50;
    PCON &= 0x00;
    AUXR |= 0x01;
    
    TMOD |= 0x20;
    
    TL1 = 0xFD;
    TH1 = 0xFD;
    
    TCON = 0x40;    
}

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

    _nop_();
    _nop_();
    i = 43;
    j = 6;
    k = 203;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}




void startputzifuchuan(char *str)
{
    while(*str != '\0')
    {
        SBUF = *str;
        ++str;
}
}
void main()
{
    UartInit();
    while(1)
    {
        Delay1000ms();
        startputzifuchuan("hello word\r\n");
}
}

img

  • 写回答

1条回答 默认 最新

  • qllaoda 2022-08-28 10:43
    关注

    TI是发送完成标志,你不等待前面发完就往串口里塞新的数据,当然就乱了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月12日
  • 已采纳回答 9月4日
  • 创建了问题 8月28日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?