嵌入式系統(tǒng)原理及應(yīng)用:第8講 串行通訊_第1頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用:第8講 串行通訊_第2頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用:第8講 串行通訊_第3頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用:第8講 串行通訊_第4頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用:第8講 串行通訊_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1第8講 串行通訊2本講課程主要內(nèi)容(1)串行通訊的基本概念及MCS-51串行口的SFR(2)串行口的工作方式(3)串行口波特率的制定(4)串行口的編程方法(5)多機(jī)通訊3串行通訊的基本概念通訊的基本方式:串行通訊與并行通訊串行同步通訊、串行異步通訊 單工、半雙工和全雙工串行通訊 4并行通訊、串行通訊并行通訊:數(shù)據(jù)各位同時(shí)傳送串行通訊:數(shù)據(jù)一位一位順序傳送5串行異步通訊、串行同步通訊 異步通訊,每個(gè)數(shù)據(jù)都要用起始位和停止位作為傳送數(shù)據(jù)開(kāi)始和結(jié)束標(biāo)志。同步通訊,具有數(shù)據(jù)端和時(shí)鐘端,雙方依靠時(shí)鐘同步。6單工、半雙工、全雙工串行通訊單工:僅能發(fā)送或接收半雙工:能發(fā)送、接收,但發(fā)送與接收不能同時(shí)進(jìn)行全

2、雙工:能夠同時(shí)進(jìn)行發(fā)送與接受。MCS-51可以進(jìn)行全雙工的串行通訊7MCS-51串行口的基本結(jié)構(gòu)發(fā)送器:將CPU送來(lái)的并行數(shù)據(jù),通過(guò)發(fā)送移位寄存器變?yōu)榇袛?shù)據(jù)逐位發(fā)送,并自動(dòng)添加起始位、停止位和第9位數(shù)據(jù)。接收器:將接收到的串行數(shù)據(jù),經(jīng)接收移位寄存器變?yōu)椴⑿袛?shù)據(jù),去掉起始位、停止位后,將正確數(shù)據(jù)送到接收數(shù)據(jù)緩沖器,供CPU讀取??刂破鳎航邮誄PU送來(lái)的編程命令,按選定方式實(shí)現(xiàn)對(duì)串行接口的控制。主要控制參數(shù)有:傳送波特率的選擇、數(shù)據(jù)格式的選擇等。另外還與CPU交換狀態(tài)信號(hào)和中斷信號(hào)。 串行接口邏輯部件框圖8串行口的基本結(jié)構(gòu)SCON為串行口控制/狀態(tài)寄存器,通過(guò)編程寫(xiě)入SCON的控制位可選擇串行口

3、的工作方式,讀出SCON的狀態(tài)位可查詢串行口的工作狀態(tài)。定時(shí)/計(jì)數(shù)器T1可被用做串行口的波特率發(fā)生器。有可控分頻電路影響數(shù)據(jù)傳送波特率。串行口信息的發(fā)送/接收是通過(guò)寫(xiě)/讀數(shù)據(jù)緩沖器SBUF來(lái)實(shí)現(xiàn)的。9串行口的SFR串行數(shù)據(jù)緩沖器SBUF(99H) 串行口有兩個(gè)8位數(shù)據(jù)緩沖器,一個(gè)是發(fā)送數(shù)據(jù)緩沖器SBUF,一個(gè)是接收數(shù)據(jù)緩沖器SBUF。它們共用一個(gè)地址99H,發(fā)送SBUF只能寫(xiě)入,而接收SBUF只能讀出。 通過(guò)指令區(qū)分:MOV SBUF,A MOV A,SBUF控制寄存器SCON (98H)SM0 SM1 SM2 REN TB8 RB8 TI RI節(jié)電控制寄存器PCON(87H) SMOD (D

4、7)復(fù)位后狀態(tài)均為00H 10串行口控制寄存器SCON SM0、SM1:串行口4種工作方式選擇位 SM2:方式2和方式3中的多機(jī)通信控制位。在方式2和方式3中,如SM2=1,則當(dāng)接收到的第9位數(shù)據(jù)(RB8)為0時(shí),不激活接收中斷標(biāo)志RI(RI=1)。在方式1中,如SM2=1,則只有當(dāng)接收到有效停止位時(shí)才激活RI,若沒(méi)有接收到有效停止位,則RI清0。在方式0中,SM2必須為0。 REN:允許串行接收位。REN=1允許接收; REN=0禁止接收,由軟件置位或清零。 TB8:是工作在方式2和3時(shí),要發(fā)送的第9位數(shù)據(jù)??捎绍浖?或清0。在許多的通訊協(xié)議中該位是奇偶校驗(yàn)位。在多機(jī)通訊中用來(lái)表示是地址幀

