单片机发送数据给上位机第一个字符总是发了两遍

2019-07-18 12:24发布

这是我的程序,这是哪里的问题?感觉程序很对呀。
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
uchar  buff[]={'1','2','3','4',};
void delay(uint z)
{
  uint x,y;
  for(x=0;x<z;x++)
    for(y=0;y<110;y++);
}
void comm(uchar *parr,uchar len)//串口数据发送函数
{
       uchar i;

         for(i=0;i<len;i++)
         {
          SBUF=*parr ++; //发送数据
                   delay(2000);
         if(ti)                        //如果是发送标志位,清零
     TI=0;

                 }                //标志清零

}
void main (void)
{
         
        SCON  = 0x50;                        /* SCON: 模式 1, 8-bit UART, 使能接收         */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
    TH1   = 0xFD;               /* TH1:  reload value for 9600 baud @ 11.0592MHz   */
    TR1   = 1;                  /* TR1:  timer 1 run                          */
    EA    = 1;                  /*打开总中断*/
    ES    = 1;
                          delay(200);               
    comm(buff,4);

        while(1) {}       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
武力戡乱
1楼-- · 2019-07-18 14:57
恭喜楼上,答对了!
他的意思是
while(!TI);
可以参考这个http://bbs.elecfans.com/jishu_472128_1_1.html
当然,如果你非要追问为什么吗。。。

楼上接着回答,走喽!
zhuangxiuling
2楼-- · 2019-07-18 20:51
xianyoudian 发表于 2015-3-25 19:23
建议    检查循环

能不能麻烦你具体说说是哪里循环出了问题啊?真的看了好久,还是第一个字符一直发两遍。拜托拜托。
zhuangxiuling
3楼-- · 2019-07-18 21:11
武力戡乱 发表于 2015-3-25 22:26
恭喜楼上,答对了!
他的意思是
while(!TI);

什么意思,是if(TI)改为while(!TI)吗?真的很想知道这是怎么回事。
武力戡乱
4楼-- · 2019-07-18 23:10
zhuangxiuling 发表于 2015-3-31 21:44
什么意思,是if(TI)改为while(!TI)吗?真的很想知道这是怎么回事。

TI = 1:发送完毕
那TI = 0;表示没有触发标记,没有发送完毕。
whil(!TI)不就是等待发送完毕吗!

一周热门 更多>