实际单片机与虚拟单片机串口通信proteus仿真
课程设计-超声波测距+实际 MSP430 单片机与 proteus 中虚拟 51 单片机串口通信仿真
课题名称超声波测距+实际MSP430 单片机与proteus 中虚拟51 单片机串口通信仿真姓名学号年级专业指导老师完成日期2017年05 月27 日摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的就是实现实际单片机与proteus 中的虚拟单片机进行串口通信,采用MSP430F149 单片机为控制核心、以单线数字温度传感器DS18B20 来完成温度信号的采集、温度以数宇的方式显示在LCD1602 液晶上,最终实现温度的采集、显示。
利用集成的超声波测距模块测出与障碍物之间的距离。
并且利用UART 串口通信将实时数据发送给 proteus 中的虚拟单片机,虚拟单片用的是 AT89C51 单片机。
51 单片机把接收到的数据用液晶模块显示出来,实现和实际单片机电路同步显示,并且设有报警电路,当距离小于5cm 时进行报警。
关键词:超声波测距、MSP430 单片机、LCD 液晶显示、proteus 仿真、AT89C51目录1. 绪论.....................................................................................................1.1. MSP430 单片机概述 (1)1.2. MSP430 的特点 (2)1.3. 课题研究的主要内容 (3)2. 系统总体方案设计.........................................................................................2.1. 控制系统的原理图 (4)2.2. 超声波测距的原理 (4)2.2.1. 超声波发生器 (5)2.2.2. 超声波测距原理 (5)2.2.3. 超声波测距误差分析 (6)2.2.3.1. 温度误差 (7)2.2.3.2. 时间误差 (7)2.3. 温度测量原理 (8)3. 硬件系统与软件系统设计...................................................................................3.1. 硬件部分 (8)3.1.1. MSP430F149 单片机 (8)3.1.1.1. MSP430F149 的组成 (9)3.1.1.2. MSP430F149 的定时器及转换模块 (9)3.1.2. 单线数字温度传感器DS18B20 (9)3.1.2.1. 温度传感器DS18B20 特点 (10)3.1.2.2. 温度传感器DS18B20 内部结构 (10)3.1.2.3. DS18B20 读/写时序图: (13)3.1.3. 超声波测距模块 (13)3.1.3.1. HC-SR04 超声波模块原理图 (13)3.1.3.2. 实物图: (14)3.1.3.3. 电气参数: (14)3.1.3.4. 超声波时序图: (15)3.1.4. 报警模块 (15)3.1.5. 液晶显示模块 (16)3.2. 软件部分 (16)3.2.1. 主处理的流程图 (16)3.2.2. 温度采集DS18B20 模块 (18)3.2.3. 超声波传感器模块 (19)3.2.4. 报警模块 (20)4. Proteus 中虚拟单片机的仿真系统设计..........................................................................4.1. Proteus 简介 (20)4.2. ISISI 编辑器介绍 (21)4.3. Proteus 中虚拟单片机仿真图搭建 (23)4.3.1. 51 单片机最小系统电路 (23)4.3.2. proteus 中1602 液晶电路 (23)4.3.3. 虚拟终端以及串口电路 (24)4.4. 在Proteus 中画出完整的电路图 (25)4.5. 配置Proteus 中的虚拟串口 (25)4.5.1. 虚拟串口配置 (25)4.5.2. 配置虚拟终端 (26)4.6. 在µVision4 IDE 中编写51 代码 (26)4.6.1. Keil 中写代码 (26)4.6.2. .HEX 文件添加到虚拟51 单片机 (27)4.7. Proteus 仿真 (27)5. 电路调试及误差分析 (28)5.1. 电路的调试 (28)5.2. 系统的误差分析 (28)5.2.1. 声速引起的误差 (28)5.2.2. 单片机时间分辨率的影响 (29)6. 总结 (30)7. 附录 (31)7.1. 附录1-----本课题的实物图: (31)7.2. 附录2-----实际单片机(430)程序代码: (32)7.3. 附录3-----proteus 虚拟单片机(51)程序代码: (38)8. 参考文献 (42)1. 绪论本章简要介绍单片机技术在工业上的主要应用,MSP430 单片机的概述及特点,以及课题研究的主要内容。
Proteus仿真串行通信和虚拟终端的连接测试
Proteus仿真串行通信和虚拟终端的连接测试说明:1.我用了四款软件(下面提供下载链接,以下都是破解版软件,无需序列号)Proteus 7.5 sp3(电子仿真软件)虚拟串口程序串口调试助手keil2编译软件正文目前我会的有3种1.单片机+虚拟终端(作为串口输入设备)+串口2.单片机+虚拟终端(作为串口输入设备)+MAX232+串口3.单片机+串口+虚拟串口程序(virtual serial port)+串口调试助手4.单片机+MAX232+串口+虚拟串口程序(virtual serial port)+串口调试助手(这个不会,主要是不知道该怎么在Proteus中连线,理论上方法4和3的连线方法是没有太大差别的,我也不知道哪里设置不对,一直没弄成功,问题出在加入了MAX232后)方法1和2的区别不大,只是在串口和单片机中间多接个MAX232,因为是仿真软件,所以串口有和没有MAX232的仿真结果是一样的,就是细节上的设置不同方法1连线如下:方法2连线图如下:方法1和方法2的区别在PCT(虚拟终端输入串口的PCT计算机发送端)的一个设置参数不同,(当波特率改变的时候虚拟终端里面的波特率设置也要改变)方法1设置如下方法2设置如下不同的地方在PCT,串口这边的虚拟终端的RX/TX Polarity的设置不同,当在单片机和串口间没接入MAX232,该项设置为normal,当在其间接入了MAX232该项设置为inverted。
综上所述:方法1和方法2其实是1类方法,共同点是单片机的发送端(TXD)与串口接收端(RXD)相连,单片机接收端(RXD)与串口发送端(TXD)相连。
(这种连接是交叉连接)方法3和方法4区别不大,只是在串口和单片机之间多加入了MAX232,其实实物连接时是要加入MAX232的,但是加入MAX232的方法4用Proteus仿真不出来,就仿真效果而言方法3和方法4是一样的。
方法3连线图如下:方法4连线图如下:Proteus串口设置如下图:串口调试助手设置如下:虚拟串口程序界面如下:单片机虚拟终端的选项作用如下:如果输入的是ASCII码,那么就不要勾选Hex Display mode如果输入的是16进制,那么就要勾选Hex Display modeclear screen 是清屏echo typed characters 是当你在虚拟终端窗口输入字符时,输入的字符显示在虚拟中断窗口内。
单片机与PC通信-(proteus与虚拟串口驱动软件以及串口调试助手的仿真)
单片机与PC通信-(proteus 与虚拟串口驱动软件以及串口调试助手的仿真)实验:单片机与PC通信(proteus与虚拟串口驱动软件以及串口调试助手的仿真)实现内容:设置单片机串行口为工作方式一,波特率为9600。
PC从串口发送字符1、2、3或4到单片机串行口,单片机接收到该字符后,首先在P2 口显示字符,然后根据字符不同返回不同字符串,具体要求如下表:表:单片机与PC通信内容一、proteus仿真图:(此proteUS 仿真图可 免费下载, 下载网址:)1、图1.12、注意:(1)51单片机属性的时钟频率(clock frequency )必为11.0592mhz , 否则无法仿真。
请按下图设置AT89SC52PJXJ/M.ID R9.1/&C1 P92/AC2 F*1 V*ti3 F-J 對 Mil PJ.5/WLI5 r.-j--p. Rjjr«i7 P2CU^ 就.sg P2JA1Q 咱•佃H E7SJA1J F2.E1A14 F3皿旳pi.omB F3?JMT0~RZM S T TF5TFlEHI卩卫 Pl 陀曲丽■图1.23、在仿真图中P1即(元件名称:COMPIN模块为集成电平转换的串行通信接口(如下图)(1)图1.3(2)设置参数如下图1.44、虚拟串口驱动设置 在右侧选择端口一: “COM ”端口二:“COM4,然后按“添加端口” ,此时左侧的Virtual ports 下出现:工 Virtual portsS <2 CQM3 [960Q'N^-l]* COM4 [96OO-N-E-11图1.5表示添加了 COM3 COM4^对虚拟串行口,且 已连接,故我们把单片机和PC 选择COM 和 COM4 (如图1.4中的physical port 选项:COM4图 中:串口号COM )。
接着再在右侧选择 端口一:“COM ”端口二:“COM2则为下图,劃E 雷口驱訟6.9 by 耽III 汉化Manage port 占 Port access list 匚 u stem pin outMPD 肓餉魏幢任何你想使用的端口号的虛拟端口 .所以你可以不 受端口吕;3躯的限制1旦呈诒诵■呆I'」芒腔垮支持这些端口号p no port selected no port 眸血“cf使用精确的遁特率模报 综路中斷重新皈夏连接所有虎拟端口捋质全部刪像请 确认所有端口业时都处于关闭 状态。
单片机用proteus仿真双机串口通信总结体会
单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。
《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。
Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。
本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。
电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。
2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。
主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。
串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。
3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。
首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。
然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。
总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。
基于Proteus虚拟终端51单片机仿真:串口发送和接收字符串
先上图:实验程序:/********************************************************************************* * 【编写时间】: 2016年6月12日* 【作者】:小瓶子* 【实验平台】: Proteus 7* 【内部晶振】: 11.0592mhz* 【主控芯片】: STC89C51* 【编译环境】: Keil μVisio4* 【程序功能】:利用虚拟中断实现串口数据的发送和接收**********************************************************************************/#include <reg51.h>#define uint unsigned int#define uchar unsigned char//毫秒级延时函数void delay(uint x){uchar i;while(x--){for(i = 0;i < 120;i++);}}//字符发送函数void putchar(uchar data1){SBUF = data1; //将待发送的字符送入发送缓冲器while(!TI); //等待发送完成TI = 0; //发送中断标志请0}//字符串发送函数void putstring(uchar *dat){while(*dat != '\0') //判断字符串是否发送完毕{putchar(*dat); //发送单个字符dat++; //字符地址加1,指向先下一个字符 delay(5);}}//串口初始化函数void serial_init(){uchar c = 0;SCON = 0x50; //串口方式1 ,允许接收TMOD = 0x20; //T1工作于方式2PCON = 0x00; //波特率不倍增TL1 = 0xfd;TH1 = 0xfd; // 波特率设置为9600EA = 1; //开总中断ES = 1; //开串口接收中断}//主函数void main(){serial_init(); //串口初始化TR1 = 1; //定时器开启delay(200);putstring("Receiving from 8051...\r\n"); //串口向终端发送字符串,结尾处回车换行putstring("----------------------\r\n");delay(50);while(1);}//串口中断void revdata() interrupt 4{uchar temp;if(RI == 0) return; //如果没有接收中断标志,退出中断ES = 0; //关闭串口中断RI = 0; //清串行中断标志位temp = SBUF; //接收缓冲器中的字符putchar(temp); //将接收的字符发送出去ES = 1; //开启串口中断}仿真:。
单片机与PC通信-(proteus与虚拟串口驱动软件以及串口调试助手地仿真)
实验:单片机与PC通信(proteus与虚拟串口驱动软件以及串口调试助手的仿真)实现内容:设置单片机串行口为工作方式一,波特率为9600。
PC从串口发送字符1、2、3或4到单片机串行口,单片机接收到该字符后,首先在P2口显示字符,然后根据字符不同返回不同字符串,具体要求如下表:一、proteus仿真图:(此proteus仿真图可免费下载,下载网址:)1、图1.12、注意:(1)51单片机属性的时钟频率(clock frequency)必为11.0592mhz,否则无法仿真。
请按下图设置AT89SC52图1.23、在仿真图中P1即(元件名称:COMPIN)模块为集成电平转换的串行通信接口(如下图)(1)图1.3(2)设置参数如下图1.44、虚拟串口驱动设置在右侧选择端口一:“COM3”端口二:“COM4”,然后按“添加端口”,此时左侧的Virtual ports下出现:图1.5表示添加了COM3,COM4一对虚拟串行口,且已连接,故我们把单片机和PC选择COM3和COM4。
(如图1.4中的physical port选项:COM4;图中:串口号COM3)。
接着再在右侧选择端口一:“COM1”端口二:“COM2”,则为下图,图1.6虚拟串口驱动设置完毕5、串口调试助手设置如图1.7图1.76、(1)将“程序”在Keil软件中编译生成“HEX”文件,加载到仿真图中的AT89C52中,启动仿真图1.9(2)按下图1.7中串口调试助手的“连接”按钮,在串口调试助手的”发送窗口”,依次输入1、2、3、4和5,发送后可以看到单片机返回的字符串一次显示在接收窗口。
如下图所示实验程序#include <reg52.h>#include <stdio.h>#include <intrins.h>#include <Absacc.h>#include <string.h>#include <ctype.h>#define byte unsigned char#define uchar unsigned char#define word unsigned int#define uint unsigned int#define ulong unsigned long#define BYTE unsigned char#define WORD unsigned int#define TRUE 1#define FALSE 0void time(unsigned int ucMs);void initUart(void);void sendString(uchar *ucString);void main(void){time(1);initUart();IE=0x90;while(TRUE){}}void initUart(void){SCON =0x50; //选择串口工作方式,打开接收允许RCAP2H=(65536-(3456/96))>>8;RCAP2L=(65536-(3456/96))%256;T2CON=0x34;//启动定时器T1}void serial0_int(void) interrupt 4{uchar rChar;uchar code str1[]="What do you plan to do this Friday?";uchar code str2[]="I plan to go to the concert.";uchar code str3[]="What are you doing next week?";uchar code str4[]="I'm think of going to my grandma's.";uchar code strdefault[]="Please select a character '1','2','3'or '4'!";EA=0;RI=0;rChar=SBUF;P2=rChar;switch(rChar){case '1':SBUF='1';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str1);break;case '2':SBUF='2';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str2);break;case '3':SBUF='3';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str3);break;case '4':SBUF='4';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(str4);break;default:SBUF='d';while(TI==0) {} TI=0;SBUF=':';while(TI==0) {} TI=0;sendString(strdefault);break;}EA=1;}void sendString(uchar *ucString){uchar i,stringLength=strlen(ucString);REN=0;for(i=0;i<stringLength;i++){SBUF=ucString[i];while(TI==0); TI=0;}SBUF=0x0d;while(TI==0) ; TI=0;SBUF=0x0a;while(TI==0) ; TI=0;SBUF=0x0a;while(TI==0) ; TI=0;REN=1;}void delay_5us(void){_nop_() ;_nop_() ;}void delay_50us(void){unsigned char i;for(i=0;i<4;i++);{delay_5us();}}void delay_100us(void){delay_50us();delay_50us();}void time(unsigned int ucMs) {unsigned char j;while(ucMs>0){for(j=0;j<10;j++);delay_100us();ucMs--;}}。
(完整word版)proteus串口仿真
利用“串口调试助手”等软件调试 PROTEUS 环境中 51单片机的串行通信在前面的博文“利用 PROTEUS 软件调试串口通信最简单实用的方法”中,做而论道介绍了利用 Virtual Terminal(虚拟终端)调试串口通信的方法。
但是 Virtual Terminal 有一定的局限性,只是适合于调试使用键盘输入少量数据的情况。
如果是需要利用 PC 机器的串行口,和其它的软件进行串行通信,Virtual Terminal 就办不到了。
下面,做而论道将介绍两种另外两种仿真调试串口通信的方法。
1、利用 COMPIM 组件在 PROTEUS 软件中,可以找到一个 COMPIM 组件,它的图形、以及默认属性可见下图:把 COMPIM 放在仿真电路图中,当仿真运行起来之后,送到 COMPIM 3 号引脚的串行数据,将会通过 PC 机的 COM1 串行口输出,如果在 PC 机的 COM1 串行口外接一条电缆,可将串行数据送到其它的硬件设备上。
同样道理,其它的硬件设备送到 PC 机的 COM1 的串行数据,也会在 COMPIM 的2号引脚出现,送到仿真电路里面。
COMPIM 组件内部,自带 RS-232 和 TTL 的电平转换功能,因此不需要再使用电平转换芯片。
利用 COMPIM,就可以用一台 PC 机,仿真带有串行口的单片机系统,通过外接的电缆,和另外一台 PC 机进行全双工的串行通信。
十分轻松的就实现了对远程测量、控制系统进行仿真调试。
2、利用 Virtual Serial Port Driver 软件上述的调试方法,可以说是很完备的了,但是还是必须在两个串行口之间连接一条串行通信电缆。
为了省去这条电缆,就应该看看虚拟串口软件。
Virtual Serial Port Driver 软件可以为 PC 机增加一些两两连接的虚拟串行口。
该软件运行起来如下图所示:在图中可以看到,COM1、COM2 就是“一对连接好虚拟串行口”;PC 机原来就有的实际的串行口,称为物理串行口,为 COM3。
基于PROTEUS的单片机串口通信的实例设计与仿真
【 关键 词】rtu 软件 ; Poes 串口通信 ; 仿真
O
引言
Viul e a P r r a S r l ot XP软 件 是 一 种 高级 的 配置 工 具 。用 于模 拟 RS 3 t i s 22
串 口通 信 , 以使 用 它 为 应 用 程 序 提 供 虚 拟 串 口 . 个 虚 拟 串 口的 功 可 这 Poe s 件 是 由英 国 L bC ne lcrnc 司 开 发 的 E A 工 rtu 软 a etr et i E o s公 D 能 就像 标 准 的硬 件 串 口一 样 , 研 发 人 员 提 供便 利 。 为 具 软件 , 已有 近 2 0年 的 历 史 , 全 球 已得 到广 泛 使 用 。 它不 仅 是模 拟 在 使 用 软件 V r a ei o sX , 开 软 件 后 . 图 2所 示 .OM3 iu l r l r P 打 t S aPt 如 C 电 路 、 字 电路 、 数 混 合 电路 的 设 计 与 仿 真平 台, 是 目前 最 先进 的 数 模, 也 是 电脑 上 实 际 的 物 理 串 口 , 击 “ d ar可 立 即 添加 一 对 虚 拟 串 口 单 A dp i ” 实 现嵌 入 式 系 统 在 计 算 机 上 完 成从 原 理 图设 计 、代 码调 试 与仿 真 、 系 C M1和 C M2 这 样 就 连 接 好 一对 虚 拟 串 口 。 O O , 统 测 试 与 功 能 验 证 到 形 成 P B的完 整 的设 计 、 真 和 研 发 的 平 台 。在 C 仿 22 上位 机 软 件 设 置 . 缺 乏 硬 件 的情 况 下 , 是 一 款 非 常 实用 的仿 真 软 件 , 仿 真 的原 理 图 经 这 其 P C与 单 片 机 的通 信 常 用 V B或 V 中的 MS o C C mm控 件 编写 . 设 本 验证后可直接应用到现实中。 计 使 用 “ 口调 试 助 手 ” 实 现 P 对 Poe s 联 系媒 介 。 如 图 3所 串 来 C rtu 的 目前 , 多 高 校 已引 入 这 套 软 件 , 为理 论 教 学 和 实 践 教 学 的 必 很 作 示 , 类 软件 的使 用 一 定 要 注 意 串 口通 信 的 参 数 的 设 置 ( 串 口 , 特 该 如 波 要补充 , 践证明效果很好 ; 且 , 实 而 在一 些 像 海 尔 等知 名 公 司也 已将 它 率 , 据位 , 验 位 , 止 位 )它 们 必 须 与 单 片 机 程 序 总 的 串 E设 置 相 数 校 停 , l 作 为仿 真 和 研 发 平 台 , 大 提 高 了 工作 效 率 , 短 了研 发 周 期 。 大 缩 对 应 。串 口调 试 助 手 则 可 以 真 实 的模 拟 上 位 机 与 单 片 机 进 行 通 信 。正 本 文 通 过 实 例 , A 8 C 1 片 机 为 核 心 , 计 了一 个 P 以 T9 5 单 设 c与 单 确 地使 用 所 有 的信 号 线 和 模 拟 波 特 率 的 工作 , 以 和 使 用 真 实 串 口一 可 片机 的进 行 串 口通信 的 功 能 , 详 细 说 明 了 在 P O E 并 R T US平 台 下 进 行 样 传输 文 件 、 据 。 数 串 口使 用 和 调 试 的 基 本 方 法 。
单片机与PC通信proteus与虚拟串口驱动软件以及串口调试助手的仿真
单片机与PC通信-(proteus与虚拟串口驱动软件以及串口调试助手的仿真)————————————————————————————————作者:————————————————————————————————日期:实验:单片机与PC通信(proteus与虚拟串口驱动软件以及串口调试助手的仿真)实现内容:设置单片机串行口为工作方式一,波特率为9600。
PC从串口发送字符1、2、3或4到单片机串行口,单片机接收到该字符后,首先在P2口显示字符,然后根据字符不同返回不同字符串,具体要求如下表:表:单片机与PC通信内容PC发送字符单片机返回1 1:What do you plan todo this Friday?2 2:I plan to go to theconcert.3 3:What are you doingnext week?4 4:I'm think of going tomy grandma's.其他字符5:Please select acharacter '1','2','3'or '4'!一、proteus仿真图:(此proteus仿真图可免费下载,下载网址:)1、图1.12、注意:(1)51单片机属性的时钟频率(clock frequency)必为11.0592mhz,否则无法仿真。
请按下图设置AT89SC52图1.23、在仿真图中P1即(元件名称:COMPIN)模块为集成电平转换的串行通信接口(如下图)(1)图1.3(2)设置参数如下图1.44、虚拟串口驱动设置在右侧选择端口一:“COM3”端口二:“COM4”,然后按“添加端口”,此时左侧的Virtual ports下出现:图1.5表示添加了COM3,COM4一对虚拟串行口,且已连接,故我们把单片机和PC选择COM3和COM4。
(如图1.4中的physical port选项:COM4;图中:串口号COM3)。
两片单片机之间的串行通信(proteus仿真图+程序)
两片单片机之间的串行通信(仿真图+程序)AT89C51+MAX232功能:(1)甲机P1口的开关控制乙机P1口的发光二级管,开关闭合发光二级管亮,开关断开发光二级管灭。
(2)乙机P2口的开关控制甲机P2口的数码管,按下4*4矩阵键盘,显示对应的键值0~F (3)乙机P0^0口的开关控制甲机P2口的数码管,按下按键,数码管从0~9循环显示;乙机P0^2口的开关控制甲机P2口的数码管,按下按键,数码管清零。
/****************************甲机控制与接收*********************************/ #include <reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit K0=P1^0;sbit K1=P1^1;sbit K2=P1^2;sbit K3=P1^3;sbit K4=P1^4;sbit K5=P1^5;sbit K6=P1^6;sbit K7=P1^7;uchar i;uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}void main(){ uchar i;P2=0x00;SCON=0x50; //串口模式1TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定6900TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断while(1){ if(K0==0) send('0'); else send('A');if(K1==0) send('1'); else send('B');if(K2==0) send('2'); else send('C');if(K3==0) send('3'); else send('D');if(K4==0) send('4'); else send('E');if(K5==0) send('5'); else send('F');if(K6==0) send('6'); else send('G');if(K7==0) send('7'); else send('H');}}void serial_int() interrupt 4 //甲机串口接收中断函数{ if(RI){ RI=0;if(SBUF>=0 &&SBUF<=15)P2=tab[SBUF];elseP2=0x00;if(SBUF=='x')if(i>=0&&i<9){i=i+1;P2=tab[i];}if(i==9) i=0;if(SBUF=='y'){P2=0x00;i=0;}}}/*****************************乙机控制与接收程序*****************************/ #include <reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit L0=P1^0;sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L4=P1^4;sbit L5=P1^5;sbit L6=P1^6;sbit L7=P1^7;sbit KEY1=P0^0;sbit KEY2=P0^2;void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y<0;y--);}void send(uchar c) //向串口发送字符{ SBUF=c;while(TI==0);TI=0;}uchar key() //按键扫描{ uchar keyon,temp;P2=0x0f;delay(1);temp=P2^0x0f;switch(temp){ case 1:keyon=3;break;case 2:keyon=2;break;case 4:keyon=1;break;case 8:keyon=0;break;default:keyon=16;}P2=0xf0;delay(1);temp=P2>>4^0x0f;switch(temp){ case 1:keyon+=0;break;case 2:keyon+=4;break;case 4:keyon+=8;break;case 8:keyon+=12;break;}return keyon;}void main(){ SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1 工作模式2PCON=0x00; //波特率不倍增TH1=0xfd; //波特率设定: 9600TL1=0xfd;TI=RI=0;TR1=1; //启动定时器T1IE=0x90; //允许串口中断delay(100);while(1){ P2=0xf0; //矩阵键盘if(P2!=0xf0)send(key());if(KEY1==1) //独立按键{ delay(20);if(KEY1==0)send('x');}if(KEY2==0) //清零send('y');}}void serial_int() interrupt 4 //乙机串口接收中断函数{ if(RI){ RI=0;switch(SBUF){ case '0':L0=0;break;case '1':L1=0;break;case '2':L2=0;break;case '3':L3=0;break;case '4':L4=0;break;case '5':L5=0;break;case '6':L6=0;break;case '7':L7=0;break;case 'A':L0=1;break;case 'B':L1=1;break;case 'C':L2=1;break;case 'D':L3=1;break;case 'E':L4=1;break;case 'F':L5=1;break;case 'G':L6=1;break;case 'H':L7=1;break;}}}。
proteus虚拟串口实现
proteus虚拟串⼝实现1.概述 主要介绍如何在proteus中搭建串⼝通讯电路,然后在PC中使⽤串⼝助⼿和proteus中的MCU进⾏通信。
2.主要使⽤到的软件 ① Proteus Proteus是由Lab Center Electronics公司推出的软件。
除具有其它EDA软件的仿真功能,还能仿真及其外围器件。
在下⾯⽰例中我使⽤的版本为proteus 7.8 sp2,详情如下图所⽰: 参考下载地址: ②vspd( virtual serial port driver ) VSPD是⼀款虚拟串⼝的软件。
可以虚拟2个串⼝然后连接起来实现⾃发⾃收调试,让你的程序读⼀个串⼝,另外⼀个串⼝你就⽤来串⼝调试⼯具。
在下⾯⽰例使⽤到的版本为VSPD v6.9,详情如下图所⽰: 参考下载地址:3.实现串⼝通信 1、创建虚拟串⼝对 ①打开VSPD软件,设置好需要创建的串⼝对的端⼝号,然后点击【添加端⼝】按钮; ②进⼊【Custom pinout】选项卡,红⾊框内的参数保持默认,如果需要设置流控和串⼝类型的,可以根据实际情况进⾏设置,这⾥不作叙述。
③测试创建的虚拟串⼝对是否能正常进⾏通信,下⾯以【9600波特率,8位数据位,1位停⽌位,⽆校验,⽆流控】进⾏测试,需要的波特率只需要在串⼝助⼿中修改即可,和平常的串⼝⽆异;经过测试,确定虚拟串⼝通信正常,结果如下图: 2、搭建proteus仿真电路 ①电路⽰意框图,我们在proteus使⽤DB9母头和MAX232电平转换芯⽚相连接 ② DB9管脚定义及连接参考 ③电路原理图,这⾥的MCU使⽤AT89C51来做演⽰,这⾥的51单⽚机并没有接外围电路,因为在proteus仿真软件⾥⾯不接也是可以正常运⾏的。
(注:由于MAX232在proteus中的⾮符号管脚并⽆取反的作⽤,所以需要在12脚和14脚输出时添加⼀个⾮门器件) 附1:MAX232参考电路(来⾃MAX232N 数据⼿册) 附2:使⽤到的器件表(可以按此名称再proteus库中直接搜索对应器件) 附3:Proteus中DB9串⼝参数设置及串⼝助⼿参数设置 这⾥【Component Reference】和【Component Value】不是必填选项,下⾯的端⼝选择我们之前创建的虚拟串⼝对【COM2和COM3】中的其中⼀个,演⽰时我这边使⽤【串⼝3,波特率9600,8位数据位,1位停⽌位,⽆校验,⽆流控】的参数条件。
重要51单片机和Proteus+虚拟串口调试
51单片机和Proteus 虚拟串口调试(原创)解释下什么是51单片机和Proteus 虚拟串口调试,就是我们不需要实际的串口进行调试,只需要用protues加串口,在加串口调试助手就行了。
写好单片机串口程序加载到protuse 仿真里,这边串口调试助手就有反应。
比如我们的程序是单片机通过串口发送数据C到电脑,然后串口调试助手就回接收到C。
也可以有单片机接收数据串口调试助手发送数据。
这样不需要实际的串口也可以进行串口调试。
下面就让我们开始吧。
1.首先,需要一个虚拟串口软件Virtual Serial Ports Driver XP 5.0没有的就自己百度下吧。
2.其次是需要虚拟串口调试软件(串口调试小助手)文件和串口调试的例子。
3、设置虚拟串口(如图)开始界面(图1)图(1)然后按add pair 添加串口,添加了COM3和COM4,执行后如下图4、我们启动虚拟串口调试软件5、打开自己的仿真图。
这里要特别说明下单片机的RXD连接COMPIN的RXD,单片机的TXD连接COMPIM的RXD。
以我们的经验是RXD接TXD,TXD接RXD。
这里我就遇到麻烦了很调试了好久。
大家注意。
终端串口VTERM还是RXD接TXD,TXD接RXD。
6设置COMPIM的属性我们需要关心的是Physical port、Physical Baud Rate、Virtual Baud Rate 这三个栏目,请切记住它们的设定值,特别是波特率的值一定要与源文件(C程序)规定的值一定,比如我们这里是9600则就是因为源文件中设置的就是9600,在这里我们一定要选择好COM3,默认是COM1,一定要注意呀。
设置完成这个界面如上图。
7、现在我们又要返回到串口调试小助手。
我们需要把串口号和波特率设置,串口号一定记住在COMPIM中我们设置成了COM3,在这里要设置成COM4 才行,我试了COM3 是不出现的。
波特率一定要与COMPIM的波特率设置成一样的。
proteus仿真51单片机串口双机通讯
51单片机的串口双机通讯一、什么是串口串口是串行发送数据的接口,是相对于并口来说的,是一个广泛的定义。
本期我们说的串口指的是指UART或是RS232。
二、什么是波特率波特率是指串行端口每秒内可以传输的波特位数。
这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位。
一个字节需要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位。
9600bps用模式1传输时,每秒传输的字节数是9600÷10=960个字节,发送一个字节大概需要1ms时间。
三、51单片机串口相关寄存器1、SCON串口控制寄存器(1)SM0和SM1:方式选择寄存器SM0 SM1 工作方式功能波特率0 0 方式0 8位同步移位寄存器晶振频率/ 120 1 方式1 10位UART 可变1 0 方式2 11位UART 晶振频率/32或晶振频率/64 1 1 方式3 11位UART 可变多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。
当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。
(3)REN:允许接收位REN用于控制是否允许接收数据,REN=1时,允许接收数据,REN=0时,拒绝接收数据。
(4)TB8:要发送的第9位数据位在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址。
(5)RB8:接收到的第9位数据位当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到RB8中。
方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。
(6)TI:发送中断标志位方式0中,不用管他。
基于Proteus的单片机串口通信仿真
Proteus班级:电信13-2姓名:段学亮邓成智崔俊杰邓石磊陈亮高金玉成绩:电子与信息工程学院信息与通信工程系1.设计要求1.1甲单片机向乙单片机机发送控制命令字符,甲单片机同时接收乙单片机机发送的数字,并显示在数码管上。
1.2乙机程序接收甲机发送字符并完成相应动作乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
2. 仿真电路图串口通信仿真电路图如图一图1:串口通信仿真电路图3.串口通信C51程序/* 名称:甲机串口程序说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。
*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P1^0;sbit LED2=P1^3;sbit K1=P1^7;uchar Operation_No=0; //操作代码//数码管代码uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//向串口发送字符void Putc_to_SerialPort(uchar c){SBUF=c;while(TI==0);TI=0;}//主程序void main(){LED1=LED2=1;P0=0x00;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1工作模式2PCON=0x00; //波特率不倍增TH1=0xfd;TL1=0xfd;TI=RI=0;TR1=1;IE=0x90; //允许串口中断while(1){DelayMS(100);if(K1==0) //按下K1时选择操作代码0,1,2,3{while(K1==0);Operation_No=(Operation_No+1)%4;switch(Operation_No) //根据操作代码发送A/B/C或停止发送{case 0: Putc_to_SerialPort('X');LED1=LED2=1;break;case 1: Putc_to_SerialPort('A');LED1=~LED1;LED2=1;break;case 2: Putc_to_SerialPort('B');LED2=~LED2;LED1=1;break;case 3: Putc_to_SerialPort('C');LED1=~LED1;LED2=LED1;break;}}}}//甲机串口接收中断函数void Serial_INT() interrupt 4{if(RI){RI=0;if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF];else P0=0x00;}}/* 名称:乙机程序接收甲机发送字符并完成相应动作说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
Labview及Proteus软件环境下单片机串口通讯的仿真方法
0 引言Labview是美国国家仪器公司(NI公司)推出的专为数据采集、仪器控制、数据分析与数据表达的图形化编程环境,它是一个开放的开发环境,具有PCI,GPIB,PXI,VXI,RS-232/485,USB等各种仪器通讯总线标准的所有功能函数,开发者可以利用这些函数与不同总线标准接口的数据采集硬件交互工作。
但现实中的数据采集卡很多是利用美国NI公司提供的专用数据采集卡,价格较贵,不利于普及Labview软件测控的学习和应用。
Proteus软件支持51单片机,集程序编辑,原理图绘制和程序仿真于一体,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路,具有电路互动仿真功能,通过动态外设模型,如键盘、开关,发光二极管,数码管,液晶和传感器、电机等,可实时显示单片机系统输入、输出结果;另外还配置了多种虚拟仪器如示波器、逻辑分析仪等,方便对实验图形和数据的测量。
基于Labview和Proteus的特性,本文利用Proteus仿真下位机运行,而Labview实现上位机对下位机运行的监控,两软件采用虚拟串口进行RS-232串口通讯,在纯软件环境下,完成基于Labview软件数据采集系统的组建。
这种方法成本低,效率高,可以方便地应用到测控技术的学习和设计中。
要实现上述方法,当然要正确安装Labview和Proteus软件,另外还必须安装NI_VISA串口通讯协议驱动和虚拟串口软件VSPD XP。
本文通过虚拟串口软件VSPD XP模拟出一对互联的虚拟串口,分别为COM3和COM4,并且把COM3配置给Proteus环境下的单片机串口终端,把COM4配置给Labview作为串口资源[1]。
本文通过一个上位机监控下位机走马灯电路的实验,来介绍这种Labview及Proteus软件环境下单片机串口通讯的仿真方法。
1 基于Labview的上位机信号处理和显示软件设计Labview虚拟仪器程序由前面板和框图程序组成,前面板是人机交互的界面,界面上有用户输入和显示输出两类控件;框图程序则是用户编制的程序源代码,以定义和控制在前面板上的控件输入和输出功能。
单片机虚拟串口在Proteus中的使用
单片机虚拟串口在Proteus中的使用
单片机虚拟串口在Proteus中的使用
虚拟串口在Proteus中的使用,更准确的应该说是串口在Proteus 中的使用,只不过我们用软件实现仿真,虚拟串口在这使用的比较频繁。
先在Proteus中将环境建立起来,很简单,先需要两个元器件就可以建立连接VIRTUAL TERMINAL和COMPIM,如图VIRTUAL TERMINAL的TXD 与COMPIM的TXD相连,RXD与RXD相连,后面有图分析为什幺这样相连:
VIRTUAL TERMINAL是串口监视仪器,可以通过它将数据线上的符合RS232协议的波形捕捉到,并显示出来,也可以往数据线上发送RS232协议的波形;COMPIM为串口元件,可设置占用计算机上哪一个串口,可以是实际串口,也可以是虚拟串口,对Proteus而言,是分不清虚拟串口还是实际串口的。
下一步就要设置通信速率以及通信格式了,在属性框中实现设置相同的就行了。
这样就可实现数据的通信了。
图为本人的VIRTUAL TERMINAL和COMPIM的设置:。
基于PROTEUS的PC机与单片机串口通信的仿真
图4
图5
打开自编的串口调试工具,如图图 4 串口 选择一对虚拟串口 C O M 3 、C O M 4 中的 C O M 3 波特率、数据位、停止位等参数的设置见图 5。
用 Proteus 打开仿真电路文件,先设置 AT89C51 的属性,右击选中 A T 8 9 C 5 1 ,再用
图6
左键单击 A T 8 9 C 5 1 ,在出现的属性对话框里 点击 P r o g r a m F i l e 后的打开按钮, 找到自 Wave 或 Keil 源程序编译好的.HEX 文件后单 击打开,然后在 Clock Frequency 后填写 l1. 0 5 9 2 M , 单击 O K . 接下来打开串口 C O M P I N 的属性对话框,在 PhsicalPort 后选择 COM4, 其它参数的设置见图 6 。
科技咨询导报 2007 NO.26
Science and Technology Consulting Herald
地区管理可以将同一地区的用户资料进行汇 总,方便催缴任务管理中对相同地区的用户制 定统一的催缴方式。
催缴方式管理.催缴方式管理包括催缴内 容设定、呼出方式设定、催缴频率设定等。
设定催缴内容: 如: 欢迎辞( 信) 、感谢辞 ( 信) 、礼貌催缴、严厉催缴、停机警告等;
系统通过催缴系统与营帐系统互连,根据 用户的余额、欠费和实时话费,实时更新用户 记录的状态。保证话费预警催缴系统必须使 催缴表中的数据与用户资料中的数据同步。 避免已经缴过费的用户又收到催缴信息。
为方便系统运营者进行方便的催缴管 理。系统提供统一的一个催缴管理设置界面, 可以让管理者根据需要灵活设置催缴任务。 同时, 系统支持对通知, 催缴过程及效果的分 析统计。在欠费用户数据库中,设置用户在通 过一次话费催缴后缴费与否,然后可据此对催 缴效果的统计分析。
用proteus里的单片机跟pc的串口调试工具进行串口仿真使用说明
用proteus里的单片机跟pc的串口调试工具进行串口仿真
虚拟串口是用说明
安装后你会看到如下画面:
上面为你实际的物理串行口,下面是虚拟的物理串行口。
下面我们来增加一对虚拟串行口。
因为一般的电脑最多为两个串行口,在这个画面上,我们设置first为com3,second为com4,点击add pair就可以增加一对虚拟串口(如下图所示)。
这两对端口是通过这个软件物理连接的,并且是rs232电平连接。
这样我们就完成里串口的设置,可以把此软件关闭,这两个端口将会一直存在于你的电脑中,下次直接使用就可以了。
Protus中的串口设置
仿真电气原理图请打开本例的仿真文件:
下面我们对串口进行设置和邦定:
在proteus右键单击上面的图选定,然后左键单击此元件打开它
的属性对话框。
如下图所示:
设置蓝色框内的参数,为你实际的参数,其中红色圈内设置为你要邦定的串口,本例邦定为com4,必须为com3和com4中的一个。
下面就是对串口调试工具的设置了,设置如下:
因本例proteus用了com3,那么串口调试工具这里就要邦定为com4了,并且设置为16进制发送和显示,那么这样一切ok,开始吧。
点击proteus的播放键,切换到串口调试工具,哈哈受到数据了。
然后你再发送一些数据给单片机看看,哈哈,是不是很棒呢。
史上最详细!单片机的Proteus虚拟仿真解析
史上最详细!单片机的Proteus虚拟仿真解析1.引言单片机体积小,重量轻,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多种功能,广泛应用于仪器仪表,家用电器,医用设备的智能化管理和过程控制等领域。
以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。
在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。
利用Proteus我们可以很好地解决这个问题,由此我们可以快速地建立一个仿真系统。
2.Proteus介绍Proteus是英国Labcenter Electro-nics公司开发的一款电路仿真软件,软件由两部分组成:一部分是智能原理图输入系统ISIS (Intelligent Schematic Input System)和虚拟系统模型VSM (Virtual Model System);另一部分是高级布线及编辑软件ARES (Adv-Ancd Routing and Editing Software)也就是PCB.2.1 Proteus VSM的仿真Proteus可以仿真模拟电路及数字电路,也可以仿真模拟数字混合电路。
Proteus可提供30多种元件库,超过8000种模拟、数字元器件。
可以按照设计的要求选择不同生产厂家的元器件。
此外,对于元器件库中没有的元件,设计者也可以通过软件自己创建。
除拥有丰富的元器件外,Proteus还提供了各种虚拟仪器,如常用的电流表,电压表,示波器,计数/定时/频率计,SPI调试器等虚拟终端。
支持图形化的分析功能等。
Proteus特别适合对嵌入式系统进行软硬件协同设计与仿真,其最大的特点是可以仿真8051,PIA,AVR,ARM等多种系列的处理器。
Protues包含强大的调试工具,具有对寄存器和存储器、断点和单步模式IAR C-SPY,Keil、MPLAB等开发工具的源程序进行调试的功能;能够观察代码在仿真硬件上的实时运行效果;对显示,按钮,键盘等外设的交互可视化进行仿真。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国民航大学单片机课程设计报告题目:实际单片机与proteus中虚拟单片机串口通信仿真设计时间:2012年 9 月 13 日至 9 月 20 日学院:航空自动化学院专业名称:自动化学号:**********名:***指导老师:***目录1绪论 (3)2设计内容及要求 (3)3串口通信原理 (3)4设计思路 (4)5设计框图 (4)6硬件实现 (5)7电路设计 (7)7.1硬件设计 (7)7.2软件配置 (8)8程序设计 (12)8.1设计思路 (12)8.2硬件程序 (12)8.3虚拟单片机程序............................. 错误!未定义书签。
9 PROTEUS仿真..................................... 错误!未定义书签。
10总结............................................ 错误!未定义书签。
参考文献. (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码是0~127(7位)。
扩展的ASCII码是0~255(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设计框图6硬件实现6.1 STC90C516RD+6.2 Lcd16026.3 超声波模块6.49针串口引脚号缩写英文全称功能说明1DCD Data Carrier Detection数据载波检测2RXD Receive Data接收数据3TXD Transmit Data发送数据4DTR Data Terminal Ready数据终端准备5GND System Ground信号地6DSR Data Set Ready数据设备准备好7RTS Request to Send请求发送8CTS Clear to Send清除发送9RI Ring Indicator振铃指示九针串口引脚功能7电路设计7.1硬件设计将lcd1602液晶的数据端口接到单片机的P0口,RW接P2^5,使能端E接P2^7,RS接P2^6;超声波模块RX端接P1^0,TX端接P1^1,所有硬件电路全部5V电压供电,然后通过USB串口数据线连接到电脑。
7.2软件配置1 首先安装好串口驱动,需根据自己的硬件模块选择驱动安装。
我的是STC官方下载软件STC_ISP。
如下图所示2 在proteus中画出如下电路图,所需主要元件分别为:80C51COMPIMLM016LVTERM3 配置proteus中虚拟串口,实现通信。
在proteus中点击虚拟串口,弹出如下对话框,物理端口与STC_ISP中的串口必须保证一致,波特率都是2400,须与程序中设置的波特率相同,否则无法通信或者出现乱码,这里是能否通信关键所在,一定要配置好。
其他参数选择默认就可以了。
4 配置虚拟终端在proteus中点击虚拟终端,弹出如下对话框,进行相关配置。
因为是监视虚拟串口发给单片机的数据所以只需将波特率配置成2400,与虚拟串口波特率保持一致即可,其他参数选择默认值。
8程序设计8.1设计思路硬件电路程序关键在于数据发送程序的设计,同时也要注意超声波测距模块的测距频率与发送程序的波特率,只有合理设置才能确保数据正确发送。
虚拟单片机接收程序应该保证将每一次发送的数据都在lcd上准确显示,不丢数据,无误码,基于这些要求,经过反复调试,最后将超声波测距周期设定为250ms(超声波测距模块测距范围2~450cm,精度两位小数),即串口数据发送周期为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 = P2^6;sbit RW = P2^5;sbit E = P2^7;sbit RX=P1^0;sbit TX=P1^1;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列(0~15)Ypos 行(0,1)s[] 要显示的字符串{uchar p=0;for(;;){WriteChar(Xpos,Ypos,s[p]);p++;if(s[p]==0)break;if(++Xpos>15){Xpos=0;Ypos^=1;}}}void main(void){uchar s[10]="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_Buffer[20];uchar i=0;uchar Xpos=0;uchar Ypos=0;sbit RS = P2^6;sbit RW = P2^5;sbit E = P2^7;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列(0~15)Ypos 行(0,1)s[] 要显示的字符串{uchar p=0;for(;;){WriteChar(Xpos,Ypos,s[p]);p++;if(s[p]==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工作模式2TL1=0xf3;EA=1;EX0=1;ES=1;TR1=1;while(1){while(Receive_Buffer[i-1]!='M');ES=0;WriteString(2,0,Receive_Buffer);ES=1;i=0;}}void Serial_INT() interrupt 4{ES=0;RI=0;Receive_Buffer[i++]=SBUF;ES=1;}9 proteus仿真proteus中打开仿真按钮,仿真结果如下,从仿真效果来看,通信结果还是比较令人满意的实物仿真示意图实物仿真示意图10 总结通过这次课设,我学会了用理论来指导实践的方法,理论指导的重要性;真实的体验到真正做科学研究的艰辛与一丝不苟。