Proteus8.9使用虚拟串口VSPD仿真51单片机的串口通信【详细教程-2025】

作者相关信息

github主页https://github.com/snqx-lqh
作者 VXQinghua_Li7
VX公众号少年潜行

📖 欢迎交流 如果对你有帮助,希望可以帮我点个赞👍和收藏,谢谢

软件下载链接

仿真软件版本:Proteus8.9
下载链接:
链接:https://pan.baidu.com/s/1kkgFmRBlh268m_ESl83weg 提取码:9bde 复制这段内容后打开百度网盘手机App,操作更方便哦

虚拟串口工具VSPD
链接:https://pan.baidu.com/s/1uQ5f_6TjwxREZCwp7Pk99A?pwd=6rmk 提取码:6rmk 复制这段内容后打开百度网盘手机App,操作更方便哦

本文的原工程我也放在了CSDN下载,但是我觉得可能用不上,因为我的全部内容都在博客中叙述了,应该比较容易自己复现。

虚拟串口安装和使用

安装步骤

1、双击安装应用程序按钮。

在这里插入图片描述

2、只能选English

在这里插入图片描述

3、直接Next

在这里插入图片描述

4 、选择同意

在这里插入图片描述

5、选择安装路径,不要在C盘即可

在这里插入图片描述

6、直接Next

在这里插入图片描述

7、取消全部勾选,然后NEXT

在这里插入图片描述

8、点击install下载

在这里插入图片描述

9、不要勾选,直接关闭

在这里插入图片描述

10、将安装包中Crack的文件夹中的内容复制

在这里插入图片描述

11、将其粘贴到安装目录下,直接

在这里插入图片描述

12、直接替换文件中目标,至此安装完毕。

在这里插入图片描述

配置虚拟串口对

1、打开软件,可以看到当前系统已占用的端口,1处是物理端口,就是实际拥有的端口,40和41就是我创建的虚拟串口对,你往串口40发东西,串口41能收到,往串口41发东西,串口40能收到。

在这里插入图片描述

2、我们新创建一个串口对,比如使用20和21配对,记得,一定选择未使用的端口,点击添加端口即可。

在这里插入图片描述
3、创建完成后,左边会有一对新的串口对

在这里插入图片描述

4、然后你就可以在系统的设备管理器也能找到这两个端口了。有的时候在上面显示,有的时候在下面,不管了,反正有。

在这里插入图片描述

5、如果要删除的话,选中串口对,点击删除即可。

在这里插入图片描述

虚拟串口使用测试

串口上位机相互发送

打开两个正点原子的XCOM,也可以是其他的上位机测试软件,然后设置好波特率什么的,一个选择刚刚设置的串口20,一个选择刚刚设置的串口21。
在这里插入图片描述
然后就能发现左边发送的右边能接到,右边发送的左边能接到。

Proteus仿真

首先我们先绘制一个51单片机带上串口的电路图。

在这里插入图片描述

重点是COMPIM这个元器件的配置,还有注意连线,P30接RXD,P31接TXD。然后我们右键选中编辑这个元器件。也可以直接双击打开。

在这里插入图片描述

在编辑界面我们输入这个串口的设备信息,主要是他代表的串口号,有可能下拉框没有你能选的,这时候你就需要自己输入了。比如我的COM20就没有,是我自己输的,然后其他配置根据实际情况来,什么停止位呀啥的。

在这里插入图片描述

然后设置完成后点击右上角的OK。

在这里插入图片描述
我们写一个测试程序放在单片机中,测试程序如下

#include "reg52.h"

#define u8  unsigned char
#define u16 unsigned int

sbit LED = P2^0;

void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;			//设置定时初始值
	TH1 = 0xFD;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
	ES = 1;             //打开串口中断
	EA = 1;             //打开全部中断
}

void SendBuffLen(u8 *str,u8 len)
{
	while(len != 0)
	{
		SBUF = *str;
		while(!TI);
		TI = 0;
		str++;
		len --;
	}
}

char str[] = "hello world\r\n";

int main()
{
	UartInit();
	SendBuffLen(str,sizeof(str));
	while(1)
	{
		
	}
}

void UartRoutine(void) interrupt 4
{
	u8 res;	
	if(RI)
	{
		res = SBUF;
		if(res == 0x01)
		{
			LED = 0;
			SendBuffLen("hello world\r\n",sizeof("hello world\r\n"));
		}else
		{
			LED = 1;
			SendBuffLen("中文字符测试\r\n",sizeof("中文字符测试\r\n"));
		}
		RI = 0;
	}	
}

将代码通过Keil编译后,生成HEX文件,双击单片机后插入文件,同时记得,代码配置的单片机使用的是11.0592MHz的时候。

在这里插入图片描述

然后打开一个串口调试助手,选择COM21,因为仿真中用的COM20

在这里插入图片描述

运行仿真,一开始单片机会发送一个Helloworld。

在这里插入图片描述

发送1个01,使用HEX模式,会发现单片机会反一个helloworld,同时LED被点亮,这是代码逻辑,就不细讲了,主要是验证串口可以收发。

在这里插入图片描述

发送1个02,使用HEX模式,会发现单片机会反一个中文字符测试,同时LED被熄灭,这是代码逻辑,就不细讲了,主要是验证串口可以收发。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年、潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值