51单片机串口通讯实验2+Proteus仿真
51单片机串口通讯实验2+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 89 90 91 92 93 94 95
| #include<reg51.h> #define uchar unsigned char #define uint unsigned int ///共阳数码管 0-9 P 灭 uchar code smdm[]= {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xFF}; //共阳数码管断码 #define sm\_dm P0 sbit Led=P3^7; sbit Key_set=P3^2; uchar code hello_world[]="Hello World"; uchar Dat_rxd; uchar work_mode=0; /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ void DelayUs(unsigned char us)//delay us { unsigned char uscnt; uscnt=us>>1; /\*12MHz频率\*/ while(--uscnt); } /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ /\* 毫秒函数声明 \*/ /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ void DelayMs(unsigned int ms) { while(--ms) { DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); } }
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*串口初始化函数\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*// void Com0\_Init(void) { EA=1; //开总中断 ES=1; //允许串口中断 TMOD=0x20; //定时器T1,在方式3中断产生波特率 SCON=0x50; TH1=0xfd; //波特率设置为9600(晶振12M) TL1=0xfd; TR1=1; //开定时器T1运行控制位 }
void Com0(void) interrupt 4 using 1 { if(RI) { Led=~Led; Dat_rxd=SBUF; //串口接收 Dat_rxd=Dat_rxd-0x30; sm_dm=smdm[Dat_rxd]; RI=0; } } void send\_string(uchar \*p) { while(\*p!= '\0') { SBUF=\*p; p++; while(TI==0); TI=0; } }
void main(void) { Com0\_Init();//串口初始化 while(1) { if(~Key_set) { DelayMs(3);//按键消抖 if(~Key_set) { work_mode=1; while(~Key_set); } } switch(work_mode) { case 0: break; case 1: Led=~Led; send\_string(hello_world); work_mode=0; break; } } }
|
Proteus8.9版本界面设置

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

- 🔧添加虚拟串口监视器

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

⚡仿真前,Proteus对串口进行设置。
鼠标左键双击下面的compim元件

- 🔰具体参数设置。(波特率:
9600和串口号:COM8)

- 🛠两个Virtual Terminal串口监视器 的Baud Rate都设置为
9600

- 串口调试工具设置
注意串口波特率保持一致,串口号设置为COM7,。

📚程序源码和仿真资源
1 2 3
| 链接:https://pan.baidu.com/s/1e3jUTrEBGr2Nk1XreCDPow 提取码:4ptd
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!