利用VIRTUAL TERMINAL模拟单片机串口收发实验

合集下载

STC单片机虚拟串口发送程序(超简单)

STC单片机虚拟串口发送程序(超简单)

STC单片机虚拟串口发送程序(超简单)STC单片机(STC12C5A32S)虚拟串口发送程序//虚拟串口发送子函数void Uart(uint8 a){ACC=a; //TXD3是已经定义的任意的发送端口TR1=1;TXD3=0; //发送起始位while(TF1==0);TF1=0; //TF1必须清零,因为只有启用T1中断才会自动清零TXD3=ACC0; //发送8个位也可以用移位来发送,ACC0-ACC7也必须先定义while(TF1==0); //表示ACC的8个位,如果用移位发送,就不用这样定义。

TF1=0;TXD3=ACC1;while(TF1==0);TF1=0;TXD3=ACC2;while(TF1==0);TF1=0;TXD3=ACC3;while(TF1==0);TF1=0;TXD3=ACC4;while(TF1==0);TF1=0;TXD3=ACC5;while(TF1==0);TF1=0;TXD3=ACC6;while(TF1==0);TF1=0;TXD3=ACC7;while(TF1==0);TF1=0;TXD3=1; //发送停止位while(TF1==0);TF1=0;TR1=0;}该子函数使用T1定时器,T0也可以。

