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