找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10230|回復(fù): 1
收起左側(cè)

基于89C51單片機(jī)串口通信程序的設(shè)計(jì)

[復(fù)制鏈接]
ID:104835 發(fā)表于 2016-2-4 04:07 | 顯示全部樓層 |閱讀模式

        MCS-51系列單片機(jī)上有一個(gè)通用異步接收/發(fā)送器UART,通過(guò)引腳RXD[P3.O]和TXD[P3.1]可與外音B電路進(jìn)行全雙工的串行異步通信,發(fā)送數(shù)據(jù)時(shí)由TXD端送出,接收時(shí)數(shù)據(jù)由RXD端輸入。本文將具體介紹單片機(jī)串口的特點(diǎn)和編程方法,并且在最后給出一個(gè)實(shí)用的單片機(jī)與計(jì)算機(jī)通過(guò)串口通信的程序。
   
    串行接口的基本特點(diǎn)



   
   
        MCS-51單片機(jī)的串行端口有4種基本工作方式,通過(guò)編程設(shè)置,可以使其工作在任一方式,以滿足不同場(chǎng)合的需要。其中方式0主要用于外接移位寄存器,以擴(kuò)展單片機(jī)的I/O電路;工作方式1多用于雙機(jī)之間或與外設(shè)電路的通信;方式2、3除有方式1的功能外,還可以作多機(jī)通信,以構(gòu)成分布式多微機(jī)系統(tǒng)。

       串行端口有兩個(gè)控制寄存器SCON、PCON,用于設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送波特率[每秒傳送的位數(shù)]以及作為中斷標(biāo)志等。

   
       串行端口有一個(gè)數(shù)據(jù)寄存器SBUF[在特殊功能寄存器中的字節(jié)地址為99H],該寄存器為發(fā)送和接收所共用。發(fā)送時(shí),只寫不讀;接收時(shí),只讀不寫。在一定條件下,向SBuF寫入數(shù)據(jù)就啟動(dòng)了發(fā)送過(guò)程;讀SBuF就啟動(dòng)了接收過(guò)程。

       串行端口的波特率可以用程序來(lái)控制。在不同工作方式中,由時(shí)鐘振蕩頻率的分頻值或由定時(shí)器T1的定時(shí)溢出時(shí)間確定,使用十分方便靈活。
   
    串口控制寄存器
   
    1. 特殊功能寄存器SCON

    它用于定義串行口的工作方式及實(shí)施接收和發(fā)送控制。字節(jié)地址為98H,其各位定義如下表:



    SM0、SM1:串行口工作方式選擇位,其定義如下:


   
SM2:多機(jī)通訊控制位,僅用于方式2和方式3。當(dāng)發(fā)送數(shù)據(jù)時(shí)SM2必須有軟件設(shè)置為1;接收數(shù)據(jù)時(shí),如果SM2=1只有接收到的第9位數(shù)據(jù)為1時(shí),RI才置位;如果SM2=0只要接收第9位數(shù)據(jù),RI就置位。

    REN:接收允許控制位。由軟件置位(REN=1)才允許接收,又由軟件清O(REN=0)來(lái)禁止接收。

   
TB8:是要發(fā)送數(shù)據(jù)的第9位。在方式2或方式3中,要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。例如?杉s定作為奇偶校驗(yàn)位,或在多機(jī)通訊中作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)志位。

   
RB8:接收到的數(shù)據(jù)的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=O,RB8為接收到的停止位。在方式2或方式3中,RB8為接收到的第9位數(shù)據(jù)。

   
TI:發(fā)送中斷標(biāo)志。發(fā)送數(shù)據(jù)前必須軟件清0,發(fā)送過(guò)程中TI一直為0,當(dāng)發(fā)送完一幀數(shù)據(jù)后,由硬件自動(dòng)置1。如果要再發(fā)送,必須用軟件再清0。在編寫串行通信程序的時(shí)候,可以使用軟件查詢TI的方法獲得數(shù)據(jù)是否已發(fā)送完畢。

   
RI:接收中斷標(biāo)志位。接收數(shù)據(jù)前必須軟件清0,接收過(guò)程中RI一直為0,當(dāng)接收完一幀數(shù)據(jù)后,由硬件自動(dòng)置1。如果要再接收,必須用軟件再清0。在編寫串行通信程序的時(shí)候,可以使用軟件查詢RI的方法獲得數(shù)據(jù)是否已接收完畢。

    2. 特殊功能寄存器PCON

    PCON的字節(jié)地址為87H,它的第7位SMOD是與串口的波特率設(shè)置有關(guān)的選擇位。


    SMOD:波特率加倍位。在計(jì)算串行方式1、2、3的波特率時(shí)SMOD=0波特率不加倍;SMOD=1波特率加倍。
   
    MCS-51單片機(jī)的串行的工作方式
   
    MCS-51單片機(jī)的全雙工串行口可編程為4種工作方式,現(xiàn)分述如下:

    1方式O

    方式0為移位寄存器輸入/輸出方式?赏饨右莆患拇嫫饕詳U(kuò)展I/O口,也可以外接同步輸入/輸出設(shè)備。波特率固定為fosc/12,其中fosc為時(shí)鐘頻率。

    8位串行數(shù)據(jù)是從RXD輸入或輸出,TXD用來(lái)輸出同步脈沖。

   
