第7章 MCS-51串口(4學(xué)時(shí))_第1頁(yè)
第7章 MCS-51串口(4學(xué)時(shí))_第2頁(yè)
第7章 MCS-51串口(4學(xué)時(shí))_第3頁(yè)
第7章 MCS-51串口(4學(xué)時(shí))_第4頁(yè)
第7章 MCS-51串口(4學(xué)時(shí))_第5頁(yè)
已閱讀5頁(yè),還剩108頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、7.1 串行通信的基礎(chǔ)知識(shí)串行通信的基礎(chǔ)知識(shí) 串行數(shù)據(jù)通信要解決兩個(gè)關(guān)鍵技術(shù)問題,一個(gè)是數(shù)據(jù)傳送,另一個(gè)是數(shù)據(jù)轉(zhuǎn)換。 所謂數(shù)據(jù)傳送就是指數(shù)據(jù)以什么形式進(jìn)行傳送。所謂數(shù)據(jù)轉(zhuǎn)換就是指單片機(jī)在接受數(shù)據(jù)時(shí),如何把接收到的串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù),單片機(jī)在發(fā)送數(shù)據(jù)時(shí),如何把并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)進(jìn)行發(fā)送。一、一、串行通信的基本概念串行通信的基本概念1、并行、并行 和和 串行串行 并行通信的優(yōu)點(diǎn)是速度快,效率高,確點(diǎn)是不適合遠(yuǎn)距離通信。串行通信剛好相反。2、單工、半雙工、單工、半雙工 和和 全雙工全雙工 單工:信息只能沿著一個(gè)方向傳播 半雙工:信息可以沿一條線雙向傳播,但不能同時(shí)實(shí)現(xiàn)雙向傳播。 全雙工:使用

2、兩條獨(dú)立的數(shù)據(jù)通道,收發(fā)可同時(shí)進(jìn)行。發(fā)送器接收器發(fā)送器接收器3、同步方式和異步方式、同步方式和異步方式 (1) 同步方式是將一大批數(shù)據(jù)分成幾個(gè)數(shù)據(jù)塊, 數(shù)據(jù)塊之間用同步字符予以隔開, 而傳輸?shù)母魑欢M(jìn)制碼之間都沒有間隔。 其基本特征是發(fā)送與接收時(shí)鐘始終保持嚴(yán)格同步。 (2)異步通信是按幀傳送數(shù)據(jù), 它利用每一幀的起、止信號(hào)來建立發(fā)送與接收之間的同步,每幀內(nèi)部各位均采用固定的時(shí)間間隔, 但幀與幀之間的時(shí)間間隔是隨機(jī)的。其基本特征是每個(gè)字符必須用起始位和停止位作為字符開始和結(jié)束的標(biāo)志, 它是以字符為單位一個(gè)個(gè)地發(fā)送和接收的。4 4、數(shù)據(jù)傳送格式、數(shù)據(jù)傳送格式單片機(jī)的串行通信使用的是異步串行通信,所

3、單片機(jī)的串行通信使用的是異步串行通信,所謂異步就是指發(fā)送端和接收端使用的不是同謂異步就是指發(fā)送端和接收端使用的不是同一個(gè)時(shí)鐘一個(gè)時(shí)鐘, ,但波特率相同。但波特率相同。異步串行通信通常以字符(或者字節(jié))為單位異步串行通信通常以字符(或者字節(jié))為單位組成字符幀傳送。組成字符幀傳送。字符幀由發(fā)送端一幀一幀地傳送,接收端通過字符幀由發(fā)送端一幀一幀地傳送,接收端通過傳輸線一幀一幀地接收。傳輸線一幀一幀地接收。 (1 1)字符幀的幀格式)字符幀的幀格式 字符幀由四部分組成,分別是起始位、數(shù)據(jù)位、字符幀由四部分組成,分別是起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位。奇偶校驗(yàn)位、停止位。1 1) 起始位:位于字符幀的

4、開頭,只占一位,始終起始位:位于字符幀的開頭,只占一位,始終位邏輯低電平,表示發(fā)送端開始發(fā)送一幀數(shù)據(jù)。位邏輯低電平,表示發(fā)送端開始發(fā)送一幀數(shù)據(jù)。2 2) 數(shù)據(jù)位:緊跟起始位后,可取數(shù)據(jù)位:緊跟起始位后,可取5 5、6 6、7 7、8 8位,位,低位在前,高位在后。低位在前,高位在后。3 3)奇偶校驗(yàn)位:占一位,用于對(duì)字符傳送作正確性)奇偶校驗(yàn)位:占一位,用于對(duì)字符傳送作正確性檢查,因此奇偶校驗(yàn)位是可選擇的,共有三種可能,檢查,因此奇偶校驗(yàn)位是可選擇的,共有三種可能,即奇校驗(yàn)、偶校驗(yàn)和無校驗(yàn),由用戶根據(jù)需要選定。即奇校驗(yàn)、偶校驗(yàn)和無校驗(yàn),由用戶根據(jù)需要選定。4 4)停止位:末尾,為邏輯)停止位:

5、末尾,為邏輯“1 1”高電平,可取高電平,可取1 1、1.51.5、2 2位,表示一幀字符傳送完畢。位,表示一幀字符傳送完畢。起始位數(shù)據(jù)位(0)數(shù)據(jù)位(1)數(shù)據(jù)位(n1)奇偶位停止位停止位起始位一幀數(shù)據(jù)圖7.1 字符幀格式 (2 2)傳送的速率)傳送的速率串行通信的速率用波特率來表示,串行通信的速率用波特率來表示,所謂波特率就所謂波特率就是指一秒鐘傳送數(shù)據(jù)位的個(gè)數(shù)是指一秒鐘傳送數(shù)據(jù)位的個(gè)數(shù)。每秒鐘傳送一個(gè)數(shù)。每秒鐘傳送一個(gè)數(shù)據(jù)位就是據(jù)位就是1 1波特。即:波特。即:1 1波特波特1bps1bps(位(位/ /秒)。秒)。在串行通信中,數(shù)據(jù)位的發(fā)送和接收分別由發(fā)送在串行通信中,數(shù)據(jù)位的發(fā)送和接收

6、分別由發(fā)送時(shí)鐘脈沖和接收時(shí)鐘脈沖進(jìn)行定時(shí)控制。時(shí)鐘頻率時(shí)鐘脈沖和接收時(shí)鐘脈沖進(jìn)行定時(shí)控制。時(shí)鐘頻率高,則波特率高,通信速度就快;反之,時(shí)鐘頻率高,則波特率高,通信速度就快;反之,時(shí)鐘頻率低,波特率就低,通信速度就慢。低,波特率就低,通信速度就慢。例:要求每秒傳送例:要求每秒傳送120120個(gè)字符,每幀為個(gè)字符,每幀為1010位。位。解:解: B=120B=12010=120010=1200波特波特每位每位0.83ms0.83ms數(shù)據(jù)位傳輸率數(shù)據(jù)位傳輸率=120=1208=9608=960位位/ /秒秒2014年年11月月24日日5、數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換串行接口電路為用戶提供了兩個(gè)串行口緩沖寄存串行

