单片机课程设计论文-基于C++Builder的PC机与单片机之间的串口通信

上传人:紫** 文档编号:57273002 上传时间:2022-02-23 格式:DOC 页数:23 大小:2.04MB
收藏 版权申诉 举报 下载
单片机课程设计论文-基于C++Builder的PC机与单片机之间的串口通信_第1页
第1页 / 共23页
单片机课程设计论文-基于C++Builder的PC机与单片机之间的串口通信_第2页
第2页 / 共23页
单片机课程设计论文-基于C++Builder的PC机与单片机之间的串口通信_第3页
第3页 / 共23页
资源描述:

《单片机课程设计论文-基于C++Builder的PC机与单片机之间的串口通信》由会员分享,可在线阅读,更多相关《单片机课程设计论文-基于C++Builder的PC机与单片机之间的串口通信(23页珍藏版)》请在装配图网上搜索。

1、河海大学计算机及信息工程学院(常州)课程设计报告题 目 基于C+Builder的PC机与单片机之间的串口通信专业 自动化学号 0862510109学生姓名 指导教师 完成时间 2010-12-22摘 要单片机是一门技术性、应用性很强的学科,如果不在实践技能的锻炼上下功夫,单凭课堂理论课学习,势必出现理论与实践脱节,学习与应用脱节的局面。因此为了能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,此次课设主题为单片机串口通信的应用之一。通过串口,我们的个人电脑和单片机系统进行通信。个人电脑作为上位机,向下位机单片机系统发送数据帧,单

2、片机系统接收后,发回通信协议要求的数据帧。可以用C+ Builder 语言制作的应用程序界面或串口调试助手字符串输入框中输入数字和字符来实现PC机与80C51系列单片机的串口通信。关键字:单片机、PC机、串口通信、C+ BuilderAbstract SCM is a technical, applied a strong discipline, if not in practice, work hard skills training, theoretical study of the classroom alone, theory and practice is bound to appe

3、ar out of line, the gap between learning and application of situation. Therefore, in order to be able to classroom and practical application of theoretical knowledge combined, but also on the electronic circuits, electronic components, printed circuit boards and other knowledge to further deepen und

4、erstanding of the theme of the course based Application Serial Communication one. Through the serial port, our personal computer and microcontroller systems to communicate. PC as the host computer, the down-bit machine microcontroller system to send data frames after receiving the SCM system, sends

5、back the requested data communication protocol frame. Can make C + + Builder application language interface or serial debugging assistant string input box numbers and characters to achieve the PC, and 80C51 series microcontroller serial communication. Keywords: microcontroller, PC, serial communicat

6、ion, C + + Builder 目 录摘 要2一、 需求分析4二、系统设计及详细设计41. 串行通信原理42. 硬件设计53. 软件设计53.1串口初始化63.2从机(单片机)接收主机(PC机)发送来的数据帧63.3从机发送数据帧给主机73.4拓展部分7三、运行调试81.硬件方面82.软件方面8四、总结与体会10五、参考文献10六、附录11一、需求分析在工业自动化系统中,常用到微机与单片机进行控制和调试。单片机常被用作工业自动化系统中的前端处理器(也称下位机)。深入到现场,采集各种数据及信息,进行简单处理后送至上位机(PC机)。用一台PC机接收来自下位机的信息和数据,经处理后在微机界面上

7、显示,并向下位机下达命令,通过下位机对现场实施控制。其中,主要要解决的就是上位机与下位机的通信问题。接下来将会描述本次课设PC机与单片机间的串行通信原理、相关软硬件设计及流程图。二、系统设计及详细设计1.串行通信原理此次采用80C51系列串口的方式1进行串行通信。串口结构如图1所示。图1方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图2所示。其中1位起始位,8位数据位,1位停止位。用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这

8、一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。用单片机内部定时器1即T1,使其工作在方式2,作为波特率发生器。 图2由于基于C+Builder的通信协议如图3所示,因此在程序编写时,需要在设置一个缓冲区来暂时存储单片机接收的来自PC机的一串字符串。前导符站号地址功能码数据长度数据结束符校验码#AAAAFFLLDDDDX图32.硬件设计51单片机有一个全双工的串行通

9、讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换。如图4所示。图43.软件设计 如图4,PC机作为主机,80C51单片机作为从机(波特率为9600b/s)。通信程序采用C语言编程。这个程序的流程图如图5所示。程序见下。图5 3.1串口初始化 3.2从机(单片机)接收主机(PC机)发送来的数据帧 3.3从机发送数据帧给主机(1)解析从机发送的数据帧(程序见附录3的void send()部分)(2)从机发送数据帧3.4拓展部分 利用

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

