基于8250的多機通信設計
實(shí)現串行通信的方法很多,例如可以根據通信協(xié)議的要求,用編寫(xiě)程序的方法完成串行通信中數據字符的接收和發(fā)送,但這種方法比較麻煩;為了快速、簡(jiǎn)便、有效的實(shí)現串行通信,PC系列及其兼容機都可以采用一個(gè)可編程異步串行通信接口芯片來(lái)執行異步串行通信協(xié)議。這種異步通信接口芯片的核心是一個(gè)大規模集成通信組件,稱(chēng)為通用異步接收/發(fā)送器,或簡(jiǎn)稱(chēng)UART(Universal Asynchronous Receiver/Transmitter)。
1﹒ 8051實(shí)現多機通信原理
8051串行通信相關(guān)的三個(gè)控制寄存器SCON(Serial Controller)、PCON(Power Controller)和IE(Interrupted Enhanced)分別用于設定四種不同的通信方式及定義波特率。它的串行口工作方式3是可變波特率的9位數據異步通信方式,發(fā)送或接收一幀數據為1l 位:1位起始位,8位數據位、1位附加的校驗位和1位停止位。其中附加的第9位數據是可編程的,利用這一可控的第9位數據,可以實(shí)現多機通信。
2﹒ PC機與8051通信原理
PC機的串行通信適配器,其核心為可編程異步收發(fā)器UART8250芯片,8250有10個(gè)可尋址寄存器供CPU讀/寫(xiě),以實(shí)現與外界的通信,并制定通信協(xié)議和提供通信狀態(tài)信息。
8051單片機的串行通道是一個(gè)全雙工的串行通信口,既可以實(shí)現雙機通信,也可以實(shí)現多機通信。當串行口工作在方式2或方式3時(shí),若串行控制寄存器SCON的多機通信控制位SM2由軟件設置為“1”,則為多機方式;若SM2為“0”,則為9位異步通信方式。
在多機通信時(shí),8051發(fā)送的幀格式是11位,其中第9位是SCON中的發(fā)送數據位TB8,它是多機通信時(shí)發(fā)送地址(TB8=1)或發(fā)送數據(TB8=0)的標志。串行發(fā)送時(shí)自動(dòng)裝入串行幀格式的相應位。在接收端,一幀數據的第9位信息被裝入SCON的接受數據位RB8中,接收機根據RB8以及SM2的狀態(tài)確定是否產(chǎn)生串行中斷標志,從而可以響應或不響應串行中斷,這樣就實(shí)現了串行中斷。
PC機的串行通信由接口芯片8250完成。它是一種通用的異步接受/發(fā)送器,是專(zhuān)門(mén)為了適用于Intel公司的微處理機的數據通信而設計的。它接受來(lái)自CPU的并行數據,然后將其轉換為連續的串行數據,通過(guò)發(fā)送器的移位寄存器發(fā)送出去。雖然8250不具備多機通信功能也不能產(chǎn)生TB8或RB8,但可以靈活地使用8250,用軟件完成上述功能。8250可以發(fā)送多種字長(cháng),其中一幀最長(cháng)為11位,與8250發(fā)送的幀格式相比,差別僅在第9位,即PC機的 8250發(fā)送的第9位是奇/偶校驗位,而不是相應的地址/數據位標志,可以采用軟件編程的方法使8250的奇/偶校驗位形成正確的地址/數據標志。
3﹒ PC機與8051的多機通信控制
雖然8250本身并不具備8051系列單片機的多機通信功能,但通過(guò)軟件的辦法,可使得8250滿(mǎn)足8051單片機通信的要求。
8250的端口地址范圍為3F8H~3FEH或2F8H~2FEH。其內部寄存器的端口地址見(jiàn)表1。
表1 8250內部寄存器的端口地址
序號 | 名稱(chēng) | 端口地址 | 輸入/輸出形式 |
1 | 數據發(fā)送保持寄存器 | 3F8H | 輸出 |
2 | 數據接受寄存器 | 3F8H | 輸入 |
3 | 波特率因子寄存器(低位) | 3F8H | 輸出 |
4 | 波特率因子寄存器(高位) | 3F9H | 輸出 |
5 | 中斷控制寄存器 | 3F9H | 輸出 |
6 | 中斷識別寄存器 | 3FAH | 輸入 |
7 | 通信線(xiàn)路控制寄存器 | 3FBH | 輸出 |
8 | MODEM控制寄存器 | 3FCH | 輸出 |
9 | 通信線(xiàn)路狀態(tài)寄存器 | 3FDH | 輸入 |
10 | MODEM狀態(tài)寄存器 | 3FEH | 輸入 |
8250可發(fā)送11位數據幀,這11位數據幀由1位起始位、8位數據位、1位奇偶校驗位和1位停止位組成,其格式如下:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 奇偶位 | 停止位 |
而8051單片機通信的典型數據格式為:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | TB8 | 停止位 |
其中TB8是可編程位,通過(guò)使其為0或1而將數據幀和地址幀區別開(kāi)來(lái)。
比較上面兩種數據格式可知:它們的數據位長(cháng)度相同,不同僅在于奇偶校驗位和TB8。如果通過(guò)軟件的方法可以編程8250的奇偶校驗位,使得在發(fā)送地址時(shí)為“1”,發(fā)送數據時(shí)為“0”,則8250的奇偶校驗位完全模擬單片機多機通信的TB8位。方法是把8250的通信線(xiàn)控制寄存器寫(xiě)入特定的控制字。
仔細研究串行卡的通信線(xiàn)控制寄存器3FBH的DS位功能可發(fā)現,在串行口初始化時(shí)設定3FB的D5=1,D3=1,而在發(fā)送地址時(shí)設置D4=0,在發(fā)送數據時(shí)設置D4=1,這樣實(shí)現了8051中TB8的功能,不必每次都進(jìn)行調整。這種方法不僅節省了軟件開(kāi)支,而且提高了通信速度。
通過(guò)對8250的線(xiàn)路控制寄存器(LCR)的設置,可使8250具有很大的靈活性。要使8250與8051實(shí)現多機通信,關(guān)鍵在于控制它的線(xiàn)路狀態(tài),使它的數據傳輸格式與8051保持一致。根據8250線(xiàn)路控制寄存器的結構特點(diǎn),可以在編程中作如下選擇:
若要求8250發(fā)送幀的奇偶校驗位為1,只需要執行
MOV DX,3FBH
MOV AL,2BH
OUT DX,AL
這三條語(yǔ)句,此時(shí)幀格式為:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 1 | 停止位 |
若要求8250的奇偶位為0,只需執行
MOV DX,3FBH
MOV AL,3BH
OUT DX,AL
這三條語(yǔ)句,此時(shí)幀格式為:
起始位 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 0 | 停止位 |
顯然,前者可作為多機通信中的地址幀,而后者作為數據幀。
4﹒ PC機非標準波特率的設置
8051單片機系統時(shí)鐘絕大多數情況下都采用6MHz的石英晶體振蕩器,其串行口的波特率是由其內部定時(shí)器TH1(8位)決定的,具體計算公式為:
Baud=(fosc﹡2SMOD)/(32﹡12﹡(256-TH1))=(15625﹡2SMOD)/(256-TH1)
式中SMOD可編程控制,TH1的不同值所確定的波特率不同。
如果用BASIC或直接調用ROM BIOS INT14(串行口中斷),那么只能設置幾種標準的波特率。在這種標準波特率下,8051很難實(shí)現,如4800的波特率,對使用6MHz晶振的單片機就無(wú)法實(shí)現。然而在實(shí)際應用中,不大可能只為滿(mǎn)足標準波特率要求而選擇晶振。另一方面,在保證可靠通信的前提下,總是希望通信速度盡可能的快。所以,可以通過(guò)直接對8250的除數鎖存器編程,以取得非標準波特率。
假設多機通信波特率計算值為2400,由于單片機無(wú)法實(shí)現,因此可設計為1953,在單片機上令TH1=248且SMOD=0,而在PC機上令除數等于59,這樣便可以實(shí)現多機通信。
5﹒ 對8250的編程
僅就8250而言,異步串行通信編程步驟如下:
step1:設定通信的規程,如波特率、奇偶校驗方式、數據格式、數據字節長(cháng)度等;
step2:讀取通信線(xiàn)路(或MODEM)的狀態(tài),判斷是否可以進(jìn)行通信;
step3:送出(或接收)一個(gè)字節;
step4:重復step2和step3直到通信完畢。
當允許中斷時(shí),CPU送出(或接收)一個(gè)字節后,并不需要不斷查詢(xún)控制器的狀態(tài),而可轉向執行其他任務(wù)。當有中斷信號INT4發(fā)生并響應后,再按上述step2、step3第三步處理即可。
應用8250進(jìn)行串行通信時(shí),首先要對其初始化,即設置波特率、通信采用的數據格式、是否使用中斷、是否自測試操作等。初始化后,則可采取程序查詢(xún)方式或中斷方式進(jìn)行通信。
8250的初始化一般分三步:
step1:設置波特率(假設為1200)
MOV AL,80H
MOV DX,3FBH
OUT DX,,AL
MOV AL,60H
MOV DX,3FBH
OUT DX,AL
MOV AL,00H
MOV DX,3F9H
OUT DX,AL
step2:設置通信數據格式(假設7個(gè)數據位,1個(gè)停止位,偶校驗)
MOV AL,1AH
MOV DX,3FBH
OUT DX,AL
step3:設置操作方式
MOV AL,03H
MOV DX,3FCH
OUT DX,AL;不允許中斷輸出
MOV DX,3FCH
MOV AL,OBH
OUT DX,AL;允許中斷輸出
MOV AL,13H
MOV DX,3FCH
OUT DX,AL;自測試工作方式
step4:設置中斷允許寄存器
MOV AL,00H
MOV DX,3F9H
OUT DX,AL
6﹒ 本文的創(chuàng )新點(diǎn)
本文的創(chuàng )新點(diǎn)在于:第一,利用可編程異步串行通信接口芯片執行異步串行通信協(xié)議以實(shí)現通信;第二,通過(guò)直接對8250的除數鎖存器編程的方法,以取得非標準波特率。
參考文獻:
[1] 洪家平. WINDOWS環(huán)境下PC機與單片機的通信.北京:《微計算機信息》2005年第三期第70~73頁(yè)
[2] 李朝青.PC機及單片機數據通信技術(shù).北京:北京航空航天大學(xué)出版社,2002.12
[3] 姚志江等.一個(gè)8051MCU可綜合VHDL模型的完整實(shí)現.北京:計算機應用,2000(20)
[4] 李廣第.單片機基礎.北京:北京航空航天大學(xué)出版社,2002.12
評論