輸出:串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫入發(fā)送寄存器SBUF時(shí),立即啟動(dòng)發(fā)送,將8位數(shù)據(jù)以fos/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI由硬件置位。

   
輸入:RXD為串行數(shù)據(jù)輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(R1)=0且(REN)=1時(shí),開始接收。當(dāng)接收到第8位數(shù)據(jù)時(shí),將數(shù)據(jù)移入接收寄存器,并由硬件置位RI。


   
左面兩圖分別是方式0擴(kuò)展輸出和輸入的接線圖,74LS164/74LS165是移位寄存器,將單片機(jī)輸出的串行數(shù)據(jù)變?yōu)?位并行數(shù)據(jù),將外部輸入的8位并行數(shù)據(jù)變成串行數(shù)據(jù)。

    2方式1

    方式1為波特率可變的10位異步通訊接口方式。發(fā)送或接收一幀信息,包括1個(gè)起始位0,8個(gè)數(shù)據(jù)位和1個(gè)停止位1。其中的起始位和停止位在發(fā)送時(shí)自動(dòng)插入的。

    輸出:當(dāng)CPU執(zhí)行一條指令將數(shù)據(jù)寫入發(fā)送緩沖SBUF且TI=0時(shí),就啟動(dòng)發(fā)送。串行數(shù)據(jù)從TXD引腳輸出,發(fā)送完一幀數(shù)據(jù)后,就由硬件置位TI。

   
輸入:在(REN)=1時(shí),串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時(shí),確認(rèn)是串行發(fā)送來(lái)的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。只有當(dāng)8位數(shù)據(jù)接收完,并檢測(cè)到高電平停止位后,只有滿足①(R1)=0;②(SM2)=0或接收到的第9位數(shù)據(jù)為1時(shí),停止位才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。所以在方式1接收時(shí),應(yīng)先用軟件清零RI和SM2標(biāo)志。

    3. 方式2

    方式2為固定波特率的11位uART方式。它比方式1增加了一位可程控為1或0的第9位數(shù)據(jù)。

   
輸出:發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來(lái)自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通訊中地址/數(shù)據(jù)信息的標(biāo)志位,也可以作為數(shù)據(jù)的奇偶校驗(yàn)位。當(dāng)CPu執(zhí)行一條數(shù)據(jù)寫入SuBF的指令且TI=0時(shí),就啟動(dòng)發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI。

   
輸入:在(REN)=1時(shí),串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時(shí),確認(rèn)是串行發(fā)送來(lái)的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)滿足①(RI):0;②(SM2)=0或接收到的第9位數(shù)據(jù)為1時(shí),第9位數(shù)據(jù)才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志Ri;否則信息丟失。且不置位RI。

    4. 工作方式3

    方式3為波特率可變的11位UART方式。除波特率外,其余與方式2相同。
   
    波特率的選擇
   
   
如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在MCS-51串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時(shí)器T1的溢出率控制。

    1.方式O

    方式0的波特率固定為主振頻率  的1/12。

    2.方式2

   
方式2的波特率由PCON中的選擇位SMOD來(lái)決定,可表示為:波特率=2sMoD×fosc/64也就是當(dāng)SMOD=1時(shí),波特率為1/32×fosc,當(dāng)SMOD=0時(shí),波特率為1/64×fosc。

    3.方式1和方式3

    定時(shí)器T1作為波特率發(fā)生器,其公式如下:

    波特率=2SMOD/32×定時(shí)器T1溢出率

    T1溢出率=T1計(jì)數(shù)率/產(chǎn)生溢出所需的周期數(shù)

   
式中T1計(jì)數(shù)率取決于它工作在定時(shí)器狀態(tài)還是計(jì)數(shù)器狀態(tài)。當(dāng)工作于定時(shí)器狀態(tài)時(shí),T1計(jì)數(shù)率為fOSC門2:當(dāng)工作于計(jì)數(shù)器狀態(tài)時(shí),T1計(jì)數(shù)率為外部輸入頻率,此頻率應(yīng)小于fOSC/24。產(chǎn)生溢出所需周期與定時(shí)器T1的工作方式、T1的預(yù)置值(×]有關(guān)。

    定時(shí)器T1工作于方式O:溢出所需周期數(shù)=8192-×

    定時(shí)器T1工作于方式1:溢出所需周期數(shù)=65536-X

    定時(shí)器T1工作于方式2:溢出所需周期數(shù)=256-X

    因?yàn)榉绞?為自動(dòng)重裝入初值的8位定時(shí)器/計(jì)數(shù)器模式,所以用它來(lái)做波特率發(fā)生器最恰當(dāng)。這種方式下,T1的溢出率[次/秒]計(jì)算式可以表示為:

    T1溢出率=fsoc/12[256-X]

    于是波特率(位/秒)表達(dá)式為:


    當(dāng)時(shí)鐘頻率選用11.0592MHz時(shí),取易獲得標(biāo)準(zhǔn)的波特率,所以很多單片機(jī)系統(tǒng)選用這個(gè)看起來(lái)“怪”的晶振就是這個(gè)道理。
左表列出了定時(shí)器T1工作于方式2常用波特率及初值。













相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:241196 發(fā)表于 2017-10-20 10:33 | 顯示全部樓層
代碼呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表