标题: 请教一下这个单片机程序串口输出为什么会少一个字母 [打印本页]

作者: litingkun    时间: 2021-8-19 10:03
标题: 请教一下这个单片机程序串口输出为什么会少一个字母
#include <reg51.h>
void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
        AUXR &= 0xFB;                //定时器2时钟为Fosc/12,即12T
        T2L = 0xE8;                //设定定时初值
        T2H = 0xFF;                //设定定时初值
        AUXR |= 0x10;                //启动定时器2
}
void main(void)
{
UartInit();
int i;
unsigned char Chr_Send[12]={"Hello World!"};
while(1)
        {
        i=12;
                while(i--)
                {
                SBUF=Chr_Send[12-i];
                while(!TI)
                TI=0
                }
}
// 些程序运行后只显示 “ello world!\0"


作者: szb314    时间: 2021-8-19 10:19
自己仿真一下不就明白了
作者: qiezi12318    时间: 2021-8-19 10:34
i=12改成i=13?
作者: qiangtech    时间: 2021-8-19 10:44

从上图可知,你是从CHr_Send[1]开始发送,当然丢掉了个H.

改成while(i)

  SBUF=CHr_Send[12-i];
  while(!TI);
  TI=0;
  i--;

作者: 名字不是重点    时间: 2021-8-19 10:50
while(1)
        {
       for(i=0;i<12;i++)
           {
                SBUF=Chr_Send[i];
                while(!TI)
                TI=0
           }
}这样试试

作者: devcang    时间: 2021-8-19 10:51
i==0 就不发送、下一次循环了
作者: sustlixin    时间: 2021-8-19 11:11
在你的数据使用i前,你的i--,已经把i减1了,最简单的办法,把这句改了
SBUF=Chr_Send[12-i+1];或SBUF=Chr_Send[13-i];
作者: litingkun    时间: 2021-8-19 11:57
谢谢!刚开始学,感谢大家指点。先试试。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1