前面一課講述了串行口通信的技術(shù)原理,本課通過(guò)安裝虛擬串口,用proteus和keil實(shí)現(xiàn)串口通信仿真。
虛擬串口
編寫仿真程序之前,需要安裝VSPD,VSPD是虛擬串口工具,通過(guò)VSPD虛擬出兩個(gè)串口用于通信。大家可以通過(guò)搜索引擎找到VSPD安裝方式。
VSPD安裝完成后,運(yùn)行VSPD,并虛擬出兩個(gè)串口COM1和COM2。具體過(guò)程如下:
(1)啟動(dòng)VSPD
(2)虛擬一對(duì)串口
單擊【Create】按鈕,確認(rèn)創(chuàng)建當(dāng)前設(shè)定的一對(duì)虛擬串口。
(3)啟動(dòng)串口助手
隨VSPD安裝包附帶的一般會(huì)有串口助手程序,可以使用串口助手測(cè)試串口的數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。
啟動(dòng)串口助手打開COM1口,另外再啟動(dòng)一個(gè)串口助手,打開COM2口。在打開COM1的串口助手發(fā)送窗口輸入“abc”或“123”,單擊發(fā)送按鈕發(fā)送數(shù)據(jù)。觀察打開COM2串口的串口助手窗口,發(fā)送的數(shù)據(jù)會(huì)出現(xiàn)在數(shù)據(jù)接收窗口。
51單片機(jī)串行口結(jié)構(gòu)
51單片機(jī)串行口結(jié)構(gòu)是一個(gè)可編程全雙工的通信接口,能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,它由兩個(gè)獨(dú)立的串行數(shù)據(jù)緩沖寄存器SBUF(一個(gè)發(fā)送緩沖寄存器,一個(gè)接收緩沖寄存器)和發(fā)送控制、接收控制器及控制電路構(gòu)成。
51單片機(jī)通過(guò)SBUF對(duì)串行接收或串行發(fā)送寄存器進(jìn)行訪問(wèn),SBUF的地址是99H。SCON寄存器是串行口控制寄存器,它用來(lái)設(shè)定串行口的工作方式、接收發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志等。SCON寄存器的地址為98H,可進(jìn)行位尋址,各位的定義如下表所示。
SM0和SM1共同確定串行口的工作方式,SM0為0,SM1為1時(shí),串行口工作方式為異步通信口,這也是串口最常用的一種工作方式,TXD(P3.1)為數(shù)據(jù)發(fā)送引腳,RXD(P3.0)為數(shù)據(jù)接收引腳。
REN為允許串行口接收位,REN=1:允許串行口接收數(shù)據(jù),REN=0:禁止串行口接收數(shù)據(jù)。
在操作串行口之前,需要設(shè)置產(chǎn)生波特率的定時(shí)器T1、串行口控制和中斷控制。
定時(shí)器設(shè)置:確定T1的工作方式,計(jì)算T1的初值,裝載TH1和TL1。設(shè)置串行口工作方式:SM0=0,SM1=1。允許串行口接收數(shù)據(jù):REN=1。RI為接收中斷標(biāo)志位,當(dāng)串行數(shù)據(jù)接收完成后,向CPU發(fā)出中斷申請(qǐng),在處理程序中,將該位清零,取消此中斷申請(qǐng)。TI為發(fā)送中斷標(biāo)志位,當(dāng)串行口發(fā)送數(shù)據(jù)結(jié)束后,向CPU發(fā)出中斷申請(qǐng),在處理程序中,將該位清零,取消此中斷申請(qǐng)。
串口通信仿真實(shí)驗(yàn)
實(shí)驗(yàn)要求:通過(guò)串口控制發(fā)光二極管的狀態(tài)。
在proteus仿真電子元器件庫(kù)搜索“COMPIM”,添加串口器件到電路模型元器件庫(kù),添加一個(gè)串口器件到電路模型,Physical port設(shè)置為COM1,并設(shè)置Physical Baud rate為9600。
Physical Baud rate為波特率,波特率通常單位是bit/s,即每秒傳輸?shù)亩M(jìn)制位數(shù)。
實(shí)驗(yàn)電路如下圖所示:
實(shí)驗(yàn)電路非常簡(jiǎn)單,器件P1為串口器件,串口器件的TXD引腳接單片機(jī)的TXD引腳,串口器件的RXD引腳接單片機(jī)的RXD引腳,串口器件的其它引腳可以懸空。
單片機(jī)內(nèi)運(yùn)行的完整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;
}
函數(shù)init()用來(lái)設(shè)置單片機(jī)串行口工作方式、定時(shí)器、中斷等控制項(xiàng),TMOD=0x20設(shè)置定時(shí)器為計(jì)數(shù)器方式并設(shè)置初值,TR1=1啟動(dòng)T1定時(shí)器,SM0=0和 SM1=1設(shè)置串口工作方式為異步通信方式,REN=1允許串行口接收數(shù)據(jù)。
main()函數(shù)應(yīng)用while循環(huán)結(jié)構(gòu)監(jiān)測(cè)串行口,判斷SCON寄存器的RI中斷標(biāo)志位是否為1,若為1,說(shuō)明串口已接收到數(shù)據(jù),數(shù)據(jù)存儲(chǔ)在SBUF緩沖寄存器,RI中斷標(biāo)志位清零,SBUF賦值給temp變量,若RI中斷標(biāo)志位為0,將temp變量的值賦值給P1口。
實(shí)驗(yàn)過(guò)程:
在proteus啟動(dòng)實(shí)驗(yàn)電路,啟動(dòng)虛擬串口和串口助手,串口助手設(shè)置為COM2,打開COM2串口,選擇16進(jìn)制發(fā)送,在發(fā)送窗口輸入00,單擊發(fā)送,實(shí)驗(yàn)電路的二極管點(diǎn)亮,再次發(fā)送ff可熄滅二極管。
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44621瀏覽量
638484 -
Proteus
+關(guān)注
關(guān)注
79文章
1692瀏覽量
106825 -
仿真
+關(guān)注
關(guān)注
50文章
4124瀏覽量
133983 -
串口通信
+關(guān)注
關(guān)注
34文章
1627瀏覽量
55725 -
虛擬串口
+關(guān)注
關(guān)注
3文章
62瀏覽量
13941
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論