一、使用51单片机的串口与Proteus的Virtual Terminal(虚拟终端)进行一个简单的串口通信,实现的功能是让Virtual Terminal通过串口 向单片机发送数据,单片机接收到数据后经串口将数据发送到Virtual Terminal上显示。
1、Virtual Terminal
Virtual Terminal
Virtual Terminal参数配置
在使用前根据程序设计配置Virtual Terminal的参数,本实验使用的是11.0592MHz的晶振,波特率为9600不加倍,串口工作于方式1,8位数据位1位停止位。
2、仿真电路图
UART通信仿真电路图
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串口定义和接线
3、仿真电路图
需要注意的是Proteus中的DB9为母头接口,而电脑PC的为公头接口,所以连接方式,需要RXD接DB9的RXD,TXD接DB9的TXD。
4、仿真结果
附件给大家打包了,里面包括了proteus仿真+程序+VSPD虚拟串口软件+串口助手软件
UART_proteus仿真 程序 VSPD软件 串口助手软件.zip
(7.28 MB, 下载次数: 61)
|