7、接口電路為用戶提供了兩個(gè)串行口緩沖寄存器(器(SBUF),一個(gè)稱為發(fā)送緩存器,它的用途是接),一個(gè)稱為發(fā)送緩存器,它的用途是接收片內(nèi)總線送來的數(shù)據(jù),即發(fā)送緩沖器只能寫不能收片內(nèi)總線送來的數(shù)據(jù),即發(fā)送緩沖器只能寫不能讀。發(fā)送緩沖器中的數(shù)據(jù)通過讀。發(fā)送緩沖器中的數(shù)據(jù)通過TXD引腳向外傳送。引腳向外傳送。另一個(gè)稱為接收緩沖器,它的用途是向片內(nèi)總線發(fā)另一個(gè)稱為接收緩沖器,它的用途是向片內(nèi)總線發(fā)送數(shù)據(jù),即接收緩沖器只能讀不能寫。接收緩沖器送數(shù)據(jù),即接收緩沖器只能讀不能寫。接收緩沖器通過通過RXD引腳接收數(shù)據(jù)。因?yàn)檫@兩個(gè)緩沖器一個(gè)只引腳接收數(shù)據(jù)。因?yàn)檫@兩個(gè)緩沖器一個(gè)只能寫,一個(gè)只能讀,所以共用一個(gè)地址能寫

8、,一個(gè)只能讀,所以共用一個(gè)地址99H。串行。串行接口電路如圖接口電路如圖8.2所示。所示。8051單片機(jī)內(nèi)部有一個(gè)功能很強(qiáng)的全雙工串行單片機(jī)內(nèi)部有一個(gè)功能很強(qiáng)的全雙工串行接口,可同時(shí)接收和發(fā)送數(shù)據(jù),使用十分靈接口,可同時(shí)接收和發(fā)送數(shù)據(jù),使用十分靈活,能方便地與其他計(jì)算機(jī)或串行傳輸?shù)耐饣?,能方便地與其他計(jì)算機(jī)或串行傳輸?shù)耐獠吭O(shè)備實(shí)現(xiàn)雙機(jī)、多機(jī)通信。與此同時(shí),該部設(shè)備實(shí)現(xiàn)雙機(jī)、多機(jī)通信。與此同時(shí),該串行接口也可作為同步異位寄存器使用。串行接口也可作為同步異位寄存器使用。串行接口采用通用異步接收器發(fā)送器串行接口采用通用異步接收器發(fā)送器(UART)工作方式。)工作方式。由串行口控制寄存器由串行口控制寄

9、存器SCON、接收電路和發(fā)送、接收電路和發(fā)送電路等三部分組成。電路等三部分組成。 (1)發(fā)送和接收電路發(fā)送和接收電路串行口的發(fā)送和接收電路結(jié)構(gòu)框圖如圖串行口的發(fā)送和接收電路結(jié)構(gòu)框圖如圖1-24所示。發(fā)送電路由所示。發(fā)送電路由SBUF(發(fā)送緩沖器)、(發(fā)送緩沖器)、發(fā)送門、發(fā)送控制器等電路組成,用于串行發(fā)送門、發(fā)送控制器等電路組成,用于串行口的發(fā)送;口的發(fā)送;接收電路由接收電路由SBUF(接收緩沖器)、接收(接收緩沖器)、接收控制器和移位寄存器等電路組成,用于串行控制器和移位寄存器等電路組成,用于串行口的接收。兩個(gè)口的接收。兩個(gè)SBUF分別用于存放串行口將分別用于存放串行口將要發(fā)送的字符數(shù)據(jù)和接

10、收到的字符數(shù)據(jù),以要發(fā)送的字符數(shù)據(jù)和接收到的字符數(shù)據(jù),以便能以全雙工的方式進(jìn)行通信。便能以全雙工的方式進(jìn)行通信。二者在物理上是相互獨(dú)立的,但在邏輯上,二者在物理上是相互獨(dú)立的,但在邏輯上,SBUF只有一個(gè),共用一個(gè)地址單元只有一個(gè),共用一個(gè)地址單元99H??梢酝ㄟ^執(zhí)行如下指令實(shí)現(xiàn)對(duì)可以通過執(zhí)行如下指令實(shí)現(xiàn)對(duì)SBUF的存取。的存取。MOV SBUF, A;產(chǎn)生寫;產(chǎn)生寫SBUF脈沖,以便將累脈沖,以便將累加器加器A中字符送入中字符送入SBUF或或MOV A,SBUF;產(chǎn)生讀;產(chǎn)生讀SBUF脈沖,以便把脈沖,以便把SBUF中接收到的字符送入累加器中接收到的字符送入累加器A在異步通信中,發(fā)送和接收都

11、是在發(fā)送時(shí)鐘和在異步通信中,發(fā)送和接收都是在發(fā)送時(shí)鐘和接收時(shí)鐘控制下進(jìn)行的,發(fā)送時(shí)鐘和接收時(shí)接收時(shí)鐘控制下進(jìn)行的,發(fā)送時(shí)鐘和接收時(shí)鐘都必須同字符位數(shù)的波特率保持一致。鐘都必須同字符位數(shù)的波特率保持一致。發(fā)送時(shí)鐘和接收時(shí)鐘發(fā)送時(shí)鐘和接收時(shí)鐘可以由主機(jī)頻率經(jīng)過分頻可以由主機(jī)頻率經(jīng)過分頻獲得,也可以由內(nèi)部定時(shí)器獲得,也可以由內(nèi)部定時(shí)器T1或或T0的溢出率的溢出率經(jīng)過分頻后提供。經(jīng)過分頻后提供。 當(dāng)當(dāng)CPU執(zhí)行指令執(zhí)行指令MOV SBUF,A就開始發(fā)送就開始發(fā)送過程。過程。 首先將累加器首先將累加器A中欲發(fā)送字符送入中欲發(fā)送字符送入SBUF寄存寄存器,之后發(fā)送控制器在發(fā)送時(shí)鐘(由發(fā)送波器,之后發(fā)送控制

12、器在發(fā)送時(shí)鐘(由發(fā)送波特率電路提供)控制下自動(dòng)在發(fā)送字符前后特率電路提供)控制下自動(dòng)在發(fā)送字符前后添加起始位、停止位和其他控制位,然后通添加起始位、停止位和其他控制位,然后通過發(fā)送門一位一位地從過發(fā)送門一位一位地從TXD線上串行發(fā)送字線上串行發(fā)送字符。符。 在串行接收時(shí),串行接口監(jiān)視在串行接收時(shí),串行接口監(jiān)視RXD線,當(dāng)檢線,當(dāng)檢測(cè)到測(cè)到RXD線上有一個(gè)低電平(起始位)時(shí)就線上有一個(gè)低電平(起始位)時(shí)就開始一個(gè)新的字符接收過程。串行口每接收開始一個(gè)新的字符接收過程。串行口每接收到一位二進(jìn)制數(shù)據(jù)位后就使移位寄存器左移到一位二進(jìn)制數(shù)據(jù)位后就使移位寄存器左移一次,連續(xù)接收到一個(gè)字符幀后,接收控制一次

13、,連續(xù)接收到一個(gè)字符幀后,接收控制器就自動(dòng)去掉字符幀的起始位和控制位,將器就自動(dòng)去掉字符幀的起始位和控制位,將剩余剩余8位二進(jìn)制位(一個(gè)字符)并行傳送到位二進(jìn)制位(一個(gè)字符)并行傳送到SBUF并向并向CPU申請(qǐng)中斷。串行口的接收過程申請(qǐng)中斷。串行口的接收過程也是也是CPU自動(dòng)完成的,用戶只需通過自動(dòng)完成的,用戶只需通過MOV A, SBUF指令從指令從SBUF中讀出所接收的字符即可。中讀出所接收的字符即可。(2)串行口控制寄存器串行口控制寄存器 與申行通信有關(guān)的控制寄存器共有兩個(gè):與申行通信有關(guān)的控制寄存器共有兩個(gè): 串行控制寄存器串行控制寄存器SCON和能改變波特率的電源和能改變波特率的電源