11、符串数据帧。程序见3.2。(2)如何判断从机已经接收到完整的数据帧即结束接收。 设置一个标志位,如uchar finish。当finish=1时,表示接收结束。(3)如何解析从机发送的数据帧。对此,我前后采用了两种方法进行调试运行(以下程序仅为“查询功能”模块的代码) 方案一: 22 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(!T

12、I);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;while(!TI);TI=0;SBUF=slave_addr3;while(!TI);TI=0;SB

13、UF=;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)&(buf_1093=0)&(buf_1094=0)&(buf_1095=0)&(buf_1098=0)&(buf_1099=0) if(buf_1096=0&buf_1097=0) count_109=0; load_109(#); load_109(&slave_addr_109); load_109(0004); load_109(&slave_addr_10

14、9); load_109(X); /查询地址方案一没有把通信协议表达完善,因此运行不成功。方案二解决了通信协议部分,运行成功,而且代码长度较方案一更为简短。(4)如何放置功能拓展部分的程序。遵循着“中断中程序尽可能少些,一般放在主程序部分实现”的原则,对于我这次拓展的一点点功能(LED灯显示、报警蜂鸣器响,程序见3.4),我把标志位flag的设置放在了解析函数void send()部分,将LED显示放在了主函数中。起初我把蜂鸣器代码“RD=0”也放在解析函数中,效果失败,经过调试放在主函数中后,蜂鸣器响了起来。四、总结与体会每次课设后都会收获很多,这次也不例外。 平时编写代码的机会不多,因而这

15、次课设显得比较棘手。鉴于已经系统地学过C语言以及单片机中常用C的编写,程序的整体架构不存在多大问题。因而主要问题在于各部分功能的实现。首先针对于这次课设,必须先了解主机与从机之间的通信协议,才能正确地编写代码实现上述所说的“解析从机发送的数据帧”部分的功能。这也是我在这次课设中的一个瓶颈。幸运的是,在同学的帮助下顺利地解决了这个问题。其次,对C语言数组、指针的娴熟运用,可以大大减短代码的编写,并能有效的解决数据帧的缓存发送问题。然后,就是程序整体架构的排列。这点在“运行调试”的软件方面的第四点提及。最后,对Keil、烧写软件、串口调试助手以及试验箱的熟练使用也是这次课设成功的重要因素。其间遇到

16、的各种问题多亏有同学的帮助和老师周二晚上的集体辅导,促成了我们高效率地完成了这次课设,谢谢老师,谢谢大家!其实,每件事情并没有想象中的那么难,只要自己多动手操作,知识掌握了,经验积累了,一切问题都可以迎刃而解!五、参考文献 丁海军等编著. 程序设计基础(C语言).北京:北京航空航天大学出版社,2009田希晖,薛亮儒编著.C51单片机技术教程.北京:人民邮电出版社,2007六、附录1.实验箱介绍G部分电路为串口通讯部分。U5 PL2303HX构成了USB转URAT电路,即完成USB口转TTL串口电平。U6 MAX232 构成了RS232转URAT电路,即完成RS232串口转TTL串口电平。由于单

17、片机只有一个串口,所以以上两部分通过双刀双掷开关切换使用,当实验板上SCOM开关按下时选择USB转URAT电路。否则选RS232转URAT电路。这部分电路可以完成PC机跟单片机的串行通讯,也可以完成两个单片机进行串行通讯。D_RXD和D_TXD指示收和发线上是否有信号,当通信时可观察到二灯闪烁。当选择USB转URAT电路时,PC机的USB口同时承担给实验板供电的任务。 A部分由一个8位琴健开关(U11)和8个LED (D00D07)组成。连在P1口上完成基本输入输出功能。输入功能:当某开关闭合后,对应P1口线上输入0,同时相应的LED点亮。否则,对应P1口线上输入1,同时相应的LED熄灭。例如

18、:第一位开关闭合,D10点亮,同时P1.0输入0。LED可以做为开关是否闭合的直观指示。输出功能:当某开关打开时,对得用P1口线可以做为输出引脚使用。当输出1时,相应的LED熄灭,当输出0时,相应的LED点亮。当某开关闭合时,无法做输出功能使用。2 .功能码介绍2.1 查询(读)功能码介绍2.1.1 查询地址 功能码00数据帧类型备注#00000000X发送查询时由于不知对方地址,使用“0000”地址#AAAA0004AAAAX正常返回返回时从机用本机地址覆盖0000,并返回地址AAAA#AAAA00011X出错返回校验错误#AAAA00012X出错返回格式错误(前导符、结束符)#AAAA00