5、還是數(shù)據(jù)幀,TB8=1為地址幀,TB80為數(shù)據(jù)幀。11串行口控制寄存器SCONRB8:當(dāng)工作在方式2和3時(shí),為接收到的第9位數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志位,在方式0串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí)由硬件置1,或在其它方式串行發(fā)送停止位后置1,并申請(qǐng)中斷。CPU響應(yīng)中斷后,可發(fā)送下一幀數(shù)據(jù),TI必須由軟件清0。RI:為接收結(jié)束中斷標(biāo)志。在方式0中,當(dāng)接收到一幀數(shù)據(jù)的第8位結(jié)束時(shí),RI=1。在其他方式中,接收到停止位后,RI=1,表示可讀取接收SBUF中的內(nèi)容。RI必須用軟件清0。 每次發(fā)送和接收前,要注意先將TI和RI標(biāo)志位清0 。 串行口作為一個(gè)中斷源,中斷入口地址只有一個(gè)(0023H),當(dāng)用中斷方式同時(shí)

6、進(jìn)行發(fā)送和接收時(shí),可通過(guò)查詢TI和RI狀態(tài),確定是發(fā)送還是接收結(jié)束引起的中斷。 12節(jié)電控制寄存器PCON PCON主要用于節(jié)電運(yùn)行方式控制, PCON.7用做串行口波特率加倍控制位。當(dāng)設(shè)定SMOD=1時(shí),波特率加倍,當(dāng)SMOD=0時(shí),波特率不加倍。 13串行口的工作方式SM0、SM1工作方式選擇位14方式 0 :(SM0=0 SM1=0)串行口方式0為8位數(shù)據(jù)同步移位寄存器方式。RXD引腳為同步數(shù)據(jù)的輸入/輸出端,TXD引腳為同步移位脈沖輸出端。一個(gè)數(shù)據(jù)幀為8位,每一個(gè)移位脈沖對(duì)應(yīng)數(shù)據(jù)幀的一個(gè)數(shù)據(jù)位。方式0的波特率固定為fosc/12。15方式0的說(shuō)明:寫(xiě)入SCON使REN=0,TI=0;然

7、后執(zhí)行寫(xiě)入SBUF的指令,8位數(shù)據(jù)裝入發(fā)送SBUF,硬件啟動(dòng)串行口發(fā)送器進(jìn)行一次發(fā)送。通過(guò)發(fā)送移位寄存器將8位數(shù)據(jù)逐位送到RXD引腳,每個(gè)機(jī)器周期內(nèi)發(fā)送一位數(shù)據(jù)。對(duì)應(yīng)發(fā)送數(shù)據(jù)的每一位,由TXD引腳同步輸出一個(gè)移位脈沖。發(fā)送完一幀,自動(dòng)置位TI標(biāo)志,并申請(qǐng)串行口中斷。若CPU響應(yīng)中斷,則將從0023H單元開(kāi)始執(zhí)行串行口的中斷服務(wù)程序。 寫(xiě)入SCON使REN = 1、RI = 0,將啟動(dòng)串行口接收器開(kāi)始接收。由TXD輸出移位脈沖,每對(duì)應(yīng)一個(gè)移位脈沖,采樣一次RXD引腳信號(hào)。每個(gè)機(jī)器周期采樣一次RXD引腳,采到的數(shù)據(jù)位送入接收移位寄存器后,接收移位寄存器左移一位。接收完一幀,自動(dòng)置位RI標(biāo)志,申請(qǐng)串

