51单片机UART通信串口打印信息+proteus仿真+VSPD虚拟串口

文章介绍了如何使用51单片机通过串口与Proteus的VirtualTerminal进行通信,涉及串口配置、定时器与中断设置,以及利用VSPD创建虚拟串口进行PC与MCU间的通信实验过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        一、使用51单片机的串口与Proteus的Virtual Terminal(虚拟终端)进行一个简单的串口通信,实现的功能是让Virtual Terminal通过串口 向单片机发送数据,单片机接收到数据后经串口将数据发送到Virtual Terminal上显示。

      1、Virtual Terminal


在使用前根据程序设计配置Virtual Terminal的参数,本实验使用的是11.0592MHz的晶振,波特率为9600不加倍,串口工作于方式1,8位数据位1位停止位。

      2、仿真电路图

    3、程序
    这里给大家分析一个51单片机的定时器及中断配置图(这个是在论坛上找的)

#include <reg52.h>
#include <stdio.h>
#include <string.h>    //stdio.h,string.h用于printf函数原型

void delay(unsigned int z);
void uart_init(void);  //串行口初始化

void main()
{
    int a = 6,d = 15;
    char b = 'A',c[] = "abcde";
    uart_init();
    while(1)
    {
        printf("a = %d b = %c c = %s d = %x\n",a,b,c,d);
        printf("hello word!\n");
        printf("你好世界\n");
        delay(1000);
   }
}

void uart_init(void)
{
    TMOD=0x20;     //即0010 0000,定时器/计数器1,工作方式2
    TH1=0xfd;      //设置波特率为9600
    TL1=0xfd;
    TR1=1;         //启动定时器/计数器1
        
    SCON=0x50;     //SM0=0;SM1=1;REN=1;0101 0000.串口工作方式1,允许串行控制
    PCON=0x00;     //设置SMOD=0
    IE=0x90;       //EA=1;ES=1;CPU允许中断,串行允许中断
        
    TI=1;          //中断请求标志位,直接使用printf必须加入此句才能实现发送
}

void delay(unsigned int z)
{
    unsigned int x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}

4、仿真结果


  • 温馨提示:如果仿真出现如下图所示的乱码现象,将51单片机的晶振设置为11.0592MHz



     二、利用VSPD软件虚拟一对串口,然后在PC中使用串口助手和Proteus中的MCU进行通信。
     1、打开安装好的VSPD软件,设置好需要创建的串口对的端口号(这里使用COM3和COM4作为示例),然后点击add virtual pair按钮;

   2、设置DB9串口参数和串口助手参数

        这里Component Reference和Component Value不是必填选项,下面的端口选择我们之前创建的虚拟串口对COM3和COM4中的其中一个,演示时我这边使用(串口3,波特率9600,8位数据位,1位停止位,无校验,无流控)的参数条件。在串口助手中使用(串口4,波特率9600,8位数据位,1位停止位,无校验,无流控)。

  •   DB9串口定义和接线参考

  • DB9串口参数设置

  • 串口助手参数设置   

    3、仿真电路图

        需要注意的是Proteus中的DB9为母头接口,而电脑PC的为公头接口,所以连接方式,需要RXD接DB9的RXD,TXD接DB9的TXD。
   4、仿真结果
 附件给大家打包了,需要的自取,里面包括了proteus仿真+程序+VSPD虚拟串口软件+串口助手软件。

 链接:https://pan.baidu.com/s/18GD_mbM4pcjZmWbMJURtxw 
提取码:wof2

 参考博文:

proteus虚拟串口实现_veis的博客-CSDN博客

Proteus仿真实验---USART串口通信实验_proteus串口通信_DH小雷家的博客-CSDN博客

### Proteus 51单片机串口仿真配置与使用教程 在Proteus中进行51单片机串口通信仿真的过程中,需要合理设置硬件连接、软件参数以及调试工具。以下是详细的配置和使用方法: #### 一、硬件连接配置 在Proteus中搭建电路时,需确保单片机的TXD(P3.1)、RXD(P3.0)引脚分别与其他设备或虚拟终端相连。通常情况下,可以将这些引脚连接至RS232接口或其他UART模块来完成串口通信功能[^1]。 ```plaintext +-------------------+ | | | AT89C51 +---- TXD (P3.1) ----> RXD of PC or Device | +<-- RXD (P3.0) ----- TXD of PC or Device | | +-------------------+ ``` #### 二、Keil C51编程 编写适用于51单片机串口通信程序是整个项目的核心部分之一。下面是一个简单的例子展示如何初始化串口并发送数据给外部设备。 ```c #include <reg51.h> void UART_Init() { SCON = 0x50; // 设置为方式1,允许接收 TMOD |= 0x20; // 定时器1工作于模式2(自动重装载) TH1 = 0xFD; // 波特率设定为9600bps @11.0592MHz晶振频率 TR1 = 1; // 启动定时器1 } void SendChar(unsigned char c){ while(!TI); // 等待直到前一次传输结束 TI=0; SBUF=c; // 发送字符到SBUF缓冲区 } void main(){ UART_Init(); while(1){ SendChar('A'); // 不断向外界发送字母'A' } } ``` 此代码片段展示了基本的串口初始化过程及其简单应用实例[^3]。 #### 三、PyCharm开发上位机界面 为了更好地控制下位机上的LED状态变化,在电脑端可以通过Python语言配合`pyserial`库构建图形化操作面板。这里仅给出一个基础框架示意: ```python import serial from tkinter import * def send_command(command): ser.write((command+'\r\n').encode()) root = Tk() ser = serial.Serial('COM3', baudrate=9600) Button(root, text="Turn On", command=lambda:send_command("ON")).pack() Button(root, text="Turn Off", command=lambda:send_command("OFF")).pack() root.mainloop() ``` 上述脚本创建了一个含有两个按钮的小窗口用于开启关闭远程目标中的灯光效果。 #### 四、VSPD虚拟串口驱动安装 如果希望在同一台计算机内部测试上下两层之间消息传递,则可能需要用到一对虚拟com port pair。此时推荐下载Virtual Serial Port Driver(VSPD),按照官方指南顺利完成其部署之后就能轻易获取成对可用资源供后续环节调用了[^2]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值