基于VB實現(xiàn)PC機與單片機的串行通訊
對串行口的操作可分為以下幾步進行:①串行口初始化;②發(fā)送聯(lián)絡信號;③接收聯(lián)絡信號;④發(fā)送數(shù)據。以下程序由匯編語言編寫:
ORG 0030H
START:MOV SP,#60H
MOV TMOD, #20H ;T1工作模式2
MOV TH1, #72H
MOV TL1, #72H ;波特率110HZ
SETB TR1
MOV PCON, #00H ;SMOD=0
MOV SCON, #50H ;串行方式1
MOV R0,#20H
MOV R2,#30 ;數(shù)據個數(shù)
XX1:MOV A,#55H
MOV SBUF,A ;發(fā)送聯(lián)絡信號
WAIT1:JBC TI,WAIT2 ;等待發(fā)送完畢
AJMP WAIT1
WAIT2:JBC RI,READ ;等待接收完畢
AJMP WAIT2
READ:MOV A,SBUF ;接收聯(lián)絡信號
CJNE A,# 0AAH,XX1 ;接收數(shù)據不正確,重新開始
LOOP:MOV A,@R0
MOV SBUF,A
WAIT: JBC TI, LOOP1
AJMP WAIT ;等待發(fā)送完畢
LOOP1:INC R0
DJNZ R2,LOOP
END
(2)計算機的串行通訊程序
為了更方便地實時了解數(shù)據采集的情況,我們把從單片機讀來的數(shù)據分別賦給數(shù)組,然后描繪出波形曲線。
首先開啟一個VB項目,并在窗體上安排一個MSCOMM控件,作為串行通訊的信道。按下F4調出屬性窗口,變量COMPORT屬性為2,另外將 Rthreshold屬性設為1,意思就是只要外界傳送任何字符串,隨即引發(fā)事件。安排一個定時器,作為連續(xù)動作的執(zhí)行控件,一旦一位數(shù)據發(fā)送完就引發(fā)中斷,發(fā)送下一個數(shù)據。設置一個picturebox對象,把由單片機傳送來的數(shù)據以線條方式繪制在此圖片框控件上。按下F4調出屬性窗口,其Name屬性改為“Graph1”。
MSCOMM控件支持以文本和二進制格式傳輸數(shù)據,由于下位機是單片機,處理二進制數(shù)據較為方便。因此本例中以二進制格式發(fā)送和接受數(shù)據,VB支持字節(jié)變量類型來存儲二進制數(shù)據,從串口讀入的字節(jié)被保存在字節(jié)數(shù)組變量中,因此定義兩個BYTE類型的動態(tài)數(shù)組來存放和接受數(shù)據,在接受數(shù)據時采用事件驅動法,當接受緩沖區(qū)有Rthreshold個數(shù)據時,引起ONCOMM事件。
本程序接收從單片機發(fā)來的30個數(shù)據,當數(shù)據進入PC機的輸入緩沖區(qū)后,程序會不斷讀取輸入緩沖區(qū)的數(shù)據,并將這些讀入的數(shù)據收在一起,賦給數(shù)組。
因為VB支持坐標格式,我們用SCALE函數(shù)作出坐標,定義X軸由0到30,表示有30個數(shù)據,Y軸由-20到+20,表示采集數(shù)據的范圍是-20 到+20,表達式為SCALE(0,+20)-(30,-20),為了實時采集數(shù)據,可以用定時器不斷地更新曲線。這樣就可以動態(tài)地顯示被采集的數(shù)據。
評論