找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3510|回复: 1
打印 上一主题 下一主题
收起左侧

单片机超时接收程序完成

[复制链接]
跳转到指定楼层
楼主
ID:77367 发表于 2015-4-19 02:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  超时接收完成。在一些没有结束位和不固定长度的情况下可以使用。可移植各平台单片机。- =。~~


  1. #define MaxLen    255               //最大长度

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

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

  19.             BufLen=0;                       //长度清零
  20.             RecFinish=DISABLE;              //接受完成
  21.         }
  22.     }
  23. }

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

  35. }
复制代码






测试结果如下:
  

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:371527 发表于 2019-1-29 13:15 | 只看该作者
串口等待时间超时程序,不错!加入crc更好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表