PC机与单片机之间的串口通信分析

上传人:woxinch****an2018 文档编号:38637509 上传时间:2018-05-05 格式:DOC 页数:9 大小:159.50KB
返回 下载 相关 举报
PC机与单片机之间的串口通信分析_第1页
第1页 / 共9页
PC机与单片机之间的串口通信分析_第2页
第2页 / 共9页
PC机与单片机之间的串口通信分析_第3页
第3页 / 共9页
PC机与单片机之间的串口通信分析_第4页
第4页 / 共9页
PC机与单片机之间的串口通信分析_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PC机与单片机之间的串口通信分析》由会员分享,可在线阅读,更多相关《PC机与单片机之间的串口通信分析(9页珍藏版)》请在金锄头文库上搜索。

1、1中山火炬职业技术学院毕业综合实践项目项目名称: PC 机与单片机之间的串口通信分析机与单片机之间的串口通信分析 作 者: 刘世浩刘世浩 学 号: 1102070104 系 别: 信息工程系信息工程系 专 业: 通信技术通信技术 指导老师:雷英专业技术职务 单片机技术 2摘 要单片机的串行口在单片机的日常教学实践和实际的工程技术中,应用十分普遍,因此在学习和设计时经常会对串口进行仿真调试。PC 机和单片机的串口通信系统的调试一般需要通过一根串口连接线把带有软件的上位机 (PC 机)和下位机(即单片机)连接起来进行,这种方法受实验条件的约束,而且比较烦琐。本文介绍一种用纯软件实现的仿真调试方法,

2、全部过程都在一台电脑上通过软件完成此次课设主题为单片机串口通信的应用之一。通过串口,我们的个人电脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送数据帧,单片机系统接收后,发回通信协议要求的数据帧。可以用 C+ Builder 语言制作的应用程序界面或串口调试助手字符串输入框中输入数字和字符来实现 PC 机与 80C51 系列单片机的串口通信。关键词:单片机 串口通信 仿真一、一、如何串行通信如何串行通信实现利用虚拟终端仿真单片机与 PC 机间的串行通信。PC 机先发送从键盘 输入的数据,单片机接收后回发给 PC 机。单片机同时将收到的 3039H 间的 数据转换成 09 的数

3、字显示,其他字符的数据直接显示为其 ASCII 码。 单 片机和 PC 机进行通信时,要求使用的波特率、传送的位数等相同。要能够进 行数据传送也必须首先测试双方是否可以可靠通信。可在 PC 机和单片机上各 编制非常短小的程序,具体可分成 PC 机串行口发送接收程序、单片机串行口 发送程序和单片机串行口发送接收程序。这三个程序能运行通过,即可证明串 行口工作正常。 PC 机串行口发送接收程序设置串行口为波特率 9600、8 位数 据、1 位停止位、无奇偶校验的简单设置。从键盘接收的字符可从串行口发送 出去,从串行口接收的字符在屏幕上显示。通过让串行口发送线和接收线短接 可测试微机串行口,通过让串

4、行口和单片机系统相接,使用此程序可进一步测 试单片机的串行通信状况。二、串行通信详细设计二、串行通信详细设计1.1.串行通信原理串行通信原理此次采用 80C51 系列串口的方式 1 进行串行通信。串口结构如图 1 所示。1SBUF发送控制器接收控制器移位寄存器控制门TIRIATXDRXD去串口中断SMOD01TH1TL1216SBUFT1溢出率3图 1 方式 1 是 10 位数据的异步通信口。TXD 为数据发送引脚,RXD 为数据接收 引脚,传送一帧数据的格式如图 2 所示。其中 1 位起始位,8 位数据位,1 位停 止位。用软件置 REN 为 1 时,接收器以所选择波特率的 16 倍速率采样

5、 RXD 引脚 电平,检测到 RXD 引脚输入电平发生负跳变时,则说明起始位有效,将其移入 输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入 移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最 后一次移位。当 RI=0,且 SM2=0(或接收到的停止位为 1)时,将接收到的 9 位数据的前 8 位数据装入接收 SBUF,第 9 位(停止位)进入 RB8,并置 RI=1, 向 CPU 请求中断。用单片机内部定时器 1 即 T1,使其工作在方式 2,作为波特 率发生器。图 2由于基于 C+Builder 的通信协议如图 3 所示,因此在程序编写时,需要在 设置

