51单片机串口通信的帧数据接收
2015-12-12 21:35
176 查看
首先定义一个数据帧格式,Header :{ 0xAA 0x55} type:{ 0x01 | 0x02 | 0x03 } length:{ N } body :{____n个字节的数据___ }
数据的格式就是上面的定义 Header 为帧头 标记一个数据帧的开始,type 为类型 用来识别数据的类型 ,Length为长度标记 用来识别是否收完一帧的数据;
这次的目的是为了获取来自PC端串口传来的汉字字模数据 —— 一条长为32字节的数据,所以定义N = 32;类型 因为是第一个要用到的数据就先使用type=0x01
现在确定的格式 一帧数据 大概是
当一个数据发来单片机进入中断程序开始接收数据
第一张是LabView上的模拟显示第二张是proteus仿真接收到的数据然后显示的结果
数据的格式就是上面的定义 Header 为帧头 标记一个数据帧的开始,type 为类型 用来识别数据的类型 ,Length为长度标记 用来识别是否收完一帧的数据;
这次的目的是为了获取来自PC端串口传来的汉字字模数据 —— 一条长为32字节的数据,所以定义N = 32;类型 因为是第一个要用到的数据就先使用type=0x01
现在确定的格式 一帧数据 大概是
unsinged char code test[36]={0xaa,0x55,0x01,0x20,0x01,0x0D,0x1D,0x19,0x01,0x3F,0x3F,0x03,0x03,0x03,0x07,0x26,0x6E,0x7C,0x38,0x00,0x98, 0x98,0x98,0x8C,0x8C,0x8E,0xEF,0xED,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00};
当一个数据发来单片机进入中断程序开始接收数据
void mReceive(){ uart_flag =0;//接收标志 <span style="white-space:pre"> </span>RI=0;//手动清寄存器 <span style="white-space:pre"> </span>receive[count]=SBUF; if(count==0&&receive[count]==0xaa){ count=1; } else if(count==1&&receive[count]==0x55){ count=2; } else if(count>=2){ if(count-3==receive[3]){ //当已经接收到的长度是该数据帧的长度时接收完成 count=0; <span style="white-space:pre"> </span>uart_flag=1; }else if (count>=37)//超长验证,如果数据接收一帧的长度还没有完成验证一整帧则接受失败 开始新的接收 { count = 0; }else{ count+=1; } else { count=0; } }
第一张是LabView上的模拟显示第二张是proteus仿真接收到的数据然后显示的结果
相关文章推荐
- 我是运营,我没有假期
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- 修复mysql数据库
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- MySQL数据备份之mysqldump的使用详解
- C#实现窗体间传递数据实例
- 给你的数据库文件减肥
- Oracle数据更改后出错的解决方法
- Oracle数据库数据丢失恢复的几种方法总结
- C#将Sql数据保存到Excel文件中的方法
- MFC实现在文件尾追加数据的方法
- 把excel表格里的数据导入sql数据库的两种方法
- 用文本作数据处理
- 桌面中心(一)创建数据库
- 桌面中心(四)数据显示
- PHP+JS实现大规模数据提交的方法
- C#数据绑定(DataBinding)简单实现方法