14、控制寄存器控制寄存器PCON串行口控制寄存器串行口控制寄存器SCON SCON是一個(gè)可位尋址的特殊功能寄存器,用是一個(gè)可位尋址的特殊功能寄存器,用以確定行通道的工作方式選擇、接收和發(fā)送以確定行通道的工作方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志,單元地址為控制以及串行口的狀態(tài)標(biāo)志,單元地址為98H其格式和功能如下其格式和功能如下:SM0SM0,SM1SM1:選擇串行口:選擇串行口4 4種工作方式。種工作方式。SM2SM2:多機(jī)控制位,用于多機(jī)通訊。:多機(jī)控制位,用于多機(jī)通訊。RENREN:允許接收控制位,:允許接收控制位,REN=1REN=1,允許接收;,允許接收;REN=0REN=0,禁止

15、接收。,禁止接收。TB8TB8發(fā)送的第發(fā)送的第9 9位數(shù)據(jù)位,可用作校驗(yàn)位和地址位數(shù)據(jù)位,可用作校驗(yàn)位和地址/ /數(shù)據(jù)標(biāo)識(shí)位數(shù)據(jù)標(biāo)識(shí)位RB8RB8:接收的第:接收的第9 9位數(shù)據(jù)位或停止位位數(shù)據(jù)位或停止位TITI:發(fā)送中斷標(biāo)志,發(fā)送一幀結(jié)束,:發(fā)送中斷標(biāo)志,發(fā)送一幀結(jié)束,TI=1TI=1,必,必須軟件清零須軟件清零RIRI:接收中斷標(biāo)志,接收一幀結(jié)束,:接收中斷標(biāo)志,接收一幀結(jié)束,RI=1RI=1,必,必須軟件清零須軟件清零SM0,SM1選擇四種工作方式。SM2:多機(jī)通信控制位,主要在方式多機(jī)通信控制位,主要在方式2和方式和方式3下下使用。使用。多機(jī)通信規(guī)定,第多機(jī)通信規(guī)定,第9位數(shù)據(jù)位數(shù)據(jù)(

16、RB8)為)為1,說明本幀,說明本幀為地址;若第為地址;若第9位數(shù)據(jù)為位數(shù)據(jù)為0,說明本幀為數(shù)據(jù)。當(dāng)說明本幀為數(shù)據(jù)。當(dāng)串行口以方式串行口以方式2或方式或方式3接收時(shí),如接收時(shí),如SM2=1,則,則只有當(dāng)接收到的第只有當(dāng)接收到的第9位數(shù)據(jù)為位數(shù)據(jù)為1,才將接收到的,才將接收到的前前8位數(shù)據(jù)送入位數(shù)據(jù)送入SBUF,并置位,并置位RI產(chǎn)生中斷請(qǐng)求;產(chǎn)生中斷請(qǐng)求;否則,說明該機(jī)沒有被尋址,于是將接收到的否則,說明該機(jī)沒有被尋址,于是將接收到的前前8位數(shù)據(jù)丟棄位數(shù)據(jù)丟棄.SM2=0時(shí),則只允許單機(jī)通信。此時(shí)無論第時(shí),則只允許單機(jī)通信。此時(shí)無論第9位位數(shù)據(jù)為數(shù)據(jù)為1還是為還是為0,都將前,都將前8位數(shù)據(jù)裝

17、入位數(shù)據(jù)裝入SBUF,并并產(chǎn)生中斷請(qǐng)求。產(chǎn)生中斷請(qǐng)求。在方式在方式0下,下,SM2必須為必須為0;在方式;在方式1下,如下,如SM2=1,則只有收到有效的停止位時(shí),中斷標(biāo),則只有收到有效的停止位時(shí),中斷標(biāo)志志RI才會(huì)置才會(huì)置1,以便接收下一幀數(shù)據(jù)。,以便接收下一幀數(shù)據(jù)。電源控制寄存器電源控制寄存器PCON PCON是為了在是為了在CHMOS的的8051系列單片機(jī)上實(shí)系列單片機(jī)上實(shí)現(xiàn)電源控制而設(shè)置的,其中只有一位現(xiàn)電源控制而設(shè)置的,其中只有一位SMOD與與串行口工作有關(guān)。串行口工作有關(guān)。SMOD:波特率選擇位。在方式波特率選擇位。在方式0,方式方式1和方式和方式3下,下,若若SMOD=1,則波特

18、率增加一倍;若,則波特率增加一倍;若SMOD=0,則波特率不加倍。整機(jī)復(fù)位時(shí),則波特率不加倍。整機(jī)復(fù)位時(shí),SMOD=0。 GF1,GF0:兩個(gè)通用工作標(biāo)志位,用戶可以自由使用。兩個(gè)通用工作標(biāo)志位,用戶可以自由使用。PD:掉電模式設(shè)定位。掉電模式設(shè)定位。PD=0 單片機(jī)處于正常工作狀態(tài)。單片機(jī)處于正常工作狀態(tài)。PD=1 單片機(jī)進(jìn)入掉電(單片機(jī)進(jìn)入掉電(Power Down)模式)模式 ,可由,可由外部中斷或硬件復(fù)位模式喚醒,進(jìn)入掉電模式后,外部中斷或硬件復(fù)位模式喚醒,進(jìn)入掉電模式后,外部晶振停振,外部晶振停振,CPU、定時(shí)器、串行口全部停止工、定時(shí)器、串行口全部停止工作,只有外部中斷工作。作,只

19、有外部中斷工作。IDL:空閑模式設(shè)定位。空閑模式設(shè)定位。IDL=0 單片機(jī)處于正常工作狀態(tài)。單片機(jī)處于正常工作狀態(tài)。IDL=1 單片機(jī)進(jìn)入空閑(單片機(jī)進(jìn)入空閑(Idle)模式,除)模式,除CPU不工不工作外,其余仍繼續(xù)工作,在空閑模式下可由任一個(gè)作外,其余仍繼續(xù)工作,在空閑模式下可由任一個(gè)中斷或硬件復(fù)位喚醒。中斷或硬件復(fù)位喚醒。 串行接口的工作模式串行接口的工作模式串行口有串行口有4種工作方式,可通過軟件設(shè)置種工作方式,可通過軟件設(shè)置SCON中中SMI、SMO的組合來選擇。的組合來選擇。(1)工作方式工作方式0方式方式0:同步移位寄存器方式。用于擴(kuò)展并行:同步移位寄存器方式。用于擴(kuò)展并行I/O

20、接口。接口。 也可接也可接同步輸入輸出設(shè)備同步輸入輸出設(shè)備1.一幀一幀8位,無起始位和停止位。位,無起始位和停止位。2.RXD:數(shù)據(jù)移位輸入:數(shù)據(jù)移位輸入/輸出端。輸出端。低位在前高位低位在前高位在后在后 TXD:同步移位時(shí)鐘脈沖輸出端,同步時(shí)鐘信:同步移位時(shí)鐘脈沖輸出端,同步時(shí)鐘信號(hào)號(hào)(P3.1)。3.波特率波特率B = fosc/12如:如: fosc=12MHz,B=1MHz,每位數(shù)據(jù),每位數(shù)據(jù)占占1 s。4.發(fā)送過程:寫入發(fā)送過程:寫入SBUF,啟動(dòng)發(fā)送,一幀發(fā)送,啟動(dòng)發(fā)送,一幀發(fā)送結(jié)束,結(jié)束,TI=1。 接收過程:接收過程:REN=1且且RI=0,啟動(dòng)接收,一幀,啟動(dòng)接收,一幀接收完

