• C ~ 一个串口接收思路


    void uart_rx_isr(void) //接收中断函数
    {
            uchar c;       
            c=SBUF;//c等于接收的字节;
            switch (recv_state)
            {
                    case 0:
                    if (c==0x02) // 是数组第一字节
                    {
                            recv_state=1; // 进入下一个状态
                    }
                    else
                            recv_state=0; // 回到初始状态
                    break;
                   
                    case 1:
                    if (c!=0xff)  // 是数组第二字节          拢共 3位数据  中间这位 为数据位 就不进行校验判断了
                    {
                            recv_state=2; // 进入下一个状态
                            Rx_Data=SBUF;  //把 这个数据 纪录下来 作为 后面的判断
                    }
                    else
                    {
                            recv_state=0; // 回到初始状态
                    }
                    break;
                   
                    case 2:
                    if (c==0x03)   // 是数组第三字节
                    {
                            // recv_state=3; // 进入下一个状态
                              Flag=1;
                            recv_state=0; // 回到初始状态
                     }
                    else
                    {
                            recv_state=0; // 回到初始状态
                    }
                    break;
            }
    }
    
    void UART_interrupt() interrupt 4
    {
            if(RI==1)//如果接收了数据(RI会置1)
            {
                    RI=0; //先清零,下次可以在接收数据
                    uart_rx_isr();         //调用数据判断这个函数
            }       
    }

     串口数据串位后进行排列

    void RecvDataDispose(uint8_t *Buff)
    {
    	uint8_t i=0;
    	uint8_t TempBuff[16]={0};
      for(i = 0;i<16;i++)
    	 {
    		if(i<=12)
    		{
    			if((DisposeData[i] == 0xAA)&&(DisposeData[i+1] == 0xBB)&&(DisposeData[i+2] == 0xCC)&&(DisposeData[i+3] == 0xDD)) //Ö¡Í·³öÏÖ
    			{
    				memcpy(TempBuff,DisposeData+i,16-i);
    				memcpy(TempBuff+16-i,DisposeData,i);
    				memcpy(FinalData,TempBuff,16);
    				break;
    			}
    	  }
    		else 
    		{
    			memcpy(TempBuff,DisposeData+13,3);
    			memcpy(TempBuff+3,DisposeData,13);
    			memcpy(DisposeData,TempBuff,16);
    			for(i=0;i<=12;i++)
    			{
    				if((DisposeData[i] == 0xAA)&&(DisposeData[i+1] == 0xBB)&&(DisposeData[i+2] == 0xCC)&&(DisposeData[i+3] == 0xDD)) //Ö¡Í·³öÏÖ
    				{
    					memcpy(TempBuff,DisposeData+i,16-i);
    					memcpy(TempBuff+16-i,DisposeData,i);
    					memcpy(FinalData,TempBuff,16);
    					break;
    				}
    		   }
    			break;
    	}
     }
    }
    
  • 相关阅读:
    扩展中国剩余定理
    bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
    THUSC2017
    bzoj 4521: [Cqoi2016]手机号码
    bzoj 4871: [Shoi2017]摧毁“树状图”
    bzoj 2300 : [HAOI2011]防线修建
    bzoj 3853 : GCD Array
    HEOI 2017 游记
    bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机模板
    bzoj 4310 跳蚤
  • 原文地址:https://www.cnblogs.com/einstein-2014731/p/4497379.html
Copyright © 2020-2023  润新知