19、013X出错返回内容错误(数据超限等)实例: 发送 #00000000X 返回 #123400041234X2.2.2 查询量程上限 功能码:01数据帧类型备注#AAAA0100X发送对方地址必须正确,否则不响应#AAAA0104DDDDX正常返回量程上限必须是4位整数,范围0001-9999,例如0100,4250等#AAAA01011X出错返回校验错误#AAAA01012X出错返回格式错误#AAAA01013X出错返回内容错误2.2.3 查询量程下限 功能码:02数据帧类型备注#AAAA0200X发送对方地址必须正确,否则不响应#AAAA0204DDDDX正常返回量程下限必须是4位整数,范

20、围0000-9998,且必须比上限小#AAAA02011X出错返回校验错误#AAAA02012X出错返回格式错误#AAAA02013X出错返回内容错误2.2.4 查询报警上限 功能码:03数据帧类型备注#AAAA0300X发送对方地址必须正确,否则不响应#AAAA0304DDDDX正常返回报警上限必须是4位整数,范围0001-9999,例如0100,4250等#AAAA03011X出错返回校验错误#AAAA03012X出错返回格式错误#AAAA03013X出错返回内容错误2.2.5 查询报警下限 功能码:04数据帧类型备注#AAAA0400X发送对方地址必须正确,否则不响应#AAAA0404D

21、DDDX正常返回报警下限必须是4位整数,范围0000-9998,且必须比上限小#AAAA04011X出错返回校验错误#AAAA04012X出错返回格式错误#AAAA04013X出错返回内容错误2.2.5 查询温度值 功能码:05数据帧类型备注#AAAA0500X发送对方地址必须正确,否则不响应#AAAA0507DDDD.DDX正常返回温度范围0000.005000.00,例如0134.56#AAAA05011X出错返回校验错误#AAAA05012X出错返回格式错误#AAAA05013X出错返回内容错误2.2.5 查询报警状态 功能码:06数据帧类型备注#AAAA0600X发送对方地址必须正确,

22、否则不响应#AAAA0601DX正常返回当D为5表示没有报警当D为6表示正在报警#AAAA06011X出错返回校验错误#AAAA06012X出错返回格式错误#AAAA06013X出错返回内容错误2.2.5 批量查询参数 功能码:07数据帧类型备注#AAAA0700X发送对方地址必须正确,否则不响应#AAAA0716DDDDDDDDDDDDDDDDX正常返回共16位数据分别是量程上限、量程下限、报警上限、报警下限#AAAA07011X出错返回校验错误#AAAA07012X出错返回格式错误#AAAA07013X出错返回内容错误2.2 设置(写)功能码介绍2.2.1 设置地址 功能码50数据帧类型备

23、注#AAAA5004BBBBX发送AAAA为原地址,BBBB为新地址#BBBB50010X成功返回#AAAA50011X出错返回校验错误#AAAA50012X出错返回格式错误(前导符、结束符)#AAAA50013X出错返回内容错误(数据超限等)2.2.2 设置量程上限 功能码51数据帧类型备注#AAAA5104DDDDX发送量程上限必须是4位整数,范围0001-9999,例如0100,4250等#AAAA51010X成功返回#AAAA51011X出错返回校验错误#AAAA51012X出错返回格式错误(前导符、结束符)#AAAA51013X出错返回内容错误(数据超限等)2.2.3 设置量程下限

24、功能码52数据帧类型备注#AAAA5204DDDDX发送量程下限必须是4位整数,范围0000-9998,且必须比上限小#AAAA52010X成功返回#AAAA52011X出错返回校验错误#AAAA52012X出错返回格式错误(前导符、结束符)#AAAA52013X出错返回内容错误(数据超限等)2.2.4 设置报警上限 功能码53数据帧类型备注#AAAA5304DDDDX发送量程上限必须是4位整数,范围0001-9999,例如0100,4250等#AAAA53010X成功返回#AAAA53011X出错返回校验错误#AAAA53012X出错返回格式错误(前导符、结束符)#AAAA53013X出错返

