李雪妍
(淄博職業學院,山東淄博 255314)
在工業控制與信息采集等領域,經常需要單片機和PC機的共同完成指定工作。PC機運算速度快、容量大,單片機控制能力強。很多工作需要單片機采集數據,PC機處理數據。所以單片機與PC機之間的數據通訊必不可少,多數情況是單片機向PC機傳輸數據。
本文設計的串口通訊程序包括下位機、上位機以及數據傳輸通道。軟件設計中下位機以Keil uVision4作為開發平臺,采用C語言對單片機進行編程,C語言在功能上、可讀性、可維護性上優勢明顯,易學易用。上位機以LabVIEW作為開發平臺,在工業和學術中LabVIEW是被應用最廣泛的虛擬儀器開發平臺。其編程簡單,只需要通過交互式圖形前面板進行系統控制和結果顯示,再通過程序框圖進行功能模塊的組合和操作來制定各種功能。
串口是計算機上一種通信協議,大多是計算機包含兩個基于RS-232的串口。單片機與上位機一般用RS-232串口通訊,RS-232(ANSI/EIA-232)是IBM-PC及兼容機上的串行連接標準,是PC機與通信工業中應用最廣泛的一種串行接口。其接口示意圖如圖1所示。
RS-232九芯接口共有9個接口。本設計只需連接三線:TXD、RXD和地線GND即可。TXD(pin 2):串口數據輸出(Transmit Data);RXD(pin 3):串口數據輸入(Receive Data);GND(pin 5):地線。

圖1 RS-232九芯接口

圖2 串口通訊流程圖

圖3 VISA配置串口函數模塊

圖4 VISA寫入函數模塊

圖5 VISA讀取函數模塊

圖6 VISA關閉函數模塊

圖7 數據通訊流程圖
波特率是衡量計算機串口通信速度的指標,它表示每秒傳送位的個數,其單位是b/s(位/秒),例如500波特率表示每秒發送500個bit;數據位是衡量計算機串口通信中時間數據位的指標。在RS-232通信協議中,實際傳送數據順序是:1位起始位、數據0、...、數據7、1位奇偶校驗、1位停止位;停止位用于標志單個信息包的最后一位,停止位不僅僅是表示傳輸的結束,并且提供了矯正時鐘同步的機會;奇偶校驗位是在串口通信中一種簡單的檢錯方式。當然沒有校驗位也是可以的。

圖8 VISA連線圖

圖9 上位機人機界面
下位機基于ADuC845單片機通過Keil開發平臺進行編寫,下位機串口通訊程序對應的流程圖如圖2所示。
串口初始化是數據通信程序中十分重要的一部分,初始化設置正確與否,將直接決定數據發送是否正確。串口初始化主要是對串口波特率的選擇。由于串口的觸發是由定時器3控制的,即通過定時器3設定波特率,設定好發送頻率,當達到定時間隔時,程序就會進入發送狀態。兩個專用寄存器T3CON和T3FD用于設置定時器3。
T3CON是波特率控制寄存器,用于設置UART(通用串口)的波特率和二進制分頻器(DIV)的分頻數。寫入DIV2~DIV0的數可用式(1)計算:

f
是由專用寄存器PLLCON所定義的內核頻率,計算得到的DIV值需要取整。T3FD是所需波特率的一個分數分頻,其值由式(2)計算:
計算得到的T3FD的值需要取最接近他的整數。波特率可由式(3)計算:

當完成串口初始化,并到達定時間隔后,就可以將數據傳送給串行數據緩沖器(SBUF)。然后數據就會按照RS-232串口通信協議傳遞到計算機中,從而被上位機接收處理。
由于串口是按位發送的,所以程序在數據發送前要先進行拆分處理,方便串口傳輸。發送數據是數據通信程序最重要的部分,只有完整有序的將數據發往上位機,才能得到正確的數值。
(1)記錄兩組手術指標:手術用時、術中出血量和住院時間;(2)觀察兩組并發癥:粘連性腸梗阻、低營養癥、腹壁切口裂開與應激性潰瘍;(3)檢測兩組治療前后的體溫、凝血酶原時間(PT)值以及血氧飽和度指標。
由于每次發完一次數據,硬件會自動將TI標志位置1,所以需要軟件在每次發完后將其清零,否則將無法進行下一次的數據發送。此操作雖然簡單,但是在串口程序中很重要,很多時候就是因為對其處理不當,導致數據發送有誤。所以,準確及時地清除TI標志位十分重要。
對于以上設置部分程序代碼如下:
T3CON=0x85; //初始化設置,串口通訊 9600
T3FD=0X12;
SCON=0X52; //8位UART,波特率可變,接收
SBUF=data; //發送數據
while(TI==0); //清除標志位
TI=0;
通過下位機程序實現了對數據的實時發送,接下來就需要上位機程序對數據進行接收。
為使下位機采集的信息能上傳到上位機,必須設計通訊接口程序。由于計算機和下位機采用的RS-232串口通信協議,所以上位機也要采用串口通信。其大致結構與下位機數據通信程序相同,其不同在于下位機是發送數據,上位機是接收數據。
上位機編程所用的軟件是LabVIEW,其采用的是圖形化編程,要編制串口通訊程序就需要對串口功能模塊VISA進行配置和連接。VISA是虛擬儀器軟件結構框架(virtual instrumentation software architecture)的簡稱,是一個調用底層代碼來控制硬件的高層API(應用程序接口)。VISA常用的函數由以下四個:
(1)VISA配置串口,如圖3所示。
功能:設定波特率、數據位、停止位、奇偶校驗位等參數,將VISA資源名稱指定的串口按特定設置初始化。
(2)VISA寫入,如圖4所示。
功能:將“寫入緩沖區”的數據寫入VISA資源名稱指定的串口。
(3)VISA讀取,如圖5所示。
功能:從VISA資源名稱指定的串口中讀取指定字節的數據,并將數據返回至讀取緩沖區。
(4)VISA關閉,如圖6所示。
功能:關閉VISA資源名稱指定的串口會話或事件對象。
上位機通訊接口程序流程圖如圖7所示。
按照流程圖,利用VISA函數模塊,將對應的數據線進行連接設置,圖8為部分VISA接線圖,圖9為LabVIEW的前面板,也就是上位機的人機界面。
單片機與計算機通訊在工業和日常生活中發揮著巨大作用,本文設計了一種利用C語言和LabVIEW實現單片機與計算機串口通訊方法。軟件設計遵循模塊化設計方法,提高了程序的執行效率和易讀性,運行簡單方便。在上位機中只要對LabVIEW稍加擴展便可實現計算機對數據的轉換、存儲等數據處理操作。