• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習(xí)慣原本生活的人不容易改變,就算現(xiàn)狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預(yù)料,人們需要更細(xì)心的觀察別人,要隨時(shí)注意才能保護(hù)別人,因?yàn)樗麄兾幢刂雷约阂裁础ぁぁぁぁ?/span>

            串行接口

            8051單片機(jī)的通訊方式有兩種:

            并行通訊:數(shù)據(jù)的各位同時(shí)發(fā)送或接收。

            串行通訊:數(shù)據(jù)一位一位順序發(fā)送或接收。

            串行通訊的方式

            1. 異步通訊:它用一個(gè)起始位表示字符的開始,用停止位表示字符的結(jié)束。其每幀的格式如下:

            在一幀格式中,先是一個(gè)起始位0,然后是8個(gè)數(shù)據(jù)位,規(guī)定低位在前,高位在后,接下來是奇偶校驗(yàn)位(可以省略),最后是停止位1。用這種格式表示字符,則字符可以一個(gè)接一個(gè)地傳送。

            在異步通訊中,CPU與外設(shè)之間必須有兩項(xiàng)規(guī)定,即字符格式和波特率。字符格式的規(guī)定是雙方能夠在對同一種01的串理解成同一種意義。原則上字符格式可以由通訊的雙方自由制定,但從通用、方便的角度出發(fā),一般還是使用一些標(biāo)準(zhǔn)為好,如采用ASCII標(biāo)準(zhǔn)。

            波特率即數(shù)據(jù)傳送的速率,其定義是每秒鐘傳送的二進(jìn)制數(shù)的位數(shù)。例如,數(shù)據(jù)傳送的速率是120字符/s,而每個(gè)字符如上述規(guī)定包含10數(shù)位,則傳送波特率為1200波特。

            1. 同步通訊:在異步通訊中,每個(gè)字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了時(shí)間;所以在數(shù)據(jù)塊傳遞時(shí),為了提高速度,常去掉這些標(biāo)志,采用同步傳送。由于數(shù)據(jù)塊傳遞開始要用同步字符來指示,同時(shí)要求由時(shí)鐘來實(shí)現(xiàn)發(fā)送端與接收端之間的同步,故硬件較復(fù)雜。

             

            1. 通訊方向:在串行通訊中,把通訊接口只能發(fā)送或接收的單向傳送方法叫單工傳送;而把數(shù)據(jù)在甲乙兩機(jī)之間的雙向傳遞,稱之為雙工傳送。在雙工傳送方式中又分為半雙工傳送和全雙工傳送。半雙工傳送是兩機(jī)之間不能同時(shí)進(jìn)行發(fā)送和接收,任一時(shí)該,只能發(fā)或者只能收信息。

             

            8051單片機(jī)的串行接口結(jié)構(gòu)

            8051串行接口是一個(gè)可編程的全雙工串行通訊接口。它可用作異步通訊方式(UART),與串行傳送信息的外部設(shè)備相連接,或用于通過標(biāo)準(zhǔn)異步通訊協(xié)議進(jìn)行全雙工的8051多機(jī)系統(tǒng)也可以通過同步方式,使用TTLCMOS移位寄存器來擴(kuò)充I/O口。

            8051單片機(jī)通過引腳RXDP3.0,串行數(shù)據(jù)接收端)和引腳TXDP3.1,串行數(shù)據(jù)發(fā)送端)與外界通訊。SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同名字和地址空間,但不會(huì)出現(xiàn)沖突,因?yàn)樗鼈儍蓚€(gè)一個(gè)只能被CPU讀出數(shù)據(jù),一個(gè)只能被CPU寫入數(shù)據(jù)。

            串行口控制寄存器SCON

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


            D7

            D6

            D5

            D4

            D3

            D2

            D1

            D0

            SM0

            SM1

            SM2

            REN

            TB8

            RB8

            TI

            RI

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

            SM0SM1

            工作方式

            功能描述

            波特率

            0 0

            方式0

            8位移位寄存器

            Fosc/12

            0 1

            方式1

            10UART

            可變

            1 0

            方式2

            11UART

            Fosc/64fosc/32

            1 1

            方式3

            11UART

            可變

            其中fosc為晶振頻率

            SM2:多機(jī)通訊控制位。在方式0時(shí),SM2一定要等于0。在方式1中,當(dāng)(SM2=1則只有接收到有效停止位時(shí),RI才置1。在方式2或方式3當(dāng)(SM2=1且接收到的第九位數(shù)據(jù)RB8=0時(shí),RI才置1

            REN:接收允許控制位。由軟件置位以允許接收,又由軟件清0來禁止接收。

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

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

            TI: 發(fā)送中斷標(biāo)志。在方式0中,第8位發(fā)送結(jié)束時(shí),由硬件置位。在其它方式的發(fā)送停止位前,由硬件置位。TI置位既表示一幀信息發(fā)送結(jié)束,同時(shí)也是申請中斷,可根據(jù)需要,用軟件查詢的方法獲得數(shù)據(jù)已發(fā)送完畢的信息,或用中斷的方式來發(fā)送下一個(gè)數(shù)據(jù)。TI必須用軟件清0

            RI: 接收中斷標(biāo)志位。在方式0,當(dāng)接收完第8位數(shù)據(jù)后,由硬件置位。在其它方式中,在接收到停止位的中間時(shí)刻由硬件置位(例外情況見于SM2的說明)。RI置位表示一幀數(shù)據(jù)接收完畢,可用查詢的方法獲知或者用中斷的方法獲知。RI也必須用軟件清0


             

            串行口的工作方式

            8051單片機(jī)的全雙工串行口可編程為4種工作方式,現(xiàn)分述如下:

            一.方式0

            方式0為移位寄存器輸入/輸出方式。可外接移位寄存器以擴(kuò)展I/O口,也可以外接同步輸入/輸出設(shè)備。8位串行數(shù)據(jù)者是從RXD輸入或輸出,TXD用來輸出同步脈沖。

            1. 輸出 串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫入發(fā)送寄存器時(shí),立即啟動(dòng)發(fā)送,將8位數(shù)據(jù)以fos/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送中斷標(biāo)志TI由硬件置位。
            2. 輸入 當(dāng)串行口以方式0接收時(shí),先置位允許接收控制位REN。此時(shí),RXD為串行數(shù)據(jù)輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(RI=0和(REN=1同時(shí)滿足時(shí),開始接收。當(dāng)接收到第8位數(shù)據(jù)時(shí),將數(shù)據(jù)移入接收寄存器,并由硬件置位RI

            二.方式1

            方式1為波特率可變的10位異步通訊接口方式。發(fā)送或接收一幀信息,包括1個(gè)起始位08個(gè)數(shù)據(jù)位和1個(gè)停止位1

            1. 輸出 當(dāng)CPU執(zhí)行一條指令將數(shù)據(jù)寫入發(fā)送緩沖SBUF時(shí),就啟動(dòng)發(fā)送。串行數(shù)據(jù)從TXD引腳輸出,發(fā)送完一幀數(shù)據(jù)后,就由硬件置位TI
            2. 輸入 在(REN=1時(shí),串行口采樣RXD引腳,當(dāng)采樣到10的跳變時(shí),確認(rèn)是開始位0,就開始接收一幀數(shù)據(jù)。只有當(dāng)(RI=0且停止位為1或者(SM2=0時(shí),停止位才進(jìn)入RB88位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。所以在方式1接收時(shí),應(yīng)先用軟件清零RISM2標(biāo)志。

            三.方式2

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

            1. 輸出: 發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通訊中地址/數(shù)據(jù)信息的標(biāo)志位,也可以作為數(shù)據(jù)的奇偶校驗(yàn)位。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令時(shí),就啟動(dòng)發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI
            2. 輸入: 在(REN=1時(shí),串行口采樣RXD引腳,當(dāng)采樣到10的跳變時(shí),確認(rèn)是開始位0,就開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)(RI=0或者(SM2=0時(shí),第9位數(shù)據(jù)才進(jìn)入RB88位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。且不置位RI。再過一位時(shí)間后,不管上述條件時(shí)否滿足,接收電路即行復(fù)位,并重新檢測RXD上從10的跳變。

            四.方式3

            方式3為波特率可變的11UART方式。除波特率外,其余與方式2相同。

             

            波特率選擇

            如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在8051串行口的四種工作方式中,方式02的波特率是固定的,而方式13的波特率是可變的,由定時(shí)器T1的溢出率控制

            1. 方式0

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

            1. 方式2

            方式2的波特率由PCON中的選擇位SMOD來決定,可由下式表示:

            波特率=2SMOD次方除以64再乘一個(gè)fosc,也就是當(dāng)SMOD=1時(shí),波特率為1/32fosc,當(dāng)SMOD=0時(shí),波特率為1/64fosc

            3.方式1和方式3

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

            波特率= 定時(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/12;當(dāng)工作于計(jì)數(shù)器狀態(tài)時(shí),T1計(jì)數(shù)率為外部輸入頻率,此頻率應(yīng)小于fosc/24。產(chǎn)生溢出所需周期與定時(shí)器T1的工作方式、T1的預(yù)置值有關(guān)。

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

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

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

            因?yàn)榉绞?span -us="" lang="EN">2為自動(dòng)重裝入初值的8位定時(shí)器/計(jì)數(shù)器模式,所以用它來做波特率發(fā)生器最恰當(dāng)

            當(dāng)時(shí)鐘頻率選用11.0592MHZ時(shí),取易獲得標(biāo)準(zhǔn)的波特率,所以很多單片機(jī)系統(tǒng)選用這個(gè)看起來“怪”的晶振就是這個(gè)道理。

            下表列出了定時(shí)器T1工作于方式2常用波特率及初值。

             

            常用波特率

            Fosc(MHZ)

            SMOD

            TH1初值

            19200

            11.0592

            1

            FDH

            9600

            11.0592

            0

            FDH

            4800

            11.0592

            0

            FAH

            2400

            11.0592

            0

            F4h

            1200

            11.0592

            0

            E8h

             

            串行口應(yīng)用編程實(shí)例

            1. 串口方式0應(yīng)用編程 8051單片機(jī)串行口方式0為移位寄存器方式,外接一個(gè)串入并出的移位寄存器,就可以擴(kuò)展一個(gè)并行口。

            例:用8051串行口外接CD4094擴(kuò)展8位并行輸出口,如圖所示,8位并行口的各位都接一個(gè)發(fā)光二極管,要求發(fā)光管呈流水燈狀態(tài)。串行口方式0的數(shù)據(jù)傳送可采用中斷方式,也可采用查詢方式,無論哪種方式,都要借助于TIRI標(biāo)志。串行發(fā)送時(shí),可以靠TI置位(發(fā)完一幀數(shù)據(jù)后)引起中斷申請,在中斷服務(wù)程序中發(fā)送下一幀數(shù)據(jù),或者通過查詢TI的狀態(tài),只要TI0就繼續(xù)查詢,TI1就結(jié)束查詢,發(fā)送下一幀數(shù)據(jù)。在串行接收時(shí),則由RI引起中斷或?qū)?span -us="" lang="EN">RI查詢來確定何時(shí)接收下一幀數(shù)據(jù)。無論采用什么方式,在開始通訊之前,都要先對控制寄存器SCON進(jìn)行初始化。在方式0中將,將00HSCON就可以了。

            ORG 2000H

            START: MOV SCON,#00H ;置串行口工作方式0

            MOV A,#80H ;最高位燈先亮

            CLR P1.0 ;關(guān)閉并行輸出(避象傳輸過程中,各LED"暗紅"現(xiàn)象)

            OUT0: MOV SBUF,A ;開始串行輸出

            OUT1: JNB TI,OUT1 ;輸出完否

            CLR TI ;完了,清TI標(biāo)志,以備下次發(fā)送

            SETB P1.0 ;打開并行口輸出

            ACALL DELAY ;延時(shí)一段時(shí)間

            RR A ;循環(huán)右移

            CLR P1.0 ;關(guān)閉并行輸出

            JMP OUT0 ;循環(huán)

            說明:DELAY延時(shí)子程序可以用前面我們講P1口流水燈時(shí)用的延時(shí)子程序,這里就不給出了。

            二、異步通訊

            org 0000H

            AJMP START

            ORG 30H

            START:

            mov SP,#5fh ;

            mov TMOD,#20h ;T1: 工作模式2

            mov PCON,#80h ;SMOD=1

            mov TH1,#0FDH ;初始化波特率(參見表)

            mov SCON,#50h ;Standard UART settings

            MOV R0,#0AAH ;準(zhǔn)備送出的數(shù)

            SETB REN ;允許接收

            SETB TR1 ;T1開始工作

            WAIT:

            MOV A,R0

            CPL A

            MOV R0,A

            MOV SBUF,A

            LCALL DELAY

            JBC TI,WAIT1 ;如果TI等于1,則清TI并轉(zhuǎn)WAIT1

            AJMP WAIT

            WAIT1: JBC RI,READ ;如果RI等于1,則清RI并轉(zhuǎn)READ

            AJMP WAIT1

            READ:

            MOV A,SBUF ;將取得的數(shù)送P1

            MOV P1,A

            LJMP WAIT

            DELAY: ;延時(shí)子程序

            MOV R7,#0ffH

            DJNZ R7,$

            RET

            END

            將程序編譯通過,寫入芯片,插入實(shí)驗(yàn)板,用通讀電纜將實(shí)驗(yàn)板與主機(jī)的串口相連就可以實(shí)驗(yàn)了。上面的程序功能很簡單,就是每隔一段時(shí)間向主機(jī)輪流送數(shù)55HAAH,并把主機(jī)送去的數(shù)送到P1口。可以在PC端用串口精靈來做實(shí)驗(yàn)。串口精靈在我主頁上有下載。運(yùn)行串口精靈后,按主界面上的設(shè)置參數(shù)按鈕進(jìn)入設(shè)置參數(shù)對話框,按下面的參數(shù)進(jìn)行設(shè)置。注意,我的機(jī)器上用的是串口2,如果你不是串口2,請自行更改串口的設(shè)置。

            設(shè)置完后,按確定返回主界面,注意右邊有一個(gè)下拉列表,應(yīng)當(dāng)選中16進(jìn)制。然后按開始發(fā)送開始接收就可以了。按此設(shè)置,實(shí)驗(yàn)板上應(yīng)當(dāng)有兩只燈亮,6只燈滅。大家可以自行更改設(shè)置參數(shù)中的發(fā)送字符如5500FF等等,觀察燈的亮滅,并分析原因,也可以在主界面上更改下拉列表中的16進(jìn)制10進(jìn)制ASCII字符來觀察現(xiàn)象,并仔細(xì)分析。這對于大家理解16進(jìn)制、10進(jìn)制、ASCII字符也是很有好處的。程序本身很簡單,又有注釋,這里就不詳加說明了。

            三、上述程序的中斷版本

            org 0000H

            AJMP START

            org 0023h

            AJMP SERIAL ;

            ORG 30H

            START:

            mov SP,#5fh ;

            mov TMOD,#20h ;T1: 工作模式2

            mov PCON,#80h ;SMOD=1

            mov TH1,#0FDH ;初始化波特率(參見表)

            mov SCON,#50h ;Standard UART settings

            MOV R0,#0AAH ;準(zhǔn)備送出的數(shù)

            SETB REN ;允許接收

            SETB TR1 ;T1開始工作

            SETB EA ;開總中斷

            SETB ES ;開串口中斷

            SJMP $

            SERIAL:

            MOV A,SBUF

            MOV P1,A

            CLR RI

            RETI

            END

            本程序沒有寫入發(fā)送程序,大家可以自行添加。

             

            posted on 2010-07-30 13:38 小果子 閱讀(1538) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 單片機(jī)
            久久精品国产亚洲AV电影| 日本久久中文字幕| 国产国产成人精品久久| 99久久精品国产一区二区| 久久综合日本熟妇| 久久精品无码一区二区无码| 成人妇女免费播放久久久| 久久国产乱子伦免费精品| 成人午夜精品久久久久久久小说| 久久最新免费视频| 国产精品久久久久AV福利动漫| www.久久热.com| 成人久久免费网站| 国产精品无码久久综合网| 久久精品无码一区二区WWW| 久久成人精品视频| 精品国产乱码久久久久久人妻| 精品国产综合区久久久久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久人人爽人人精品视频| 日本精品久久久中文字幕| 日韩欧美亚洲综合久久| 久久久久国产亚洲AV麻豆| 一本久久a久久精品综合夜夜 | 女人高潮久久久叫人喷水| 国内精品久久久久影院优 | 久久久受www免费人成| 成人国内精品久久久久影院| 亚洲精品无码专区久久久| 亚洲日本久久久午夜精品| 久久久久综合国产欧美一区二区 | 亚洲一级Av无码毛片久久精品| 亚洲国产成人久久精品影视| 国产精品久久久久天天影视| 久久久免费精品re6| 无码国内精品久久人妻| 亚洲精品乱码久久久久久蜜桃图片| 久久久久青草线蕉综合超碰| 伊人久久五月天| 一本色道久久综合亚洲精品| 久久久久久九九99精品|