摘要:主要講解了ibm-pc機與mcs-51單片機多機系統(tǒng)的通信原理,給出了其硬件接口框圖,并詳細地分析了系統(tǒng)的多機通信軟件設計。
1、引言
在測控系統(tǒng)和工程應用中,常遇到多項任務需同時執(zhí)行的情況,因而主從式多機分布式系統(tǒng)成為現(xiàn)代工業(yè)廣泛應用的模式。它們大多由ibm-pc微機和mcs-51單片機組成。單片機功能強、體積小、價格低廉、開發(fā)應用方便,尤其具有全雙工串行通訊的特點,在工業(yè)控制、數(shù)據(jù)采集、智能儀器儀表、家用電器方面都有廣泛的應用。同時,ibm-pc機正好補充單片機人機對話和外圍設備薄弱的缺陷。各單片機獨立完成數(shù)據(jù)采集處理和控制任務,同時通過通信接口將數(shù)據(jù)傳給pc機,pc機將這些數(shù)據(jù)進行處理、顯示或打印,把各種控制命令傳給單片機,以實現(xiàn)集中管理和*控制。
故ibm-pc機(上位機)與各mcs-51單片機(下位機)之間的通信顯得尤其重要。本文主要探討它們之間的遠距離串行通信接口和軟件程序設計。
2、硬件設計接口
rs-232-c串行通信接口是美國電氣工業(yè)協(xié)會(eia)與bell公司等一起開發(fā)的一種標準通信協(xié)議,現(xiàn)在它在終端、外設與計算機中被廣泛采用。該標準規(guī)定了21個信號和25個引腳,但在智能儀器與計算機之間的通信中常用2個信號及3個引腳(2腳數(shù)據(jù)輸入,3腳數(shù)據(jù)輸出,7腳信號地)。它采用雙極性的負邏輯信號,0邏輯信號為+3v至12v,1邏輯信號為-3v至-12v,它的傳輸速率zui大為20kbit/s,傳輸距離僅為15m。由于rs-232主要是完成電平移位、轉換和信號反相等,所以它有自己的電平轉換與驅動芯片,如mc1488(發(fā)送)與mc1489(接受)。ibm-pc機有兩個標準的rs-232串行口,其電平采用的是eia電平,而mcs-51單片機的串行通信是由txd(發(fā)送數(shù)據(jù))和rxd(接收數(shù)據(jù))來進行全雙工通信的,它們的電平是ttl電平,為了pc機與mcs-51機之間能可靠地進行串行通信,需要用電平轉換芯片。由于mc1488和mc1489需要±12v、+5v電源供電,故采用maxim公司生產(chǎn)的低功耗、單電源的max232芯片,因為它自身帶有電源電壓變換器,可以把+5v電源變換成rs-232輸出電平所需的±10v電壓,能實現(xiàn)rs-232的技術指標,并只需要+5v的電源,為串行通信帶來了較好的性能和低廉的價格。max232的接口電路圖如圖2所示。
pc機采用可編程串行異步通信控制器8251a來實現(xiàn),通過對ins8251a初始化可以控制串行數(shù)據(jù)傳送格式和速度及其工作方式,使得它與單片機的通信方式一致,從而實現(xiàn)pc機與單片機之間的通信。mcs-51和8251a的連接圖見圖3。
由于遠距離數(shù)據(jù)傳輸,在系統(tǒng)中用了兩片max485芯片進行數(shù)據(jù)傳送,還采用了兩級光電隔離來提高系統(tǒng)的抗*力。單片機和pc機之間的rs-232通信硬件接口電路框圖如圖4所示。
3、串行通信的軟件程序設計
3.1主從式多機通信原理
mcs-51用于多機通信時必須工作在方式2或方式3。以方式3為例,每發(fā)送一幀數(shù)據(jù)為11位:1位起始位(0),8位數(shù)據(jù)位和1位停止位(1),附加的第9位數(shù)據(jù)在非多機系統(tǒng)中為奇偶校驗位,在發(fā)送端有scon的tb8產(chǎn)生,在接收端傳送到scon的rb8。它還可設定為“0”或“1”作為在多機通信中區(qū)分數(shù)據(jù)幀(0標志)還是地址幀(1標志)的標志。在mcs-51多機系統(tǒng)中有以下協(xié)議:所有的各從機均處于聽命狀態(tài),即sm2=1,以便接收主機發(fā)來的地址,當接收到一幀信息的rb8為“1”時,表示主機發(fā)送來的是地址信息,所有的從機均發(fā)生接收中斷,否則中斷屏蔽。當一從機進入相應的中斷服務程序,把接收到的地址和本機的地址比較,如果相符合就令其sm2=0,并向主機發(fā)回本機地址以作應答,該從機就與主機聯(lián)通,準備接收主機發(fā)來的命令或數(shù)據(jù)信息,而其他的未被尋址從機保持sm2=1并退出各自的中斷服務程序。這樣,只有sm2=0的從機才能接收到主機發(fā)送來的數(shù)據(jù)信息,順利實現(xiàn)地址幀和數(shù)據(jù)幀的分離。被尋址從機在通信完成后重新使sm2=1,并退出中斷服務程序,等待下次通信。
3.2多機通信協(xié)議
要實現(xiàn)單片機和pc機的正常通信,必須正確設定它們兩者之間的通信方式,保證雙方都用相同的波特率、起始位、停止位、奇偶校驗位,并且要建立雙方通信的應答信號。
單片機既可工作在同步移位寄存器方式下也可工作在uart(通用異步收發(fā)器)下。串行口的通信方式是由特殊功能寄存器scon來控制的。其各控制定義如下:
sm0,sm1:工作模式設定位;sm2:允許使用方法2、3多機通信控制位;rb8:接收數(shù)據(jù)第9位;tb8:發(fā)送數(shù)據(jù)第9位;ti:發(fā)送中斷標志;ri:接收中斷標志。本文中工作方式為3,即9位uart定時器t1作為波特率發(fā)生器,工作在方式2,若選定波特率為1200bps,則計數(shù)初值為0e8h(smod=0,時鐘頻率fosc為11.059mhz)。
pc機的異步通信接口為in8251a,它可設定1位、1.5位或2位停止位,數(shù)據(jù)可在5~8位之間選擇,通信頻率為0~9.6kbps,有奇偶校驗、幀校驗、溢出校驗三種方式。可通過對它寫入一定的方式控制字、命令控制字從而進行初始化。它與mcs-51的連接如前面所示,則它的數(shù)據(jù)口地址為0f0h,控制口地址為0f1h。它的工作狀態(tài)寄存于其狀態(tài)字寄存器中,可由mcs-51的cpu讀取。通信協(xié)議如下:(1)串行通信波特率為1200bps;(2)幀格式為8位數(shù)據(jù)位,一位起始位,一位可編程的第9位(即發(fā)送和接收的地址/數(shù)據(jù)位的標志位),一位停止位;(3)主機和從機遵循主從原則,主機用呼叫方式選擇從機,數(shù)據(jù)在主機和從機之間雙向傳遞,各從機之間的相互通信需通過主機作為中介;(4)主從機之間還應傳送一些供它們識別的命令和狀態(tài)字,如以00h表示主機發(fā)送從機接收命令,以01h表示從機發(fā)送主機接收命令等。
3.3通信程序設計思路及其實現(xiàn)
程序主要包括主機程序(由主機主程序和通信子程序組成)、從機主程序和其中斷服務程序組成。主機程序主要完成對8251a的初始化以及主機與從機之間的通信,主機程序框圖見圖5。而從機主程序主要完成對串行口的初始化、波特率的設置(應與8251a的波特率一致),它的中斷程序主要用來完成mcs-51單片機與pc機的數(shù)據(jù)通信。從機中斷服務程序框圖見圖6。
這里簡單介紹8251a的初始化程序,設8251a工作于異步通信方式,波特率系數(shù)×1,字符長度為8位,偶校驗,所以方式字為7dh,又設8251a為全雙工方式,出錯標志復位,故其命令控制字為27h,其相應的初始化程序如下:
movr0,#0f0h
4、結束語
本系統(tǒng)軟硬件在ibmpc/xt機和dice系列的mcs-51單片機上進行過調(diào)試,運行良好,驗證了其在仿真平臺的控制,現(xiàn)已用于實際系統(tǒng),且特別適用于從機實時性要求較高的中小型工控系統(tǒng)。