6、一个缓冲区来暂时存储单片机接收的来自 PC 机的一串字符串。前导符站号地址功能码数据长度数据结束符校验码#AAAAFFLLDDDD X图 32.2.硬件设计硬件设计51 单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地 进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是 RS232 电平的,而单片机的串口是 TTL 电平的,两者之间必须有一个电平转换电路, 我们采用了专用芯片 MAX232 进行转换。如图 4 所示。停 止 位数据位8位起 始 位LSBMSB空 闲空 闲D0D71帧共10位4图 43.3.软件设计软件设计如图 4,PC 机作为主机,80C51 单片机作

7、为从机(波特率为 9600b/s)。 通信程序采用 C 语言编程。这个程序的流程图如图 5 所示。程序见下。图 553.13.1 串口初始化串口初始化3.23.2 从机(单片机)接收主机(从机(单片机)接收主机(PCPC 机)发送来的数据帧机)发送来的数据帧3.3 从机发送数据帧给主机从机发送数据帧给主机(1)解析从机发送的数据帧(程序见附录 3 的 void send()部分) (2)从机发送数据帧3.4 拓展部分拓展部分利用 P1 口连接的 8 个 LED 灯来显示 C+Builder 的十三个功能(见附录 1) 。6三、实验调试三、实验调试1.1.硬件方面硬件方面(1)烧写程序时,已经上

8、电了,可软件还是一直提示上电,反复上电也不行后, 最终通过反复换串口,反复烧写上电解决了。类似的还有只要进行烧写,7烧写软件界面就会消失,也是通过上述方法解决。 (2)有时烧写时,忽略了相应的串口和波特率的选择甚至忘记打开串口助手的 串口,发送数据后使得 PC 机的接收窗口中无显示。 (3)有时发送数据后接收窗口无显示,经过复位后,问题得以解决。2.2.软件方面软件方面编程时遇到的主要问题有四个: (1)如何在 C51 单片机中存储接收的一个字符串数据帧。如上所述,需要设置一个缓冲数组来接收主机发送的字符串数据帧。程序 见 3.2。 (2)如何判断从机已经接收到完整的数据帧即结束接收。设置一个

9、标志位,如 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

10、(!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;8while(!TI); TI=0;SBUF=slave_addr3; while(!TI); TI=0; SBUF=; w

11、hile(!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)如何放置功能拓展部分的程序。 遵循着“中断中程序尽可能少些,一般放在主程序部分实现”的原则, 对于我

12、这次拓展的一点点功能(LED 灯显示、报警蜂鸣器响,程序见 3.4) , 我把标志位 flag 的设置放在了解析函数 void send()部分,将 LED 显示放在了 主函数中。起初我把蜂鸣器代码“RD=0”也放在解析函数中,效果失败, 经过调试放在主函数中后,蜂鸣器响了起来。9四、四、致谢致谢借助先进的软件技术,来完成以往需要结合硬件电路来完成的串口通信的 调试工作,效率高,成本低,性价比高,风险低。实践证明在教学和工程应用 中根据具体情况适当选择、组合使用起到了很好的教学和应用效果。每次课设 后都会收获很多,这次也不例外。 平时编写代码的机会不多,因而这次课设显 得比较棘手。鉴于已经系统

13、地学过 C 语言以及单片机中常用 C 的编写,程序的 整体架构不存在多大问题。因而主要问题在于各部分功能的实现。首先针对于 这次课设,必须先了解主机与从机之间的通信协议,才能正确地编写代码实现 上述所说的“解析从机发送的数据帧”部分的功能。这也是我在这次课设中的 一个瓶颈。幸运的是,在同学的帮助下顺利地解决了这个问题。其次,对 C 语 言数组、指针的娴熟运用,可以大大减短代码的编写,并能有效的解决数据帧 的缓存发送问题。然后,就是程序整体架构的排列。这点在“运行调试”的软 件方面的第四点提及。最后,对 Keil、烧写软件、串口调试助手以及试验箱的 熟练使用也是这次课设成功的重要因素。其间遇到的各种问题多亏有同学和老 师的帮助,促成了我们高效率地完成了这次课设,多点研究,多点向同学或者 老师请教,总会有收获的五、参考文献五、参考文献丁海军等编著. 程序设计基础(C 语言).北京:北京航空航天大学出版社, 2009 田希晖,薛亮儒编著.C51 单片机技术教程.北京:人民邮电出版社,2007

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 高中教育

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