我刚刚写了,可以发送,但是用串口工具接收发现有时候是4个或者2个,虽然发送内容正确,但是接收的数据个数错了。求教
while(1)
{
while(flag)
{
for(j =0;j<4;j++)
{ SBUF = d[j];
}
}
}
void chuankou(void) interrupt 4
{
if(RI)
{ RI = 0;
flag = 1; }
else if(TI)
{ TI = 0;
if(j==3){flag=0;j=0;}
}
}
这是你发送的方法有问题,你发送一个字节 后 ,没有等待发送 完毕 就发送下一个字节
应该 检测 TI=1 后 清零 再,发送下一个字节。
可是我的串口中断里面有一个if语句用来判断TI的,然后再令TI=0。
我的思路是:用for循环发送四个字节的数据,每次发送一个字节进入串口中断,令TI=0,并检测j是否等于3,假如等于3意味着已经发送了四个字节,令flag=0,j=0
请问这样的思路是否正确,还是我上边的程序写错了,应该怎么改??谢谢。
要发送一个字节结束 后 才会进入串口中断,
你这样 还没有 串口中断,下一个字节 又发送了,这样就会 丢失 掉部分数据。
请问我在 SBUF = d[j] 后边加一个延时函数,这样修改吗??
我加了个delay()
void delay()
{
uchar x,y;
for(x=0;x<50;x++)
for(y=0;y<50;y++);
}
但是这次串口工具一直不停的接收一大堆数据。求解。
其实可以 去掉中断中的
else if(TI)
{ TI = 0;
if(j==3){flag=0;j=0;}
在主程序中这样试试
{
SBUF = d[j];
while(!TI);
TI=0;
}
一般不用延时,当然也能解决问题,可能会浪费一些时间。
有几个变量,都是8位的数据,想通过单片机串口发送出去,SBUF是不是每次只能发送一个8位的数据??请问如果想要将这几个数据发送出去要怎么做??
追答M
有几个变量,都是8位的数据,想通过单片机串口发送出去,SBUF是不是每次只能发送一个8位的数据??请问如果想要将这几个数据发送出去要怎么做??