李雪妍
(淄博職業(yè)學(xué)院,山東淄博 255314)
在工業(yè)控制與信息采集等領(lǐng)域,經(jīng)常需要單片機(jī)和PC機(jī)的共同完成指定工作。PC機(jī)運(yùn)算速度快、容量大,單片機(jī)控制能力強(qiáng)。很多工作需要單片機(jī)采集數(shù)據(jù),PC機(jī)處理數(shù)據(jù)。所以單片機(jī)與PC機(jī)之間的數(shù)據(jù)通訊必不可少,多數(shù)情況是單片機(jī)向PC機(jī)傳輸數(shù)據(jù)。
本文設(shè)計(jì)的串口通訊程序包括下位機(jī)、上位機(jī)以及數(shù)據(jù)傳輸通道。軟件設(shè)計(jì)中下位機(jī)以Keil uVision4作為開發(fā)平臺(tái),采用C語(yǔ)言對(duì)單片機(jī)進(jìn)行編程,C語(yǔ)言在功能上、可讀性、可維護(hù)性上優(yōu)勢(shì)明顯,易學(xué)易用。上位機(jī)以LabVIEW作為開發(fā)平臺(tái),在工業(yè)和學(xué)術(shù)中LabVIEW是被應(yīng)用最廣泛的虛擬儀器開發(fā)平臺(tái)。其編程簡(jiǎn)單,只需要通過(guò)交互式圖形前面板進(jìn)行系統(tǒng)控制和結(jié)果顯示,再通過(guò)程序框圖進(jìn)行功能模塊的組合和操作來(lái)制定各種功能。
串口是計(jì)算機(jī)上一種通信協(xié)議,大多是計(jì)算機(jī)包含兩個(gè)基于RS-232的串口。單片機(jī)與上位機(jī)一般用RS-232串口通訊,RS-232(ANSI/EIA-232)是IBM-PC及兼容機(jī)上的串行連接標(biāo)準(zhǔn),是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。其接口示意圖如圖1所示。
RS-232九芯接口共有9個(gè)接口。本設(shè)計(jì)只需連接三線:TXD、RXD和地線GND即可。TXD(pin 2):串口數(shù)據(jù)輸出(Transmit Data);RXD(pin 3):串口數(shù)據(jù)輸入(Receive Data);GND(pin 5):地線。
圖1 RS-232九芯接口
圖2 串口通訊流程圖
圖3 VISA配置串口函數(shù)模塊
圖4 VISA寫入函數(shù)模塊
圖5 VISA讀取函數(shù)模塊
圖6 VISA關(guān)閉函數(shù)模塊
圖7 數(shù)據(jù)通訊流程圖
波特率是衡量計(jì)算機(jī)串口通信速度的指標(biāo),它表示每秒傳送位的個(gè)數(shù),其單位是b/s(位/秒),例如500波特率表示每秒發(fā)送500個(gè)bit;數(shù)據(jù)位是衡量計(jì)算機(jī)串口通信中時(shí)間數(shù)據(jù)位的指標(biāo)。在RS-232通信協(xié)議中,實(shí)際傳送數(shù)據(jù)順序是:1位起始位、數(shù)據(jù)0、...、數(shù)據(jù)7、1位奇偶校驗(yàn)、1位停止位;停止位用于標(biāo)志單個(gè)信息包的最后一位,停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供了矯正時(shí)鐘同步的機(jī)會(huì);奇偶校驗(yàn)位是在串口通信中一種簡(jiǎn)單的檢錯(cuò)方式。當(dāng)然沒(méi)有校驗(yàn)位也是可以的。
圖8 VISA連線圖
圖9 上位機(jī)人機(jī)界面
下位機(jī)基于ADuC845單片機(jī)通過(guò)Keil開發(fā)平臺(tái)進(jìn)行編寫,下位機(jī)串口通訊程序?qū)?yīng)的流程圖如圖2所示。
串口初始化是數(shù)據(jù)通信程序中十分重要的一部分,初始化設(shè)置正確與否,將直接決定數(shù)據(jù)發(fā)送是否正確。串口初始化主要是對(duì)串口波特率的選擇。由于串口的觸發(fā)是由定時(shí)器3控制的,即通過(guò)定時(shí)器3設(shè)定波特率,設(shè)定好發(fā)送頻率,當(dāng)達(dá)到定時(shí)間隔時(shí),程序就會(huì)進(jìn)入發(fā)送狀態(tài)。兩個(gè)專用寄存器T3CON和T3FD用于設(shè)置定時(shí)器3。
T3CON是波特率控制寄存器,用于設(shè)置UART(通用串口)的波特率和二進(jìn)制分頻器(DIV)的分頻數(shù)。寫入DIV2~DIV0的數(shù)可用式(1)計(jì)算:
f
是由專用寄存器PLLCON所定義的內(nèi)核頻率,計(jì)算得到的DIV值需要取整。T3FD是所需波特率的一個(gè)分?jǐn)?shù)分頻,其值由式(2)計(jì)算:計(jì)算得到的T3FD的值需要取最接近他的整數(shù)。波特率可由式(3)計(jì)算:
當(dāng)完成串口初始化,并到達(dá)定時(shí)間隔后,就可以將數(shù)據(jù)傳送給串行數(shù)據(jù)緩沖器(SBUF)。然后數(shù)據(jù)就會(huì)按照RS-232串口通信協(xié)議傳遞到計(jì)算機(jī)中,從而被上位機(jī)接收處理。
由于串口是按位發(fā)送的,所以程序在數(shù)據(jù)發(fā)送前要先進(jìn)行拆分處理,方便串口傳輸。發(fā)送數(shù)據(jù)是數(shù)據(jù)通信程序最重要的部分,只有完整有序的將數(shù)據(jù)發(fā)往上位機(jī),才能得到正確的數(shù)值。
(1)記錄兩組手術(shù)指標(biāo):手術(shù)用時(shí)、術(shù)中出血量和住院時(shí)間;(2)觀察兩組并發(fā)癥:粘連性腸梗阻、低營(yíng)養(yǎng)癥、腹壁切口裂開與應(yīng)激性潰瘍;(3)檢測(cè)兩組治療前后的體溫、凝血酶原時(shí)間(PT)值以及血氧飽和度指標(biāo)。
由于每次發(fā)完一次數(shù)據(jù),硬件會(huì)自動(dòng)將TI標(biāo)志位置1,所以需要軟件在每次發(fā)完后將其清零,否則將無(wú)法進(jìn)行下一次的數(shù)據(jù)發(fā)送。此操作雖然簡(jiǎn)單,但是在串口程序中很重要,很多時(shí)候就是因?yàn)閷?duì)其處理不當(dāng),導(dǎo)致數(shù)據(jù)發(fā)送有誤。所以,準(zhǔn)確及時(shí)地清除TI標(biāo)志位十分重要。
對(duì)于以上設(shè)置部分程序代碼如下:
T3CON=0x85; //初始化設(shè)置,串口通訊 9600
T3FD=0X12;
SCON=0X52; //8位UART,波特率可變,接收
SBUF=data; //發(fā)送數(shù)據(jù)
while(TI==0); //清除標(biāo)志位
TI=0;
通過(guò)下位機(jī)程序?qū)崿F(xiàn)了對(duì)數(shù)據(jù)的實(shí)時(shí)發(fā)送,接下來(lái)就需要上位機(jī)程序?qū)?shù)據(jù)進(jìn)行接收。
為使下位機(jī)采集的信息能上傳到上位機(jī),必須設(shè)計(jì)通訊接口程序。由于計(jì)算機(jī)和下位機(jī)采用的RS-232串口通信協(xié)議,所以上位機(jī)也要采用串口通信。其大致結(jié)構(gòu)與下位機(jī)數(shù)據(jù)通信程序相同,其不同在于下位機(jī)是發(fā)送數(shù)據(jù),上位機(jī)是接收數(shù)據(jù)。
上位機(jī)編程所用的軟件是LabVIEW,其采用的是圖形化編程,要編制串口通訊程序就需要對(duì)串口功能模塊VISA進(jìn)行配置和連接。VISA是虛擬儀器軟件結(jié)構(gòu)框架(virtual instrumentation software architecture)的簡(jiǎn)稱,是一個(gè)調(diào)用底層代碼來(lái)控制硬件的高層API(應(yīng)用程序接口)。VISA常用的函數(shù)由以下四個(gè):
(1)VISA配置串口,如圖3所示。
功能:設(shè)定波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位等參數(shù),將VISA資源名稱指定的串口按特定設(shè)置初始化。
(2)VISA寫入,如圖4所示。
功能:將“寫入緩沖區(qū)”的數(shù)據(jù)寫入VISA資源名稱指定的串口。
(3)VISA讀取,如圖5所示。
功能:從VISA資源名稱指定的串口中讀取指定字節(jié)的數(shù)據(jù),并將數(shù)據(jù)返回至讀取緩沖區(qū)。
(4)VISA關(guān)閉,如圖6所示。
功能:關(guān)閉VISA資源名稱指定的串口會(huì)話或事件對(duì)象。
上位機(jī)通訊接口程序流程圖如圖7所示。
按照流程圖,利用VISA函數(shù)模塊,將對(duì)應(yīng)的數(shù)據(jù)線進(jìn)行連接設(shè)置,圖8為部分VISA接線圖,圖9為L(zhǎng)abVIEW的前面板,也就是上位機(jī)的人機(jī)界面。
單片機(jī)與計(jì)算機(jī)通訊在工業(yè)和日常生活中發(fā)揮著巨大作用,本文設(shè)計(jì)了一種利用C語(yǔ)言和LabVIEW實(shí)現(xiàn)單片機(jī)與計(jì)算機(jī)串口通訊方法。軟件設(shè)計(jì)遵循模塊化設(shè)計(jì)方法,提高了程序的執(zhí)行效率和易讀性,運(yùn)行簡(jiǎn)單方便。在上位機(jī)中只要對(duì)LabVIEW稍加擴(kuò)展便可實(shí)現(xiàn)計(jì)算機(jī)對(duì)數(shù)據(jù)的轉(zhuǎn)換、存儲(chǔ)等數(shù)據(jù)處理操作。