一、使用51單片機(jī)的串口與Proteus的Virtual Terminal(虛擬終端)進(jìn)行一個簡單的串口通信,實現(xiàn)的功能是讓Virtual Terminal通過串口 向單片機(jī)發(fā)送數(shù)據(jù),單片機(jī)接收到數(shù)據(jù)后經(jīng)串口將數(shù)據(jù)發(fā)送到Virtual Terminal上顯示。
1、Virtual Terminal
Virtual Terminal
Virtual Terminal參數(shù)配置
在使用前根據(jù)程序設(shè)計配置Virtual Terminal的參數(shù),本實驗使用的是11.0592MHz的晶振,波特率為9600不加倍,串口工作于方式1,8位數(shù)據(jù)位1位停止位。
2、仿真電路圖
UART通信仿真電路圖
3、程序
這里給大家分析一個51單片機(jī)的定時器及中斷配置圖(這個是在論壇上找的)
- #include <reg52.h>
- #include <stdio.h>
- #include <string.h> //stdio.h,string.h用于printf函數(shù)原型
- 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,定時器/計數(shù)器1,工作方式2
- TH1=0xfd; //設(shè)置波特率為9600
- TL1=0xfd;
- TR1=1; //啟動定時器/計數(shù)器1
-
- SCON=0x50; //SM0=0;SM1=1;REN=1;0101 0000.串口工作方式1,允許串行控制
- PCON=0x00; //設(shè)置SMOD=0
- IE=0x90; //EA=1;ES=1;CPU允許中斷,串行允許中斷
-
- TI=1; //中斷請求標(biāo)志位,直接使用printf必須加入此句才能實現(xiàn)發(fā)送
- }
- void delay(unsigned int z)
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
復(fù)制代碼 4、仿真結(jié)果
仿真結(jié)果輸出
- 溫馨提示:如果仿真出現(xiàn)如下圖所示的亂碼現(xiàn)象,將51單片機(jī)的晶振設(shè)置為11.0592MHz
二、利用VSPD軟件虛擬一對串口,然后在PC中使用串口助手和Proteus中的MCU進(jìn)行通信。
1、打開安裝好的VSPD軟件,設(shè)置好需要創(chuàng)建的串口對的端口號(這里使用COM3和COM4作為示例),然后點擊add virtual pair按鈕;
2、設(shè)置DB9串口參數(shù)和串口助手參數(shù)
這里Component Reference和Component Value不是必填選項,下面的端口選擇我們之前創(chuàng)建的虛擬串口對COM3和COM4中的其中一個,演示時我這邊使用(串口3,波特率9600,8位數(shù)據(jù)位,1位停止位,無校驗,無流控)的參數(shù)條件。在串口助手中使用(串口4,波特率9600,8位數(shù)據(jù)位,1位停止位,無校驗,無流控)。
DB9串口定義和接線
3、仿真電路圖
需要注意的是Proteus中的DB9為母頭接口,而電腦PC的為公頭接口,所以連接方式,需要RXD接DB9的RXD,TXD接DB9的TXD。
4、仿真結(jié)果
附件給大家打包了,里面包括了proteus仿真+程序+VSPD虛擬串口軟件+串口助手軟件
UART_proteus仿真 程序 VSPD軟件 串口助手軟件.zip
(7.28 MB, 下載次數(shù): 61)
2023-8-21 17:25 上傳
點擊文件名下載附件
UART_proteus仿真+程序+VSPD軟件+串口助手軟件
|