51单片机 串口发送几组数据

请问51单片机如何发送几个8位的数据,比如FF,FE,FD……??

单片机 串口发送多字节数据,可以一个一个的发送,即
发送 一个 字节,等待发送 完毕,接着发送 下一个字节,再等待发送 完毕。
再发送 一个 字节,- - -
接收也是一样,一个一个接收,
一般 多字节发送 与 接收,可以设计一个 通讯 协议,如 发送
指令码 - 数据1 - 数据2 - - - 数据n - 校验码 - 结束码
这样的 通讯 可以不出错误。追问

我刚刚写了,可以发送,但是用串口工具接收发现有时候是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;
}
一般不用延时,当然也能解决问题,可能会浪费一些时间。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-18
把你的程序列出来。。追问

有几个变量,都是8位的数据,想通过单片机串口发送出去,SBUF是不是每次只能发送一个8位的数据??请问如果想要将这几个数据发送出去要怎么做??

追答

M

第2个回答  2013-02-18
没明白你是什么意思?追问

有几个变量,都是8位的数据,想通过单片机串口发送出去,SBUF是不是每次只能发送一个8位的数据??请问如果想要将这几个数据发送出去要怎么做??