首页 > 其他分享 >字符串信息检测原理代码剖析

字符串信息检测原理代码剖析

时间:2024-08-21 21:53:07浏览次数:12  
标签:Serial2 代码 RxDatas 剖析 while break 串口 字符串 RXDATE

想要用单片机识别一长串字符并执行对应指令,有两种办法:数组法和循环法

错误的实例:

if(RXDATE=='L')	
		{
			
				if(RXDATE=='E')
				{
					
						if(RXDATE=='D')
						{
							
								if(RXDATE=='1')
								{
									LED1=0;
								}
								if(RXDATE=='2')
								{
									LED2=0;
								}
								if(RXDATE=='3')
								{
									LED3=0;
								}
								if(RXDATE=='4')
								{
									LED4=0;
								}
								
							
							
						}
					
					
				}
				
			
		}


void UART_SER (void) interrupt 4 //串行中断服务程序
{
   
   

   if(RI)                        //判断是接收中断产生
     {
	  RI=0;                      //标志位清零
	  RXDATE=SBUF;                 //读入缓冲区的值
	 }

   if(TI)                        //如果是发送标志位,清零
     TI=0;
} 

该例子妄想用接受的一个一个字节做连续检测,实际上是行不通的,因为胺片及代码执行的速度极快,一般不到一us就一条代码,那检测完第一个字符为L第二个字符还没到就会出错,所以失去了原来的作用

下面是解决办法:

循环法:

if(RxDatas[0] == 0xAA && RxDatas[1] == 0xBB && RxDatas[2] == 0xCC)//串口返回名字属性
		{	
			while(1)
			{
				// Serial2_SendString("Num=%d\r\n");	
				//串口返回名字属性
				if(Serial2_GetRxFlag() == 1)			//检查串口接收数据的标志位
				{
					while(1)
					{
						if(Serial2_GetRxData()==0x00)
						{
							while(1)
							{
								if(Serial2_GetRxFlag() == 1)			//检查串口接收数据的标志位
								{
								Serial2_Getname(6);
								Delay_ms(200);
								break;
								}
							}
							break;
						}
						
						//
					}break;
				}
			}
		}

 数组法:

char square[50]=0;
for(pp=0;pp<50;pp++)
		{
		if(square[pp]=='L')	
		{
			
				if(square[pp+1]=='E')
				{
					
						if(square[pp+2]=='D')
						{
							
								if(square[pp+3]=='1')
								{
									LED1=0;
								}
								if(square[pp+3]=='2')
								{
									LED2=0;
								}
								if(square[pp+3]=='3')
								{
									LED3=0;
								}
								if(square[pp+3]=='4')
								{
									LED4=0;
								}
								
							
							
						}
					
					
				}
				
			
		}
		}
void UART_SER (void) interrupt 4 //串行中断服务程序
{
   
   
	if(KK==50)
	{
		KK=0;
	}
	
   if(RI)                        //判断是接收中断产生
     {
	  RI=0;                      //标志位清零
	  square[KK]=SBUF;                 //读入缓冲区的值
	 }
	 KK++;
   if(TI)                        //如果是发送标志位,清零
     TI=0;
} 

标签:Serial2,代码,RxDatas,剖析,while,break,串口,字符串,RXDATE
From: https://blog.csdn.net/2301_80317247/article/details/141335068

相关文章

  • 正则表达式可以匹配正确的字符串但是不能匹配小美的心
    高情商:省流极简版低情商:怎么连个例子都没有正则表达式常用元字符:. 匹配除换行符以外的任意字符\w 匹配字母或数字或下划线\s 四配任意的空白符\d 匹配数字\n 匹配一个换行符\t 匹配一个制表符^ 匹配字符串的开始$ 匹配字符串的结......
  • 代码随想录Day22
    77.组合给定两个整数n和k,返回范围[1,n]中所有可能的k个数的组合。你可以按任何顺序返回答案。示例1:输入:n=4,k=2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例2:输入:n=1,k=1输出:[[1]]提示:1<=n<=201<=k<=n正解......
  • 软件测试-web端测试-代码起步
    记录学习笔记第一步、导包web自动化测试常用selenium,这是必要的。fromseleniumimportwebdriver 第二步、确定要使用的浏览器浏览器有很多,常用Chrome,这里看你下载的webdriver是谁的,我用的是edge。用谷歌,那就把Edge改为Chrome,用火狐就改为Firefoxdriver=webdriver.Ed......
  • 华为OD机试 - 密码输入检测 字符串
    只在本地跑过,不确保一定对#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<string.h>#definesetbit(value,bit)(value=value|(1<<bit))intmain(void){charbuf[201];charout[201];inti=0;int......
  • 字符串学习笔记
    扩展kmp令z[i]代表i之后的字符串与原先字符串的最长公共前缀r为目前get到的最大位置,l为对应的左端点很明显的状态转移比如现在枚举到了i这个位置i在[l,r]的范围内,首先S[l,r]==S[1,r-l+1]于是S[i,r]==S[i-l+1,r-l+1]那么显然z[i]=min(z[i-l+1],r-i+1)不能超过长度假设z[......
  • 《代码整洁之道:程序员的职业素养》读后感
    概述工作即将满8年,如果算上2年实习的话,满打满算我已经走过将近10年的程序员编码生涯。关于SpringBoot知识点,关于微服务理论,也已经看过好几本书籍,看过十几篇技术Blog,甚至自己也写过相关技术Blog。无论是SpringBoot,还是微服务,这些我们都可以称之为编程职业硬技能。这些硬技能一......
  • 常用代码/工具放置
    \({\mathtt{1}}\).gcd(最大公因数)点击查看代码llgcd(lla,llb){ if(b==0)returna; returngcd(b,a%b);}\({\mathtt{2}}\).链式前向星点击查看代码inthead[100005],edgenum;structedge{intnext;intto;intw;};edgeedge[MAXN];voidadd......
  • 二叉树入门学习 优势对比 以及 完全二叉树c++代码的实现
    二叉树介绍文档一、概述二叉树是一种常见的数据结构,它是一种树形结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的基本概念如下:节点(Node):二叉树的基本单元,包含一个值以及指向左右子节点的引用。根节点(Root):树的顶端节点,没有父节点。叶子节点(Leaf):没有子节......
  • WebDriver API剖析----元素、鼠标、键盘的操作
    一、元素的操作1、清除元素的内容clear()方法用于清除元素中已有的内容。fromseleniumimportwebdriverfromtimeimportsleepfromselenium.webdriver.common.byimportBydriver=webdriver.Firefox()driver.get("https://www.baidu.com")driver.find_element(......
  • 文心快码 Baidu Comate 前端工程师观点分享:智能代码助手需要什么(二)
    本系列视频来自百度工程效能部的前端研发经理杨经纬,她在由开源中国主办的“AI编程革新研发效能”OSC源创会·杭州站·105期线下沙龙活动上,从一款文心快码(BaiduComate)前端工程师的角度,分享了关于智能研发工具本身的研发历程和理念。以下视频是关于【智能代码助手需要什么】的......