8、行口中斷,并將接收下來(lái)的8位數(shù)據(jù)裝入接收SBUF。若CPU響應(yīng)中斷,則從0023H單元開(kāi)始執(zhí)行串行口的中斷服務(wù)程序。串行口方式0常用于擴(kuò)展單片機(jī)的并行I/O口,也可外接串行同步I/O設(shè)備。用方式0輸入/輸出數(shù)據(jù)皆通過(guò)RXD端,因此方式0為半雙工方式,只能分時(shí)進(jìn)行發(fā)送和接收。 16方式1(SM0=0 SM1=1) 功能說(shuō)明:串行口方式1為8位數(shù)據(jù)全雙工異步通信方式。TXD為發(fā)送數(shù)據(jù)端,RXD為接收數(shù)據(jù)端。一個(gè)數(shù)據(jù)幀為10位,包含8位數(shù)據(jù)位,1個(gè)起始位“0”和1個(gè)停止位“1”。串行口用方式1工作時(shí),使用定時(shí)器T1作為波特率發(fā)生器,波特率的設(shè)定以T1的溢出率為基準(zhǔn),波特率計(jì)算式為:(2SMOD/32

9、)T1溢出率。 17方式1的時(shí)序圖18方式1功能說(shuō)明執(zhí)行寫(xiě)入SBUF指令,將8位數(shù)據(jù)裝入發(fā)送SBUF,并啟動(dòng)發(fā)送器進(jìn)行一次發(fā)送:先將起始位“0”送到TXD引腳,再?gòu)牡偷礁咧鹞话l(fā)送8位數(shù)據(jù),最后發(fā)送停止位“1”。每位發(fā)送占用的時(shí)間由設(shè)定的波特率決定。發(fā)送完一幀數(shù)據(jù),置位TI標(biāo)志,申請(qǐng)串行口中斷。當(dāng)REN=1時(shí),允許接收器準(zhǔn)備接收。開(kāi)始,以16倍于波特率的速率檢測(cè)RXD引腳的負(fù)跳變,當(dāng)檢測(cè)到負(fù)跳變后,啟動(dòng)一次接收,接收完一幀信息,判斷是否滿足條件:RI = 0,而且停止位為1(或SM2=0)。若同時(shí)滿足這兩個(gè)條件,則置位RI標(biāo)志,申請(qǐng)串行口中斷,并將接收的8位數(shù)據(jù)裝入接收SBUF,停止位裝入RB8

10、;否則接收無(wú)效,丟失所接收的一幀信息,且不影響RI標(biāo)志。一位時(shí)間以后,接收器重新開(kāi)始檢測(cè)RXD端的負(fù)跳變,以準(zhǔn)備接收下一幀數(shù)據(jù)。19方式2、方式3 串行口方式2和方式3皆為9位數(shù)據(jù)全雙工異步通信方式,比串行口方式1增加了第9位數(shù)據(jù)位。TXD為發(fā)送數(shù)據(jù)端,RXD為接收數(shù)據(jù)端。一幀信息有11位,包括9位數(shù)據(jù)位,1個(gè)起始位“0”和1個(gè)停止位“1”。發(fā)送數(shù)據(jù)的第9位在TB8中,接收數(shù)據(jù)的第9位存入RB8中。第9位數(shù)據(jù)位也稱(chēng)為可編程位,常用做奇偶校檢位或多機(jī)通信中的地址/數(shù)據(jù)識(shí)別位。 串行口的方式2與方式3的唯一差別是波特率設(shè)定方法不同,方式2的波特率以系統(tǒng)時(shí)鐘為基準(zhǔn),計(jì)算式為:(2SMOD/64)fo

11、sc。方式3的波特率與方式1的相同,計(jì)算式為:(2SMOD/32)T1溢出率。 20方式2、3的時(shí)序21方式2、3的功能說(shuō)明發(fā)送時(shí),應(yīng)先將發(fā)送數(shù)據(jù)的第9位送入TB8,再寫(xiě)入8位數(shù)據(jù)到發(fā)送SBUF,使發(fā)送器啟動(dòng)一次發(fā)送,將一幀數(shù)據(jù)逐位送到TXD引腳:發(fā)送起始位“0”之后,再發(fā)送SBUF中的8位數(shù)據(jù),接著發(fā)送TB8中的第9位,最后發(fā)送停止位“1”。一幀發(fā)送結(jié)束,置位TI標(biāo)志,申請(qǐng)串行口中斷。方式2和方式3的接收過(guò)程和方式1的接收過(guò)程基本相同,但RB8中裝入的是接收數(shù)據(jù)的第9位,而不是停止位。接收有效必須同時(shí)滿足的兩個(gè)條件改為:RI=0,且接收的第9位數(shù)據(jù)位為1(或SM2=0)。當(dāng)正確接收到一幀數(shù)據(jù)