21、畢,接收完畢,RI=1。數(shù)據(jù)發(fā)送數(shù)據(jù)發(fā)送在發(fā)送中斷標(biāo)志在發(fā)送中斷標(biāo)志TI為為0的情況下,執(zhí)行數(shù)據(jù)輸?shù)那闆r下,執(zhí)行數(shù)據(jù)輸出指令出指令“MOV SBUF, A”,即可將,即可將SBUF中內(nèi)中內(nèi)容由低到高逐次送到容由低到高逐次送到RXD端,同時(shí)在移位脈端,同時(shí)在移位脈沖控制下,將數(shù)據(jù)逐一傳送到外接串行輸入沖控制下,將數(shù)據(jù)逐一傳送到外接串行輸入并行輸出芯片并行輸出芯片74LS164 。當(dāng)當(dāng)8位數(shù)據(jù)發(fā)送結(jié)束后,位數(shù)據(jù)發(fā)送結(jié)束后,TI自動(dòng)置自動(dòng)置1,輸出數(shù)據(jù)也輸出數(shù)據(jù)也就出現(xiàn)在就出現(xiàn)在74LS164芯片的并行輸出端。芯片的并行輸出端。數(shù)據(jù)發(fā)送數(shù)據(jù)發(fā)送送當(dāng)串行口配合送當(dāng)串行口配合“串行輸入并行輸出串行輸入并

