51单片机串口通讯 +Proteus仿真实验

51单片机串口通讯 +Proteus仿真实验


✨注意不要使用Proteus 8 Professional 8.13版本串口通信会出错。

🛠准备工作

  • 🔧需要借助虚拟串口软件(Virtual Serial Port Driver),创建2个虚拟串口

具体软件下载和教程:http://www.xue51.com/soft/9349.html

在这里插入图片描述

  • 🔖添加虚拟串口成功后,在设备管理器窗口可以看到虚拟出来的端口号
    在这里插入图片描述

📝串口通讯实例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <reg52.h>
#include <stdio.h> //printf头文件
#define uc unsigned char
#define uint unsigned int

uc flag,i,flag\_t,s[50]="",j=0,flag_n=0;
uc code table[]="I get ";

void init()
{
TMOD=0x20; //定时器工作方式,选择了定时器1,工作方式2 八位初值自动重装的8位定时器。
TH1=0xfd; //定时器1初值 ,设置波特率为9600 晶振11.0529MHZ
TL1=0xfd;
TR1=1; //开启定时器1

SM0=0;
SM1=1; //10位异步接收,(8位数据)波特率可变
REN=1; //允许串行口接收位
EA=1; //允许中断(总闸)
ES=1; //允许串口中断
}

void main()
{
init();
while(1)
{

if(flag==1)
{
if(flag_n!=0) //使第二个及以后I get xx 换行,不与You transfer在一行(单纯为了格式好看)
{
TI=1;
printf("\n");
while(!TI);
TI=0;
}
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
for(i=0;s[i]!='#'&&i<50;i++)
{
SBUF=s[i];
while(!TI);
TI=0;
}
flag=0;
}
if(flag\_t==1) //发送完毕之后,在电脑端输出。
{
TI=1; //printf之前必须将T1置为1才行。
printf ("\nYou transfer %s",s);
while(!TI);
TI=0;
flag\_t=0;
}
}
}

void ser() interrupt 4
{
if(RI) //接收数据,手动将RI清0
{
RI=0;

if(flag==0&&j!=0)//1.循环赋值为'\0'(字符串结尾标志符),j=0,为了第二次传递字符串是又是从头输出
{ //2.flag为0和j不为0时,保证是第二次及以后,传输字符串(控制输出格式)
flag_n++;
for(j=0;s[j]!='#'&&j<50;j++)
s[j]='\0';
j=0;
}
s[j]=SBUF;
flag=1;
if(s[j]=='#'||j==49) //以'#'作为传送字符串的结尾符,我定义的字符数组最长为50所以49也应该结束。
flag\_t=1;
else
j++;
}

if(TI) //发送数据
{
}
}

Proteus8.9版本界面设置

  • 主界面设置
    在这里插入图片描述

详细添加步骤

  • 添加所需元件:AT89C52COMPIM
    在这里插入图片描述
  • 添加虚拟串口监视器
    在这里插入图片描述

如果在仿真过程中不小心关闭掉了,可以在,菜单栏上的调试,下面重新打开来。

在这里插入图片描述

仿真前,Proteus对串口进行设置。

鼠标左键双击下面的compim元件
在这里插入图片描述

  • 具体参数设置。(波特率:9600和串口号:COM8
    在这里插入图片描述
  • 🔨两个Virtual Terminal串口监视器 的Baud Rate都设置为9600
    在这里插入图片描述
  • 🗝串口调试工具设置

🚩注意串口波特率保持一致,串口号设置为COM7,。

在这里插入图片描述

✅运行仿真

  • 串口调试工具的串口和波特率参数设置好好,开启串口,准备通讯。
  • Proteus软件里面启动运行仿真。
  • 通过串口调试工具发送数据到目标串口
    在这里插入图片描述

📓仿真终端接收乱码问题和解决方法

  • 📋一般仿真终端出现乱码,主要是波特率和晶振频率设置不对导致的,在电路搭建和仿真过程当中,发现如果设置的是12MHz的晶振频率会出现乱码的情况,改成11.0592MHz就好了。
    在这里插入图片描述

📚程序源码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/18fyGVh6XHdIDoZX1C7wp-A 
提取码:yi9t