王向玲,石曉玲
(呂梁學院 礦業工程系,山西 離石 033001)
單片機原理及應用課程是機械電子工程專業的一門實踐性極強的專業課,該課程與實際工程應用關系非常緊密,但課程知識點繁多且抽象,學生理解起來相對吃力,傳統的“教師演示學生做”或者進行一些驗證性實驗遠遠不能滿足應用型人才的培養目標,故引入新型的實踐教學模式非常迫切.借助于Proteus軟件聯合Keil進行虛擬仿真,然后進行硬件平臺搭建的模式,教學效果良好,學生參與度高,積極性強,縮短了開發周期、提高了開發效率[1-4],具有很好的工程應用價值.
隨著單片機在工業自動化、智能終端、智能儀表、通信管理等領域的廣泛應用和計算機網絡技術的普及,單片機與PC機之間的通信使用較多[5]132-133.本文主要介紹串行通信電路設計的虛擬仿真環節.
COMPIM作為Proteus虛擬環境中的串行接口組件,可實現虛擬仿真平臺與實際PC機的直接交互.傳統的同一PC機上單片機與PC機的串行通信時,COMPIM組件和串口調試助手都需各占用一個物理串口,且采用交叉線連接兩串口進行調試.而對于目前大多數PC機無物理串口的情形,本設計采用虛擬串口驅動軟件VSPD將COMPIM組件和串口調試助手兩個串口虛擬連接,同時引入虛擬示波器實時監測電路的運行狀態,實現了同一臺PC機上單片機與PC機的串行通信[6].
本文設計的串行通信電路適用于目前大多數無物理串口的PC機.PC機與單片機的通信,實質上是串口調試助手與Proteus中單片機仿真系統的通信,通過在Proteus仿真系統中添加單片機AT89C52、數碼管、示波器和COMPIM組件等組成串行通信電路,電路圖如圖1所示.

圖1 串行通信仿真原理圖
共陰極數碼管位選通過P2口實現,借助Proteus VSM中的4通道示波器分析數碼管位選信號.段選通過P0口實現,注意P0口使用時必須接上拉電阻.PC機串行口輸出電平是標準RS232電平,而單片機輸出電平是TTL電平,若二者采用物理串口通信則需借助芯片MAX232實現電平轉換.本文設計的通信電路采用虛擬串口,電平轉換通過自身攜帶MAX232的COMPIM組件實現,故單片機通過COMPIM組件直接與PC機相連[7].
該電路的功能為:單片機接收PC機串口調試助手發送的四位數字并實時顯示在4位數碼管上;按下K1按鍵,單片機通過串口組件COMPIM將字符串發送給PC機并顯示在串口調試助手的數據接收區.
依據模塊化編程思想,編寫主程序和子程序,其中子程序主要包括串口初始化函數、外部中斷和串行口中斷子程序.
串口通信時,波特率選擇由Timer1生成,串口初始化函數需設置串行口控制寄存器SCON、Timer1工作模式寄存器TMOD、電源管理寄存器PCON(SMOD控制波特率是否倍增)、Timer1計數初值TH1和TL1、TR1(Timer1的啟動開關)[8]109-116.具體值設為如下:
(1)串行口工作模式選擇波特率可變的Mode1,即SCON=0x50;
(2)Timer1工作模式選擇具有自動重裝初值的Mode2,即TMOD=0x20;
(3)PCON=0x00,即SMOD=0,波特率不倍增.
(4)TH1、TL1的計算依據式1:

(1)
波特率設為9 600 bit/s,晶振為11.059 2 MHz,SMOD=0,可求得TH1=TL1=0xFD.
(5)TR1=1以啟動Timer1.
中斷程序包括外部中斷0和串行口中斷子程序[9-11].外部中斷0實現單片機向串口調試助手發送字符串,串行口中斷實現串口調試助手向單片機發送數字,流程圖如圖2所示.

圖2 中斷程序流程圖
主程序首先調用串口初始化函數,之后進行中斷初始化,包括總中斷開關EA=1,外部中斷0開關EX0=1及其觸發方式IT0=1,串行口中斷開關ES=1.然后進入while循環先對數碼管斷碼清零達到消隱的目的,接著將位碼發送至P2,段碼發送至P0,位碼發送時間間隔4ms,程序流程圖如圖3所示.
選擇COM3和COM4為虛擬串口,分別將COM3、COM4分配給串口調試助手和COMPIM組件,調試前采用虛擬串口驅動程序VSPD連接COM3和COM4.
串口調試助手和COMPIM組件作為收發雙方,串口通信協議參數的設置需完全一致,否則會出現亂碼現象.具體均設為:波特率9600bit/s、無奇偶校驗位、數據位8位、停止位1位.
將程序下載到Proteus單片機中并運行,打開串口調試助手向單片機發送數字3245,數碼管上顯示數字3245.按下電路中的K1按鍵,在串口調試助手接收區可收到單片機發送的字符串“基于Proteus的單片機串行通信電路設計及仿真!”,具體結果如圖4所示.
仿真結果主要通過讀取IO口、寄存器數據進行分析,在Proteus環境中常用方式有兩種:一是通過debug下的watch window選擇性添加分析對象進行數據讀取;二是通過CPU下的Registers窗口讀取數據[12]36-47.本設計采用watch window窗口分析P0、P2口數據,如圖5所示,(a)、(b)、(c)、(d)圖分別為第1、2、3、4位數碼管顯示3、2、4、5時的P0、P2口數據.

圖5 P0、P2口數據
由圖1知P2.0~P2.3分別對第1~4位數碼管進行位選,對于共陰極4位數碼管位選信號分別為0xFE、0xFD、0xFB、0xF7,與圖5中(a)、(b)、(c)、(d)中P2口數據一致.根據共陰極數碼管段碼表分析知顯示3、2、4、5時的數分別為0x4F、0x5B、0x66、0x6D,與圖5中(a)、(b)、(c)、(d)中P0口數據一致.
此外,添加Proteus中的虛擬儀器示波器,連接至P2.0~P2.3如圖1所示,點擊仿真按鈕Play會自動彈出示波器仿真界面;也可選擇Debug再點擊Digital Oscilloscope[13-15],出現右圖6所示波形圖.

圖6 P2.0~P2.3電壓變化波形圖
P2.0~P2.3數據周期性重復即對4位數碼管周期性位選,以1個周期波形為研究對象,通過游標測量相鄰兩點間的時間差均為4.3 ms,與程序設計中位碼間隔時間4 ms吻合.其次,由該圖知P2口低4位數據分別為1 110、1 101、1 011、0 111,與圖5中P2口數據一致.
單片機實踐教學中引入虛擬仿真技術與硬件平臺相結合的模式,提高了學生學習積極性,同時,單片機開發能力和綜合應用理論知識解決實際問題的能力也得到提升.本文的串行電路設計及仿真闡述了同一臺PC機上單片機與PC機串行通信的2種實現方式,針對無物理串口PC機的通信,采用虛擬串口驅動軟件VSPD將單片機的串行接口組件COMPIM和串口調試助手虛擬連接;然后以Proteus仿真軟件為平臺,設計了串行通信電路,設置了串行通信協議,聯合Keil軟件調試后實現了同一臺PC機上單片機與PC機的串行通信.
學生在單片機實際應用系統開發的虛擬仿真環節中,還可借助Proteus中的watch window窗口、Registers窗口、示波器、探針等工具實時觀察程序執行中信號的變化,有助于理論知識的理解以及必要的數據分析,且為后續的硬件電路搭建提供保障.