利用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++;}}仿真原理图:。

  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; //开启串口中断
}。

相关文档
最新文档