欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实际单片机与虚拟单片机串口通信proteus仿真.doc

    • 资源ID:24137176       资源大小:1.42MB        全文页数:89页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实际单片机与虚拟单片机串口通信proteus仿真.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date实际单片机与虚拟单片机串口通信proteus仿真实际单片机与虚拟单片机串口通信proteus仿真中国民航大学单片机课程设计报告题目:实际单片机与proteus中虚拟单片机串口通信仿真设计时间:2012年 9 月 13 日至 9 月 20 日学 院: 航空自动化学院 专业名称: 自动化 学 号: 101141237 姓 名: 赵起超 指导老师: 黄建宇 目 录1绪 论32设计内容及要求33串口通信原理34设计思路45设计框图46硬件实现57电路设计77.1硬件设计77.2软件配置88程序设计128.1设计思路128.2硬件程序128.3虚拟单片机程序189 PROTEUS仿真2310总结25参考文献26实际单片机与proteus中虚拟单片机串口通信仿真1绪 论单片机与单片机或单片机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口,使不同 的设备可以方便地连接起来进行通讯,本课程设计则采用串行通信的方式进行proteus仿真。2设计内容及要求采用串行通讯的方式,用实际的单片机读取超声波测距模块的数据,然后通过串口与proteus中的虚拟单片机进行通信,将超声波测得的数据通过串口实时发送给proteus中的单片机,虚拟单片机将接收到的数据实时用lcd1602在proteus中仿真显示。设计中用到二个1602液晶屏,一个虚拟终端,实时监测发送与接受的数据,用来验证通信的数据是否正确。设计要求在测距周期尽可能短的情况下,同时保证数据传输误码率在0.2%以下。3串口通信原理所谓"串行通信"是指外设和计算机间使用一根数据信号线,数据在一根数据信号线上按位进行传输,每一位数据都占据一个固定的时间长度。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型的串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0127(7位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语 “包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。4设计思路利用硬件STC单片机驱动超声波测距模块与液晶屏,将测得的数据在液晶屏上显示,(监测测量数据的正确性)。另一方面通过串口将测得的数据发送给proteus中虚拟的单片机,虚拟单片机与实际单片机通过proteus中的虚拟串口(COMPIM)相连,虚拟串口将接收到的数据用proteus中的虚拟终端(VIRTUAL TERMINAL)显示(用来监测USB串口发送的数据是否无误),虚拟串口与虚拟单片机相连,将收到的数据发送给单片机,单片机通过lcd1602在proteus中仿真显示(进一步校验虚拟单片机收到的数据是否无误),通过比对三个显示装置中的数据,可以观察数据通信是否无误,从而进一步通过硬件与软件调试达到设计要求。5设计框图VIRTUAL TERMINALLcd1602虚拟Lcd1602虚拟80C51COMPIM超声波测距模块STC单片机 6硬件实现6.1 STC90C516RD+ 6.2 Lcd16026.3 超声波模块6.4 9针串口引脚号缩写英文全称功能说明1DCDData Carrier Detection数据载波检测2RXDReceive Data接收数据3TXDTransmit Data发送数据4DTRData Terminal Ready数据终端准备5GNDSystem Ground信号地6DSRData Set Ready数据设备准备好7RTSRequest to Send请求发送8CTSClear to Send清除发送9RIRing Indicator振铃指示九针串口引脚功能7电路设计7.1硬件设计 将lcd1602液晶的数据端口接到单片机的P0口,RW接P25,使能端E接P27,RS接P26;超声波模块RX端接P10,TX端接P11,所有硬件电路全部5V电压供电,然后通过USB串口数据线连接到电脑。7.2软件配置1 首先安装好串口驱动,需根据自己的硬件模块选择驱动安装。我的是STC官方下载软件STC_ISP。如下图所示2 在proteus中画出如下电路图,所需主要元件分别为:80C51 COMPIMLM016LVTERM 3 配置proteus中虚拟串口,实现通信。在proteus中点击虚拟串口,弹出如下对话框,物理端口与STC_ISP中的串口必须保证一致,波特率都是2400,须与程序中设置的波特率相同,否则无法通信或者出现乱码,这里是能否通信关键所在,一定要配置好。其他参数选择默认就可以了。4 配置虚拟终端在proteus中点击虚拟终端,弹出如下对话框,进行相关配置。因为是监视虚拟串口发给单片机的数据所以只需将波特率配置成2400,与虚拟串口波特率保持一致即可,其他参数选择默认值。8程序设计8.1设计思路硬件电路程序关键在于数据发送程序的设计,同时也要注意超声波测距模块的测距频率与发送程序的波特率,只有合理设置才能确保数据正确发送。虚拟单片机接收程序应该保证将每一次发送的数据都在lcd上准确显示,不丢数据,无误码,基于这些要求,经过反复调试,最后将超声波测距周期设定为250ms(超声波测距模块测距范围2450cm,精度两位小数),即串口数据发送周期为250ms,lcd显示数据则保留两位小数,串口数据发送波特率设为2400,理论上可以保证数据传输误码率在0.2%以下。基于串口通信每一帧只能发送一个字符,为了将测得的数据在proteus中正确显示,因此在每一次发送数据后面加上“CM”作为数据发送的结束标志,接收方采用串行中断的方式,通过检测字符M来判断一次发送数据是否结束,并将数据保存到缓存数组中,然后在lcd上显示,经过仿真验证,可以得到很好的仿真效果,达到了测距周期尽可能短同时又保证了数据传输准确性的要求。8.2硬件程序#include <reg51.h>#include <intrins.h>#include <stdio.h>#include <string.h>#define DataPort P0#define Busy 0x80#define uchar unsigned char#define uint unsigned intuchar Xpos=0;uchar Ypos=0;float i=0;sbit RS= P26;sbit RW = P25;sbit E = P27;sbit RX=P10;sbit TX=P11;void UART_init (void)TMOD = 0x21;/定时器T/C1工作方式2SCON = 0x50;/串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)TH1 = 0xF3;/定时器初值高8位设置TL1 = 0xF3;/定时器初值低8位设置TR1 = 1;/定时器启动 void UART_T (unsigned char UART_data) /定义串口发送数据变量SBUF = UART_data;/将接收的数据发送回去while(TI = 0);/检查发送中断标志位TI = 0;/令发送中断标志位为0(软件清零)void UART_TC (unsigned char *str)while(*str != '0')UART_T(*str);*str+;*str = 0;void Delay_ms(unsigned int i) unsigned int j; for(;i>0;i-) for(j=0;j<600;j+) ;void delay_50ms(uchar t) int j; for(;t>0;t-) for(j=6245;j>0;j-) ; void Conut(void) float time=0; time= (TH0*256+TL0); TH0=0; TL0=0; i=(time*1.7)/100; /算出来是cM void StartModule() /启动模块 TX=1; /启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; void CheckBusy(void) / 读忙状态函数 检测忙状态 DataPort=0xff; RS=0; RW=1; _nop_(); E=1; _nop_(); _nop_(); while(DataPort & Busy); E=0;void WriteIR(uchar CMD,uchar AttribC) / 向lcd写入命令字符 if(AttribC) CheckBusy(); RS=0; RW=0; _nop_(); DataPort=CMD; _nop_(); E=1; _nop_(); _nop_(); E=0;void WriteDDR(char c) /在当前光标位置显示一个字符 CheckBusy(); RS=1; RW=0; _nop_(); DataPort=c; _nop_(); E=1; _nop_(); _nop_(); E=0;void LcdPos(uchar Xpos,uchar Ypos) / 光标定位函数 uchar tmp; Xpos&=0x0f; Ypos&=0x01; tmp=Xpos; if(Ypos=1) tmp|=0xc0; tmp|=0x80; WriteIR(tmp,0);void LcdReset(void) /初始化函数 WriteIR(0x38,0); WriteIR(0x38,1); WriteIR(0x08,1); WriteIR(0x01,1); WriteIR(0x06,1); WriteIR(0x0f,1); Delay_ms(5); /延时等待复位void WriteChar(uchar Xpos,uchar Ypos,uchar c) /在指定行列显示字符函数 LcdPos(Xpos,Ypos); WriteDDR(c);/在指定行列显示字符串函数void WriteString(uchar Xpos,uchar Ypos,uchar s)/ Xpos列(015) Ypos 行(0,1) s 要显示的字符串 uchar p=0; for(;) WriteChar(Xpos,Ypos,sp); p+; if(sp=0) break; if(+Xpos>15) Xpos=0; Ypos=1; void main(void) uchar s10="0" LcdReset(); UART_init (); while(1) UART_TC (s); delay_50ms(5) ; StartModule(); TH0=0; TL0=0; while(!RX); TR0=1; while(RX); TR0=0; Conut(); sprintf (s,"%6.2f CM", i); WriteString(2,0,s); 8.3虚拟单片机程序#include<reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define DataPort P1#define Busy 0x80uchar Receive_Buffer20;uchar i=0;uchar Xpos=0;uchar Ypos=0;sbit RS= P26;sbit RW = P25;sbit E = P27;void Delay_ms(unsigned int i) unsigned int j; for(;i>0;i-) for(j=0;j<600;j+) ;void CheckBusy(void) / 读忙状态函数 检测忙状态 DataPort=0xff; RS=0; RW=1; _nop_(); Delay_ms(5); / E=1; _nop_(); _nop_(); while(DataPort & Busy); E=0;void WriteIR(uchar CMD,uchar AttribC) / 向lcd写入命令字符 if(AttribC) CheckBusy(); RS=0; RW=0; _nop_(); DataPort=CMD; _nop_(); E=1; _nop_(); _nop_(); E=0;void WriteDDR(char c) /在当前光标位置显示一个字符 CheckBusy(); RS=1; RW=0; _nop_(); DataPort=c; _nop_(); E=1; _nop_(); _nop_(); E=0;void LcdPos(uchar Xpos,uchar Ypos) / 光标定位函数 uchar tmp; Xpos&=0x0f; Ypos&=0x01; tmp=Xpos; if(Ypos=1) tmp|=0xc0; tmp|=0x80; WriteIR(tmp,0);void LcdReset(void) /初始化函数 WriteIR(0x38,0); WriteIR(0x38,1); WriteIR(0x08,1); WriteIR(0x01,1); WriteIR(0x06,1); WriteIR(0x0f,1); Delay_ms(25); /延时等待复位void WriteChar(uchar Xpos,uchar Ypos,uchar c) /在指定行列显示字符函数 LcdPos(Xpos,Ypos); WriteDDR(c);/在指定行列显示字符串函数void WriteString(uchar Xpos,uchar Ypos,uchar s)/ Xpos列(015) Ypos 行(0,1) s 要显示的字符串 uchar p=0; for(;) WriteChar(Xpos,Ypos,sp); p+; if(sp=0) break; if(+Xpos>15) Xpos=0; Ypos=1; void delay_50ms(uchar t) int j; for(;t>0;t-) for(j=6245;j>0;j-) ; void main()LcdReset();SCON=0x50;/串口模式1,允许接收TMOD=0x20;/T1工作模式2TH1=0xf3;TL1=0xf3;EA=1;EX0=1;ES=1;TR1=1;while(1) while(Receive_Bufferi-1!='M'); ES=0; WriteString(2,0,Receive_Buffer); ES=1; i=0;void Serial_INT() interrupt 4ES=0;RI=0;Receive_Bufferi+=SBUF;ES=1;9 proteus仿真proteus中打开仿真按钮,仿真结果如下,从仿真效果来看,通信结果还是比较令人满意的实物仿真示意图实物仿真示意图10 总结通过这次课设,我学会了用理论来指导实践的方法,理论指导的重要性;真实的体验到真正做科学研究的艰辛与一丝不苟。由于之前没有上过单片机课程也没用过超声波传感器模块,一开始做这个单片机的串口通信比较迷茫,后来去图书馆借了很多书回来,查找了很多资料,也在网上看了不少资料,对基于但单片机的串口通信有了初步的了解。刚开始没想到实际单片机还可以控制proteus中的虚拟单片机并且进行通信,课程设计也没想做这个,因为感觉对于自己来说太难了,没有那么多的知识储备,串口通信几乎什么也不懂,在看proteus视频讲解的时候,里面有个例程讲到用PC机与单片机通过虚拟串口通信仿真,后来突然想到既然PC机可以与虚拟单片机通信,那么是不是实际单片机也可以通过proteus中的虚拟串口与虚拟单片机通信在proteus中仿真呢?于是去图书馆查了一些相关的书,上网上也搜了一些资料,但并没有这方面的相关资料,大多是PC机与单片机串口通信在proteus中仿真,于是就想能不能完成实际单片机与虚拟单片机通信仿真呢,理论上分析是可行的,很想将这个课程设计做出来,查了很多资料后开始自己编程,刚开始一连好几天一点进展都没有,又查了很多资料发现自己的程序有些问题,其中波特率是能否通信的关键所在,后来改进了一些程序,发现勉强可以通信了,但是误码率很高,还是程序有问题,经过调试发现超声波测距的频率不能太高,否则由于传输速率的因素就会出现乱码,在改变了超声波测距的频率与发送波特率后,经过多次试验最后终于调试出来了,从仿真结果来看还是很令人满意的。经过不到两周的时间将这个做出来,当然离不开老师与同学的支持,同时也非常感谢老师的帮助。通过这两周的课程设计,发现自己知识的不足,也感觉到知识的无限,如果想在这方面有更深的体会,还得不断地学习新知识,不断地实践。在做设计的时候遇到了很多问题,通过问同学和请教老师都得到了细心地回答,此次学习使我受益匪浅。从里面学到很多以前没有接触到的错误,及其解决办法和某些程序的设计方法。增加了自己在编程方面的功底。真心的感谢指导我课程设计的黄老师,从他身上我学到了很多。这次课设是真实的一次软硬件结合的综合设计,让我的知识得到了巩固和提高,获益良多。参考文献1求是科技.单片机通信技术与工程实践M.北京:人民邮电出版社, 2005年4月2张毅刚,彭喜媛,彭宇. 单片机原理及应用M.北京:高等教育出版社, 2010年5月3龚建伟,熊光明.Vivual C+/Turbo C串口通信编程实践M.北京:电子工业出版社,2004.10 4龙马工作室.Visual C+6.0程序设计学与用教程M.北京:电子工业出版社,2003.45(美)史蒂芬(Stevens,A.), 林丽闽译.标准C+宝典M.北京:电子工业出版社,2001.26阎石.数字电子技术基础(第五版)M.高等教育出版社,20037 樊昌信,曹丽娜.通信原理(第六版)M.北京:国防工业出版社,2009.02.8田克纯,覃远年等.通信原理实验教程(第三版)M.桂林电子科技大学通信实验室,2009. 9童诗白,华成英.模拟电子技术基础(第五版)M.北京:高等教育出版社,2009 10党宏社.电路、电子技术实验与电子实训M.北京:电子工业出版社,2009-

    注意事项

    本文(实际单片机与虚拟单片机串口通信proteus仿真.doc)为本站会员(豆****)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开