欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10264|回復: 1
打印 上一主題 下一主題
收起左側

基于89C51單片機串口通信程序的設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:104835 發表于 2016-2-4 04:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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



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

       串行端口有兩個控制寄存器SCON、PCON,用于設置工作方式、發送或接收的狀態、特征位、數據傳送波特率[每秒傳送的位數]以及作為中斷標志等。

   
       串行端口有一個數據寄存器SBUF[在特殊功能寄存器中的字節地址為99H],該寄存器為發送和接收所共用。發送時,只寫不讀;接收時,只讀不寫。在一定條件下,向SBuF寫入數據就啟動了發送過程;讀SBuF就啟動了接收過程。

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

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



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


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

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

   
TB8:是要發送數據的第9位。在方式2或方式3中,要發送的第9位數據,根據需要由軟件置1或清0。例如。可約定作為奇偶校驗位,或在多機通訊中作為區別地址幀或數據幀的標志位。

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

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

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

    2. 特殊功能寄存器PCON

    PCON的字節地址為87H,它的第7位SMOD是與串口的波特率設置有關的選擇位。


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

    1方式O

    方式0為移位寄存器輸入/輸出方式。可外接移位寄存器以擴展I/O口,也可以外接同步輸入/輸出設備。波特率固定為fosc/12,其中fosc為時鐘頻率。

    8位串行數據是從RXD輸入或輸出,TXD用來輸出同步脈沖。

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

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


   
左面兩圖分別是方式0擴展輸出和輸入的接線圖,74LS164/74LS165是移位寄存器,將單片機輸出的串行數據變為8位并行數據,將外部輸入的8位并行數據變成串行數據。

    2方式1

    方式1為波特率可變的10位異步通訊接口方式。發送或接收一幀信息,包括1個起始位0,8個數據位和1個停止位1。其中的起始位和停止位在發送時自動插入的。

    輸出:當CPU執行一條指令將數據寫入發送緩沖SBUF且TI=0時,就啟動發送。串行數據從TXD引腳輸出,發送完一幀數據后,就由硬件置位TI。

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

    3. 方式2

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

   
輸出:發送的串行數據由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復位。它可作為多機通訊中地址/數據信息的標志位,也可以作為數據的奇偶校驗位。當CPu執行一條數據寫入SuBF的指令且TI=0時,就啟動發送器發送。發送一幀信息后,置位中斷標志TI。

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

    4. 工作方式3

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

    1.方式O

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

    2.方式2

   
方式2的波特率由PCON中的選擇位SMOD來決定,可表示為:波特率=2sMoD×fosc/64也就是當SMOD=1時,波特率為1/32×fosc,當SMOD=0時,波特率為1/64×fosc。

    3.方式1和方式3

    定時器T1作為波特率發生器,其公式如下:

    波特率=2SMOD/32×定時器T1溢出率

    T1溢出率=T1計數率/產生溢出所需的周期數

   
式中T1計數率取決于它工作在定時器狀態還是計數器狀態。當工作于定時器狀態時,T1計數率為fOSC門2:當工作于計數器狀態時,T1計數率為外部輸入頻率,此頻率應小于fOSC/24。產生溢出所需周期與定時器T1的工作方式、T1的預置值(×]有關。

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

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

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

    因為方式2為自動重裝入初值的8位定時器/計數器模式,所以用它來做波特率發生器最恰當。這種方式下,T1的溢出率[次/秒]計算式可以表示為:

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

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


    當時鐘頻率選用11.0592MHz時,取易獲得標準的波特率,所以很多單片機系統選用這個看起來“怪”的晶振就是這個道理。
左表列出了定時器T1工作于方式2常用波特率及初值。













分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:241196 發表于 2017-10-20 10:33 | 只看該作者
代碼呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表