22、行輸出”芯片芯片(如(如74LS164),即可通過串行口擴(kuò)展單片機(jī),即可通過串行口擴(kuò)展單片機(jī)輸出口。輸出口。參考程序如下參考程序如下: MOV SCON,00H;定義串行工作方式;定義串行工作方式 CLR TI ;清除發(fā)送中斷標(biāo)志;清除發(fā)送中斷標(biāo)志 MOV SBUF,A ;輸出串行數(shù)據(jù);輸出串行數(shù)據(jù)LOOP:JNB TI,LOOP ;等待一幀數(shù)據(jù)發(fā);等待一幀數(shù)據(jù)發(fā)送結(jié)束送結(jié)束數(shù)據(jù)輸入數(shù)據(jù)輸入串行口通過與串行口通過與“并入串出并入串出”芯片(如芯片(如74LS165)相連,即可實(shí)現(xiàn)把串行口擴(kuò)展成并行輸入口相連,即可實(shí)現(xiàn)把串行口擴(kuò)展成并行輸入口使用。使用。節(jié)奏節(jié)奏: /L鎖存鎖存 S移出移出200

23、9年年11月月18日日74LS165的的S/L端為移位置入端,當(dāng)端為移位置入端,當(dāng)S/L=0時(shí),從時(shí),從A H(即(即Q0Q7)并行置入并行置入數(shù)據(jù),當(dāng)數(shù)據(jù),當(dāng)S/L= 1時(shí),開始從時(shí),開始從QH端移出數(shù)端移出數(shù)據(jù)。移出的串行數(shù)據(jù)在時(shí)鐘脈沖據(jù)。移出的串行數(shù)據(jù)在時(shí)鐘脈沖(TXD)的控制下,從的控制下,從RXD端串行輸入端串行輸入SBUF數(shù)據(jù),數(shù)據(jù),當(dāng)接收到第當(dāng)接收到第8位數(shù)據(jù)時(shí),置位中斷標(biāo)志位數(shù)據(jù)時(shí),置位中斷標(biāo)志RI,向向CPU申請(qǐng)中斷,申請(qǐng)中斷,CPU可以讀可以讀SBUF,從從而完成數(shù)據(jù)的并行輸入。而完成數(shù)據(jù)的并行輸入。 參考程序如下。參考程序如下。 MOV SCON,00H;定義串行口工作方

24、式;定義串行口工作方式 CLR P1. 0 ;74LS165并行置入數(shù)據(jù)并行置入數(shù)據(jù) NOP SETB Pl. 0 ;延時(shí)一個(gè)機(jī)器周期后,移出數(shù);延時(shí)一個(gè)機(jī)器周期后,移出數(shù)據(jù)據(jù) CLR RI ;清除中斷標(biāo)志;清除中斷標(biāo)志 SETB REN ;允許接收;允許接收 LOOP:JNB RI, LOOP;等待一幀數(shù)據(jù)接收結(jié)束;等待一幀數(shù)據(jù)接收結(jié)束 MOV A, SBUF;讀串行輸入數(shù)據(jù);讀串行輸入數(shù)據(jù) 由于方式由于方式0不能自動(dòng)插入和檢出同步字符(如起始不能自動(dòng)插入和檢出同步字符(如起始位和停止位),因此,方式位和停止位),因此,方式0不能用于串行通信,不能用于串行通信,只能用于擴(kuò)展只能用于擴(kuò)展I/O

25、口???。多位并口輸入多位并口輸入(2)工作方式)工作方式1( 8位數(shù)據(jù)異步通訊方式。)位數(shù)據(jù)異步通訊方式。)串行口工作方式串行口工作方式1是是10位為一幀的異步串行通信位為一幀的異步串行通信方式。方式。TXD用于發(fā)送數(shù)據(jù),用于發(fā)送數(shù)據(jù),RXD用于接收數(shù)用于接收數(shù)據(jù),收發(fā)一幀數(shù)據(jù)的格式為:據(jù),收發(fā)一幀數(shù)據(jù)的格式為:1位起始位(固位起始位(固定為定為0)、)、8位數(shù)據(jù)位(低位在前,高位在后)位數(shù)據(jù)位(低位在前,高位在后)和和1位停止位(固定為位停止位(固定為1),共,共10位。一幀數(shù)據(jù)位。一幀數(shù)據(jù)格式如下所示:格式如下所示:數(shù)據(jù)發(fā)送數(shù)據(jù)發(fā)送在在TI為為0的情況下(即串行口發(fā)送控制電路處于空閑狀的情

26、況下(即串行口發(fā)送控制電路處于空閑狀態(tài)),執(zhí)行一條寫態(tài)),執(zhí)行一條寫SBUF指令便可啟動(dòng)串行口數(shù)據(jù)發(fā)指令便可啟動(dòng)串行口數(shù)據(jù)發(fā)送。串行口自動(dòng)在送。串行口自動(dòng)在8位數(shù)據(jù)前、后追加起始位和停止位數(shù)據(jù)前、后追加起始位和停止位,構(gòu)成一個(gè)完整的幀格式,然后由位,構(gòu)成一個(gè)完整的幀格式,然后由TXD端輸出。端輸出。一個(gè)字符發(fā)送完成后,一個(gè)字符發(fā)送完成后,TXD輸出線維持在輸出線維持在1狀態(tài),并狀態(tài),并將將SCON中的中的TI置置1,通知,通知CPU可以發(fā)送下一個(gè)字符。可以發(fā)送下一個(gè)字符。數(shù)據(jù)接收數(shù)據(jù)接收在在RI為為0的狀態(tài)下(即串行口接收控制電路處于空閑狀的狀態(tài)下(即串行口接收控制電路處于空閑狀態(tài)),當(dāng)態(tài)),

27、當(dāng)REN位為位為1時(shí),串行口即處于接收狀態(tài)。串時(shí),串行口即處于接收狀態(tài)。串行口采樣行口采樣RXD端,當(dāng)采樣到從端,當(dāng)采樣到從1到到0的負(fù)跳變時(shí),就的負(fù)跳變時(shí),就認(rèn)定為已接收到起始位。隨后在移位脈沖控制下,認(rèn)定為已接收到起始位。隨后在移位脈沖控制下,把接收到的數(shù)據(jù)位移入接收寄存器中。當(dāng)把接收到的數(shù)據(jù)位移入接收寄存器中。當(dāng)8位數(shù)據(jù)及位數(shù)據(jù)及停止位全部移入后,根據(jù)以下狀態(tài),進(jìn)行相應(yīng)操作。停止位全部移入后,根據(jù)以下狀態(tài),進(jìn)行相應(yīng)操作。若若SM2=0,則接收控制器發(fā)出則接收控制器發(fā)出“裝載裝載SBUF”信號(hào),信號(hào),將將8位數(shù)據(jù)裝入位數(shù)據(jù)裝入SBUF,停止位裝入,停止位裝入RB8,并,并置置RI= 1,向

28、,向CPU申請(qǐng)中斷。申請(qǐng)中斷。若若SM2=1,則只有停止位為,則只有停止位為1才發(fā)生上述操作。才發(fā)生上述操作。若若SM2=1且停止位為且停止位為0,則所接收的數(shù)據(jù)不裝入,則所接收的數(shù)據(jù)不裝入SBUF,數(shù)據(jù)將丟失。,數(shù)據(jù)將丟失。波特率設(shè)置波特率設(shè)置對(duì)于工作方式對(duì)于工作方式1,波特率由定時(shí)器計(jì)數(shù)器波特率由定時(shí)器計(jì)數(shù)器T1的的溢出率和溢出率和SMOD決定決定把定時(shí)器計(jì)數(shù)器把定時(shí)器計(jì)數(shù)器T1溢出率作為波特率發(fā)生器溢出率作為波特率發(fā)生器的輸入信號(hào)時(shí),為了避免重裝初值造成的定的輸入信號(hào)時(shí),為了避免重裝初值造成的定時(shí)誤差,時(shí)誤差,T1最好工作在可自動(dòng)重裝初值的方最好工作在可自動(dòng)重裝初值的方式式2,并禁止,并

29、禁止T1中斷。中斷。 【例例4-9】已知已知8051單片機(jī)時(shí)鐘振蕩頻率為單片機(jī)時(shí)鐘振蕩頻率為11. 0592MHz,選用定時(shí)器,選用定時(shí)器T1工作方式工作方式2作波特率作波特率發(fā)生器,波特率為發(fā)生器,波特率為2400bit/s,求初值,求初值X。設(shè)波特率控制位設(shè)波特率控制位SMOD0,初值初值F4H (3)工作方式)工作方式2和工作方式和工作方式3工作方式工作方式2和工作方式和工作方式3都是都是11位為一幀的異步串行通位為一幀的異步串行通信方式,二者的惟一區(qū)別是通信波特率有所不同,信方式,二者的惟一區(qū)別是通信波特率有所不同,方式方式2的波特率由主頻的波特率由主頻fosc經(jīng)經(jīng)32分頻或分頻或64

30、分頻后獲得,分頻后獲得,不可變,因此不常用(原因是與其他串行通信設(shè)備不可變,因此不常用(原因是與其他串行通信設(shè)備連接困難)。連接困難)。而方式而方式3的波特率與的波特率與T1或或T0的溢出率及的溢出率及PCON中中SMOD位有關(guān),選擇不同的初值或晶振頻率即可獲得所需位有關(guān),選擇不同的初值或晶振頻率即可獲得所需的常用波特率。的常用波特率。 方式方式2或方式或方式3收發(fā)一幀數(shù)據(jù)由收發(fā)一幀數(shù)據(jù)由11位組成,位組成,1位起始位、位起始位、9位數(shù)據(jù)位和位數(shù)據(jù)位和1位停止位。幀數(shù)據(jù)格式如下所示:位停止位。幀數(shù)據(jù)格式如下所示:字符還是由字符還是由8位數(shù)據(jù)組成,第位數(shù)據(jù)組成,第9個(gè)數(shù)據(jù)位既可作奇偶校個(gè)數(shù)據(jù)位既

31、可作奇偶校驗(yàn)位使用,也可作控制位使用,驗(yàn)位使用,也可作控制位使用,其功能可由用戶確定。其功能可由用戶確定。數(shù)據(jù)發(fā)送數(shù)據(jù)發(fā)送方式方式2和方式和方式3的數(shù)據(jù)發(fā)送過程與方式的數(shù)據(jù)發(fā)送過程與方式1類似。所類似。所不同的是方式不同的是方式2和方式和方式3需要發(fā)送需要發(fā)送9位串行數(shù)據(jù),位串行數(shù)據(jù),除將低除將低8位存放在位存放在SBUF寄存器中外,還需將第寄存器中外,還需將第9位位(D8)存放在存放在SCON寄存器中的寄存器中的TB8位。因此位。因此數(shù)據(jù)發(fā)送前,必須先通過位傳送指令將數(shù)據(jù)發(fā)送前,必須先通過位傳送指令將D8位寫位寫入入SCON寄存器的寄存器的TB8位,如位,如 SETB TB8;TBS位置位置

32、1 或或CLR TB8;TBS位置位置0之后的過程同方式之后的過程同方式1一樣,通過寫一樣,通過寫SBUF指令,啟指令,啟動(dòng)發(fā)送。第動(dòng)發(fā)送。第9位內(nèi)容沒有規(guī)定,可以是數(shù)據(jù),位內(nèi)容沒有規(guī)定,可以是數(shù)據(jù),也可以是奇偶校驗(yàn)位,在多機(jī)通信中,常用作也可以是奇偶校驗(yàn)位,在多機(jī)通信中,常用作數(shù)據(jù)地址標(biāo)志位或其他控制位。數(shù)據(jù)地址標(biāo)志位或其他控制位。數(shù)據(jù)接收數(shù)據(jù)接收方式方式2和方式和方式3接收數(shù)據(jù)的過程也和方式接收數(shù)據(jù)的過程也和方式1類似。所不同類似。所不同的是,方式的是,方式1中中RB8為存放的是停止位,而方式為存放的是停止位,而方式2和和方式方式3中中RB8存放的是第存放的是第9數(shù)據(jù)位數(shù)據(jù)位(D8)。方式

33、方式2和方式和方式3必須滿足接收有效字符的條件變?yōu)椋罕仨殱M足接收有效字符的條件變?yōu)椋?.RI=0;2.SM2=0,或接收到的第或接收到的第9位數(shù)據(jù)位為位數(shù)據(jù)位為1.只有上述兩個(gè)條件同時(shí)滿足,接收到的字符才能送入只有上述兩個(gè)條件同時(shí)滿足,接收到的字符才能送入SBUF,第第9數(shù)據(jù)位才能裝入數(shù)據(jù)位才能裝入RB8中,并使中,并使RI=1;否則,;否則,接收到的數(shù)據(jù)無效,接收到的數(shù)據(jù)無效,RI也不置位。也不置位。 上述第一個(gè)條件是要求上述第一個(gè)條件是要求SBUF為空,即接收控為空,即接收控制電路空閑,允許串行口接收。第二個(gè)條件制電路空閑,允許串行口接收。第二個(gè)條件是提供了利用是提供了利用SM2和第和第9

34、數(shù)據(jù)位共同對(duì)接收加數(shù)據(jù)位共同對(duì)接收加以控制:若第以控制:若第9位是奇偶校驗(yàn)位,則可令位是奇偶校驗(yàn)位,則可令 SM2=0,以保證串行口能可靠接收,若要求,以保證串行口能可靠接收,若要求利用第利用第9數(shù)據(jù)位參與接收控制,則可令數(shù)據(jù)位參與接收控制,則可令SM2=1,然后依靠第然后依靠第9位的狀態(tài)來決定接收是否有效。位的狀態(tài)來決定接收是否有效。波特率設(shè)置波特率設(shè)置波特率設(shè)置方式不同是方式波特率設(shè)置方式不同是方式2和方式和方式3的惟一區(qū)的惟一區(qū)別。別。方式方式2中波特率固定為中波特率固定為fosc/32或或fosc/64,用戶具體用戶具體選擇哪一種波特率可通過選擇選擇哪一種波特率可通過選擇SMOD位狀態(tài)