采用8位自动重装,重装值为A0Main(){TMOD = 0x21; //T0:模式1,16位定时器。

T1:模式2,8位定时器,自动重装AUXR &= 0x3f; //定时器0和定时器1与普通8051定时器一样(不同的单片机设置可能不同)TL1 = 0xa0; //虚拟串口波特率:9600TH1 = 0xa0;ET0 = 1;ET1 = 0; //T1中断一定不要使用,要不接收会错误TR0 = 1;TR1 = 0;Uart(0xaa); //0xaa是发送的数据,如果接收有误,在发送一个字节后可加点延时//延时While(1); //具体程序此处省略}注:因本人实验的硬件不需要模拟串口来接收数据,故没给出虚拟串口接收程序。

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

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

中国民航大学单片机课程设计报告题目:实际单片机与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%以下。

实验6 单片机与PC机间的串行通信

实验6  单片机与PC机间的串行通信

实验6 单片机与PC机间的串行通信一、实验目的1、掌握电平转换器件RS-232的使用方法;2、掌握Proteus VSM虚拟终端(VITUAL TERMINAL)的使用;3、掌握单片机与PC机间的串行通信软硬件设计方法。

二、实验内容实现利用虚拟终端仿真单片机与PC机间的串行通信。

PC机先发送从键盘输入的数据,单片机接收后回发给PC机。

单片机同时将收到的30~39H间的数据转换成0~9的数字显示,其他字符的数据直接显示为其ASCII码。

单片机和PC机进行通信时,要求使用的波特率、传送的位数等相同。

要能够进行数据传送也必须首先测试双方是否可以可靠通信。

可在PC机和单片机上各编制非常短小的程序,具体可分成PC机串行口发送接收程序、单片机串行口发送程序和单片机串行口发送接收程序。

这三个程序能运行通过,即可证明串行口工作正常。

PC机串行口发送接收程序设置串行口为波特率9600、8位数据、1位停止位、无奇偶校验的简单设置。

从键盘接收的字符可从串行口发送出去,从串行口接收的字符在屏幕上显示。

通过让串行口发送线和接收线短接可测试微机串行口,通过让串行口和单片机系统相接,使用此程序可进一步测试单片机的串行通信状况。

具体程序用BASIC编制,简单易懂。

直接输入即可运行。

程序RS232.三、实验电路原理图图7-1 单片机与PC机间电路原理图四、实验步骤1、在PROTEUS中画好电路原理图。

2、串口模型属性设置串口模型属性设置为:波特率―4800;数据位―8;奇偶校验―无;停止位-1,如图7-2所示。

图7-2 串口模型属性设置3、虚拟终端属性设置PCT代表计算机发送数据,PCR用来监视PC接收到的数据,它们的属性设置完全一样,如图7-3所示。

SCMT和SCMR分别是单片机的数据发送和接收终端,用来监视单片机发送和接收的数据,它们的属性设置也完全一样,如图7-4所示。

单片机和PC机双方的波特率、数据位、停止位和检验位等要确保和串口模型的设置一样,并且同单片机程序中串口的设置一致。

(完整word版)proteus串口仿真

(完整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。

keil MDK 中使用虚拟串口调试串口

keil MDK 中使用虚拟串口调试串口

keil MDK 中使用虚拟串口调试串口看了很多的文章,写的都很简单(其实也很简单:))。

给出个详细一点的教程。

1. 利用VSPD将PC上的两个虚拟串口连接起来。

如图我将COM2 和COM3连接起来。

点击Addr pair。

2. 可以看到Virtual ports上将两个虚拟串口连接到了一起了。

3.虚拟串口准备就绪了。

先将直接输入命令的方式来调试。

我们打开KEIL MDK的,设置成仿真的模式。

点DEBUG.在COMMAND串口输入:MODE COM2 38400, 0, 8, 1 说明:MODE命令的作用是设置被绑定计算机串口的参数。

基本使用方式为:MODE COMx baudrate, parity, databits, stopbits其中:COMx(x = 1,2,…)代表计算机的串口号;baudrate代表串口的波特率;parity代表校验方式;databits代表数据位长度;stopbits代表停止位长度。

例如:MODE COM1 9600, n, 8, 1设置串口1。

波特率为9 600,无校验位,8位数据,1位停止位。

MODE COM2 19200, 1, 8, 1设置串口2。

波特率为19 200,奇校验,8位数据,1位停止位。

4、点回车后,再输入ASSIGN COM2 <S1IN> S1OUT 说明:COMx代表计算机的串口,可以是COM1、COM2、COM3或其他;inreg和outreg代表单片机的串口。

对于只有一个串口的普通单片机,即SIN和SOUT;对于有两个或者多个串口的单片机,即SnIN和SnOUT(n=0,1,…即单片机的串口号)。

例如:ASSIGN COM1 < SIN > SOUT将计算机的串口1绑定到单片机的串口(针对只有一个串口的单片机)。

ASSIGN COM2 < SIN > SOUT将计算机的串口2绑定到单片机的串口0(针对有多个串口的单片机,注意串口号的位置)。

模拟串口的三种方法及C语言

模拟串口的三种方法及C语言

模拟串口的三种方法及C语言模拟串口是软件中模拟实现串口通信的一种方法,它是在电脑上通过软件模拟两个串口之间的传输,用来测试、调试串口相关的应用程序。

本文将介绍三种常见的模拟串口的方法,并提供C语言代码示例。

1.使用虚拟串口软件虚拟串口软件是一种用于模拟串口通信的应用程序。

它创建了虚拟的串口设备,使其在电脑上模拟出真实的串口通信环境。

通过虚拟串口软件,可以实现串口的模拟收发数据,可以连接到串口测试工具、串口调试工具或者自己编写的串口通信程序上。

以下是一个使用虚拟串口软件模拟串口通信的C语言代码示例:```c#include <stdio.h>#include <windows.h>int mai//打开虚拟串口//检测串口是否成功打开printf("Error in opening serial port\n");return 1;}//进行串口通信操作,如发送、接收数据//关闭串口return 0;```在这个示例中,我们使用了Windows操作系统的函数`CreateFile`来打开一个虚拟串口,这里的串口名称是"COM1"。

然后可以调用相关函数进行串口通信操作,最后用`CloseHandle`函数关闭串口。

2.使用串口驱动模拟在一些情况下,可以通过修改电脑的串口驱动程序来模拟串口通信。

这种方法需要更深入的了解操作系统的底层机制,并进行驱动程序的开发和修改。

通过修改串口驱动程序,可以模拟出一个虚拟的串口设备,通过这个设备进行串口通信。

以下是一个简单的C语言代码示例,用于修改串口驱动程序来模拟串口通信:```c#include <stdio.h>#include <fcntl.h>#include <unistd.h>int maiint fd;//打开串口设备fd = open("/dev/ttyS0", O_RDWR);//检测串口是否成功打开if (fd < 0)printf("Error in opening serial port\n");return 1;}//进行串口通信操作,如发送、接收数据//关闭串口设备close(fd);return 0;```在这个示例中,我们使用了Linux操作系统的函数`open`来打开一个串口设备,这里的设备名称是"/dev/ttyS0"。

重要51单片机和Proteus+虚拟串口调试

重要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的波特率设置成一样的。

51单片机与PC通信仿真(虚拟串口、串口助手)

51单片机与PC通信仿真(虚拟串口、串口助手)

单片机与PC通信仿真工具:串口助手虚拟串口实验效果图:实验程序:/********************************************************************************** 【编写时间】: 2016年6月24日* 【作者】:小瓶子* 【实验平台】: Proteus 7* 【内部晶振】: 11.0592mhzﻩ* 【主控芯片】: STC89C51* 【编译环境】: Keil μVisio4* 【程序功能】: 单片机与PC通信ﻩ* 【程序说明】:按下单片机的K1 键后,单片机可向PC发送字符串ﻩﻩ**********************************************************************************/#include<reg51.h>#define ucharunsigned char#define uintunsigned intuchar Receive_Buffer[101]; //接收缓冲uchar Buf_Index=0; //缓冲空间索引//数码管编码uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//主程序void main(){uchar i;P0=0x00;Receive_Buffer[0]=-1;SCON=0x50; //串口模式1,允许接收TMOD=0x20; //T1 工作模式2TH1=0xfd; //波特率9600TL1=0xfd;PCON=0x00; //波特率不倍增EA=1;EX0=1;IT0=1;ES=1;IP=0x01;//外部中断0为高优先级TR1=1;while(1){//循环显示发送的101个数for(i=0;i<100;i++){ //收到-1 为一次显示结束if(Receive_Buffer[i]==-1) break;P0=DSY_CODE[Receive_Buffer[i]];DelayMS(200);}DelayMS(200);}}//串口接收中断函数void Serial_INT() interrupt 4{uchar c;if(RI==0) return;ES=0; //关闭串口中断RI=0; //清接收中断标志c=SBUF;if(c>='0'&&c<='9'){ //缓存新接收的每个字符,并在其后放-1 为结束标志Receive_Buffer[Buf_Index]=c-'0';Receive_Buffer[Buf_Index+1]=-1;Buf_Index=(Buf_Index+1)%100;}ES=1;}void EX_INT0() interrupt 0 //外部中断0{uchar *s="这是由8051 发送的字符串!\r\n"; uchar i=0;while(s[i]!='\0'){SBUF=s[i];while(TI==0);TI=0;i++;}}仿真原理图:。

Labview及Proteus软件环境下单片机串口通讯的仿真方法

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 中的使用,只不过我们用软件实现仿真,虚拟串口在这使用的比较频繁。

先在Proteus中将环境建立起来,很简单,先需要两个元器件就可以建立连接VIRTUAL TERMINAL和COMPIM,如图VIRTUAL TERMINAL的TXD 与COMPIM的TXD相连,RXD与RXD相连,后面有图分析为什幺这样相连:
VIRTUAL TERMINAL是串口监视仪器,可以通过它将数据线上的符合RS232协议的波形捕捉到,并显示出来,也可以往数据线上发送RS232协议的波形;COMPIM为串口元件,可设置占用计算机上哪一个串口,可以是实际串口,也可以是虚拟串口,对Proteus而言,是分不清虚拟串口还是实际串口的。

下一步就要设置通信速率以及通信格式了,在属性框中实现设置相同的就行了。

这样就可实现数据的通信了。

图为本人的VIRTUAL TERMINAL和COMPIM的设置:。

51单片机模拟串口的三种方法

51单片机模拟串口的三种方法

51单片机模拟串口的三种方法[转]shunpu 发表于2007-3-20 13:47:00推荐随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。

这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51系列只提供一个串口,那么另一个串口只能靠程序模拟。

本文所说的模拟串口,就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,也就是串口通信中所说的位,如起始位用低电平,则将其置0,停止位为高电平,则将其置1,各种数据位和校验位则根据情况置1或置0。

至于串口通信的波特率,说到底只是每位电平持续的时间,波特率越高,持续的时间越短。

如波特率为9600BPS,即每一位传送时间为1000ms/9600=0.104ms,即位与位之间的延时为为0.104毫秒。

单片机的延时是通过执行若干条指令来达到目的的,因为每条指令为1-3个指令周期,可即是通过若干个指令周期来进行延时的,单片机常用11.0592M的的晶振,现在我要告诉你这个奇怪数字的来历。

用此频率则每个指令周期的时间为(12/11.0592)us,那么波特率为9600BPS每位要间融多少个指令周期呢?指令周期s=(1000000/9600)/(12/11.0592)=96,刚好为一整数,如果为4800BPS则为96x2=192,如为19200BPS则为48,别的波特率就不算了,都刚好为整数个指令周期,妙吧。

至于别的晶振频率大家自已去算吧。

现在就以11.0592M的晶振为例,谈谈三种模拟串口的方法。

方法一:延时法通过上述计算大家知道,串口的每位需延时0.104秒,中间可执行96个指令周期。

#define uchar unsigned charsbit P1_0 = 0x90;sbit P1_1 = 0x91;sbit P1_2 = 0x92;#define RXD P1_0#define TXD P1_1#define WRDYN 44 //写延时#define RDDYN 43 //读延时//往串口写一个字节void WByte(uchar input){uchar i=8;TXD=(bit)0; //发送启始Delay2cp(39);//发送8位数据位while(i--){TXD=(bit)(input&0x01); //先传低位Delay2cp(36);input=input>>1;}//发送校验位(无)TXD=(bit)1; //发送结束位Delay2cp(46);}//从串口读一个字节uchar RByte(void){uchar Output=0;uchar i=8;uchar temp=RDDYN;//发送8位数据位Delay2cp(RDDYN*1.5); //此处注意,等过起始位 while(i--){Output >>=1;if(RXD) Output |=0x80; //先收低位Delay2cp(35); //(96-26)/2,循环共占用26个指令周期}while(--temp) //在指定的时间内搜寻结束位。

巧用虚拟串口软件调试串口通信

巧用虚拟串口软件调试串口通信

巧用电脑虚拟串口软件调试串口通信殷建彬朱前华笔者在试用Proteus这个软件的时候,在Labcenter Electronics\Proteus 6 Demonstration\SAMPLES\目录下看到COMPIM Demo这个例子,电路图如图1所示。

它用虚拟串口物理模型(左侧的P1)和一个虚拟终端(右侧的VT1)通信。

在使用这个例子的时候,笔者准备使用一个串口调试软件sscom32来检验一下,发现需要把电脑的两个串口连接起来,并且要串口2、3脚颠倒使用,当时手头没有这样的连线,也就没有进行这个试验。

后来有一天突然想到软驱、光驱、打印机甚至PC都能虚拟,串口也应该可以吧?功夫不负有心人,终于在一个外国的网站上找到一个虚拟串口软件――Virtual Serial Ports kit。

虚拟串口的使用Virtual Serial Ports kit在它的官方网站上下载到的最新版本是4.72,可惜只有15天的试用期。

下载解压后点击setup.exe进行安装,安装的时候,要求你同意它的协议才能继续安装。

然后一路“NEXT”,就可以安装成功了!安装完毕点击桌面上的图标,出现图2所示的界面。

点击工具栏的图标,出现了如图3所示的对话框,这是让我们设置虚拟串口的。

一般来说,电脑硬件上已经设置串口COM1和COM2,所以我们可以把虚拟串口设置成COM3和COM4,让这两个串口通讯,点击“OK”按钮,这个时候软件的界面变成了如图4所示的界面了。

如果发现工具栏上按钮是灰色,还需要点击一下,使它变成绿色,这意味着两个串口可以正常通信了。

笔者先试验了一下这个软件。

同时运行两个sscom32软件,既双击sscom32图标两次,软件的界面如图5所示。

点击左侧串口选择下拉箭头,如图6,把运行的两个sscom32的串口分别设置为COM3和COM4(要和虚拟串口软件的一致。

)点击“打开串口”按钮,打开两个串口,使“打开串口”前面的指示灯变为红色。

单片机与PC通信-(proteus与虚拟串口驱动软件以及串口调试助手地仿真)

单片机与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--;}}。

