当前位置: 代码迷 >> 单片机 >> 连续发送SBUF=1;SBUF=2;如何串口助手只收到2?求大神赐教
  详细解决方案

连续发送SBUF=1;SBUF=2;如何串口助手只收到2?求大神赐教

热度:204   发布时间:2016-04-28 14:43:03.0
连续发送SBUF=1;SBUF=2;怎么串口助手只收到2?求大神赐教
#include<reg52.h>
bit r,t;
unsigned char d,i;
void main()
{
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
TR1=1;

SM0=0;
SM1=1;
REN=1;
ES=1;

EA=1;

r=0;t=0;d=0;i=1;


while(1)
{
if(r==1)
{
SBUF=2;
                         SBUF=1;
        r=0;
t=0;
}
}
}
void ser() interrupt 4
{
if(RI==1)
{
RI=0;
r=1;
d=SBUF;
}
else
{
TI=0;
t=1;
}
}
------解决思路----------------------
SBUF=2;//发送需要时间,
 SBUF=1;//SBUF正在发送上一个数据,SBUF不接受数据了,无法发送,串行中断是让你协调这种关系的
------解决思路----------------------
发送需要时间 判断发送完成第一个数据之后 再发送到第二个数据
------解决思路----------------------
改一下,每次发送数据后等候发送完成再继续
while(1)
{
    if(r==1)
    {
        SBUF=2;
        while (t == 0);
        t = 0;
        SBUF=1;
        while (t == 0);
        r=0;
        t=0;
    }
}

------解决思路----------------------
1 你是在使用硬件串口,数据送到缓冲区后CPU就去做其它事了,所以要加个while语句让CPU等候发送结束
2 第一次数据不对可能是中断有误触发,试试在中断里不要用else而用if(TI==1),不行的话在发送第一个数据前加一个 t=0;