25、回内容错误(数据超限等)2.2.5 设置量程下限 功能码54数据帧类型备注#AAAA5404DDDDX发送报警下限必须是4位整数,范围0000-9998,且必须比上限小#BBBB54010X成功返回#AAAA54011X出错返回校验错误#AAAA54012X出错返回格式错误(前导符、结束符)#AAAA54013X出错返回内容错误(数据超限等)3. 整个程序#include#define uchar unsigned char#define uint unsigned int;#define speak RD;/蜂鸣器char buf_10930;/用于单片机字符串数据的缓冲char slave

26、_addr_109=1234;char slave_lch_109=5000;char slave_lcl_109=1000;char slave_bj_109h_109=9000;char slave_bj_109l_109=3000;uchar count_109=0;/数据帧长度uchar flag_109;/标志点亮P口连接的LED(已接高)uint j_109;void delay_109()/uint j_109;for(j_109=0;j_109(1000*(slave_lcl_1090-0x30)+100*(slave_lcl_1091-0x30)+10*(slave_lcl_

27、1092-0x30)+(slave_lcl_1093-0x30)slave_lch_1090=buf_10910;slave_lch_1091=buf_10911;slave_lch_1092=buf_10912;slave_lch_1093=buf_10913;load_109(#);load_109(&slave_addr_109);load_109(51010);load_109(X);/设置量程上限elseload_109(#);load_109(&slave_addr_109);load_109(51013);load_109(X);/内容错误else if(buf_1096=5&b

28、uf_1097=2)count_109=0;if(1000*(buf_10910-0x30)+100*(buf_10911-0x30)+10*(buf_10912-0x30)+(buf_10913-0x30)(1000*(slave_bj_109l_1090-0x30)+100*(slave_bj_109l_1091-0x30)+10*(slave_bj_109l_1092-0x30)+(slave_bj_109l_1093-0x30)slave_bj_109h_1090=buf_10910;slave_bj_109h_1091=buf_10911;slave_bj_109h_1092=buf

29、_10912;slave_bj_109h_1093=buf_10913;load_109(#);load_109(&slave_addr_109);load_109(53010);load_109(X);/设置报警上限elseload_109(#);load_109(&slave_addr_109);load_109(53013);load_109(X);/内容错误else if(buf_1096=5&buf_1097=4)count_109=0;if(1000*(buf_10910-0x30)+100*(buf_10911-0x30)+10*(buf_10912-0x30)+(buf_109

30、13-0x30)(1000*(slave_bj_109h_1090-0x30)+100*(slave_bj_109h_1091-0x30)+10*(slave_bj_109h_1092-0x30)+(slave_bj_109h_1093-0x30)slave_bj_109l_1090=buf_10910;slave_bj_109l_1091=buf_10911;slave_bj_109l_1092=buf_10912;slave_bj_109l_1093=buf_10913;load_109(#);load_109(&slave_addr_109);load_109(54010);load_1

31、09(X);/设置报警下限elseload_109(#);load_109(&slave_addr_109);load_109(54013);load_109(X);/内容错误 if(buf_1096=0)switch(buf_1097)case 0: flag_109=0; break;/查询地址case 1: flag_109=1; break;case 2: flag_109=2; break;case 3: flag_109=3; break;case 4: flag_109=4; break;case 5: flag_109=5; break;case 6: flag_109=6;

32、break;case 7: flag_109=7; break;default: break;if(buf_1096=5)switch(buf_1097)case 0: flag_109=8; break;/设置地址case 1: flag_109=9; break;case 2: flag_109=10; break;case 3: flag_109=11; break;case 4: flag_109=12; break;default: break;void main()TMOD=0x20;TH1=0xfd;/波特率9600TL1=0xfd;TR1=1;PCON=0x00;SCON=0x

33、50;EA=1;ES=1;while(1) send_109();P1=0xff;/初始化LED灯全灭switch(flag_109)case 0: P1_0=0; delay_109(); break;/查询地址case 1: P1_1=0; delay_109(); break;case 2: P1_2=0; delay_109(); break;case 3: P1_3=0; delay_109(); break;case 4: P1_4=0; delay_109(); break;case 5: P1_5=0; delay_109(); break;case 6: P1_6=0; delay_109(); break;case 7: P1_7=0; delay_109(); break;case 8: P1=0x00; delay_109(); break;/设置地址case 9: P1=0x7e; delay_109(); break;case 10: P1=0xbd; delay_109(); break;case 11: P1=0xdb; delay_109(); break;case 12: P1=0xe7; delay_109(); break;default: break;4.实验结果显示

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!