51单片机串口接收数据包函数 给我个标准的吧

跪求标准的51单片机接收函数自己写了几个感觉总有点BUG丢包啊还有串口中断错误啊跪求一个接收函数和保存至缓冲区的谢谢大家... 跪求 标准的51单片机 接收函数 自己写了几个 感觉总有点BUG 丢包啊 还有串口中断错误啊 跪求一个接收函数和保存至缓冲区的 谢谢大家 展开
 我来答
匿名用户
2012-10-15
展开全部
惜忆泪情 的方式不可取。将收到的数据显示到数码管上,如果是动态扫描,那麽有一个问题,扫描间隔会有个几ms,这就会影响下一个数据进入中断,因此带来丢包问题。如果是静态显示,不知道有何意义。

一般类似于这种情况,建议你建立个数组存放。
#include <reg51.h>

#define DataLen 10 //定义为10个数据为一帧,产生一次标志位。
unsigned char Data[DataLen];
unsigned char Datai; //用于记录当前接收了多少
bit Flag; //产生接收完成标志位。
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}

void main(void)
{
InitUART();
while(1)
{
if(Flag)
{
Flag=0;
//表示 收到十个数据了。你该干啥就干啥,在这里加入你的代码。
}
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
Data[Datai++]=SBUF;
if(Datai==DataLen)
{
Flag=1;
Datai=0;
}
}
}

这是一种方式,不过一种具有协议的话,都会加上一个定时器,就是你一开始接收第一个数据开始,我就开始计时,每进来一个,我就清零一次定时器,如果定时大于5ms我就认为你收完了,再判断数据包的长度,如果长度不够,就表示 丢包了。 协议上一般需要用到这种方式,叫接收超时计数。

这个代码我一直在用,没什么问题。

希望可以帮到你,有什么问题欢迎一起探讨。
浙江启扬智能科技有限公司
2019-05-20 广告
目前,ARM开发板已经逐渐替代单片机。虽然它们在应用领域上很类似,但是单片机能够完成的ARM开发板可以完成的更好,ARM开发板能够完成的单片机未必能够完成。ARM开发板每个部分分工明确,多功能处理问题,稳定性非常高,整体运行效率高,当然成本... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
黄石佳诚家电维修
推荐于2016-04-23 · TA获得超过1427个赞
知道小有建树答主
回答量:1559
采纳率:93%
帮助的人:606万
展开全部
//初始化串口
void init_serialcomm(void)
{
SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收
PCON=0x00;
ES=1; //开串口中断
TMOD=0x21; //定时器工作于方式2,自动装载方式
TL1=0XFD;
TH1=0XFD;
TR1=1;
EA=1;

}
//中断服务程序
void serial () interrupt 4 using 3

{
if(RI)
{
RI=0;//清中断标志
ch=SBUF;//读取接收寄存器
ch=SBUF;
leddisp(ch);//调用数码管显示子程序,将接收到的数据显示到数码管上
}
if(TI)
{
TI=0;//清发送标志位
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杜I少
2012-10-09 · 超过18用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:27.6万
展开全部
void init() //中断初始化
{
TMOD=0x20;
TH1=0xfd; //晶振11.0592下,波特率9600
TL1=0xfd;
SCON=0x50;
ES=1;
EA=1;
TR1=1;
}
void send(unsigned char dat)//发送数据
{
SBUF = dat;
while(!TI);
TI = 0;
}
void serie() interrupt 4 //中断处理接收
{
int cou=0xff;
if(RI==1)
{
cou=SBUF;
RI=0;
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式