51单片机串口数据处理

鄙人刚开始研究单片机,想问一下关于串口处理数据的问题
首先,串口接受到一组16位数据,我该用什么存放,然后这个数据有帧头有帧尾,怎么判断接收完毕
还有就是我想要找出其中的某位拿来判断,应该怎么提取和判断,希望给一个参考程序,谢谢

可以基于时间间隔,也可以基于特定标头,或者二者结合。

【相关推荐】



  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7692727
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:基于51单片机,应用超声波、红外开关的自主行走小车
  • 您还可以看一下 李月喜老师的企业微信开发自建内部应用开发篇课程中的 开发文档如何阅读,如何寻求帮助,如何找到同行小节, 巩固相关知识点
  • 除此之外, 这篇博客: 51单片机按键的三种设计分析,即含按键消抖使用状态机法与延时方法、按键的按下松开设计以及按键的长按短按设计中的 四、按键的长按与短按 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    按键设计函数

    unsigned char key_read(){
    	unsigned int key_new;
    	unsigned char key_val;
    	
    	P44 = 0;P42 = 1;P35 = 1;P34 = 1;
    	key_new = P3;
    	P44 = 1;P42 = 0;
    	key_new = (key_new<<4)|(P3&0x0f);
    	
    	P42 = 1;P35 = 0;
    	key_new = (key_new<<4)|(P3&0x0f);
    	
    	P35 = 1;P34 = 0;
    	key_new = (key_new<<4)|(P3&0x0f);
    	
    	switch(~key_new){
    		case 0x8000: key_val = 4;break;
    		case 0x4000: key_val = 5;break;
    		case 0x2000: key_val = 6;break;
    		case 0x1000: key_val = 7;break;
    		case 0x0800: key_val = 8;break;
    		case 0x0400: key_val = 9;break;
    		case 0x0200: key_val = 10;break;
    		case 0x0100: key_val = 11;break;
    		case 0x0080: key_val = 12;break;
    		case 0x0040: key_val = 13;break;
    		case 0x0020: key_val = 14;break;
    		case 0x0010: key_val = 15;break;
    		case 0x0008: key_val = 16;break;
    		case 0x0004: key_val = 17;break;
    		case 0x0002: key_val = 18;break;
    		case 0x0001: key_val = 19;break;
    		default:key_val = 0;break;
    	}
    	return key_val;
    }
    

    中断计时函数

    void time1() interrupt 3{//中断服务函数
    	key_num = key_read();
    	if(key_num == key_old){
    		key_count++;
    	}else{
    		key_count=0;
    	}
    	key_old = key_num;
    }
    

    使用示例

    		if(key_num == 4 && key_count>=800)//长按800毫秒设计
    			segbuff[0] = 0;
    		if(key_num == 5)//短按设计
    			segbuff[0] = 1;
    		if(key_num == 8 && key_count>=400)//长按400毫秒设计
    			segbuff[0] = 2;
    

    设计思路
    1.获取按键的值;
    2.判断按键的值与上一次按键的值是否相等,相等则计时开始;不相等则计时为0,等待计时;


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^