单片机第三章3.4应用实例_第1页
单片机第三章3.4应用实例_第2页
单片机第三章3.4应用实例_第3页
单片机第三章3.4应用实例_第4页
单片机第三章3.4应用实例_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3.4 应用实例结合这些知识介绍单片机接收Hex文件的编程方法应用实例使用的知识应用实例知识基础功能部件串行口驱动基础算法奇偶校验和校验循环队列可用于烧片的hex文件 Hex文件 通信编程设计思路 Hex文件下载主函数流程 通信函数流程 目 录Hex文件信息结构Hex文件结构记录组记录组记录组记录组记录组信息结构0 x3A0 x00表示数据,0 x01表示文件结束起始地址域2字节0 x0D0 x0A起始域1字节数据长度域1字节记录类型域1字节校验和域1字节回车换行符1字节数据域由数据长度指定校验和域的计算:设 sum = (数据长度域 + 起始地址域+记录类型域 + 数据域) &0 xff校验

2、和域 = (0 x100 - sum) 接收方的校验sum + 校验和域 = sum + (0 x100 - sum) = 0 x00 和为0,则表明接收正确,因此接收方校验方便接收方校验Hex文件实例分析:0D F59033EFF7FFFEFFEDEFA16:02000D000102EE:00000001FF起始域数据长度2字节起始地址数据记录2字节数据校验域“记事本”打开*.Hex文件= 0 x100 - (0 x02 + 0 x00 + 0 x0D + 0 x00 + 0 x01 + 0 x02)= 0 x100 - 0 x12 = 0 xEE(0 x02 + 0 x00 + 0 x0D

3、 + 0 x00 + 0 x01 + 0 x02) + 0 xEE = 0 x12 + 0 xEE = 0 x000 x100 - (数据长度域 + 起始地址域+记录类型域 + 数据域) 接收方校验Hex文件实例分析:0D F59033EFF7FFFEFFEDEFA16:02000D000102EE:00000001FF起始域数据长度0字节起始地址文件结束记录校验域“记事本”打开*.Hex文件= 0 x100 - (0 x00 + 0 x00 + 0 x00 + 0 x01)= 0 x100 - 0 x01 = 0 xFF0 x100 - (0 x00 + 0 x00 + 0 x00 + 0

4、x01) + 0 xFF = 0 x01 + 0 xFF = 0 x00文件记录结束无数据域0 x100 - (数据长度域 + 起始地址域+记录类型域 + 数据域) 用ASCII码组成的Hex文件:0D F59033EFF7FFFEFFEDEFA16:02000D000102EE:00000001FF“记事本”打开*.Hex文件3A 30 44 30 30 30 30 30 30 37 34 30 31 46 35 39 30 33 33 45 46 46 37 46 46 46 45 44 45 46 41 31 36 0D 0A 3A 30 32 30 30 30 44 30 30 30

5、31 30 32 45 45 0D 0A 3A 30 30 30 30 30 30 30 31 46 46 0D 0A位于校验域后是不能显示的回车换行符, ASCII码分别为r和nASCII码与16进制的对应关系0 x300 x39090 x410 x46AF16进制ASCII码0 x0Dr0 x0AnHex = 0 x00ASCII码转换为十六进制数据程序unsigned char GetHex(unsigned char *Asc) unsigned char Hex = 0; Hex = (Asc0 & 0 x0f) A) Hex += 0 x90; / 高4位为AF Hex |= (A

6、sc1 &0 x0f) ; / 低4位为09 if (Asc1 A) Hex += 0 x09; / 低4位为AF return Hex;Hex = x30Hex = 0 x35Hex = 0 x3EAsc1 = EAsc0 = 3ASCII码Asc0 = 0 x33Asc1 = 0 x4516进制 Hex文件 通信编程设计思路 Hex文件下载主函数流程 通信函数流程 目 录程序功能概述80C51单片机通过串行口接收PC机发送的Hex文件,根据文件的记录把数据写入到存储器中决 策:软件功能:1、串行口接收数据2、解释Hex文件3、根据Hex文件信息写数据到存储器串口数据接收接收串行口通信数据,

