这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 单片机超时接收程序完成

共1条 1/1 1 跳转至

单片机超时接收程序完成

高工
2015-07-07 10:12:04     打赏
#define MaxLen    255               //最大长度

u16 RecTimNum=0;                    //接收计时
FunctionalState RecStart=DISABLE;   //接收启动标志位
FunctionalState RecFinish=DISABLE;  //接收完成标志位
u8 ReceiveBuf[MaxLen]={0};          //接收缓冲区
u8 BufLen=0;                        //接收长度

/* 超时接收完成函数 定时器中断1ms进入一次 */
void Rec_TimOut(void)
{
    if(RecStart==ENABLE)
    {
        if(++RecTimNum==5)                  //5ms没有接收到数据默认接收完成
        {
            RecTimNum=0;                    //计时清零
            RecStart=DISABLE;               
            RecFinish=ENABLE;               //接收完成标志位置位
            //接收完成处理函数
            Uart_Send(ReceiveBuf,BufLen);   //本段为将接收到的数据重新发送回串口。回环测试

            BufLen=0;                       //长度清零
            RecFinish=DISABLE;              //接受完成
        }
    }
}

/* UART接收函数 放在串口接收中断*/
void Uart_Receive()
{
    u8 temp;
    if(RecStart==DISABLE)           //第一次进入串口中断 
    {
        RecStart=ENABLE;            //接收启动标志
    }
    RecTimNum=0;                    //每次重新进入串口接收中断时,清零计数,表示还未接收完成
    temp = UART_ReceiveData8();    //从缓冲区取出数据
    ReceiveBuf[BufLen++]=temp;      //接收缓冲区

}



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]