新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于8250的多機(jī)通信設(shè)計(jì)

        基于8250的多機(jī)通信設(shè)計(jì)

        作者: 時(shí)間:2012-01-19 來(lái)源:網(wǎng)絡(luò) 收藏

        實(shí)現(xiàn)的方法很多,例如可以根據(jù)通信協(xié)議的要求,用編寫(xiě)程序的方法完成中數(shù)據(jù)字符的接收和發(fā)送,但這種方法比較麻煩;為了快速、簡(jiǎn)便、有效的實(shí)現(xiàn),PC系列及其兼容機(jī)都可以采用一個(gè)可編程異步串行通信接口芯片來(lái)執(zhí)行異步串行通信協(xié)議。這種異步通信接口芯片的核心是一個(gè)大規(guī)模集成通信組件,稱(chēng)為通用異步接收/發(fā)送器,或簡(jiǎn)稱(chēng)UART(Universal Asynchronous Receiver/Transmitter)。

        1﹒ 8051實(shí)現(xiàn)多機(jī)通信原理

        8051串行通信相關(guān)的三個(gè)控制寄存器SCON(Serial Controller)、PCON(Power Controller)和IE(Interrupted Enhanced)分別用于設(shè)定四種不同的通信方式及定義。它的串行口工作方式3是可變的9位數(shù)據(jù)異步通信方式,發(fā)送或接收一幀數(shù)據(jù)為1l 位:1位起始位,8位數(shù)據(jù)位、1位附加的校驗(yàn)位和1位停止位。其中附加的第9位數(shù)據(jù)是可編程的,利用這一可控的第9位數(shù)據(jù),可以實(shí)現(xiàn)多機(jī)通信。

        2﹒ PC機(jī)與8051通信原理

        PC機(jī)的串行通信適配器,其核心為可編程異步收發(fā)器UART8250芯片,8250有10個(gè)可尋址寄存器供CPU讀/寫(xiě),以實(shí)現(xiàn)與外界的通信,并制定通信協(xié)議和提供通信狀態(tài)信息。

        8051的串行通道是一個(gè)全雙工的串行通信口,既可以實(shí)現(xiàn)雙機(jī)通信,也可以實(shí)現(xiàn)多機(jī)通信。當(dāng)串行口工作在方式2或方式3時(shí),若串行控制寄存器SCON的多機(jī)通信控制位SM2由軟件設(shè)置為“1”,則為多機(jī)方式;若SM2為“0”,則為9位異步通信方式。

        在多機(jī)通信時(shí),8051發(fā)送的幀格式是11位,其中第9位是SCON中的發(fā)送數(shù)據(jù)位TB8,它是多機(jī)通信時(shí)發(fā)送地址(TB8=1)或發(fā)送數(shù)據(jù)(TB8=0)的標(biāo)志。串行發(fā)送時(shí)自動(dòng)裝入串行幀格式的相應(yīng)位。在接收端,一幀數(shù)據(jù)的第9位信息被裝入SCON的接受數(shù)據(jù)位RB8中,接收機(jī)根據(jù)RB8以及SM2的狀態(tài)確定是否產(chǎn)生串行中斷標(biāo)志,從而可以響應(yīng)或不響應(yīng)串行中斷,這樣就實(shí)現(xiàn)了串行中斷。

        PC機(jī)的串行通信由接口芯片8250完成。它是一種通用的異步接受/發(fā)送器,是專(zhuān)門(mén)為了適用于Intel公司的微處理機(jī)的數(shù)據(jù)通信而設(shè)計(jì)的。它接受來(lái)自CPU的并行數(shù)據(jù),然后將其轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù),通過(guò)發(fā)送器的移位寄存器發(fā)送出去。雖然8250不具備多機(jī)通信功能也不能產(chǎn)生TB8或RB8,但可以靈活地使用8250,用軟件完成上述功能。8250可以發(fā)送多種字長(zhǎng),其中一幀最長(zhǎng)為11位,與8250發(fā)送的幀格式相比,差別僅在第9位,即PC機(jī)的 8250發(fā)送的第9位是奇/偶校驗(yàn)位,而不是相應(yīng)的地址/數(shù)據(jù)位標(biāo)志,可以采用軟件編程的方法使8250的奇/偶校驗(yàn)位形成正確的地址/數(shù)據(jù)標(biāo)志。

        3﹒ PC機(jī)與8051的多機(jī)通信控制

        雖然8250本身并不具備8051系列的多機(jī)通信功能,但通過(guò)軟件的辦法,可使得8250滿(mǎn)足8051通信的要求。

        8250的端口地址范圍為3F8H~3FEH或2F8H~2FEH。其內(nèi)部寄存器的端口地址見(jiàn)表1。

        表1 8250內(nèi)部寄存器的端口地址

        序號(hào)

        名稱(chēng)

        端口地址

        輸入/輸出形式

        1

        數(shù)據(jù)發(fā)送保持寄存器

        3F8H

        輸出

        2

        數(shù)據(jù)接受寄存器

        3F8H

        輸入

        3

        因子寄存器(低位)

        3F8H

        輸出

        4

        波特率因子寄存器(高位)

        3F9H

        輸出

        5

        中斷控制寄存器

        3F9H

        輸出

        6

        中斷識(shí)別寄存器

        3FAH

        輸入

        7

        通信線(xiàn)路控制寄存器

        3FBH

        輸出

        8

        MODEM控制寄存器

        3FCH

        輸出

        9

        通信線(xiàn)路狀態(tài)寄存器

        3FDH

        輸入

        10

        MODEM狀態(tài)寄存器

        3FEH

        輸入

        8250可發(fā)送11位數(shù)據(jù)幀,這11位數(shù)據(jù)幀由1位起始位、8位數(shù)據(jù)位、1位奇偶校驗(yàn)位和1位停止位組成,其格式如下:

        起始位

        D0

        D1

        D2

        D3

        D4

        D5

        D6

        D7

        奇偶位

        停止位

        而8051單片機(jī)通信的典型數(shù)據(jù)格式為:

        起始位

        D0

        D1

        D2

        D3

        D4

        D5

        D6

        D7

        TB8

        停止位

        其中TB8是可編程位,通過(guò)使其為0或1而將數(shù)據(jù)幀和地址幀區(qū)別開(kāi)來(lái)。

        比較上面兩種數(shù)據(jù)格式可知:它們的數(shù)據(jù)位長(zhǎng)度相同,不同僅在于奇偶校驗(yàn)位和TB8。如果通過(guò)軟件的方法可以編程8250的奇偶校驗(yàn)位,使得在發(fā)送地址時(shí)為“1”,發(fā)送數(shù)據(jù)時(shí)為“0”,則8250的奇偶校驗(yàn)位完全模擬單片機(jī)多機(jī)通信的TB8位。方法是把8250的通信線(xiàn)控制寄存器寫(xiě)入特定的控制字。

        仔細(xì)研究串行卡的通信線(xiàn)控制寄存器3FBH的DS位功能可發(fā)現(xiàn),在串行口初始化時(shí)設(shè)定3FB的D5=1,D3=1,而在發(fā)送地址時(shí)設(shè)置D4=0,在發(fā)送數(shù)據(jù)時(shí)設(shè)置D4=1,這樣實(shí)現(xiàn)了8051中TB8的功能,不必每次都進(jìn)行調(diào)整。這種方法不僅節(jié)省了軟件開(kāi)支,而且提高了通信速度。

        通過(guò)對(duì)8250的線(xiàn)路控制寄存器(LCR)的設(shè)置,可使8250具有很大的靈活性。要使8250與8051實(shí)現(xiàn)多機(jī)通信,關(guān)鍵在于控制它的線(xiàn)路狀態(tài),使它的數(shù)據(jù)傳輸格式與8051保持一致。根據(jù)8250線(xiàn)路控制寄存器的結(jié)構(gòu)特點(diǎn),可以在編程中作如下選擇:

        若要求8250發(fā)送幀的奇偶校驗(yàn)位為1,只需要執(zhí)行

        MOV DX,3FBH

        MOV AL,2BH

        OUT DX,AL

        這三條語(yǔ)句,此時(shí)幀格式為:

        起始位

        D0

        D1

        D2

        D3

        D4

        D5

        D6

        D7

        1

        停止位

        若要求8250的奇偶位為0,只需執(zhí)行

        MOV DX,3FBH

        MOV AL,3BH

        OUT DX,AL

        這三條語(yǔ)句,此時(shí)幀格式為:

        起始位

        D0

        D1

        D2

        D3

        D4

        D5

        D6

        D7

        0

        停止位

        顯然,前者可作為多機(jī)通信中的地址幀,而后者作為數(shù)據(jù)幀。

        4﹒ PC機(jī)非標(biāo)準(zhǔn)波特率的設(shè)置

        8051單片機(jī)系統(tǒng)時(shí)鐘絕大多數(shù)情況下都采用6MHz的石英晶體振蕩器,其串行口的波特率是由其內(nèi)部定時(shí)器TH1(8位)決定的,具體計(jì)算公式為:

        Baud=(fosc﹡2SMOD)/(32﹡12﹡(256-TH1))=(15625﹡2SMOD)/(256-TH1)

        式中SMOD可編程控制,TH1的不同值所確定的波特率不同。

        如果用BASIC或直接調(diào)用ROM BIOS INT14(串行口中斷),那么只能設(shè)置幾種標(biāo)準(zhǔn)的波特率。在這種標(biāo)準(zhǔn)波特率下,8051很難實(shí)現(xiàn),如4800的波特率,對(duì)使用6MHz晶振的單片機(jī)就無(wú)法實(shí)現(xiàn)。然而在實(shí)際應(yīng)用中,不大可能只為滿(mǎn)足標(biāo)準(zhǔn)波特率要求而選擇晶振。另一方面,在保證可靠通信的前提下,總是希望通信速度盡可能的快。所以,可以通過(guò)直接對(duì)8250的除數(shù)鎖存器編程,以取得非標(biāo)準(zhǔn)波特率。

        假設(shè)多機(jī)通信波特率計(jì)算值為2400,由于單片機(jī)無(wú)法實(shí)現(xiàn),因此可設(shè)計(jì)為1953,在單片機(jī)上令TH1=248且SMOD=0,而在PC機(jī)上令除數(shù)等于59,這樣便可以實(shí)現(xiàn)多機(jī)通信。

        5﹒ 對(duì)8250的編程

        僅就8250而言,異步串行通信編程步驟如下:

        step1:設(shè)定通信的規(guī)程,如波特率、奇偶校驗(yàn)方式、數(shù)據(jù)格式、數(shù)據(jù)字節(jié)長(zhǎng)度等;

        step2:讀取通信線(xiàn)路(或MODEM)的狀態(tài),判斷是否可以進(jìn)行通信;

        step3:送出(或接收)一個(gè)字節(jié);

        step4:重復(fù)step2和step3直到通信完畢。

        當(dāng)允許中斷時(shí),CPU送出(或接收)一個(gè)字節(jié)后,并不需要不斷查詢(xún)控制器的狀態(tài),而可轉(zhuǎn)向執(zhí)行其他任務(wù)。當(dāng)有中斷信號(hào)INT4發(fā)生并響應(yīng)后,再按上述step2、step3第三步處理即可。

        應(yīng)用8250進(jìn)行串行通信時(shí),首先要對(duì)其初始化,即設(shè)置波特率、通信采用的數(shù)據(jù)格式、是否使用中斷、是否自測(cè)試操作等。初始化后,則可采取程序查詢(xún)方式或中斷方式進(jìn)行通信。

        8250的初始化一般分三步:

        step1:設(shè)置波特率(假設(shè)為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:設(shè)置通信數(shù)據(jù)格式(假設(shè)7個(gè)數(shù)據(jù)位,1個(gè)停止位,偶校驗(yàn))

        MOV AL,1AH

        MOV DX,3FBH

        OUT DX,AL

        step3:設(shè)置操作方式

        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;自測(cè)試工作方式

        step4:設(shè)置中斷允許寄存器

        MOV AL,00H

        MOV DX,3F9H

        OUT DX,AL

        6﹒ 本文的創(chuàng)新點(diǎn)

        本文的創(chuàng)新點(diǎn)在于:第一,利用可編程異步串行通信接口芯片執(zhí)行異步串行通信協(xié)議以實(shí)現(xiàn)通信;第二,通過(guò)直接對(duì)8250的除數(shù)鎖存器編程的方法,以取得非標(biāo)準(zhǔn)波特率。

        參考文獻(xiàn):

        [1] 洪家平. WINDOWS環(huán)境下PC機(jī)與單片機(jī)的通信.北京:《微計(jì)算機(jī)信息》2005年第三期第70~73頁(yè)

        [2] 李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù).北京:北京航空航天大學(xué)出版社,2002.12

        [3] 姚志江等.一個(gè)8051MCU可綜合VHDL模型的完整實(shí)現(xiàn).北京:計(jì)算機(jī)應(yīng)用,2000(20)

        [4] 李廣第.單片機(jī)基礎(chǔ).北京:北京航空航天大學(xué)出版社,2002.12



        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 深水埗区| 林芝县| 聂拉木县| 陆良县| 高州市| 大渡口区| 铅山县| 谢通门县| 天台县| 衡阳县| 盐亭县| 霍城县| 黄冈市| 双城市| 唐河县| 元谋县| 伊通| 阜康市| 屏山县| 凤台县| 临邑县| 肇源县| 北票市| 张掖市| 嵩明县| 当涂县| 蒲城县| 鄂尔多斯市| 台州市| 长治县| 洪雅县| 斗六市| 宾阳县| 科尔| 绥滨县| 饶平县| 天津市| 郓城县| 分宜县| 广元市| 兴文县|