前面一課講述了串行口通信的技術原理,本課通過安裝虛擬串口,用proteus和keil實現串口通信仿真。
虛擬串口
編寫仿真程序之前,需要安裝VSPD,VSPD是虛擬串口工具,通過VSPD虛擬出兩個串口用于通信。大家可以通過搜索引擎找到VSPD安裝方式。
VSPD安裝完成后,運行VSPD,并虛擬出兩個串口COM1和COM2。具體過程如下:
(1)啟動VSPD
(2)虛擬一對串口
單擊【Create】按鈕,確認創建當前設定的一對虛擬串口。
(3)啟動串口助手
隨VSPD安裝包附帶的一般會有串口助手程序,可以使用串口助手測試串口的數據發送和數據接收。
啟動串口助手打開COM1口,另外再啟動一個串口助手,打開COM2口。在打開COM1的串口助手發送窗口輸入“abc”或“123”,單擊發送按鈕發送數據。觀察打開COM2串口的串口助手窗口,發送的數據會出現在數據接收窗口。
51單片機串行口結構
51單片機串行口結構是一個可編程全雙工的通信接口,能同時進行數據的發送和接收,它由兩個獨立的串行數據緩沖寄存器SBUF(一個發送緩沖寄存器,一個接收緩沖寄存器)和發送控制、接收控制器及控制電路構成。
51單片機通過SBUF對串行接收或串行發送寄存器進行訪問,SBUF的地址是99H。SCON寄存器是串行口控制寄存器,它用來設定串行口的工作方式、接收發送控制以及設置狀態標志等。SCON寄存器的地址為98H,可進行位尋址,各位的定義如下表所示。
SM0和SM1共同確定串行口的工作方式,SM0為0,SM1為1時,串行口工作方式為異步通信口,這也是串口最常用的一種工作方式,TXD(P3.1)為數據發送引腳,RXD(P3.0)為數據接收引腳。
REN為允許串行口接收位,REN=1:允許串行口接收數據,REN=0:禁止串行口接收數據。
在操作串行口之前,需要設置產生波特率的定時器T1、串行口控制和中斷控制。
定時器設置:確定T1的工作方式,計算T1的初值,裝載TH1和TL1。設置串行口工作方式:SM0=0,SM1=1。允許串行口接收數據:REN=1。RI為接收中斷標志位,當串行數據接收完成后,向CPU發出中斷申請,在處理程序中,將該位清零,取消此中斷申請。TI為發送中斷標志位,當串行口發送數據結束后,向CPU發出中斷申請,在處理程序中,將該位清零,取消此中斷申請。
串口通信仿真實驗
實驗要求:通過串口控制發光二極管的狀態。
在proteus仿真電子元器件庫搜索“COMPIM”,添加串口器件到電路模型元器件庫,添加一個串口器件到電路模型,Physical port設置為COM1,并設置Physical Baud rate為9600。
Physical Baud rate為波特率,波特率通常單位是bit/s,即每秒傳輸的二進制位數。
實驗電路如下圖所示:
實驗電路非常簡單,器件P1為串口器件,串口器件的TXD引腳接單片機的TXD引腳,串口器件的RXD引腳接單片機的RXD引腳,串口器件的其它引腳可以懸空。
單片機內運行的完整C程序如下:
#include
void init();
void main(){
unsigned char temp=0xff;
init();
while(1){
if(RI){
RI=0;
temp=SBUF;
}else{
P1=temp;
}
}
}
void init(){
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
}
函數init()用來設置單片機串行口工作方式、定時器、中斷等控制項,TMOD=0x20設置定時器為計數器方式并設置初值,TR1=1啟動T1定時器,SM0=0和 SM1=1設置串口工作方式為異步通信方式,REN=1允許串行口接收數據。
main()函數應用while循環結構監測串行口,判斷SCON寄存器的RI中斷標志位是否為1,若為1,說明串口已接收到數據,數據存儲在SBUF緩沖寄存器,RI中斷標志位清零,SBUF賦值給temp變量,若RI中斷標志位為0,將temp變量的值賦值給P1口。
實驗過程:
在proteus啟動實驗電路,啟動虛擬串口和串口助手,串口助手設置為COM2,打開COM2串口,選擇16進制發送,在發送窗口輸入00,單擊發送,實驗電路的二極管點亮,再次發送ff可熄滅二極管。
-
單片機
+關注
關注
6037文章
44558瀏覽量
635227 -
Proteus
+關注
關注
79文章
1692瀏覽量
106576 -
仿真
+關注
關注
50文章
4082瀏覽量
133599 -
串口通信
+關注
關注
34文章
1626瀏覽量
55526 -
虛擬串口
+關注
關注
3文章
62瀏覽量
13879
發布評論請先 登錄
相關推薦
評論