国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

VSPD和Proteus串口通信教學實驗

2018-10-30 09:53田社平方向忠
實驗室研究與探索 2018年9期
關(guān)鍵詞:波特率PC機驅(qū)動程序

田社平, 方向忠, 張 峰

(上海交通大學 電子信息與電氣工程學院,上海 200240)

0 引 言

串口是目前工業(yè)通信中較為普遍的一種通信方式,同時在單片機教學中占據(jù)重要地位[1-4]。傳統(tǒng)的串口通信實驗往往需要一根串口線連接兩個終端(兩臺PC機,或者一臺PC一個單片機系統(tǒng),或者兩個單片機系統(tǒng)),其對硬件仿真器依賴性較強。由于很多仿真器不能做到完全硬件仿真,因而可能造成仿真時正常,而實際運行時出現(xiàn)錯誤的情況,或者造成仿真不能通過,但是實際運行正常的情況。當單片機芯片型號發(fā)生較大變化時,需要配置新的仿真器,增加了資金投入。因此,開發(fā)一種虛擬的串口通信教學實驗系統(tǒng),具有良好的教學價值。例如,可以利用Keil和虛擬串口驅(qū)動(VSPD)即可達到這一目的[5-7],但這樣的實驗系統(tǒng)具有操作較為復雜、顯示不夠直觀、不能加入硬件設(shè)計等缺點。

本文討論一種基于VSPD和Proteus[8-9]串口調(diào)試與實驗方法,可以在一臺PC機上完成原本需要兩個終端才能實現(xiàn)的串口通信。首先從虛擬串口的結(jié)構(gòu)和原理,闡述串口通信的基本原理。接著以一個實例給出了基于VSPD的串口通信的具體實現(xiàn)過程。該例實現(xiàn)了PC機與單片機之間的串口通信,PC機端串口通信程序采用VC++6.0編寫,單片機選用Intel公司的AT89C51,在Proteus仿真軟件中用匯編語言編寫。

1 虛擬串口驅(qū)動程序

虛擬串口驅(qū)動程序是一個標準的Win32驅(qū)動程序模型(WDM)的設(shè)備驅(qū)動程序,它面向串口用戶程序,為用戶提供標準而完整的串口設(shè)備接口。該驅(qū)動程序的系統(tǒng)I/O調(diào)用接口以及讀寫控制完全仿造標準的串口驅(qū)動程序制作,所以從用戶角度看,虛擬串口的使用和普通串口沒有任何區(qū)別。

虛擬串口的應(yīng)用類型有很多,基于串口教學實驗的需要,這里只介紹其中一種——互聯(lián)型虛擬串口。互聯(lián)型虛擬串口是將兩個虛擬串口的數(shù)據(jù)通道連接起來。其效果相當于用串口回環(huán)線將兩個物理串口連接起來。除了將串口數(shù)據(jù)線TX和RX交叉連接以外,互聯(lián)型虛擬串口程序還將RTS、CTS、DTR、STR等控制線也進行互連,如圖1所示。

圖1 互聯(lián)型虛擬串口模擬的串口回環(huán)線

這些連接都是軟件意義上的,并沒有實際物理線相聯(lián)。這根使用軟件來模擬的串口回環(huán)線,實際上是使用線程通信完成的,其原理圖如圖2所示。由該圖可知,兩個虛擬串口連接以后,任何串口發(fā)送的數(shù)據(jù)將會被另外一個虛擬串口所接收。

圖2 互聯(lián)型虛擬串口原理

虛擬串口驅(qū)動程序有很多,常用的有VSPD、VSPM和SUDT SerialNull 等。而VSPD以其操作簡單,容易上手等特點倍受青睞。VSPD全稱為Virtual Serial Port Driver XP,是Eltima軟件公司的一款產(chǎn)品。它能成對地添加虛擬串口,最多可虛擬256個串口。VSPD虛擬串口對的操作界面如圖3所示。

圖3 VSPD虛擬串口對

VSPD可以和Proteus結(jié)合,添加的一對虛擬串口被設(shè)定為通過非MODEM(三線制)串口連接在一起,就像兩個真實的物理串口一樣,從而實現(xiàn)在一臺PC機上模擬兩個軟件的串口通信。

2 VSPD串口實驗

2.1 實驗內(nèi)容及要求

