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;
	}
 }
}

 

posted @ 2015-05-12 15:11  Burden  阅读(410)  评论(0编辑  收藏  举报