12、后,前面8位數(shù)據(jù)進(jìn)入接收SBUF,第9位數(shù)據(jù)進(jìn)入RB8。 22波特率的制定波特率的定義:串行口每秒鐘發(fā)送或者接收的位數(shù)。串行口方式0的波特率是固定的,為系統(tǒng)時(shí)鐘的12分頻(fosc/12),即每個(gè)機(jī)器周期傳送一位數(shù)據(jù)位。串行口用方式2工作時(shí),波特率為(2SMOD/64)fosc 。SMOD為PCON中的D7位,即波特率加倍選擇位。方式2可有兩種波特率供選擇,當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率則為fosc/32 。串行口方式1和方式3用定時(shí)器T1作為波特率發(fā)生器,其波特率有多種選擇,與T1的溢出率有關(guān)。 波特率= (2SMOD32)T1溢出率 23定時(shí)器T1產(chǎn)生波

13、特率的計(jì)算T1溢出率:T1溢出時(shí)間的倒數(shù)。T1用于波特率發(fā)生器時(shí)一般工作于非門(mén)控定時(shí)器方式2,即常數(shù)自動(dòng)重裝入方式。 TH1 = TL1 為T(mén)1的時(shí)間常數(shù) 24定時(shí)器T1產(chǎn)生波特率的計(jì)算串行口用方式1和方式3工作時(shí),當(dāng)需要很低的波特率時(shí),也可選擇T1工作于方式1,但需利用T1溢出中斷來(lái)實(shí)現(xiàn)軟件重裝初值,T1用方式1工作時(shí)溢出率為: N為T(mén)1溢出后用軟件重裝初值所需的機(jī)器周期數(shù)。 25T1產(chǎn)生的常用波特率26波特率計(jì)算的幾點(diǎn)注意事項(xiàng):1)波特率的相對(duì)誤差不大于2.5%2)注意SMOD位對(duì)波特率的影響例如:通訊波特率設(shè)為2400,晶振頻率為6MHz,計(jì)算T1的計(jì)時(shí)常數(shù)。當(dāng)SMOD=0時(shí),計(jì)時(shí)常數(shù)約

14、為249,相對(duì)誤差7%。當(dāng)SMOD=1時(shí),計(jì)時(shí)常數(shù)約為243,相對(duì)誤差0.16%。27串行口的編程舉例設(shè)定波特率設(shè)定串行口的工作方式設(shè)計(jì)中斷服務(wù)程序或查詢程序 注意對(duì)TI、RI的處理(硬件置位、軟件清零)28MCS-51雙機(jī)串行通訊的實(shí)現(xiàn)如何進(jìn)行物理連線?波特率的選擇?工作方式的選擇?如何編程實(shí)現(xiàn)?29雙機(jī)串行通訊的實(shí)現(xiàn)-1正確進(jìn)行物理接線30雙機(jī)串行通訊的實(shí)現(xiàn)-2設(shè)定一致的波特率設(shè)定一致的串行口工作方式分別設(shè)計(jì)中斷服務(wù)程序或查詢程序 注意對(duì)TI、RI的處理 (硬件置位、軟件清零)31方式3發(fā)送50H5FH的內(nèi)容待發(fā)送的16個(gè)字節(jié)存放在片內(nèi)RAM中 地址為50H5FH串行口波特率為2400波特

15、率發(fā)生器T1工作于方式2, 且SMOD=0晶振為11.0592MHz計(jì)算得到TL1的初值為F4H。串行口工作于方式3第9位發(fā)送奇偶校驗(yàn)位32例1:方式3發(fā)送50H5FH中內(nèi)容-1 ORG0000H;復(fù)位入口AJMPMAINORG0023H;串行口中斷入口AJMPL1ORG0100H;主程序入口MAIN:MOVSCON,#0C0H;串行口初始化,用方式3發(fā)送,TI=0 MOV PCON,#00H;SMOD=0 MOV TMOD,#20H ;T1方式2定時(shí)MOV TL1,#0F4H ;寫(xiě)入T1時(shí)間常數(shù) MOVTH1,#0F4H SETBTR1;啟動(dòng)T1SETBEASETBES;允許串行口中斷MOV

