pc机与单片机之间的串口通信分析_第1页
pc机与单片机之间的串口通信分析_第2页
pc机与单片机之间的串口通信分析_第3页
pc机与单片机之间的串口通信分析_第4页
pc机与单片机之间的串口通信分析_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

中山火炬职业技术学院 毕业综合实践项目 项目名称: PC 机与单片机之间的串口通信分析 作 者: 刘世浩 学 号: 1102070104 系 别: 信息工程系 专 业: 通信技术 指导老师:雷英 专业技术职务 单片机技术 2 摘 要 单片机的串行口在单片机的日常教学实践和实际的工程技术中,应用十分 普遍,因此在学习和设计时经常会对串口进行仿真调试。PC 机和单片机的串口 通信系统的调试一般需要通过一根串口连接线把带有软件的上位机 (PC 机)和 下位机( 即单片机 )连接起来进行,这种方法受实验条件的约束,而且比较烦琐。 本文介绍一种用纯软件实现的仿真调试方法,全部过程都在一台电脑上通过软 件完成此次课设主题为单片机串口通信的应用之一。通过串口,我们的个人电 脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送数 据帧,单片机系统接收后,发回通信协议要求的数据帧。可以用 C+ Builder 语言制作的应用程序界面或串口调试助手字符串输入框中输入数字和字符来实 现 PC 机与 80C51 系列单片机的串口通信。 关键词:单片机 串口通信 仿真 一、如何串行通信 实现利用虚拟终端仿真单片机与 PC 机间的串行通信。 PC 机先发送从键盘 输入的数据,单片机接收后回发给 PC 机。单片机同时将收到的 3039H 间的 数据转换成 09 的数字显示,其他字符的数据直接显示为其 ASCII 码。 单 片机和 PC 机进行通信时,要求使用的波特率、传送的位数等相同。要能够进 行数据传送也必须首先测试双方是否可以可靠通信。可在 PC 机和单片机上各 编制非常短小的程序,具体可分成 PC 机串行口发送接收程序、单片机串行口 发送程序和单片机串行口发送接收程序。这三个程序能运行通过,即可证明串 行口工作正常。 PC 机串行口发送接收程序设置串行口为波特率 9600、8 位数 据、1 位停止位、无奇偶校验的简单设置。从键盘接收的字符可从串行口发送 出去,从串行口接收的字符在屏幕上显示。通过让串行口发送线和接收线短接 可测试微机串行口,通过让串行口和单片机系统相接,使用此程序可进一步测 试单片机的串行通信状况。 二、串行通信详细设计 1.串行通信原理 此次采用 80C51 系列串口的方式 1 进行串行通信。串口结构如图 1 所示。 1 S B U F 发送控制器 接收控制器 移位寄存器 控 制门 T I R I A T X D R X D 去串口 中 断 S M O D 0 1 T H 1 T L 1 2 1 6 S B U F T 1 溢出率 3 图 1 方式 1 是 10 位数据的异步通信口。TXD 为数据发送引脚,RXD 为数据接收 引脚,传送一帧数据的格式如图 2 所示。其中 1 位起始位,8 位数据位,1 位停 止位。用软件置 REN 为 1 时,接收器以所选择波特率的 16 倍速率采样 RXD 引脚 电平,检测到 RXD 引脚输入电平发生负跳变时,则说明起始位有效,将其移入 输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入 移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最 后一次移位。当 RI=0,且 SM2=0(或接收到的停止位为 1)时,将接收到的 9 位数据的前 8 位数据装入接收 SBUF,第 9 位(停止位)进入 RB8,并置 RI=1, 向 CPU 请求中断。用单片机内部定时器 1 即 T1,使其工作在方式 2,作为波特 率发生器。 图 2 由于基于 C+Builder 的通信协议如图 3 所示,因此在程序编写时,需要在 设置一个缓冲区来暂时存储单片机接收的来自 PC 机的一串字符串。 前导符 站号地址 功能码 数据长度 数据 结束符 校验码 # AAAA FF LL DDDD X 图 3 2.硬件设计 51 单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地 进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是 RS232 电平的,而单片机的串口是 TTL 电平的,两者之间必须有一个电平转换电路, 我们采用了专用芯片 MAX232 进行转换。如图 4 所示。 停 止 位 数据位8 位 起 始 位 L S B M S B 空 闲 空 闲 D 0 D 7 1 帧共1 0 位 4 图 4 3.软件设计 如图 4,PC 机作为主机,80C51 单片机作为从机(波特率为 9600b/s)。 通信程序采用 C 语言编程。这个程序的流程图如图 5 所示。程序见下。 图 5 5 3.1 串口初始化 3.2 从机(单片机)接收主机(PC 机)发送来的数据帧 3.3 从机发送数据帧给主机 (1)解析从机发送的数据帧(程序见附录 3 的 void send()部分) (2)从机发送数据帧 3.4 拓展部分 利用 P1 口连接的 8 个 LED 灯来显示 C+Builder 的十三个功能(见附录 1) 。 6 三、实验调试 1.硬件方面 (1)烧写程序时,已经上电了,可软件还是一直提示上电,反复上电也不行后, 最终通过反复换串口,反复烧写上电解决了。类似的还有只要进行烧写, 7 烧写软件界面就会消失,也是通过上述方法解决。 (2)有时烧写时,忽略了相应的串口和波特率的选择甚至忘记打开串口助手的 串口,发送数据后使得 PC 机的接收窗口中无显示。 (3)有时发送数据后接收窗口无显示,经过复位后,问题得以解决。 2.软件方面 编程时遇到的主要问题有四个: (1)如何在 C51 单片机中存储接收的一个字符串数据帧。 如上所述,需要设置一个缓冲数组来接收主机发送的字符串数据帧。程序 见 3.2。 (2)如何判断从机已经接收到完整的数据帧即结束接收。 设置一个标志位,如 uchar finish。当 finish=1 时,表示接收结束。 (3)如何解析从机发送的数据帧。 对此,我前后采用了两种方法进行调试运行(以下程序仅为“查询功能” 模块的代码) 方案一: void send() if(host6=0) switch(host7) case 0:/查询地址 TI=0; SBUF=#; while(!TI); TI=0; SBUF=#; while(!TI); TI=0; SBUF=slave_addr0; while(!TI); TI=0; SBUF=slave_addr1; while(!TI); TI=0; SBUF=slave_addr2; while(!TI); TI=0; SBUF=slave_addr3; while(!TI); TI=0; SBUF=0; while(!TI); TI=0; SBUF=0; while(!TI); TI=0; SBUF=0; while(!TI); TI=0; SBUF=4; while(!TI); TI=0; SBUF=slave_addr0; while(!TI); TI=0; SBUF=slave_addr1; while(!TI); TI=0; SBUF=slave_addr2; 8 while(!TI); TI=0; SBUF=slave_addr3; while(!TI); TI=0; SBUF=; while(!TI); TI=0; SBUF=; while(!TI); TI=0; SBUF=x; while(!TI); break; 方案二: void send_109() if(count_109=13) if(buf_1093=0) load_109(“#“); load_109( load_109(“0004“); load_109( load_109(“X“); /查询地址 方案一没有把通信协议表达完善,因此运行不成功。方案二解决了通信 协议部分,运行成功,而且代码长度较方案一更为简短。 (4)如何放置功能拓展部分的程序。 遵循着“中断中程序尽可能少些,一般放在主程序部分实现”的原则, 对于我这次拓展的一点点功能(LED 灯显示、报警蜂鸣器响,程序见 3.4) , 我把标志位 flag 的设置放在了解析函数 void send()部分,将 LED 显示放在了 主函数中。起初我把蜂鸣器代码“RD=0”也放在解析函数中,效果失败, 经过调试放在主函数中后,蜂鸣器响了起来。 9 四、致谢 借助先进的软件技术,来完成以往需要结合硬件电路来完成的串口通信的 调试工作,效率高,成本低,性价比高,风险低。实践证明在教学和工程应用 中根据具体情况适当选择、组合使用起到了很好的教学和应用效果。每次课设 后都会收获很多,这次也不例外。 平时编写代码的机会不多,因而这次课设显 得比较棘手。鉴于已经系统地学过 C 语言以及单片机中常用 C 的编写,程序的 整体架构不存在多大问题。因而主要问题在于各部分功能的实现。首先针对于 这次课设,必须先了解主机与从机之间的通信协议,才能正确地编写代码实现 上述所说的“解析从机发送的数据帧”部分的功能。这也是我在这次课设中的 一个瓶颈。幸运的是,在同学的帮助下顺利地解决了这个问题。其次,对 C 语 言数组、指针的娴熟运用,可以大大减短代码的编写,并能有效的解决数据帧 的缓存发送问题。然后,就是程序整体架构的排列。这点在“运行调试”的软 件方面的

温馨提示

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

评论

0/150

提交评论