35、位狀態(tài)來決定:來決定:若若SMOD= 0,則所選波特率為,則所選波特率為fosc/64,若若SMOD= 1,則所選波特率為,則所選波特率為fosc32。方式方式3中波特率可變,其選擇方式同工作方式中波特率可變,其選擇方式同工作方式1。無論何種模式通信無論何種模式通信 :兩個(gè)通信設(shè)備之間的波特率兩個(gè)通信設(shè)備之間的波特率誤差不能超過誤差不能超過 。下面是一個(gè)實(shí)際的以。下面是一個(gè)實(shí)際的以 TB8 作為奇偶校驗(yàn)位的發(fā)送作為奇偶校驗(yàn)位的發(fā)送中斷服務(wù)程序,中斷服務(wù)程序, R0中存放著發(fā)送數(shù)據(jù)區(qū)起始地址。中存放著發(fā)送數(shù)據(jù)區(qū)起始地址。 PIPL:PUSH PSW ; 保護(hù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng) PUSH A CLR T

36、I ; 清發(fā)送中斷標(biāo)志清發(fā)送中斷標(biāo)志 MOV A, R0 ; 取數(shù)據(jù)取數(shù)據(jù) MOV C, P ; 奇偶位送奇偶位送 C MOV TB8, C ; 奇偶位送奇偶位送 TB8 MOV SBUF, A ; 數(shù)據(jù)寫入發(fā)送緩沖器數(shù)據(jù)寫入發(fā)送緩沖器,INC R0 ; 數(shù)據(jù)指針加數(shù)據(jù)指針加 1 POP A ; 恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng) POP PSW RETI ; 中斷返回中斷返回 (4 4)計(jì)算波特率)計(jì)算波特率方式方式0 0為固定波特率:為固定波特率:B=fosc/12B=fosc/12方式方式2 2可選兩種波特率:可選兩種波特率: B=(2B=(2SMOD /64)/64)fosc fosc 方式方式1 1、

37、3 3為可變波特率,用為可變波特率,用T1T1作波特率發(fā)生器。作波特率發(fā)生器。B=(2B=(2SMOD/32)/32)T1T1溢出率溢出率T1T1為方式為方式2 2時(shí)的時(shí)間常數(shù):時(shí)的時(shí)間常數(shù): X = 2X = 28 8 - t/T - t/T溢出時(shí)間:溢出時(shí)間: t= (2t= (28 8 -X)T = (2-X)T = (28 8 -X)-X)12/ fosc12/ foscT1T1溢出率溢出率=1/t= fosc /12=1/t= fosc /12(2(2n n -X)-X) 波特率波特率B=(2B=(2SMOD /32)/32)fosc/12fosc/12(2(28 8-X)-X)串行

38、口方式串行口方式1 1、3 3,根據(jù)波特率選擇,根據(jù)波特率選擇T1T1工作方式,計(jì)算工作方式,計(jì)算時(shí)間常數(shù)。時(shí)間常數(shù)。T1T1選方式選方式2 2: TH1=X= 2TH1=X= 28 8-fosc/12-fosc/122 2SMOD/(32/(32B)B)T1T1選方式選方式1 1用于低波特率,需考慮用于低波特率,需考慮T1T1重裝時(shí)間常數(shù)時(shí)間。重裝時(shí)間常數(shù)時(shí)間。7.4 多機(jī)通信多機(jī)通信圖2.23 主從式多機(jī)通信系統(tǒng) RXDTXD主機(jī) 8051RXD TXD 8051 0# 從機(jī)RXD TXD 8051 1# 從機(jī)RXD TXD 8051 n# 從機(jī) 在主從式多機(jī)系統(tǒng)中,主機(jī)發(fā)出的信息有兩類,

39、而且具有特征,能夠有所區(qū)分。一類為地址,用來確定需要和主機(jī)通信的從機(jī),特征是串行傳送的第9位數(shù)據(jù)為1;另一類是數(shù)據(jù),特征是串行傳送的第9位數(shù)據(jù)為0。對(duì)從機(jī)來說,要利用SCON寄存器中的SM2位的控制功能。在接收時(shí),若RI=0,則只要SM2=0,接收總能實(shí)現(xiàn);而若SM2=1,則發(fā)送的第9位TB8必須為1接收才能進(jìn)行。因此,對(duì)于從機(jī)來說,在接收地址時(shí),應(yīng)使SM2=1,以便接收到主機(jī)發(fā)來的地址,從而確定主機(jī)是否打算和自己通信,一經(jīng)確認(rèn)后,從機(jī)應(yīng)使SM2=0,以便接收TB8=0的數(shù)據(jù)。 主從多機(jī)通信的過程如下: (1)主、從機(jī)工作于方式主、從機(jī)工作于方式2或方式或方式3,主機(jī)置,主機(jī)置SM2=0, R

40、EN=1;從機(jī)置;從機(jī)置SM2=1,REN=1 (2)主機(jī)置位主機(jī)置位TB8=1,向從機(jī)發(fā)送尋址地址幀,向從機(jī)發(fā)送尋址地址幀,各從機(jī)因滿足接收條件各從機(jī)因滿足接收條件(SM2=1,RB8=1),從而從而接收到主機(jī)發(fā)來的地址,并與本機(jī)地址進(jìn)行接收到主機(jī)發(fā)來的地址,并與本機(jī)地址進(jìn)行比較比較 (3)地址一致的從機(jī)(被尋址機(jī))地址一致的從機(jī)(被尋址機(jī))SM2清清0,并并向向 主機(jī)返回地址,供主機(jī)核對(duì)地址不一主機(jī)返回地址,供主機(jī)核對(duì)地址不一致的從機(jī)(未被尋址機(jī))保持致的從機(jī)(未被尋址機(jī))保持SM2=1 (4)主機(jī)核對(duì)返回的地址,若與此前發(fā)出的地主機(jī)核對(duì)返回的地址,若與此前發(fā)出的地址一致則準(zhǔn)備發(fā)送數(shù)據(jù);若

41、不一致址一致則準(zhǔn)備發(fā)送數(shù)據(jù);若不一致,主機(jī)發(fā)復(fù)主機(jī)發(fā)復(fù)位信號(hào)位信號(hào),(數(shù)據(jù)幀中數(shù)據(jù)幀中TB8=0),然后返回然后返回(2)重新發(fā)重新發(fā)送地址幀送地址幀 (5)主機(jī)向從機(jī)發(fā)送數(shù)據(jù),此時(shí)主機(jī)的主機(jī)向從機(jī)發(fā)送數(shù)據(jù),此時(shí)主機(jī)的TB8=0,只有被選中的那臺(tái)從機(jī)能接收到該數(shù)據(jù)其只有被選中的那臺(tái)從機(jī)能接收到該數(shù)據(jù)其他從機(jī)則舍棄該數(shù)據(jù)他從機(jī)則舍棄該數(shù)據(jù) (6)本次通信結(jié)束后,從機(jī)重新里本次通信結(jié)束后,從機(jī)重新里SM2=1,等待等待下次通信。下次通信。 ;主程序;主程序 ORG 0000H LJMP START ORG 0030H START:MOV TMOD, #20H:T1定時(shí)方式定時(shí)方式2 MOV TH1

