3 軟件部分的設計
3.1 pc機的通信程序的設計
由于pc機側的開發環境較多,如:vc++、delphi、vb等等,在此主要敘述用vb來進行程序設計。
目前,vb(visual basic)編程已成為windows系統開發的主要語言之一,以其高效、簡單易學及功能強大的特點越來越為廣大程序設計人員及用戶所喜愛。vb支持面向對象的程序設計,具有結構化的事件驅動編程模式并可以使用無限擴增的控件,而且可以十分簡便地作出良好的人機界面。在標準串口通信方面,vb提供了具有強大功能的通信控件mscomm,文件名為mscomm.vbx。該控件可設置串行通信的數據發送和接收,對串口狀態及串口通信的信息格式和協議進行設置。這是一個標準的十位串口通信,包括8位標準數據和數據的起始位和停止位。在發送或接收數據過程中觸發oncomm事件,通過編程訪問commevent屬性了解通信事件的類型,分別進行各自的處理。每個通信控件對應一個串口,可以設計多個通信控件來訪問多個通信口。vb通信控件設計軟件如下:
定義一些變量
dim rec(512)as integer ‘接受字節數組定義
dim sent() as byte ‘發送的可變數組定義
private sub form_load() ‘串口初始化
comml.commport=1 ‘設置串口1
mscomml.settings=600,n,8,1波特率:9600 奇校驗,8位數據,1位停止位
mscomml.inputlen=0 ‘讀取接收緩沖區的所有字符
mscomm1.inputmode= 1 ‘以二進制形式從輸入緩沖區中讀數據
mscomml.inbuffersize=1024 ‘設置接收緩沖區為1024字節
mscomml.outbuffersize=512 ‘設置發送緩沖區為512字節
mscomml.portopen=true ‘打開串口1
mscomml.sthreshold=0 ‘使用查詢方式發送數據
mscomml.rthreshold=1 ‘使用中斷方式接受數據
end sub
public sub send-data() ‘發送n個數據
dim i as integer
mscomm1.rtsenable =1 ‘請求發送數據
for i=0 to n
mscomml.output=data(i)
next i
mscomm1.rtsenable =false ‘數據發送完畢,撤消請求發送信號
end sub
public sub mscomml_oncomm() ‘中斷事件
select case mscomml.commevent
case comevreceive ‘在發生接受到數據事件時執行以下命令:
mscomm1.rthreshold=0 ‘不準后續接受字節引起中斷事件
…… ‘可以根據具體的問題,在此處添加相應的處理程序
end select
end sub
3.2 at89c51單片機通信程序的設計
at89c51采用匯編語言編程。at89c51內有一個標準的串行口,有4種工作方式,其中方式1是標準的10位異步通信方式,1位啟始位,8位數據位,1位停止位,10位數據和pc機的標準串口相對應,由串行口控制寄存器scon設置狀態,其字節地址為98h。如下式所示:
sm0 sm1 sm2 ren tb8 rb8 t1 r1
本系統中at89c51串口控制器scon設置為50h,sm0、sm1為0、1,即為串行工作方式1,ren為1,即允許串口接收。另外,使at89c51的中斷允許寄存器ie的開放或禁止所有中斷位ea為1,開放或禁止串行通道中斷位es為1,即允許串行口中斷。程序簡介如下:
串行口初始化
mov th1,# xxh ,設定波特率
mov tl1, #xxh
mov scon, #50h ,串行工作方式為1
mov pcon, #80h
setb tr1 ,允許定時器1計數
setb ea ,允許所有中斷
setb es ,允許串行中斷
串口中斷入口
push acc
push psw
clr ea
clr ri
mov a, sbuf
mov r0,a
cjne r0, #0feh, lh1 ,判斷是否為本at89c51的標志,不是則跳出串行中斷,是則處理相應的程序
…… ,可以根據具體的問題,在此處添加相應的處理程序
lh1: pop psw
pop acc
setb ea
reti
4 結束語
該系統目前已成功地應用在山東風光電子有限公司的jd-bp37系列高壓變頻調速系統中對23個at89c51的串行通信,運行良好。對于目前廣泛應用的windows環境下實現pc機與多個單片機之間的通信問題,希望本文能夠提供一點有用的參考價值。 作者: 慕容輕風 時間: 2013-7-3 10:25
太好了,謝謝你