串口中断接收流程图

上传人:大米 文档编号:478149187 上传时间:2023-06-13 格式:DOC 页数:3 大小:30.01KB
返回 下载 相关 举报
串口中断接收流程图_第1页
第1页 / 共3页
串口中断接收流程图_第2页
第2页 / 共3页
串口中断接收流程图_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《串口中断接收流程图》由会员分享,可在线阅读,更多相关《串口中断接收流程图(3页珍藏版)》请在金锄头文库上搜索。

1、01000000开始,接收数据放在UART_Data_Buf中ST_FlagADDR_FlagLEN_FlagF-LENUART_Data_Buf=F_STUART_Data_Buf=F_ADDR111F_LEN=UART_Data_BufLEN_Flag=1111接收数据包放在Data_BufST_Flag=1ADDR _Flag=1结束UART_Data_Buf=F_END清除所有标志位等待下一次串口数据Decoder_Flag=1#define F_ST 0x02 /帧头 #define F_END 0x03 /帧尾 #define F_Receive_OK 0x05 /命令帧 接收正确

2、命令帧 #define F_Receive_Error 0x06 /命令型 接收错误重发命令帧#define F_Overtime 0x09/命令型 接收超时重发命令帧bit ST_Flag; /帧头标志位:已经接收到帧头的标志bit ADDR_Flag; /地址帧标志位:地址帧正确,开始接收数据包bit LEN_Flag; /长度帧标志位:长度帧为1,已经知道数据帧的长度了,开始接收数据帧bit Receive_OK_Flag;/接收成功标志位:为1就有要解码的数据包,并且发回应数据包。bit Receive_Error_Flag;/接收错误标志位:数据解码或者接收出错时置1,要求主机重新发

3、数据bit Receive_Overtime_Flag; /接收超时标志位:bit Button_Flag; /按键状态标志位:bit Send_Flag; /发送状态标志位:有数据在发送bit Send_Overtime_Flag; /发送超时标志位:帧: 帧头 | ID号 | 长度帧 | 数据帧1 | + | + |数据帧n| 校验和 | 结束帧 |值: 0x02 | | X | | | 0x03 |字节数: 1 | 1 | 1 | 18 | 1 | 1 |长度帧=n位数据+1位校验和校验和=n位数据和的低8位命令帧: 接收成功: F_Receive_OK =05 接收错误: F_Rece

4、ive_Error=06 接收超时: F_Overtime=09数据帧是ASCII码表示,范围在0x300x39、0x410x46、0x610x66 1 9 、 A F 、 a f几种数据包的例子:一般数据包: | 02 | 01 | 05 | 34 31 46 47 | f2 | 03 | 帧头 地址帧 长度帧 数据帧 校验和 帧尾成功命令包: | 02 | 01 | 03 | 05 05 | 0a | 03 | 帧头 地址帧 长度帧 数据帧 校验和 帧尾错误命令包: | 02 | 01 | 03 | 06 06 | 0c | 03 | 帧头 地址帧 长度帧 数据帧 校验和 帧尾超时命令包:

5、 | 02 | 01 | 03 | 09 09 | 12 | 03 | 帧头 地址帧 长度帧 数据帧 校验和 帧尾整个程序的过程:接收数据:1、 收到第一个数据是帧头,ST_Flag=1,不是就放弃2、 收到第二个数据,如果ST_Flag=1、ADDR_Flag=0,表示这个数据是地址帧,如果地址帧正确,表示是自己的数据包,则ADDR_Flag=1,并且开40ms的定时,时间到了数据包还没有接收完,就告诉上位机超时了,重新发数据。否则不是自己的数据包,则ST_Flag=0;退出接收状态3、 收到第三个数据,如果ST_Flag=1、ADDR_Flag=1、LEN_Flag=0,表示这个是自己的数

6、据包的长度帧,存放在数据缓冲区,并且LEN_Flag=1;4、 收到第四个数据,ST_Flag=1、ADDR_Flag=1、LEN_Flag=1,表示现在收到的是数据帧,根据F_LEN的大小来判断数据是第几个(F_LEN收到一个数据就自减),并且存放再相应的位子5、 收到后面的数据根据4来判断6、 再收到数据时,F_LEN=0了,表示这个数据是帧尾了,判断是否是帧尾,是则表示接收成功,让主循环分析数据包Receive_OK_Flag=1;不是则要求上位机重新发送Receive_Error_Flag=1。发送数据:1、 发送数据打开定时器T0,Send_Flag=1,2、 如果400ms还没有收到成功接收的回应帧就重新发送一次数据3、 定时器要在主循环中常开,避免接收了数据就把定时器关闭了,可能对方都没有收到数据程序中有个冲突:发送数据的时候同时要接收数据,那么发送数据的时候400ms定时器可能会不准确,但是接收数据的时候定时是40ms是准确的,重新给定时器赋初值了。考虑到定时器有限,这个问题只能这样了,有更好的办法再改进。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械/制造/汽车 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号