新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的串行口擴(kuò)展方法設(shè)計(jì)

        51單片機(jī)的串行口擴(kuò)展方法設(shè)計(jì)

        作者: 時(shí)間:2012-03-21 來源:網(wǎng)絡(luò) 收藏

        1 引言

        本文引用地址:http://www.104case.com/article/171817.htm

        在研究采場(chǎng)瓦斯積聚模擬試驗(yàn)臺(tái)的過程中,筆者了主從式多機(jī)采控系統(tǒng)結(jié)構(gòu)。主從式多機(jī)控制系統(tǒng)是實(shí)時(shí)控制系統(tǒng)中較為普遍的結(jié)構(gòu)形式,它具有可靠性高,結(jié)構(gòu)靈活等優(yōu)點(diǎn)。當(dāng)選用單串口51構(gòu)成這種主從式多機(jī)系統(tǒng)時(shí),51一方面可能要和主機(jī)Computer通信,一方面又要和下位機(jī)通信,這時(shí)就需要通道。本文具體介紹了兩種通道的

        2 口的

        常用的標(biāo)準(zhǔn)51內(nèi)部?jī)H含有一個(gè)可編程的全雙工串行通信接口,具有UART的全部功能。該接口電路不僅能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為一個(gè)同步移位寄存器使用。當(dāng)以此類型單片機(jī)構(gòu)成分布式多級(jí)應(yīng)用系統(tǒng)時(shí),器件本身的串口資源就不夠用了。筆者在實(shí)際開發(fā)中,查閱了有關(guān)資料,總結(jié)出如下兩種常用而有效的串行通道擴(kuò)展

        2.1 基于SP2538的擴(kuò)展方法

        SP2538是專用低功耗串行口擴(kuò)展芯片,該芯片主要是為解決當(dāng)前基于UART串口通信的外圍智能模塊及器件較多,而單片機(jī)或DSP原有的UART串口又過少的問題而推出的。利用該器件可將現(xiàn)有單片機(jī)或DSP的單串口擴(kuò)展至5個(gè)全雙工串口。使用方法簡(jiǎn)單、高效。

        在應(yīng)用SP2538擴(kuò)展串行通道時(shí),母串口波特率K1=2880*Fosc_in,單位是MHz,且Fosc_in小于20.0MHz, 在SP2538輸入時(shí)鐘Fosc_in =20.0MHz時(shí)母串口可自適應(yīng)上位機(jī)的56000bps和57600bps兩種標(biāo)準(zhǔn)波特率輸入。子串口波特率K2=480*Fosc_in。

        母串口和所有子串口都是TTL電平接口,可直接匹配其他單片機(jī)或TTL數(shù)字電路,如需連接PC機(jī)則必須增加電平轉(zhuǎn)換芯片如MAX202 、MAX232 等。SP2538具有內(nèi)置的上電復(fù)位電路和可關(guān)閉的看門狗監(jiān)控電路。上位機(jī)寫命令字0x10可實(shí)現(xiàn)喂狗,寫命令字0x15關(guān)閉看門狗,初次上電后看門狗處于激活狀態(tài)或?qū)懨钭?x20激活看門狗監(jiān)控功能。上位機(jī)可通過芯片復(fù)位指令0x35在任何時(shí)候讓芯片進(jìn)行指令復(fù)位,也可通過芯片睡眠指令0x55在任何時(shí)候讓芯片進(jìn)入微功耗睡眠模式以降低系統(tǒng)功耗。初次上電后芯片不會(huì)自行進(jìn)入睡眠模式,但只能由上位機(jī)通過母串口任意發(fā)送一個(gè)字節(jié)數(shù)據(jù)將其喚醒,其他子串口不具備這一功能。

        圖(1)是AT89C52單片機(jī)與SP2538的電路連接,圖中,AT89C52的全雙工串口與SP2538的母串口5相連,該串口同時(shí)也作為命令/數(shù)據(jù)口。SP2538的ADRI0、ADRI1、ADRI2分別與AT89C52的P2.3、P2.4、P2.5口相連,可用于選擇發(fā)送數(shù)據(jù)是選擇相應(yīng)的串口0~4;ADRO0、ADRO1、ADRO2與P2.0、P2.1、P2.2相連,用于判斷接收的數(shù)據(jù)來自哪一個(gè)串口。 SP2538的時(shí)鐘頻率選為20.0MHZ,此時(shí)母串口5的波特率為57600bps,串口0~4的波特率為9600bps。

        下面是與上述硬件電路相關(guān)的接口程序,該程序用A51匯編語(yǔ)言編制,程序僅說明了中斷方式下對(duì)子串口0(TX0、RX0)的操作,其它子串口類似。
        TBLOCK DATA 20H
        RBLOCK DATA 30H
        LENGTH DATA 14H

        TXR_REV_SEND: CLR ES
        JBC RI,RECEIVE
        CLR TI
        MOV A,@R0
        CLR P2.0 ; 寫數(shù)據(jù)到SBUF前必須先置欲發(fā)送子串口的地址
        CLR P2.1
        CLR P2.2
        MOV SBUF,A
        DJNZ R2,NEXT
        SJMP $
        NEXT: INC R0
        RETI
        RECEIVE: MOV A,P2
        AND A,#31H ;判斷是否為子串口0
        JNZ ELSE
        MOV A,SBUF
        MOV @R1,A
        INC R1
        RETI

        49.gif

        2.2 基于Intel8251的串行口擴(kuò)展方法

        上面基于SP2538的串口擴(kuò)展方法可以說是一種串行的擴(kuò)展方法,這里基于Intel8251的擴(kuò)展方法則是一種并行的方法。Intel8251是一種通用的同步/異步發(fā)送器(USART),它的工作方式可以通過編程設(shè)置。能夠以同步或異步串行通信方式工作,能自動(dòng)完成幀格式。


        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 乐昌市| 张掖市| 永平县| 右玉县| 盘山县| 余姚市| 大渡口区| 临夏市| 湖南省| 桐梓县| 乐东| 河东区| 青田县| 舒兰市| 龙井市| 平舆县| 浦江县| 中阳县| 大荔县| 璧山县| 湘潭市| 衢州市| 正定县| 库车县| 南充市| 南京市| 互助| 西充县| 诸暨市| 乌恰县| 胶南市| 都安| 上犹县| 大姚县| 嘉义县| 宜兴市| 溧阳市| 政和县| 洛宁县| 筠连县| 儋州市|