蓝桥杯单片机————不定长数据的收发

本文介绍了在串口通信中如何通过计时变量和定时中断来判断数据帧的结束,提供了一个代码示例,包括串口中断服务函数和定时器处理函数,以确保数据的完整接收。
摘要由CSDN通过智能技术生成

关于串口数据的接收,一大难点就是如何知道要接收的一帧数据结束。解决办法如下:

可以通过设计一个计时变量,这个计时变量在一个一毫秒的定时中断里面计数,当接收到一位数据时,把计时变量清零并让计时变量开始计数。这是,只要一直有数据需要接收,这个计时变量就一直为零。直到这一帧数据接收完毕,这个计时变量才会处于一直计数状态。这时,我们只需要判断这个计时变量是否超过某一个阈值,我们就可以判断这一帧数据是否接收完毕。建议这一个阈值设置为10。

一、代码示例

串口中断服务函数

void Sevice_Uart() interrupt 4
{
	if(RI == 1)
	{
		EA = 0;
		RI = 0;
		value = SBUF;
		RX_str[count_RX++] = value;//将接收到的数据存入数组中
		stat_RX = 1;//表示接收到一位数据,让计时变量开始计时
		num = 0;//计时变量清零
		EA = 1;
	}
}
void Sevece_timer0() interrupt 1
{
	TL0 = 0x20;		//设置定时初值
	TH0 = 0xD1;		//设置定时初值
	if(stat_RX == 1)//表示接收到一位数据
	{
		num++;//开始计数
		if(num == 10)//判断是否到达阈值
		{
			num = 0;
			stat_RX = 0;
			RX_str[count_RX] = '\0';//末尾加上结束符号
			count_RX = 0;
			stat_over = 1;//表示一帧数据以接收完成
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值