42、,#0E8H:波特率為:波特率為1200bps MOV TL1, #0E8H SETB TRl:?jiǎn)?dòng):?jiǎn)?dòng)T1 MOV SCON,#0D8H:SM2=0,REN=1,TB8=1 MOV PCON,#00H;波特率不加倍;波特率不加倍 MOV R1,#01H;從機(jī)地址從機(jī)地址 MOV R6,#0FFH;延時(shí)內(nèi)循環(huán)延時(shí)內(nèi)循環(huán)255 次次 ML0:MOV A,R1 ML1:MOV SBUF,A;發(fā)從機(jī)地址發(fā)從機(jī)地址 ML2:JBC RI,ML4 MOV R2,#8FH; 延時(shí)內(nèi)循環(huán)延時(shí)內(nèi)循環(huán)143 次次 DL0: DJNZ R2, DL0 DJNZ R6, ML2 JNB RI, ALARM;超時(shí)報(bào)

43、警超時(shí)報(bào)警 ML4:MOV A, SBUF;讀取地址;讀取地址 XRL A,R1;核對(duì)地址是否相同;核對(duì)地址是否相同 JZ TRAl;相同,轉(zhuǎn);相同,轉(zhuǎn) MOV A,#FFH;地址不同,發(fā)復(fù)位信號(hào);地址不同,發(fā)復(fù)位信號(hào) CLR TB8; 數(shù)據(jù)數(shù)據(jù) MOV SBUF,A ML5:JNB TI,ML5 SETB TB8 AJMP ML1; 重發(fā)從機(jī)地址重發(fā)從機(jī)地址 TRAl: CLR TB8;TB8清清0,發(fā)送數(shù)據(jù)幀發(fā)送數(shù)據(jù)幀 MOVA, R0;讀取待發(fā)送數(shù)據(jù);讀取待發(fā)送數(shù)據(jù) MOV SBUF,A;啟動(dòng)發(fā)送;啟動(dòng)發(fā)送 JNB TI,;等待數(shù)據(jù)發(fā)送完;等待數(shù)據(jù)發(fā)送完 CLR TI;軟件清發(fā)送中斷標(biāo)志

44、;軟件清發(fā)送中斷標(biāo)志 RET END 從機(jī)源程序如下:從機(jī)源程序如下: ;主程序;主程序 ORG 0000H LJMP START ORG 0023H;串口中斷入口地址;串口中斷入口地址 LJMP SEVT0 ORG 0030H START:MOV TMOD,#20H:T1定時(shí)方式定時(shí)方式2 MOV TH1, #0E8H:波特率為:波特率為1200bps MOV TL1, #0E8H SETB TRl:?jiǎn)?dòng):?jiǎn)?dòng)T1 MOV SCON,#0F8H;SM2=1,REN=1,TB8=1 MOV PCON,#00H:波特率不加倍:波特率不加倍 MOV R0,#30H;R0指向數(shù)據(jù)存放單元指向數(shù)據(jù)存放

45、單元 SETB EA:開串口中斷:開串口中斷 SETB ES SJMP:等待中斷:等待中斷 串口中斷服務(wù)程序串口中斷服務(wù)程序 SEVT0:JB RI, SEVTl;是接收中斷轉(zhuǎn)是接收中斷轉(zhuǎn)SEVTl CLR TI:是發(fā)送中斷,清:是發(fā)送中斷,清0 RETI;返回;返回2015年年11月月9日日 SEVT1:CLR RI:清:清RI MOV A, SBUF:讀取數(shù)據(jù):讀取數(shù)據(jù) JB RB8, SEVT2;是地址幀,是地址幀,SEVT2 XRL A,#FFH JZ SEVT4;復(fù)位指令,轉(zhuǎn);復(fù)位指令,轉(zhuǎn) MOV R0,A;數(shù)據(jù)存于;數(shù)據(jù)存于R所指單元所指單元 SETB SM2;一次通信完成,重置;

46、一次通信完成,重置SM2 RETI;返回;返回 SEVT2:XRL A,#01H;核對(duì)是否本機(jī)地址;核對(duì)是否本機(jī)地址 JZ SEVT3;是本機(jī)地址,轉(zhuǎn);是本機(jī)地址,轉(zhuǎn) SETB SM2;不是本機(jī)地址,;不是本機(jī)地址,SM2置置1 RETI SEVT3: CLR SM2:是本機(jī)地址,:是本機(jī)地址,SM2清清0 MOVA,#01H;向主機(jī)發(fā)確認(rèn)地址;向主機(jī)發(fā)確認(rèn)地址 MOV SBUF,A,向主機(jī)發(fā)確認(rèn)地址,向主機(jī)發(fā)確認(rèn)地址 RETI SEVT4:SETB SM2;SM2置置,接收地址接收地址 RETI END7.5 串行口的應(yīng)用串行口初始化編程格式:串行口初始化編程格式:SIO:MOV SCON,

47、#控制狀態(tài)字;寫方式字且控制狀態(tài)字;寫方式字且 TI=RI=0 MOV PCON,#80H ;波特率加倍;波特率加倍 MOV TMOD,#20H ;T1作波特率作波特率發(fā)生器發(fā)生器 MOV TH1,#X ;選定波特率;選定波特率 MOV TL1,#X SETB TR1 SETB EA ;開串行口中;開串行口中斷斷 SETB ES發(fā)送程序:先發(fā)送一個(gè)字符,等待TI=1后再發(fā)送下一個(gè)字符。1.查詢方式:TRAM:MOV A,R0 ;取數(shù)據(jù) MOV SBUF,A ;發(fā)送一個(gè)字符WAIT:JBCTI,NEXT ;等待發(fā)送結(jié)束SJMP WAITNEXT:INCR0 ;準(zhǔn)備下一次發(fā)送SJMP TRAM2.

48、中斷方式: ORG 0023H ;串行口中斷入口 AJMP SINTMAIN: ;初始化編程TRAM: MOV A,R0 ;取數(shù)據(jù)MOV SBUF,A ;發(fā)送第一個(gè)字符 H:SJMP H ;其它工作 SINT:CLR TI ;中斷服務(wù)程序INC R0MOV A,R0 ;取數(shù)據(jù)MOV SBUF,A ;發(fā)送下一個(gè)字符RETI接收程序:REN=1、RI=0等待接收,當(dāng)RI=1,從SBUF讀取數(shù)據(jù)。1.查詢方式: WAIT:JBCRI,NEXT;查詢等待SJMP WAITNEXT:MOV A,SBUF ;讀取接收數(shù)據(jù)MOV R0,A;保存數(shù)據(jù)INCR0 ;準(zhǔn)備下一次接收SJMP WAIT2.中斷方式:

49、ORG0023HAJMP RINTMAIN: ;初始化編程 H:SJMP H ;其它任務(wù) RINT:CLRRI ;清中斷標(biāo)志MOV A,SBUF ;讀取接收數(shù)據(jù)MOV R0,A;保存數(shù)據(jù)INCR0RETI異步通訊程序舉例(一)串行口方式0 用于擴(kuò)展單片機(jī)的并行I/O接口。串行口實(shí)現(xiàn):74LS164實(shí)現(xiàn):串行并行的數(shù)據(jù)轉(zhuǎn)換74LS165并行串行的數(shù)據(jù)轉(zhuǎn)換 例例4-8圖圖4-16中,串行口外接兩個(gè)中,串行口外接兩個(gè)74IS164, 74LS164的輸出接指示燈的輸出接指示燈L0-L15,欲使欲使L0-L3、L8、L10、L12、L14亮,其余燈暗,可按如下編程:亮,其余燈暗,可按如下編程: LSU

