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版本界面设置
- 主界面设置

详细添加步骤
- 添加所需元件:
AT89C52、COMPIM、

- 添加虚拟串口监视器

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

仿真前,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
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!