#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;