51单片机串口发送数据问题

我用单片机的串口向上位机发送指令,不过当我只发一次的时候上位机接收缓冲区里什么都没有,之后连续发就可以响应了,但我只想发一次,不想连续发,求高手指点,我的代码如下,这样写就什么也收不到,不知道怎么回事。
flag=0;
while(1)
{
if(flag==0)
{
SBUF=0x31;
while(!TI);
TI=0;
flag=1;
}
}

第1个回答  2013-12-30
问题说的还是不太明白,你是第一个数据之后,连续发送后的数据和第一个数据都正常了,还是第一个数据丢失了,你上位机用的串口软件是你自己写的?还是串口调试助手之类的工具,如果是自己写的,有可能是上位机串口程序不对
还有就是你串口配置和数据发送的时序不对追问

上位机是用的串口助手,我自己写了个和串口调试助手显示的一个样子,当我把那个flag标志位去掉的时候是可以连续发送的,但是加上那个flag为了只发送一次,结果就什么都没有了。我的配置指令如下
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //波特率是4800的
TL1=0XF3;
TR1=1;

追答

你在if语句完毕之后加一个while(1)试试,我估计可能是因为你的程序跑飞了
不对,说错了,51我很久没用了,里面的东西都忘了,有些看不懂了,你在前面加个延时能有用?

第2个回答  2013-12-30
程序没什么问题。可能与操作顺序有关,你用一个键开控制试试。可能第一个发送的数被漏掉了。追问

我估计是被漏掉了,那怎么才能保证不漏掉呢?

追答

程序开始加几百毫秒延时,电脑连接好后,再开单片机电源启动单片机。

第3个回答  2013-12-30
把完整程序贴出来,只有一部分怎么分析啊
相似回答