一、借助虚拟串口驱动软件模拟PC端串口调试助手软件与Proteus中51单片机相互通信原理
虚拟终端(比如:Proteus中51单片机)的TXD(发送数据)和RXD(接收数据)分别与虚拟串口驱动软件所模拟出其中一个虚拟串口的TXD(发送数据)和RXD(接收数据)一一对应接通后,再与虚拟串口驱动软件所模拟出另外一个虚拟串口的TXD(发送数据)和RXD(接收数据)交叉对应接通来相互发送和接收数据,从而实现相互通信。
二、借助虚拟串口驱动软件模拟PC端串口调试助手软件与Proteus中51单片机相互通信原理图
三、虚拟通信串口驱动软件操作
(1)、虚拟通信串口驱动软件所模拟出虚拟串口间通信原理。
虚拟串口驱动软件所模拟出虚拟串口的TXD(发送数据)和RXD(接收数据)交叉对应接通来相互发送和接收数据,从而实现相互通信。
(2)、虚拟通信串口驱动软件所模拟出虚拟串口间通信原理图。
(3)、下载虚拟通信串口驱动软件,安装完成后的图标,如下所示。
(4)、双击打开虚拟通信串口驱动软件图标,弹出以下界面。
(5)、在虚拟通信串口驱动软件界面点击“添加端口”,左边Virtual Serial Port Driver栏下Virtual port处出现添加两个虚拟通信串口:COM2与COM3。
(6)、右键点击电脑上的计算机,在弹出列表中选中属性,会弹出一个关于电脑控制面板的信息界面,点击左上边设备管理器,弹出设备管理器界面,找到端口项点开,出现新增两个虚拟通信串口:COM2->COM3与COM3->COM2。
四、PC端串口调试助手软件与Proteus中51单片机相互通信的单片机C语言程序与Proteus仿真电路图
(1)、PC端串口调试助手软件与Proteus中51单片机相互通信来点亮LED灯的单片机C语言程序
#include <reg52.h> #define uchar unsigned char #define uint unsigned int //uchar flag,a,i; uchar a; //uchar code table[]=" I get "; void String_Timer2_init()//串口定时器初始化函数 { TMOD=0x20;//0010 0000定时器工作方式为方式2,8位自动重装。 TH1=0xfd;//初始化计数器高8位:1111 1101 TL1=0xfd;//初始化计数器低8位 TR1=1;//启动定时器1 SM0=0;//设定串口工作方式为方式1(10位异步通信) SM1=1;//设定串口工作方式 REN=1;//打开串口中断接收允许 EA=1;//打开全局中断 ES=1;//打开串口中断允许位 } void main() { String_Timer2_init();//串口定时器初始化函数 while(1);//固定循环 // { // if(flag==1)//判断检测发送数据标志位变量flag是否为1,若为1则运行以下单片机发送数据缓存寄存器给PC端串口调试助手发送数据。 // { // ES=0;//关闭串口中断允许位,阻止进入串口中断服务程序。为什么要设置ES=0?由于接下来单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束后,TI(即串口发送中断标志位)=1,若ES不设置为0,在TI(即串口发送中断标志位)=1时,会进入串口中断服务程序执行flag=1,又得回来再次判断if(flag==1),从而无法运行下面的程序。 // for(i=0;i<7;i++)//循环发送数据个数 // { // SBUF=table[i];//将table数组中的数据存入单片机发送数据缓存寄存器 // while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。 // TI=0;//TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。 // } // SBUF=a;//表示单片机接收数据缓存寄存器把从串口中断服务程序获取的某数据(用数值变量a表示)赋给单片机发送数据缓存寄存器。为什么?由于串口定时器初始化函数中REN(串口中断接收允许)=1与ES(串口中断允许位)=1被初始化后,就可以进入串口中断服务程序获取PC端串口调试助手给单片机发送某数据,然后单片机接收数据缓存寄存器接收PC端串口调试助手发来的某数据。 // while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。 // TI=0; //TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。 // ES=1;//打开串口中断允许位,允许进入串口中断服务程序。 // flag=0;//判断检测发送数据标志位变量flag是否为0,若为0则跳出运行单片机发送数据缓存寄存器给PC端串口调试助手发送数据。 // } // } } void string() interrupt 4//串口中断服务程序(函数) { RI=0;//表示单片机接收数据缓存寄存器可重新接收PC端串口调试助手发送数据。 a=SBUF;//表示PC端串口调试助手给单片机接收数据缓存寄存器发送某数据,然后单片机接收数据缓存寄存器接收PC端串口调试助手发来的某数据,并赋给数值变量a。 P2=a;//单片机接收数据缓存寄存器将接受到的数据赋给P2端口 // flag=1;//置检测发送数据标志位变量flag为1,运行单片机发送数据缓存寄存器给PC端串口调试助手发送数据。 }
(2)、PC端串口调试助手软件与Proteus中51单片机相互通信来点亮LED灯的Proteus仿真电路图
(3)、右键点击Proteus仿真电路图中的COMPIM元件,在弹出列表中选中编辑属性,会弹出一个编辑元件的信息界面,在Physical port处将通信串口COM1改为通信串口COM3,在Physical Baud Rate将4800改为9600,在Virtual Baud Rate处将4800改为9600,其它不变,之后点击确定。
(4)、右键点击Proteus仿真电路图中的COMPIM元件,在弹出列表中选中编辑属性,会弹出一个编辑元件的信息界面,在Physical port处将通信串口COM1改为通信串口COM3,在Physical Baud Rate将4800改为9600,在Virtual Baud Rate处将4800改为9600,其它不变,之后点击确定。
借助虚拟串口驱动软件模拟PC端串口调试助手软件与Proteus中51单片机相互通信来点亮LED灯
原文:https://www.cnblogs.com/AChenWeiqiangA/p/13264851.html