50、B0:MOV SBUF,#0FH; #00001111B JNB TI, CLR TI MOV SBUF,#055H;#010110101H JNB TI, CLR TI RET多位并口輸入多位并口輸入基本應(yīng)用基本應(yīng)用 例例:一串行口作輸入輸出擴(kuò)展口使用。一串行口作輸入輸出擴(kuò)展口使用。 要求如圖要求如圖1-27所示,利用表格的方式建立一所示,利用表格的方式建立一組數(shù)據(jù),利用串行口發(fā)送至組數(shù)據(jù),利用串行口發(fā)送至8位串入并出的位串入并出的74LS164,這組數(shù)據(jù)將使這組數(shù)據(jù)將使74LS164的的8個(gè)個(gè)LED左左移移2次,右移次,右移2次,閃爍次,閃爍2次。次。2009年年3月月30日星期一日星期一

51、(二二)異步通訊程序舉例異步通訊程序舉例例例:一般異步串行通信的應(yīng)用程序。一般異步串行通信的應(yīng)用程序。要求要求:由串行口發(fā)送接收帶偶位校驗(yàn)位的由串行口發(fā)送接收帶偶位校驗(yàn)位的ASCII碼數(shù)碼數(shù)據(jù)塊。據(jù)塊。ASCII碼數(shù)據(jù)塊存放于發(fā)送機(jī)片內(nèi)碼數(shù)據(jù)塊存放于發(fā)送機(jī)片內(nèi)RAM的的30H-3FH單元,欲送往接收機(jī)片內(nèi)單元,欲送往接收機(jī)片內(nèi)RAM的的40H-4FH單元;單片機(jī)采用單元;單片機(jī)采用12MHz晶振;串行口工作子方式晶振;串行口工作子方式1;定時(shí)器計(jì)數(shù)器定時(shí)器計(jì)數(shù)器T1用作波特率發(fā)生器,工作于方式用作波特率發(fā)生器,工作于方式2, PCON中的中的SMOD位為位為0;發(fā)送的波特率要求為;發(fā)送的波特率

52、要求為1200.2010-11-3例:?jiǎn)纹瑱C(jī)單工傳送數(shù)據(jù)電路如圖例:?jiǎn)纹瑱C(jī)單工傳送數(shù)據(jù)電路如圖3-11所示,所示,由由8751讀入讀入P1撥碼開關(guān)的數(shù)據(jù)載入撥碼開關(guān)的數(shù)據(jù)載入SBUF然后然后經(jīng)由經(jīng)由TXD將數(shù)據(jù)傳給將數(shù)據(jù)傳給8751-R (RXD)。當(dāng)。當(dāng)8751-R接收的數(shù)據(jù)存入接收的數(shù)據(jù)存入 SUFB時(shí),再由時(shí),再由SBUF載入載入 累加器,并輸出至累加器,并輸出至P使與其相對(duì)應(yīng)的使與其相對(duì)應(yīng)的LED亮亮雙機(jī)通信雙機(jī)通信 下面以下面以A機(jī)發(fā)送,機(jī)發(fā)送,B機(jī)接收為例,說明發(fā)送和機(jī)接收為例,說明發(fā)送和接收程序的設(shè)計(jì)方法接收程序的設(shè)計(jì)方法 設(shè)設(shè)A、B兩機(jī)均選用兩機(jī)均選用11 059 MHz的振蕩

53、的振蕩頻率,波特率為頻率,波特率為1200bits,定時(shí)器,定時(shí)器Tl選用工選用工作方式作方式2,SMOD位為位為0,則計(jì)數(shù)初值為:,則計(jì)數(shù)初值為: XE8H,所以,所以T1的初值為的初值為TH1TL1E8H雙機(jī)通信雙機(jī)通信利用利用8051的串行口進(jìn)行兩個(gè)的串行口進(jìn)行兩個(gè)8051之間的串行異步通信,之間的串行異步通信, 通信雙方可以遵循如下約定:通信雙方可以遵循如下約定: 1)設(shè)設(shè)A機(jī)為發(fā)送者,機(jī)為發(fā)送者,B機(jī)為接收者。機(jī)為接收者。 2)當(dāng))當(dāng)A機(jī)開始發(fā)送時(shí),先發(fā)一個(gè)機(jī)開始發(fā)送時(shí),先發(fā)一個(gè)“AA”信號(hào),信號(hào),B機(jī)收到后回答一個(gè)機(jī)收到后回答一個(gè)“ ”,表示同意接收。,表示同意接收。 3)當(dāng)當(dāng)A機(jī)

54、收到機(jī)收到 BB”后,開始發(fā)送數(shù)據(jù),每發(fā)后,開始發(fā)送數(shù)據(jù),每發(fā)送一次求一次送一次求一次“校驗(yàn)和校驗(yàn)和”?!靶r?yàn)和校驗(yàn)和”是每發(fā)送的是每發(fā)送的一個(gè)字節(jié)數(shù)據(jù)(或命令代碼)都累加到一個(gè)單元中一個(gè)字節(jié)數(shù)據(jù)(或命令代碼)都累加到一個(gè)單元中去,累加過程中發(fā)生多次向高位進(jìn)位(丟失),最去,累加過程中發(fā)生多次向高位進(jìn)位(丟失),最后在累加單元中所剩余的結(jié)果。假定數(shù)據(jù)塊長(zhǎng)度為后在累加單元中所剩余的結(jié)果。假定數(shù)據(jù)塊長(zhǎng)度為20個(gè)字節(jié),數(shù)據(jù)緩沖區(qū)起始地址為個(gè)字節(jié),數(shù)據(jù)緩沖區(qū)起始地址為30H,數(shù)據(jù)塊發(fā),數(shù)據(jù)塊發(fā)完后再發(fā)送完后再發(fā)送“校驗(yàn)和校驗(yàn)和”。 4)B機(jī)接收數(shù)據(jù)并將其轉(zhuǎn)存到數(shù)據(jù)緩沖區(qū),機(jī)接收數(shù)據(jù)并將其轉(zhuǎn)存到數(shù)據(jù)緩沖

55、區(qū),起始地址也為起始地址也為30H,每接收一次也計(jì)算一次,每接收一次也計(jì)算一次“校驗(yàn)和校驗(yàn)和”,當(dāng)接收完一個(gè)數(shù)據(jù)塊后,再接,當(dāng)接收完一個(gè)數(shù)據(jù)塊后,再接收從收從A機(jī)發(fā)來的機(jī)發(fā)來的“校驗(yàn)和校驗(yàn)和”,并將它與,并將它與B機(jī)求機(jī)求出的出的“校驗(yàn)和校驗(yàn)和”進(jìn)行比較。若二者相等,說進(jìn)行比較。若二者相等,說明接收正確,明接收正確,B機(jī)回答一個(gè)機(jī)回答一個(gè)“”;若兩者;若兩者不等,說明接收不正確,不等,說明接收不正確,B機(jī)回答一個(gè)機(jī)回答一個(gè)“FF”,請(qǐng)求重發(fā)。請(qǐng)求重發(fā)。 5) A機(jī)收到一機(jī)收到一+W的回答后,結(jié)束發(fā)送。若的回答后,結(jié)束發(fā)送。若收到的答復(fù)非零,則將數(shù)據(jù)重發(fā)一次。收到的答復(fù)非零,則將數(shù)據(jù)重發(fā)一次。 6)雙方均采用串行口方式)雙方均采用串行口方式1進(jìn)行串行通信。進(jìn)行串行通信。與與IBM PC 計(jì)算機(jī)的串行通信計(jì)算機(jī)的串行通信 IBM PC 是國(guó)內(nèi)目前應(yīng)用最廣泛的微機(jī),在與是國(guó)內(nèi)目前應(yīng)用最廣泛的微機(jī),在與單片機(jī)串行接口后,可以方便地構(gòu)成主從分單片機(jī)串行接口后,可以方便地構(gòu)成主從分布式多微機(jī)系統(tǒng)。從機(jī)作數(shù)據(jù)采集或?qū)崟r(shí)控布式多微機(jī)系

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論