Proteus基于51单片机利用虚拟串口实现主从机的通信

这篇具有很好参考价值的文章主要介绍了Proteus基于51单片机利用虚拟串口实现主从机的通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


最近在学校做单片机课程实验时,需要在Proteus上实现串口的通信,具体要求如下:
 1. 使用串口中断实现数据的接收
 2. 甲机连续发送0-F,共计16个字符,并显示在数码管上
 3. 乙机接收甲机内容并用数码管显示后回传
 4. 甲机接收到乙机回传内容后与当前发送内容相比较,若一致则发送下一个,若不一致,则重新传输
 5. 晶振为11.0592MHz,数据通讯波特率为19200
 6. 使用虚拟串口实现两个单片机的仿真连接

原理图

在此记录一下本人的解题方案,首先Proteus中的原理图绘制如下Proteus基于51单片机利用虚拟串口实现主从机的通信
其中虚拟串口可在元件库中搜索COMPIM获得。
将原件按上图连接完毕后,将各个虚拟串口的收发波特率设置为19200,并分别赋予COM1和COM2网络属性。如下图所示。
Proteus基于51单片机利用虚拟串口实现主从机的通信
Proteus基于51单片机利用虚拟串口实现主从机的通信

程序源码

接下来是甲机的程序(主机):

#include <REG51.H>
void UartInit(void);
void UART_SendByte(unsigned char Byte);
void Timer0Init(void);
unsigned char led_mod[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极字模
unsigned char send[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};	//等待发送的字符
unsigned int num=0;

void delay(unsigned char time)		//1s@11.0592MHz
{
	unsigned char i, j, k;

	i = 8*time;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

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

void UART_SendByte(unsigned char Byte)	//串口发送字节
{
	SBUF=Byte;
	while(!TI);
	TI=0;	
}

void UART_Routine(void) interrupt 4	//串口接收中断
{	
	char temp;	//用于接收的临时变量
	if(RI==1)
	{	
		temp=SBUF;	//接收从机返回的字符
		if(send[num]==temp)	//如果接收到的字符与发送出去的相等
			num++;	//发送下一个字符
		else
			num=0;	//若不相等则从0开始重新发送
		RI=0;
	}
}

void main()
{
	UartInit();	//串口中断初始化
	while(1)
    {  
		P2=led_mod[num];	//显示当前字符
		UART_SendByte(send[num]);	//发送当前字符
		
		delay(1);	//延迟1s
		num%=16;	//进入新的发送循环
    }
}

接下来是乙机的程序(从机):

#include <REG51.H>
void UartInit(void);
void UART_SendByte(unsigned char Byte);
void Timer0Init(void);
unsigned char led_mod[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阳极字模
unsigned int num;

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

void UART_Routine(void) interrupt 4	//串口接收中断
{	
	char temp; 
	if(RI==1)
	{	
		temp=SBUF;	//接受字符
        if(temp>47&&temp<58)
            num=(int)temp-48;	//将接受到的0~9字符转化为十进制0~9
        if(temp>64&&temp<71)	//将接受到的A~F字符转化为十进制10~15
            num=(int)temp-55;
		SBUF=temp;	//返回字符
		while(!TI);	//等待发送完毕
		TI=0;
		RI=0;
	}
}

void main()
{
	UartInit();	//串口中断初始化
	while(1)
    {   
		P2=led_mod[num];	//显示接收到的字符
    }
}

将两个程序分别编译生成.hex文件后,分别烧录进主从机中。

虚拟串口VSPD下载

由于这里使用了虚拟串口进行通信,所以需要使用第三方软件将两个虚拟串口之间连接起来。这里使用VSPD虚拟串口工具,软件连接放在下面方便取用。

百度云盘链接:https://pan.baidu.com/s/1LJzyGr76akW67gfU8KU6VA?pwd=1111
提取码:1111

阿里云盘链接:https://www.aliyundrive.com/s/6XpZyPZ4VEF

安装及破解

运行 vspd.exe 安装,语言选择英语(没有中文选项),安装好以后先不运行,将下载的vspdctl.dll 文件复制,找到软件安装目录并粘贴(默认路径是C:\Program Files\Eltima Software\Virtual Serial Port Driver 7.2),覆盖原有文件,即完成破解。

使用

选择COM1和COM2端口后,点击Add pair。
Proteus基于51单片机利用虚拟串口实现主从机的通信
添加成功后可在左侧看见COM1和COM2端口之间已连接。
Proteus基于51单片机利用虚拟串口实现主从机的通信

运行

程序烧录完毕且虚拟端口连接完毕后,运行Proteus仿真
Proteus基于51单片机利用虚拟串口实现主从机的通信
仿真成功后,主从两机正常通信,两个数码管同时显示相同的字符。显示内容从0-F每隔1s循环显示。

​​文章来源地址https://www.toymoban.com/news/detail-481019.html

到了这里,关于Proteus基于51单片机利用虚拟串口实现主从机的通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Proteus基于51单片机通过PWM脉冲调制控制电机转速_按键与串口控制转速_电机转速可测

    临近期末,学校的单片机课程需要做课程设计,主要内容是基于51单片机的可调速电机,具体要求如下,在此记录一下具体的一个解题方案。 要求利用单片机输出PWM波形,通过改变占空比,改变电枢两端电压的平均值,从而改变电动机的转速 通过按键进行手动速度调整(速度

    2023年04月14日
    浏览(62)
  • Proteus8仿真:51单片机使用串口进行双机通讯

    元器件 名称 电阻 RES 51单片机 AT89C51 电容 CAP 晶振 CRYSTAL BCD数码管 7SEG-BCD 串口初始化: 首先根据相关的串口寄存器编写对应的初始化代码: STC89C51单片机设有两个定时器/计数器,因定时器1有4种工作方式,而常选用定时器1的工作方式2(8位自动重装)作为波特率的溢出率。 串口

    2024年02月04日
    浏览(42)
  • c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

         单片机一般采用中断方式接受数据,这样便于及时处理 其中发送数据段采用的是查询方式,接收端采用了中断方式, 要注意的地方有: 在中断处理函数int_0()内,处理数据前要先关闭中断,否则中断可能会不断传过来, EA=0; 然后退出中断处理函数前恢复中断处理能力:

    2024年02月13日
    浏览(60)
  • 基于51单片机和proteus的电流采集系统

    此系统是基于51单片机和proteus的仿真设计,功能如下: 1. LCD1602实时显示获取到电流值及设定值。 2. 按键可调整电流设定值。 3. 电流值过高则蜂鸣器报警。 4. 指示灯指示电流及系统状态。 5. 系统信息可通过串口实时更新。 功能框图如下: Proteus仿真界面如下: 下面就各个模

    2024年02月16日
    浏览(38)
  • 基于51单片机和proteus的温室大棚系统

    此系统是基于51单片机和proteus的仿真设计,功能如下: 1. LCD1602实时显示光照/土壤湿度/温度值及设定值。 2. 按键可增减光照/土壤湿度/温度设定阈值。 3. 获取到的温度低于设定温度则打开加热设备。 4. 获取到的光照值低于设定光照值则打开补光灯。 5. 获取到的土壤湿度低于

    2024年02月16日
    浏览(48)
  • 基于51单片机的红外密码锁设计[proteus仿真]

    密码锁检测系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的红外密码锁设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文章 2¥,私信阿目【112基于51单片机的红外密码锁设计】即可获取(看到消息会第一时

    2024年02月21日
    浏览(53)
  • 基于51单片机手机电话拨号盘模拟proteus仿真

    功能简介: 1.采用4X4矩阵键盘实现号码输入,并在LCD液晶上显示 2.按下enter键,显示calling…,并且蜂鸣器模拟电话拨号发声 3.按下*键,退格,按下#键,清楚电话号码 4.拨号过程中,长按#取消拨号

    2024年02月14日
    浏览(56)
  • 基于51单片机的倒计时秒表proteus仿真设计

    目录 一、设计背景 二、实现功能 三、仿真演示 四、源程序         近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了基于单片机的数字电子秒表倒计时设计,倒计时精度达0.05s了,解决了传统的由于倒计时精度不够造成的误差和不公平性,是各种

    2024年02月02日
    浏览(50)
  • 基于51单片机控制的BUCK开关电源Proteus仿真

    这里是给出的参考电路(如下图)使用了两路L293D的输出OUT1和OUT2,那么就会很疑惑。。。。 关于两路L293D的输出呢? 因为程序控制的时候,IN2始终由单片机输出0,所以底下这样也不像是差分,很难理解是为什么。 理想的状态:当out1 =1,二极管不导通,上方电感充电,经过

    2024年02月06日
    浏览(67)
  • 基于51单片机的手机电话拨号盘模拟proteus仿真

    功能: 0.本项目采用STC89C52作为单片机系统的控制MCU 1.采用4X4矩阵键盘实现号码输入,并在LCD液晶上显示 2.按下enter键,显示calling…,并且蜂鸣器模拟电话拨号发声 3.按下*键,退格,按下#键,清楚电话号码 4.拨号过程中,长按#取消拨号 5.采用DC002作为电源接口可直接输入5V给

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包