找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1290|回复: 7
打印 上一主题 下一主题
收起左侧

请教一下这个单片机程序串口输出为什么会少一个字母

[复制链接]
跳转到指定楼层
楼主
#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"

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:807591 发表于 2021-8-19 10:19 | 只看该作者
自己仿真一下不就明白了
回复

使用道具 举报

板凳
ID:655518 发表于 2021-8-19 10:34 | 只看该作者
i=12改成i=13?
回复

使用道具 举报

地板
ID:892596 发表于 2021-8-19 10:44 | 只看该作者

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

改成while(i)

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

使用道具 举报

5#
ID:824490 发表于 2021-8-19 10:50 | 只看该作者
while(1)
        {
       for(i=0;i<12;i++)
           {
                SBUF=Chr_Send[i];
                while(!TI)
                TI=0
           }
}这样试试
回复

使用道具 举报

6#
ID:277550 发表于 2021-8-19 10:51 | 只看该作者
i==0 就不发送、下一次循环了
回复

使用道具 举报

7#
ID:386001 发表于 2021-8-19 11:11 | 只看该作者
在你的数据使用i前,你的i--,已经把i减1了,最简单的办法,把这句改了
SBUF=Chr_Send[12-i+1];或SBUF=Chr_Send[13-i];
回复

使用道具 举报

8#
ID:961122 发表于 2021-8-19 11:57 | 只看该作者
谢谢!刚开始学,感谢大家指点。先试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表