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

上传人:des****85 文档编号:274038804 上传时间:2022-04-07 格式:DOC 页数:28 大小:1.23MB
返回 下载 相关 举报
实际单片机与虚拟单片机串口通信proteus仿真_第1页
第1页 / 共28页
实际单片机与虚拟单片机串口通信proteus仿真_第2页
第2页 / 共28页
实际单片机与虚拟单片机串口通信proteus仿真_第3页
第3页 / 共28页
实际单片机与虚拟单片机串口通信proteus仿真_第4页
第4页 / 共28页
实际单片机与虚拟单片机串口通信proteus仿真_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《实际单片机与虚拟单片机串口通信proteus仿真》由会员分享,可在线阅读,更多相关《实际单片机与虚拟单片机串口通信proteus仿真(28页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上中国民航大学单片机课程设计报告题目:实际单片机与proteus中虚拟单片机串口通信仿真设计时间:2012年 9 月 13 日至 9 月 20 日学 院: 航空自动化学院 专业名称: 自动化 学 号: 姓 名: 赵起超 指导老师: 黄建宇 目 录实际单片机与proteus中虚拟单片机串口通信仿真1绪 论单片机与单片机或单片机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口,使不同 的设备可以方便地连接起来进行通讯,本课

2、程设计则采用串行通信的方式进行proteus仿真。2设计内容及要求采用串行通讯的方式,用实际的单片机读取超声波测距模块的数据,然后通过串口与proteus中的虚拟单片机进行通信,将超声波测得的数据通过串口实时发送给proteus中的单片机,虚拟单片机将接收到的数据实时用lcd1602在proteus中仿真显示。设计中用到二个1602液晶屏,一个虚拟终端,实时监测发送与接受的数据,用来验证通信的数据是否正确。设计要求在测距周期尽可能短的情况下,同时保证数据传输误码率在0.2%以下。3串口通信原理所谓串行通信是指外设和计算机间使用一根数据信号线,数据在一根数据信号线上按位进行传输,每一位数据都占据

3、一个固定的时间长度。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型的串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶

4、校验。对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7

5、和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0127(7位)。扩展的ASCII码是0255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语 “包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程

6、度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。4设计思路利用硬件STC单片机驱动超声波测距模块与液晶屏,将测得的

7、数据在液晶屏上显示,(监测测量数据的正确性)。另一方面通过串口将测得的数据发送给proteus中虚拟的单片机,虚拟单片机与实际单片机通过proteus中的虚拟串口(COMPIM)相连,虚拟串口将接收到的数据用proteus中的虚拟终端(VIRTUAL TERMINAL)显示(用来监测USB串口发送的数据是否无误),虚拟串口与虚拟单片机相连,将收到的数据发送给单片机,单片机通过lcd1602在proteus中仿真显示(进一步校验虚拟单片机收到的数据是否无误),通过比对三个显示装置中的数据,可以观察数据通信是否无误,从而进一步通过硬件与软件调试达到设计要求。5设计框图VIRTUAL TERMINA

8、LLcd1602虚拟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清除发送9R

9、IRing 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中点击虚拟串口,弹出如下对话

10、框,物理端口与STC_ISP中的串口必须保证一致,波特率都是2400,须与程序中设置的波特率相同,否则无法通信或者出现乱码,这里是能否通信关键所在,一定要配置好。其他参数选择默认就可以了。4 配置虚拟终端在proteus中点击虚拟终端,弹出如下对话框,进行相关配置。因为是监视虚拟串口发给单片机的数据所以只需将波特率配置成2400,与虚拟串口波特率保持一致即可,其他参数选择默认值。8程序设计8.1设计思路硬件电路程序关键在于数据发送程序的设计,同时也要注意超声波测距模块的测距频率与发送程序的波特率,只有合理设置才能确保数据正确发送。虚拟单片机接收程序应该保证将每一次发送的数据都在lcd上准确显示

11、,不丢数据,无误码,基于这些要求,经过反复调试,最后将超声波测距周期设定为250ms(超声波测距模块测距范围2450cm,精度两位小数),即串口数据发送周期为250ms,lcd显示数据则保留两位小数,串口数据发送波特率设为2400,理论上可以保证数据传输误码率在0.2%以下。基于串口通信每一帧只能发送一个字符,为了将测得的数据在proteus中正确显示,因此在每一次发送数据后面加上“CM”作为数据发送的结束标志,接收方采用串行中断的方式,通过检测字符M来判断一次发送数据是否结束,并将数据保存到缓存数组中,然后在lcd上显示,经过仿真验证,可以得到很好的仿真效果,达到了测距周期尽可能短同时又保证

12、了数据传输准确性的要求。8.2硬件程序#include #include #include #include #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

13、;/串口工作方式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(;i0;i-) for(j=0;j0;t-) for(j=6245;j0;j-) ; void Conut(void) float time=0; time= (TH0*256+TL0); TH0=0; TL0=0;

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

当前位置:首页 > 办公文档 > 教学/培训

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