16、R0,#50H;設(shè)數(shù)據(jù)指針 MOV R7,#10H;數(shù)據(jù)長(zhǎng)度LOOP: MOV A,R0;取一個(gè)字符 MOV C,P;加奇偶校驗(yàn) MOV TB8,C MOV SBUF,A;發(fā)送一個(gè)字符HERE:SJMPHERE;CPU原地循環(huán),等待發(fā)送結(jié)束33例1:方式3發(fā)送50H5FH中內(nèi)容-2L1: CLRTI ;中斷服務(wù)程序, 發(fā)送結(jié)束標(biāo)志位清0 DJNZR7,NEXT;發(fā)送完全部字符? CLRES ;已發(fā)送完,關(guān)閉串行口中斷 SJMPTENDNEXT: INC R0 ;未發(fā)送完,修改指針MOV A,R0 ;取下一個(gè)字符MOV C,P ;加奇偶校驗(yàn)MOV TB8,C MOV SBUF,A;再次發(fā)送一個(gè)字

17、符TEND: RETI ;中斷返回主程序34例2:方式3接收接收到的16個(gè)字節(jié)存放在片內(nèi)RAM中地址為50H5FH串行口波特率為2400波特率發(fā)生器T1工作于方式2, 且SMOD=0晶振為11.0592MHz計(jì)算得到TL1的初值為F4H。串行口工作于方式3奇偶校驗(yàn)方式判斷接收數(shù)據(jù)是否出錯(cuò)設(shè)校驗(yàn)出錯(cuò)標(biāo)志位為F035MAIN: MOVSCON,#0D0H;串行口方式3允許接收,RI=0 MOV PCON,#00H;SMOD=0 MOV TMOD,#20H ;T1方式2定時(shí) MOV TL1,#0F4H ;寫(xiě)入T1時(shí)間常數(shù) MOVTH1,#0F4H SETBTR1 ;啟動(dòng)T1 LCALL AAAA S

18、JMP $方式3接收-查詢36方式3接收-查詢AAAA: MOVR0,#50H;設(shè)數(shù)據(jù)指針 MOVR7,#10H;數(shù)據(jù)長(zhǎng)度WAIT: JBCRI,NEXT ;查詢RI標(biāo)志,等待串行口接收結(jié)束 SJMPWAITNEXT: MOVA,SBUF ;讀取一個(gè)接收字符 JNB P,COMP ;進(jìn)行奇偶校驗(yàn) JNB RB8,ERR ;PRB8,數(shù)據(jù)出錯(cuò) SJMP RIGHT ;P=RB8,數(shù)據(jù)正確COMP:JB RB8,ERRRIGHT:MOV R0,A ;保存一個(gè)字符到片內(nèi)RAM INC R0 ;修改指針 DJNZ R7,WAIT;全部字符接收完? CLR F0 ;F0 =0,接收數(shù)據(jù)全部正確 RET ;返回主程序ERR: SETBF0 ;F0 =1,接收數(shù)據(jù)出錯(cuò) RET ;返回主程序37雙機(jī)通訊小結(jié)物理接線: TXD-RXD、RXD-TXD、共地必須一致的波特率必須一致的工作方式各自的發(fā)送和接收程序可以不同38多機(jī)通訊 主機(jī)與各從機(jī)實(shí)現(xiàn)全雙工通信,而各從機(jī)之間只能通過(guò)主機(jī)交換信息。下圖是由MCS-51構(gòu)成的的集散式分布系統(tǒng) 39多機(jī)通訊的基本原理多機(jī)通信控制位SM2的使用:當(dāng)串行口以方式2(或方式3)接收時(shí),若SM2=1,則只有接收到第9位數(shù)據(jù)為1,才將接收的數(shù)據(jù)裝入接收SBUF,并置位RI標(biāo)志;否則,不會(huì)置位RI,也不產(chǎn)生中斷請(qǐng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論