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

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条回答
武力戡乱
2019-07-18 23:10
zhuangxiuling 发表于 2015-3-31 21:44
什么意思,是if(TI)改为while(!TI)吗?真的很想知道这是怎么回事。

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

一周热门 更多>