建立單片機與PC機之間的串口通信,單片機電路如圖4所示。要求單片機的4個開關(guān)控制4盞LED燈,當開關(guān)合上時,相應(yīng)的燈亮,同時將信息發(fā)送給PC機,如“P1.x is on. Lx lights.”,其中x取0~3,分別與SW1~4對應(yīng);PC機接收到信息后顯示,同時向單片機發(fā)送字符(0-9,A-F),并通過單片機控制數(shù)碼管顯示相應(yīng)的數(shù)字。PC機串口編程采用VC++6.0,單片機采用89C51匯編語言編程實現(xiàn)。串口通信格式為:1 200 bit/s波特率,8位數(shù)據(jù),無校驗,1個停止位。

圖4中,SCMR為虛擬接收端口,用來顯示單片機接收到的數(shù)據(jù);SCMT為虛擬發(fā)送端口,用來顯示單片機發(fā)送的內(nèi)容。P1為串口物理接口模型COMPIM,用來與外部進行RS-232串口通信。在仿真實驗時,必須在相應(yīng)的“Edit Component”對話框中設(shè)置與實驗一致的串口通信參數(shù)。其中COMPIM的設(shè)置界面如圖5所示。

圖4 串口實驗下位機電路

圖5 串口通信參數(shù)設(shè)置界面

2.2 單片機編程

為了使例程具有一般性,單片機采用通用的89C51,在Proteus上運行實現(xiàn)[10-12]。89C51的時鐘頻率取11.059 2 MHz,單片機選用串口方式1,定時器方式2,SMOD=1。由波特率公式:

波特率=2SMOD/32×T1溢出率,T1溢出率=時鐘頻率/[12×(256-TH1初值)]

可以求得T1的溢出率為1200/(2/32)=19200,從而算得定時初值為

256-11.0592×106/(19200×12)=208=0D0H

單片機的主程序如下:

MOV SP, #60H

MOV SCON, #50H ;串口方式1,允許接收

MOV TMOD, #20H ;定時器1為方式2

ORL PCON, #80H ; SMOD=1

MOV TH1, #0D0H ;波特率為1200

MOV TL1, #0D0H

SETB TR1

MOV DPTR, #CHSE ;發(fā)送’Hello, world!’

LP1: CLR A

MOVC A, @A+DPTR

CJNE A, #’’, SE1 ;判是否到發(fā)送結(jié)束位

LJMP LP2

SE1: LCALL SEND ;發(fā)送子程序

LCALL DELAY ;延時子程序

INC DPTR

LJMP LP1

LP2: MOV DPTR,#TABLE ;初始化顯示‘5’

MOV A, #05H

MOVC A, @A+DPTR

MOV P0, A

CLR A

CLR DPTR

LP: JNB P1.0, L1 ;檢測按鍵,如果P1.0按下轉(zhuǎn)L1

JNB P1.1, L2

JNB P1.2, L3

JNB P1.3, L4

JNB RI, LP ;等待接收1個字符

CLR RI

MOV A, SBUF ;接收到的字符送A

LCALL DELAY

MOV RDATA, A

LCALL SEND

LCALL DELAY

MOV DPTR, #TABLE

LCALL CHANGE ;ASCII碼轉(zhuǎn)16進制數(shù)子程序

MOV A, RDATA

LCALL DISP ;顯示子程序

LJMP LP

程序中,SEND為發(fā)送子程序,DELAY為延時子程序,CHANGE為數(shù)制轉(zhuǎn)換子程序,完成ASCII碼到十六進制的轉(zhuǎn)換,Lx(x為1,2,3,4)為開關(guān)操作程序,即實現(xiàn)按下開關(guān),相應(yīng)的指示性語句發(fā)送到PC機的功能。CHSE地址存放的是初始字符串“Hello, world!”,TABLE地址存放的是7段碼值。由于篇幅所限,具體代碼從略。

2.3 PC機編程

Win32中基于VC++6.0的常用串口通信程序一般可以用兩種方法實現(xiàn)[13-14]:①利用MSComm ActiveX串行通信控件;②使用Windows API通信函數(shù)。本實驗中采用MSComm ActiveX控件進行編程。MSComm提供了兩種處理通信問題的方法:①事件驅(qū)動法,當串口上發(fā)生某一事件時,使用MSComm控件的OnComm事件可以捕獲并處理這些事件;②查詢法,每當應(yīng)用程序執(zhí)行完某一串行口操作后,將不斷檢查MSCommEvent屬性以檢查執(zhí)行結(jié)果或者檢查某一事件是否發(fā)生。本實驗中采用第一種方法,在串口接收緩沖區(qū)中有字符時接收。

