串口接收思路

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();         //调用数据判断这个函数

        }       

}

 

你可能感兴趣的:(串口)