proteus串口仿真

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。

Protues 中虚拟终端(Virtual Terminal)的一点点说明

Protues 中虚拟终端(Virtual Terminal)的一点点说明

Protues 中虚拟终端(Virtual Terminal)的一点点说明近日在弄uCos的移植,因为硬件未到,所以先在Protues中进行仿真模拟了。

使用到里面的虚拟终端(Virtual Terminal),刚开始并不熟练后来不断摸索实验后大致的知道了使用方法,写下来分享一下。

虚拟终端有四个端口,但是一般只需要用到其中的两个RXD和TRX,分别为串行发送端和串行接收端,它们一般分别和单片机的TXD和RXD相接(串口的接线交叉是教程的,即T接R、R接T)。

虚拟终端还需要设置一下相关的属性,波特率什么的。

双击就可以设置,没什么复杂的,如图:现在来讲讲虚拟终端接收数据,当发送端(单片机等)和虚拟终端的串口属性(波特率校验等)设置正确的时候,发送端发送来的数据就可以在虚拟终端上面显示,你可以右键(运行的时候)虚拟终端,选择显示的方式是16进制还是字符形式等等,也是很简单的设置。

再讲讲虚拟终端发送数据,虚拟终端发送的数据是键盘敲下去的值,什么意思呢,也就是在运行的时候,如果虚拟终端被激活了,那么你在电脑键盘上面敲什么字母(或者符号),那么该字母(或者符号)就被发送,做这样的一个小实验你就懂了。

