摘 要 文章采用NI公司推出的Lab windows/CVI虛擬儀器軟件開(kāi)發(fā)平臺(tái),充分利用其強(qiáng)大的交互式C語(yǔ)言編程模式,實(shí)現(xiàn)帶有軟件握手機(jī)制的PC機(jī)和單片機(jī)之間的串行通信,可供同行參考。
【關(guān)鍵詞】Lab windows/CVI 單片機(jī) 串行通信
1 系統(tǒng)總體設(shè)計(jì)
單片機(jī)和PC機(jī)的串行通信采用RS-232接口,系統(tǒng)工作時(shí),單片機(jī)上電完成初始化設(shè)置后,等待PC機(jī)發(fā)送詢問(wèn)信號(hào)“?”(ASCII碼是3FH),單片機(jī)接收到3FH后,就通過(guò)串口向PC機(jī)發(fā)送回答信號(hào)“.”(ASCII碼是2EH),PC機(jī)收到回答信號(hào)“.”后,發(fā)送確認(rèn)信號(hào)“!”(ASCII碼是21H),到此就完成了軟件握手,下面單片機(jī)開(kāi)始發(fā)送數(shù)據(jù),PC機(jī)接收并顯示數(shù)據(jù)。
2 硬件設(shè)計(jì)
系統(tǒng)中PC機(jī)作為上位機(jī),單片機(jī)為下位機(jī)。單片機(jī)的時(shí)鐘振蕩頻率選擇11.059MHz。通過(guò)常用電平轉(zhuǎn)換芯片MAX232實(shí)現(xiàn)PC機(jī)串口和單片機(jī)串口的連接,如圖1所示。
單片機(jī)P2口接8位撥碼開(kāi)關(guān),通過(guò)撥碼開(kāi)關(guān)可以設(shè)置不同的波特率,如表1所示。
在單片機(jī)上電前將撥碼開(kāi)關(guān)打到相應(yīng)位置完成單片機(jī)串口波特率的設(shè)定。
3 軟件設(shè)計(jì)
3.1 通信協(xié)議
通信協(xié)議設(shè)定幀格式為:1位起始位,8位數(shù)據(jù)位,1位停止位,不設(shè)奇偶校驗(yàn)位。有效的通信傳輸字節(jié)只是中間的8位數(shù)據(jù)位。單片機(jī)的波特率設(shè)置由P2口內(nèi)容設(shè)定,PC機(jī)的波特率由界面中的波特率選擇控件決定,二者的波特率必須保持一致。
3.2 PC機(jī)程序設(shè)計(jì)
PC機(jī)程序設(shè)計(jì)部分利用Lab windows/CVI平臺(tái)進(jìn)行,使用 Lab windows/CVI首先需建立一個(gè)項(xiàng)目文件,包含有用戶界面文件(.uir)、C源碼文件(.c)、頭文件(.h)、3個(gè)部分。接下來(lái)調(diào)試好系統(tǒng)軟件以后,使用Lab windows/CVI的Distribution Kit工具將項(xiàng)目文件生成應(yīng)用文件(.EXE)。
3.2.1 用戶界面設(shè)計(jì)
創(chuàng)建一個(gè)新的工程文件,在工程文件中添加一個(gè)新的用戶界面文件(.uir),在.uir文件中創(chuàng)建一個(gè)面板(panel)和若干控件。
面板和主要控件的屬性設(shè)置則如表2所示。
設(shè)置好以后,還需要按照下面步驟修改設(shè)置一些控件屬性:設(shè)置COMPORT控件的Label/Value屬性:向控件Label中添加COM1、COM2、COM3、COM4,相應(yīng)的Value值設(shè)為1、2、3、4,數(shù)據(jù)類型為int型;設(shè)置BAUDRATE控件的Label/Value值:2400、4800、9600、19200,數(shù)據(jù)類型同樣設(shè)為int型;設(shè)置CLEAR、READ、TEXTBOX、QUIT、FLUSHOUTQ、FLUSHINQ控件的Dimmed屬性的初始值為TRUE[2]。
3.2.2 代碼修改
Lab windows/CVI提供了RS-232函數(shù)庫(kù),可以用來(lái)實(shí)現(xiàn)RS-232總線通信。
其中,函數(shù)Open Com Config用于打開(kāi)COM端口并且設(shè)置端口參數(shù),其原型是int OpenComConfig (int COMPort, char deviceName[], long baudRate, int parity, int dataBits, int stopBits, int inputQueueSize, int outputQueueSize);函數(shù)Com Wrt用于向COM端口寫入指定長(zhǎng)度數(shù)據(jù),其原型是int ComWrt (int COMPort, char buffer[], int count);函數(shù)Com Rd Byte用于從COM端口讀入一個(gè)字節(jié),其原型是int ComRdByte (int COMPort);函數(shù)Com Rd用于從COM端口讀入指定長(zhǎng)度數(shù)據(jù)至緩沖器,其原型是int ComRd (int COMPort, char buffer[], int count);函數(shù)Flush InQ可清空輸入隊(duì)列,其原型是int Flush InQ (int COMPort);函數(shù)Flush OutQ可清空輸出隊(duì)列,其原型是int Flush OutQ (int COMPort)。
3.2.3 配置COM端口
程序運(yùn)行后首先需要配置COM端口,選擇COM端口號(hào)和波特率后,點(diǎn)擊Config按鈕配置端口。若配置成功,設(shè)置CLEAR、READ、TEXTBOX、FLUSHOUTQ、FLUSHINQ有效。
為增強(qiáng)數(shù)據(jù)傳輸?shù)目煽啃?,在發(fā)送數(shù)據(jù)時(shí)加入了延時(shí)環(huán)節(jié)。
4 結(jié)論
綜上所述,Labwindows/CVI提供的叫做函數(shù)面板的操作界面,可以對(duì)每一個(gè)函數(shù)實(shí)現(xiàn)交互式編程,利用它豐富的庫(kù)函數(shù),使得源碼的鍵入量大大減少,程序語(yǔ)法正確率提高,工程設(shè)計(jì)的效率和可靠性大幅度增強(qiáng)。本系統(tǒng)所有程序均調(diào)試通過(guò),數(shù)據(jù)傳輸可靠,值得推廣應(yīng)用。
參考文獻(xiàn)
[1]求是科技.單片機(jī)通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2005.
[2]宋宇峰.LabWindows/CVI逐步深入與開(kāi)發(fā)實(shí)例[M].北京:機(jī)械工業(yè)出版社,2003.
作者簡(jiǎn)介
馬妍霞(1975-),女,山東省濟(jì)寧市人。大學(xué)本科學(xué)歷。從事工作為電子通信教學(xué)方面。
作者單位
濟(jì)寧職業(yè)技術(shù)學(xué)院 山東省濟(jì)寧市 272037endprint