7、并判断奇偶校验的正确性解释Hex文件通信函数unsigend char Comm()解释接收到的数据,并转换为16进制数据写数据到存储器在主函数循环中根据Hex文件的信息写数据到存储器效率得到提高低效串口数据接收while (RI = 0);ACC = SBUF;查询方式接收中断方式接收void Uart_Server(void) interrupt 4 if (RI) ACC = SBUF; 中断处理时间要尽量短 if (RB8 = P) / 字符入队 因此中断只接收数据,只做入队处理,不做数据解释使用的头文件#define msize 128typedef struct unsigned

8、char arraymsize; usigned char head; usigned char count; lpQueue;void SetNull(lpQueue *lp);unsigned char GetLength(lpQueue *lp);unsigned char GetHead(lpQueue *lp);BOOL InsQueue(lpQueue *lp);unsigned char DelQueue(lpQueue *lp);/ 队列中可能的最大节点数/ 队列中的节点存于一维数据中/ 同索引/ 有效节点数/ 置空队列/ 获取有效节点长度/ 取头节点/ 入队/ 出队循环队列接

9、口(lpQueue.h)循环队列类型定义循环队列基本运算函数声明由于用到循环队列的操作,因此需要包含头文件lpQueue.h使用的全局变量循环队列结构体类型变量,用于存放串口接收到的数据 m字符型数据,长度为21(除“:”和回车换行符外),用于存放一条Hex记录Record无符号字符型变量,用于接收错误指示,初始化为0,发生错误时被置1RcvErr Hex文件 通信编程设计思路 Hex文件下载主函数流程 通信函数流程 目 录主函数流程|初始化初始化主循环初始化初始化P0、队列和错误指示变量使能串口和总中断初始串口模式和波特率main(void) unsigned char i; unsigne

10、d char xdata *MemPtr; P1 = 0 x00; TMODE = 0 x20; TH1 = 0 xFE; TR1 = 1; SCON = 0 xd0; IE = 0 x90 while (1) /* 主循环 */ 主循环主函数流程|主循环主循环初始化主循环发送NAK(0 x15)清除错误标志记录接收成功?写数据提取记录地址Y接收有误?YN发送ACK(0 x06)点亮LEDNY数据记录?N5123467891011主循环程序/* 初始化 */ while(1) if (Comm() = 1) if (Record3 = 0) MemPtr = (unsigned char xd

11、ata *) (Record1 8) + Record2); for (I = 0; I 1?函数返回0N记录长度清0回车换行?记录长度+1读出队列两个字符N转换存储为16进制N校验和正确?Y接收成功,返回0Y接收错误指示置1N首字符出队Y首字符为“:”?YEA = 0; / 进入临界区DelQueue( m); / 出队EA = 1; / 退出临界区RecLen = 0; / 复位长度EA = 0; / 进入临界区Asc0 = DelQueue( m);Asc1 = DeQueue( m);EA = 1; / 退出临界区RcvcordRecLen+ = GetHex(Asc);通信函数Com

12、m程序unsigned char Comm(void) unsigne char Asc21; static unsigned char RecLend = 0; while (GetLenght( m) 1) if (GetHead( m) = :) EA = 0; DelQueue( m); EA = 1; RecLen = 0; else EA = 0; Asc0 = DelQueue( m); Asc1 = DelQueue( m); EA = 1; /* 续下 */ 定义ASCII码缓存区/ 定义有效数据长度变量/ 队列内有两个以上ASCII码/ 记录开始/ 进入临界区/ 冒号出队/ 退出临界区/ 复位有效数据长度/ 接收数据/ 进入临界区/ 高位ASCII出队/ 低位ASCII出队/ 退出临界区通信函数Comm程序 /* 续上*/if (Asc0 = r & Asc1 = n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论