绘制如下的电路图:可以看到我们把虚拟终端的输出和输入相连了。

下面的RTS和CTS不知道是什么作业,我看到的官方的例子也是这样的就这样画了,可暂不管。

运行一下,激活虚拟终端窗口,试着敲一下键盘,没错的话,你应该可以看到敲进去的字母或者符号都在虚拟终端上面显示。

如图同样,可以试试下面的实验:这是一个在终端1中敲键盘在终端2中显示(或者相反)的电路,运行的结果:另外再补充一点,如果你想在敲键盘的时候就在终端里面显示的话,你可以右键终端(运行的时候),在¡显示按下的字符(Echo Typed Characters)¡前面打勾。

利用VIRTUAL TERMINAL模拟单片机串口收发实验

利用VIRTUAL TERMINAL模拟单片机串口收发实验

利用VIRTUAL TERMINAL模拟单片机串口收发实验程序#include <reg51.h> //包含头文件//毫秒级延时函数void delay(unsigned int x){unsigned char i;while(x--){for(i=0;i<120;i++);}}//字符发送函数void putchar(unsigned char data1){SBUF=data1; //将待发送的字符送入发送缓冲器while(TI==0); //等待发送完成TI=0; //发送中断标志请0}//字符串发送函数void putstring(unsigned char *dat){while(*dat!='\0') //判断字符串是否发送完毕{putchar(*dat); //发送单个字符dat++; //字符地址加1,指向先下一个字符delay(5);}}//主函数void main(void){unsigned char c=0;SCON=0x50; //串口方式1 ,允许接收TMOD=0x20; //T1工作于方式2PCON=0x00; //波特率不倍增TL1=0xfd; //波特率设置TH1=0xfd; //EA=1; //开总中断ES=1; //开串口接收中断//TI = 0;TR1=1; //定时器开启delay(200);putstring("abc\r\n"); //串口向终端发送字符串,结尾处回车换行putstring("----------------------\r\n");delay(50);while(1){}}//void revdata(void) interrupt 4{unsigned char temp;if(RI==0) return; //如果没有接收中断标志,返回ES=0; //关闭串口中断RI=0; //清串行中断标志位temp=SBUF; //接收缓冲器中的字符putchar(temp); //将接收的字符发送出去ES=1; //开启串口中断}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用VIRTUAL TERMINAL模拟单片机串口收发实验
程序
#include <reg51.h> //包含头文件
//毫秒级延时函数
void delay(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i=0;i<120;i++);
}
}
//字符发送函数
void putchar(unsigned char data1)
{
SBUF=data1; //将待发送的字符送入发送缓冲器
while(TI==0); //等待发送完成
TI=0; //发送中断标志请0
}
//字符串发送函数
void putstring(unsigned char *dat)
{
while(*dat!='\0') //判断字符串是否发送完毕
{
putchar(*dat); //发送单个字符
dat++; //字符地址加1,指向先下一个字符
delay(5);
}
}
//主函数
void main(void)
{
unsigned char c=0;
SCON=0x50; //串口方式1 ,允许接收
TMOD=0x20; //T1工作于方式2
PCON=0x00; //波特率不倍增
TL1=0xfd; //波特率设置
TH1=0xfd; //
EA=1; //开总中断
ES=1; //开串口接收中断
//TI = 0;
TR1=1; //定时器开启
delay(200);
putstring("abc\r\n"); //串口向终端发送字符串,结尾处回车换行putstring("----------------------\r\n");
delay(50);
while(1)
{
}
}
//
void revdata(void) interrupt 4
{
unsigned char temp;
if(RI==0) return; //如果没有接收中断标志,返回
ES=0; //关闭串口中断
RI=0; //清串行中断标志位
temp=SBUF; //接收缓冲器中的字符
putchar(temp); //将接收的字符发送出去
ES=1; //开启串口中断
}。

相关文档
最新文档