實驗中MSComm控件涉及的幾個重要屬性如表1所示。

表1 實驗中MSComm的幾個屬性

根據(jù)表1的控件屬性設(shè)置好正確的串口通信參數(shù)配置、數(shù)據(jù)獲取方式和通信響應(yīng)類型等,通過Output發(fā)送數(shù)據(jù),由Input在OnComm函數(shù)中接收數(shù)據(jù)。圖6為VC++6.0實現(xiàn)的串口通信實驗程序流程框圖。

圖6 串口實驗PC機程序流程

2.4 實驗運行結(jié)果

首先打開VSPD增加一對虛擬串口對,如COM1和COM2;接著運行C++程序,設(shè)置好串口號為COM2,波特率為1 200,8位數(shù)據(jù)位,1位停止位和無奇偶校驗之后,打開串口;然后運行Proteus軟件,對串口物理接口,虛擬接收/發(fā)送端口設(shè)置對應(yīng)的通信參數(shù),串口號選為COM1,點擊Proteus左下方的運行鍵。最后的結(jié)果如圖7所示。

程序通信后,首先由單片機向PC機發(fā)送字符串"Hello world!";當按下P1.x時,單片機就向PC機發(fā)送"P1.x is on. Lx lights."(x為0到3中的一個整數(shù)),同時相應(yīng)的LED就會點亮。由單片機向PC機發(fā)送過程中,PC機和虛擬發(fā)送端口同時顯示發(fā)送的內(nèi)容。當PC機向單片機發(fā)送字符A時,虛擬接收端口和數(shù)碼管就會顯示"A"。由此,實驗任務(wù)得到實現(xiàn)。

(a) PC端串口通信界面

虛擬端口發(fā)送顯示

虛擬端口接收顯示數(shù)碼管顯示

(b) 單片機端顯示界面

圖7 串口通信實驗仿真結(jié)果

3 結(jié) 語

本實驗利用虛擬串口驅(qū)動程序VSPD和虛擬仿真軟件Proteus實現(xiàn)了串口通信功能,具有實驗現(xiàn)象直觀、軟件調(diào)試方便的特點。在調(diào)試階段不受時間地點和器材的限制,從而減少硬件的使用,給開發(fā)和調(diào)試帶來了很大的靈活性,能取得事半功倍之效,提高學生的研究能力和學習興趣。

盡管本實驗中的單片機采用目前單片機教學中主流的MCS-51系列單片機,但本文方法也適用于各類單片機、微控制器的串口通信開發(fā)與調(diào)試,程序的編寫也可采用C語言以簡化開發(fā)過程[15]。同樣,PC機端串口程序也可采用不同的語言編寫,例如,當用VB或是其他語言實現(xiàn)串口通信程序時,仍可移植本實驗設(shè)計思路。因此,本實驗的實現(xiàn)方案可以根據(jù)教學實際進行靈活配置,將教學重點放在對串口通信的理解上,以取得良好的教學效果。

本文給出了虛擬串口通信實驗的框架結(jié)構(gòu)和基本實現(xiàn)方法,在實際教學中可以在此基礎(chǔ)上增加諸如修改通信參數(shù)、進行大數(shù)據(jù)量傳輸?shù)葘嶒炓?,以滿足不同的教學要求。

猜你喜歡
波特率PC機驅(qū)動程序
UART 波特率檢測電路的FPGA 設(shè)計算法與實現(xiàn)
CAN 總線波特率自適應(yīng)程序設(shè)計
計算機硬件設(shè)備驅(qū)動程序分析
波特率自適應(yīng)的CAN驅(qū)動在嵌入式Linux下的實現(xiàn)①
基于三菱FXPLC的感應(yīng)淬火機床與PC機的串行通信實現(xiàn)
VC.NET下實現(xiàn)dsPIC單片機與PC機的通信
排除OLT設(shè)備登錄故障
詳解lAP15W4K58S4單片機的串行口通信
VIVID3彩色超聲儀結(jié)構(gòu)原理及維修
基于MPC8280的CPU單元與內(nèi)部總線驅(qū)動程序設(shè)計