運(yùn)用Visual Basic實(shí)現(xiàn)PC與89C51單片機(jī)之間的串行通信 沈 飆 夏海燕 摘要 在Visual
Basic開發(fā)環(huán)境下,運(yùn)用VB提供的通信控件,實(shí)現(xiàn)PC機(jī)與89C51單片機(jī)之間的串行通信。
Serial
Communication between PC Abstract:Serial communication between PC
and 89C51 single-chip-computer by MSCOMM control box of Visual Basic is
introduced. 1 系統(tǒng)簡介 |
圖1 系統(tǒng)原理圖 系統(tǒng)上位機(jī)由一臺(PC586)微機(jī)構(gòu)成,軟件采用Visual Basic編程,作出十分直觀的人機(jī)界面,并通過串行口將所需的各種予置信號(數(shù)字信號)傳給單片機(jī)系統(tǒng),再由單片機(jī)系統(tǒng)產(chǎn)生實(shí)際的模擬信號經(jīng)線性光電隔離器送到現(xiàn)場。予置數(shù)值可以分別顯示在PC機(jī)軟件窗口和單片機(jī)系統(tǒng)的予置數(shù)字表頭上。同時,現(xiàn)場實(shí)測信號經(jīng)過線性光電隔離器,也可以實(shí)時顯示在本系統(tǒng)的檢測數(shù)字表頭上和PC機(jī)的界面上。如此設(shè)計界面直觀,而且利于對現(xiàn)場信號進(jìn)行實(shí)時監(jiān)測。因此,采用本系統(tǒng),大大提高了現(xiàn)場信號予置精度,對實(shí)驗(yàn)操作人員來說人機(jī)界面良好,簡單易懂。我們將分硬件和軟件兩方面分別介紹該系統(tǒng)的情況。 2 硬件介紹 圖2 系統(tǒng)硬件原理圖 本系統(tǒng)采用CPU為89C51的單片微機(jī),89C51本身帶有2K的內(nèi)存儲器,可以在編程器上實(shí)現(xiàn)閃爍式的電擦寫達(dá)幾萬次以上,比以往慣用的8031CPU外加EPROM為核心的單片機(jī)系統(tǒng)在硬件上具有更加簡單、方便等優(yōu)點(diǎn),而且完全兼容MCS 51系列單片機(jī)的所有功能。該單片機(jī)系統(tǒng)的工作流程是這樣的:89C51單片機(jī)利用自身具有的串行通信口,直接接收PC機(jī)傳送下來的串行數(shù)據(jù),然后將所接收的各組數(shù)據(jù)通過并行口輸出,經(jīng)過數(shù)字光隔,送到數(shù)據(jù)鎖存器74LS373,最后將鎖存的數(shù)據(jù)送到D/A轉(zhuǎn)換器進(jìn)行數(shù)模轉(zhuǎn)換并通過運(yùn)放將模擬信號輸出,同時顯示在相應(yīng)的予置數(shù)字表上。現(xiàn)場返回的信號通過隔離,經(jīng)過A/D轉(zhuǎn)換器和數(shù)據(jù)鎖存器變成單片機(jī)所需的并行數(shù)字信號送到單片機(jī)的數(shù)據(jù)存儲單元中,再由串行口返送到PC機(jī)上,同時顯示在PC機(jī)界面和本系統(tǒng)相對應(yīng)的檢測數(shù)字表上以便于予置和實(shí)際情況相對比。利用89C51輸出口對不同數(shù)據(jù)鎖存器74LS373和A/D、D/A的片選輸出可以實(shí)現(xiàn)一臺單片機(jī)同時對多路不同信號進(jìn)行予置和檢測。 3 軟件結(jié)構(gòu) Global comm_time As
Integer //定義一些全局變量 3.2 單片機(jī)部分 |
SM0 | SM1 | SM2 | REN | TB8 | RB8 | T1 | R1 |
本系統(tǒng)中89C51串口控制器SCON設(shè)置為50H,SM0、SM1為0、1,即為串行工作方式1,REN為1,即允許串口接收。另外,還應(yīng)使89C51的中斷允許寄存器IE的開放或禁止所有中斷位EA為1,開放或禁止串行通道中斷位ES為1,即允許串行口中斷。89C51的并行口P0和P2分別作為八位數(shù)據(jù)的輸入和輸出口。P3口的輸出作為數(shù)據(jù)鎖存器和D/A、A/D的禁止和允許。程序流程如圖4所示。 單片機(jī)程序清單簡介: (1)主程序 MOV SP,#07 ACALL INIT //調(diào)串口初始化子程序 STRAT:CLR EA 清中斷 MOV R0,#DATA1 存放接收數(shù)據(jù)首地址#DATA1 MOV R1,#DATA2 存放發(fā)送數(shù)據(jù)首地址#DATA2 MOV R2,#N 數(shù)據(jù)個數(shù) SETB EA 開中斷 ACALL D/A 調(diào)延時并啟動D/A轉(zhuǎn)換子程序 ACALL SEND 啟動A/D轉(zhuǎn)換子程序并串口發(fā)送 SJMP START 返回 (2)串口初始化程序 INIT:MOV TH1,#FD 設(shè)置波特率 MOV TL1,#00 MOV TMOD,#20 定時器2為工作方式2 MOV TCON,#40 啟動定時器 SETB ES 允許串口中斷 MOV SCON,#50 置串行口工作方式1 MOV P2,#0F RET (3)中斷服務(wù)程序 0023 PUSH ACC 保護(hù)堆棧 PUSH PSW MOV DPH,#00 JB TI,TEMP1 判斷是否為發(fā)送,是則跳轉(zhuǎn) WAIT:JNB RI,WAIT 判斷是否為接收,否則循環(huán) MOV A,SBUF 將接收的數(shù)據(jù)送到數(shù)據(jù)地址內(nèi) MOV @R0,A CLR 98 清接收中斷 INC R0 DJNZ R1,TEMP1 數(shù)據(jù)若送完則將標(biāo)志置1 SETB 00 TEMP1:CLR 99 清發(fā)送中斷 POP PSW POP ACC RETI (4)延時及調(diào)D/A轉(zhuǎn)換子程序 D/A:INC DPTR 延時 MOV A,DPH CJNE A,#FF,D/A JNB 00,D/A 數(shù)據(jù)未送完,返回 CLR 00 送完則將送完標(biāo)志清零 ACALL OUT RET OUT:CLR A MOV A,@R0 將接收的串行口數(shù)據(jù)送到P2口 MOV P2,A SETB 90 封鎖數(shù)據(jù)鎖存器 MOV R3,#00 WAIT1:DJNZ R3,WAIT1 延時 CLR 90 解除封鎖數(shù)據(jù)鎖存器 RET (5)A/D轉(zhuǎn)換及串口發(fā)送子程序 SEND:MOV DPTR,#ADRESS IN0通道地址首址 MOV R7,#08H 從IN0-IN7依次采集的通道個數(shù) LOOP1:MOVX @DPTR,A 啟動A/D轉(zhuǎn)換 MOV R6 #0AH 延時100μs DELAY:NOP NOP NOP DJNZ R6,DELAY MOVX A,@DPTR 將轉(zhuǎn)換結(jié)果送到指定地址R1 MOV @R1 A MOVX A,@R1 MOV SBUF,A 將指定地址數(shù)據(jù)從串口輸出 INC DPTR INC R1 DJNZ R7,LOOP1 RET |
圖3 程序流程圖 4 結(jié)束語 作者單位:中科院等離子體物理研究所 合肥 230031
|