[信息與通信]第08章 MCS-51單片機(jī)串行接口-081116_第1頁(yè)
[信息與通信]第08章 MCS-51單片機(jī)串行接口-081116_第2頁(yè)
[信息與通信]第08章 MCS-51單片機(jī)串行接口-081116_第3頁(yè)
[信息與通信]第08章 MCS-51單片機(jī)串行接口-081116_第4頁(yè)
[信息與通信]第08章 MCS-51單片機(jī)串行接口-081116_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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、1.串行通信概述2.串行通信原理3.串行通信的控制寄存器4.串行通信的工作方式5.多機(jī)通信第第8 8章章串串行行通通信信 本章內(nèi)容本章內(nèi)容single chip microcomputer串行通信概述串行通信概述 單片機(jī)與外圍設(shè)備的通信有并行和串行兩種方式。并行通信是多位數(shù)據(jù)同時(shí)傳送,速度快,效率高,但需要的數(shù)據(jù)線條數(shù)也比較多,只適合短距離通信。串行通信是按先后次序一位一位傳送數(shù)據(jù),所需的數(shù)據(jù)線條數(shù)少,特別適用長(zhǎng)距離傳送。mcs-51單片機(jī)內(nèi)部有一個(gè)全雙工的串行口,可以通過軟件設(shè)定以4種工作模式和不同的波特率進(jìn)行工作。v串行通信的通信方式串行通信的通信方式異步通信是指發(fā)送方和接收方采用獨(dú)立的時(shí)

2、鐘,即雙方?jīng)]有一個(gè)相同的參考時(shí)鐘作為基準(zhǔn)。在同步通信中,每個(gè)數(shù)據(jù)塊在同步通信中,每個(gè)數(shù)據(jù)塊的開頭以同步字符的開頭以同步字符synsyn加以指示,使發(fā)送與接加以指示,使發(fā)送與接受雙方取得同步。數(shù)據(jù)塊的各字符之間沒有受雙方取得同步。數(shù)據(jù)塊的各字符之間沒有起始位和停止位,提高了通信的速度。但為起始位和停止位,提高了通信的速度。但為了能保持同步傳送,在同步通信中須用一個(gè)了能保持同步傳送,在同步通信中須用一個(gè)時(shí)鐘來協(xié)調(diào)收發(fā)器的工作,這就增加了設(shè)備時(shí)鐘來協(xié)調(diào)收發(fā)器的工作,這就增加了設(shè)備的復(fù)雜性。的復(fù)雜性。 v字符格式雙方要事先約定字符的編碼形式、奇偶校驗(yàn)形式及起始位和停止位的規(guī)定。例如用ascii碼通信,

3、有效數(shù)據(jù)為7位,加一個(gè)奇偶校驗(yàn)位、一個(gè)起始位和一個(gè)停止位共10位。 v波特率波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進(jìn)制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)之間有以下關(guān)系:波特率=1個(gè)字符的二進(jìn)制編碼位數(shù)字符/秒注:在異步通信中,通信雙方必須事先約定字符格式和波特率v串行通信的三種數(shù)據(jù)傳輸模式)單工方式:數(shù)據(jù)僅按一個(gè)固定方向傳送。常用于串行口的打印數(shù)據(jù)傳輸與簡(jiǎn)單系統(tǒng)間的數(shù)據(jù)采集。 )半雙工方式:使用同一根傳輸線,數(shù)據(jù)可雙向傳送,但不能同時(shí)進(jìn)行,實(shí)際應(yīng)用中采用某種協(xié)議實(shí)現(xiàn)收/發(fā)開關(guān)轉(zhuǎn)換。 )全雙工方式:數(shù)據(jù)的發(fā)送和接收可同時(shí)進(jìn)行,通信雙方都能在同一時(shí)刻進(jìn)行發(fā)送和接收操作,但一般全

4、雙工傳輸方式的線路和設(shè)備比較復(fù)雜。 發(fā)送端接受端數(shù)據(jù)線地線單工方式發(fā)送/接收端接收/發(fā)送端數(shù)據(jù)線地線半雙工方式發(fā)送/接收器接收/發(fā)送端數(shù)據(jù)線地線全雙工方式串行通信工作原理v串行通信接口mcs-51單片機(jī)串行口的數(shù)據(jù)傳送為全雙工傳送方式。接收、發(fā)送數(shù)據(jù)均可工作在查詢或中斷方式,能方便實(shí)現(xiàn)雙機(jī)和多機(jī)通信。mcs-51單片機(jī)內(nèi)部的串行接口,有一個(gè)發(fā)送緩沖器和一個(gè)接收緩沖器,它們?cè)谖锢砩鲜仟?dú)立的。發(fā)送緩沖器只能寫入信息,不能被讀出,用于存儲(chǔ)發(fā)送信息。接收緩沖器只能讀出信息,不能被寫入,用于存儲(chǔ)接收到的信息。這兩個(gè)緩沖器共用一個(gè)地址:99h。另外,在串行通訊時(shí)用二個(gè)特殊功能寄存器scon、pcon控制串

5、行接口的工作方式和波特率。如下圖所示。/12th1tl1/2/16發(fā)送sbuf(99h)接收sbuf(99h)輸入移位寄存器/16起始位檢測(cè)內(nèi)部bus移位時(shí)鐘t1溢出率fsocsmod-1smod-0pxd(p3.0)tiritxd(p3.1)寫sbuf讀sbuf裝載sbufv注:接收/發(fā)送緩沖寄存器sbuf,雖然共用一個(gè)地址,但由于操作是獨(dú)立的,故不會(huì)發(fā)生沖突。對(duì)接收/發(fā)送緩沖寄存器sbuf的操作,必須通過累加器a進(jìn)行。指令 mov sbuf,a 啟動(dòng)一次數(shù)據(jù)發(fā)送指令 mov a,sbuf 完成一次數(shù)據(jù)接收,sbuf可再接收下一個(gè)數(shù)據(jù)接收/發(fā)送數(shù)據(jù),無論是否采用中斷方式工作,每接收/發(fā)送一個(gè)

6、數(shù)據(jù)都必須用指令對(duì) ri/ti清0,以備下一次收/發(fā)。v串行通信控制寄存器(scon) 串行通信控制寄存器scon的字節(jié)地址為98h,位地址為98h-9fh??梢詫?duì)串行接口的工作方式、接收發(fā)送和串行接口的工作狀態(tài)標(biāo)志進(jìn)行設(shè)置。其格式如下: 位地址 9fh 9eh9dh9ch 9bh9ah 99h98h位符號(hào) sm0 sm1sm2rentb8rb8tiri1) sm0 、sm1串行口工作方式選擇位 其狀態(tài)組合和對(duì)應(yīng)工作方式為: sm0 sm1 工作方式 0 0 方式0 0 1 方式12) m2多機(jī)通信控制位,主要用于方式2和方式3中 在接收狀態(tài)時(shí),當(dāng)串行口工作于方式2或3,以及sm2=1時(shí),只有

7、當(dāng)接收到的第9位數(shù)據(jù)(rb8)為1時(shí),才把接收到的前8位數(shù)據(jù)送入sbuf,且置位ri發(fā)出中斷申請(qǐng),否則會(huì)將接受到的數(shù)據(jù)放棄。當(dāng)sm2=0時(shí),就不管第9位數(shù)據(jù)是0還是1,都將前8位數(shù)據(jù)送入sbuf,并發(fā)出中斷申請(qǐng)。在方式0時(shí),sm2必須為0。在方式1,若sm2=1,只有接收到有效的停止位時(shí),才能置位ri。 3) ren允許串行接收控制位 ren0 禁止接收數(shù)據(jù) ren1 允許接收數(shù)據(jù)4) tb8發(fā)送數(shù)據(jù)第9位。 在方式2和方式3時(shí),tb8為所要發(fā)送的第9位數(shù)據(jù) 在多機(jī)通信中,以tb8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù): tb8=0為數(shù)據(jù) tb8=1為地址 也可用作數(shù)據(jù)的奇偶校驗(yàn)位。該位由軟件置

8、位或復(fù)位。 5) rb8接收數(shù)據(jù)第9位 在方式2、3時(shí),rb8是接收的第9位數(shù)據(jù)??勺鳛槠媾夹r?yàn)位或 地址幀/數(shù)據(jù)幀的標(biāo)志 在方式1時(shí),若sm2=0,rb8是接收的停止位 在方式0時(shí),不使用rb86) ti發(fā)送中斷標(biāo)志位 在方式0時(shí),發(fā)送完第8位數(shù)據(jù)后,該位由硬件置位。 在其它方式下,于發(fā)送停止位之前,由硬件置位,并向cpu申請(qǐng)中斷 cpu在響應(yīng)中斷后,必須用軟件清零。 在非中斷方式,ti也可供查詢使用。 7) ri接收中斷標(biāo)志位 在方式0時(shí),接收完第8位數(shù)據(jù)后,該位由硬件置位。 在其它方式下,于接收到停止位之前,該位由硬件置位,并向cpu申請(qǐng)中斷 在cpu響應(yīng)中斷后,也必須用軟件清零 在非中

9、斷方式,ri也可供查詢使用。 v3電源控制寄存器電源控制寄存器pcon的字節(jié)地址為87h,沒有位尋址功能。主要實(shí)現(xiàn)對(duì)單片機(jī)電源的控制管理,但pcon的最高位smod是串行口波特率系數(shù)控制位。其格式如下:位序d7d6d5d4d3d2d1d0位符號(hào)smod/gf1gf0pdidl)smod波特率倍增位在串行口工作方式1、2、3中,是波特率加倍位: smod=1:波特率加倍smod=0:表示波特率不加倍。)gf1,gf0用戶可自行定義的通用標(biāo)志位 )pd掉電方式控制位 pd=0:常規(guī)工作方式 pd=1:進(jìn)入掉電方式 cpu處于掉電方式時(shí),振蕩器停振,片內(nèi)ram和srf的值保持不變,p0p3口維持原狀

10、,程序停止。只有復(fù)位能退出掉電方式。 4)idl待機(jī)方式(空閑方式)控制位。 idl=0:常規(guī)工作方式 idl=1:進(jìn)入待機(jī)方式 cpu處于待機(jī)方式時(shí),振蕩器繼續(xù)振蕩,中斷、定時(shí)器、串口功能繼續(xù)有效,片內(nèi)ram和srf保持不變,cpu狀態(tài)保持,p0p3口維持原狀,程序停頓。中斷、復(fù)位都能退出待機(jī)狀態(tài)。 串行通信工作方式 串行口的工作方式由sm0和sm1確定,編碼和功能如下表所示:sm0 sm1方式功能說明波特率0 0方式0移位寄存器方式fosc/120 1方式18位uart可變1 0方式29位uartfosc/64 或者fosc/321 1方式39位uart可變注:方式0和方式2的波特率是固定

11、的,而方式1和方式3的波特率是可變的,由t1的溢出率決定。v工作方式串行口的工作方式0為移位寄存器方式,可外接移位寄存器以擴(kuò)展i/o口,也可以外接同步輸入/輸出設(shè)備。一幀信息有8位數(shù)據(jù),低位在前,高位在后,沒有起始位和停止位,數(shù)據(jù)從rxd輸入或輸出。txd用來輸出同步脈沖。波特率固定為fosc/12。數(shù)據(jù)格式如下:d0d1d2d3d4d5d6d7v1)發(fā)送數(shù)據(jù)將數(shù)據(jù)寫入發(fā)送緩沖器sbuf后,txd端輸出移位脈沖,串行口把sbuf中的數(shù)據(jù)依次由低到高以fosc/12的波特率從rxd端輸出,一幀數(shù)據(jù)發(fā)送完畢后硬件置發(fā)送中斷標(biāo)志位ti為1。若要再次發(fā)送數(shù)據(jù),必須用指令將ti清零。v)接收數(shù)據(jù)在ri=

12、0的條件下,用指令置ren=1即可開始串行接收。txd端輸出移位脈沖,數(shù)據(jù)依次由低到高以fosc/12的波特率經(jīng)rxd端接收到sbuf中,一幀數(shù)據(jù)接收完成后硬件置接收中斷標(biāo)志位ri為1。若要再次接收一幀數(shù)據(jù),應(yīng)該用指令mov a,sbuf將上一幀數(shù)據(jù)取走,并用指令將ri清零。 v)方式0工作時(shí),多用查詢方式編程:發(fā)送: mov sbuf,a jnb ti,$ clr ti 接收: jnb ri,$clr rimov a, sbuf注)復(fù)位時(shí),scon被清零,工作方式的缺省值為方式0。接收前,務(wù)必先置位ren=1方允許接收數(shù)據(jù)。v工作方式串行接口工作方式1為8位異步通信接口,傳送一幀數(shù)據(jù)有1o位

13、,1位起始位(低電平信號(hào)),8位數(shù)據(jù)位(先低位后高位),1位停止位(高電平信號(hào))。波特率可變,由定時(shí)器/計(jì)數(shù)器t1的溢出率和smod(pcon.7)決定。其格式如下:起始位 數(shù)據(jù)位停止位 d0 d1 d2 d3 d4d5 d6d7 1v1)發(fā)送數(shù)據(jù)將數(shù)據(jù)寫入發(fā)送緩沖器sbuf后,在串行口由硬件自動(dòng)加入起始位和停止位來構(gòu)成完整的字符幀,并在移位脈沖的作用下將其通過txd端向外串行發(fā)送,一幀數(shù)據(jù)發(fā)送完畢后硬件自動(dòng)置ti=1。再次發(fā)送數(shù)據(jù)前,用指令將ti清零。 v)接收數(shù)據(jù)在ren=1的條件下,串行口采樣rxd端,當(dāng)采樣到從1向0的狀態(tài)跳變時(shí),就認(rèn)定為已接收到起始位。隨后在移位脈沖的控制下,數(shù)據(jù)從r

14、xd端輸入。在方式1接收數(shù)據(jù)時(shí),必須同時(shí)滿足以下兩個(gè)條件:ri=0,sm2=0或接收到的停止位=1。若有任一條件不滿足,則所接收的數(shù)據(jù)幀就會(huì)丟失。在滿足上述接收條件時(shí),接收到的8位數(shù)據(jù)位進(jìn)入接收緩沖器sbuf,停止位送入rb8,并置中斷標(biāo)志位ri=1。再次接收數(shù)據(jù)前,需用指令將ri清零。 v工作方式串行接口工作方式2為9位異步通信接口,傳送一幀數(shù)據(jù)有11位,1位起始位(低電平信號(hào)),8位數(shù)據(jù)位(先低位后高位),1位可編程位,1位停止位(高電平信號(hào))。其格式如下: 起始位 數(shù)據(jù)位停止位 d0 d1 d2 d3 d4 d5 d6 d7 tb8 1v1)發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)前,由指令將tb8置位或清零,

15、將數(shù)據(jù)寫入發(fā)送緩沖器sbuf后,在串行口由硬件自動(dòng)加入起始位和停止位來構(gòu)成完整的字符幀,并在移位脈沖的作用下將其通過txd端向外串行發(fā)送,發(fā)送完畢后硬件自動(dòng)置ti=1。在工作方式2下,波特率只有二種:smod0時(shí),波特率為f0sc/64,smod1時(shí),波特率為f0sc/32。 v)接收數(shù)據(jù)在ren=1的條件下,串行口采樣rxd端,當(dāng)檢測(cè)到有從1向0的狀態(tài)跳變,便在移位脈沖的控制下,從rxd端接收數(shù)據(jù)。在方式2的接收中,也必須同時(shí)滿足以下兩個(gè)條件:ri=0,sm2=0或接收到的第9位數(shù)據(jù)位為1。若有任一條件不滿足,則所接收的數(shù)據(jù)幀就會(huì)丟失。在滿足上述接收條件時(shí),接收到的8位數(shù)據(jù)位進(jìn)入接收緩沖器s

16、buf中,第9位數(shù)據(jù)位送入rb8中,并置ri=1。再次接收數(shù)據(jù)時(shí),需用指令將ri清零。 v)工作方式串行接口工作方式3也是9位異步通信接口,傳送一幀數(shù)據(jù)有11位,1位起始位(低電平信號(hào)),8位數(shù)據(jù)位(先低位后高位),1位可編程位,1位停止位(高電平信號(hào))。但波特率與工作方式1相同,由定時(shí)器/計(jì)數(shù)器t1的溢出率和smod(pcon.7)決定。也就是說方式3的工作機(jī)制與方式2相同,波特率與方式1相同,它是方式1和方式2的綜合運(yùn)用。 多機(jī)通信mcs-51單片機(jī)工作在串行方式2、3時(shí),具有多機(jī)通信功能,可以實(shí)現(xiàn)一臺(tái)主機(jī)與多臺(tái)從機(jī)的信息交流。通信只在主從機(jī)之間進(jìn)行,而從機(jī)與從機(jī)之間不可以直接通信。下圖為

17、8051單片機(jī)的主從式多機(jī)通訊系統(tǒng)。 rxdtxd主機(jī)8051rxd txd 8051 0#從機(jī)rxd txd 80511#從機(jī)rxd txd 8051 n#從機(jī)v主從多機(jī)通信的過程如下: )使所有的從機(jī)工作在方式2或方式3,且sm2位置1,ren=1,以便接收主機(jī)發(fā)來的地址。)主機(jī)發(fā)出要尋址的從機(jī)的一幀地址信息,其中包括8位需要與之通信的從機(jī)地址,第9位tb8=1。)所有從機(jī)接收到地址幀后,置ri=1。)各從機(jī)相應(yīng)中斷,進(jìn)入中斷服務(wù)程序,進(jìn)行地址比較。對(duì)于地址相同的從機(jī),使sm20,準(zhǔn)備接收主機(jī)隨后發(fā)來的數(shù)據(jù)信息;對(duì)于地址不符合的從機(jī),仍保持sm2=1的狀態(tài),對(duì)主機(jī)隨后發(fā)來的數(shù)據(jù)不予理睬,直

18、至發(fā)送新的地址幀。)主機(jī)給已被尋址的從機(jī)發(fā)送控制指令和數(shù)據(jù)(數(shù)據(jù)幀的第9位為0)實(shí)現(xiàn)主從通信。 串行通信波特率設(shè)置v四種工作方式下的波特率計(jì)算四種工作方式下的波特率計(jì)算)工作方式)工作方式o o:波特率固定不變,它與系統(tǒng)的振蕩頻率fosc的大小有關(guān),其值為fosc/12。)工作方式)工作方式1 1和方式和方式3 3:波特率是可變的,波特率=2smod/32定時(shí)器t1的溢出率)工作方式)工作方式2 2:波特率有兩種固定值。)當(dāng))當(dāng)sm0d=1sm0d=1時(shí)時(shí),波特率=2sm0d/64fosc=fosc/32)當(dāng))當(dāng)sm0d=0sm0d=0時(shí)時(shí),波特率=2sm0d/64fosc=fosc/64v定

19、時(shí)器定時(shí)器t1t1的溢出率計(jì)算的溢出率計(jì)算定時(shí)器的溢出率是指在1秒鐘內(nèi)產(chǎn)生溢出的次數(shù)。定時(shí)器的溢出率與定時(shí)器的工作模式有關(guān),可以改變單片機(jī)內(nèi)部的特殊功能寄存器tm0d中的t1方式字段中的m1、m0二位,即tm0d.5和tmod.4位,選擇定時(shí)器工作的四種工作模式中的一種進(jìn)行工作。在串行口通信中,一般都使定時(shí)器t1工作在模式2。在工作方式2時(shí),定時(shí)器t1的溢出一次所需要的時(shí)間為: (28n)12時(shí)鐘周期時(shí)鐘周期=(28n)12/fosc(秒秒) 于是,定時(shí)器每秒所溢出的次數(shù)為: 定時(shí)器定時(shí)器t1t1的溢出率的溢出率=fosc/(12=fosc/(12(28n)(28n)。 式中的n為時(shí)間常數(shù),即

20、th1的預(yù)置初值。 串行通信應(yīng)用舉例 用mcs-51單片機(jī)的串行接口,可以擴(kuò)展單片機(jī)的輸入輸出端口,可以實(shí)現(xiàn)單片機(jī)之間的串行異步通信,也可以在多個(gè)單片機(jī)之間進(jìn)行串行異步通信,還可以在單片機(jī)和pc機(jī)之間進(jìn)行串行通信。應(yīng)用串行接口可以進(jìn)行數(shù)據(jù)通信,也可以進(jìn)行實(shí)時(shí)控制和信息檢測(cè)。v1串行口的編程串行口的編程 串行口需初始化后,才能完成數(shù)據(jù)的輸入、輸出。初始化過程如下: )按選定串行口的工作方式設(shè)定scon的sm0、sm1;)對(duì)于工作方式2或3,應(yīng)根據(jù)需要在tb8中寫入待發(fā)送的第9位數(shù)據(jù);)若選定的工作方式不是模式0,還需設(shè)定接收/發(fā)送的波特率;)設(shè)定smod的狀態(tài),以控制波特率是否加倍;)若選定工作

21、方式1或3,則應(yīng)對(duì)定時(shí)器t1進(jìn)行初始化操作,以設(shè)定其溢出率。v工作方式工作方式0 0應(yīng)用舉例應(yīng)用舉例【例】電路如圖所示,試編制程序輸入k1k8狀態(tài)數(shù)據(jù),并存入內(nèi)ram40h。 4014 是一個(gè)并入串出轉(zhuǎn)換芯片,q端為串行數(shù)據(jù)輸出端,clk為時(shí)鐘脈沖輸入端,p/s為操作控制端,0:鎖存并行輸入數(shù)據(jù),1:允許串行移位操作。4041k1 k2 k3 k4 k5 k6 k7 k8p1 p2 p3 p4 p5 p6 p7 p8q8clkrxdtxdp1.080c51參考程序如下: kin: mov scon,#00h ;串行口方式0 clr es ;禁止串行中斷 clr p1.0 ;鎖存并行輸入數(shù)據(jù) s

22、etb p1.0 ;允許串行移位操作 setb ren ;允許并啟動(dòng)接收(txd發(fā)送移位脈沖) jnb ri,$ ;等待接收完畢 mov 40h,sbuf ;存入k1k8狀態(tài)數(shù)據(jù) sjmp $ v工作方式工作方式1 1應(yīng)用舉例應(yīng)用舉例 【例】設(shè)甲乙兩機(jī)以串行方式1進(jìn)行數(shù)據(jù)傳送,fosc=11.0592mhz,波特率為1200b/s。甲機(jī)發(fā)送的16個(gè)字節(jié)數(shù)據(jù)存在內(nèi)ram40h4fh單元中,乙機(jī)接收后存在內(nèi)ram50h為首地址的區(qū)域中。 串行方式1波特率取決于t1溢出率,設(shè)smod=0,t1工作在方式2。t1初值=256-11059200/(12*32*1200)=232=e8h甲機(jī)發(fā)送子程序 t

23、xda: mov tmod,#20h ;置t1定時(shí)器工作方式2mov tl1,#0e8h ;置t1計(jì)數(shù)初值mov th1,#0e8h ;置t1計(jì)數(shù)重裝值clr et1;禁止t1中斷setb tr1;t1啟動(dòng)mov scon,#40h ;置串行方式1,禁止接收mov pcon,#00h ;置smod=0(smod不能位操作) clr es ;禁止串行中斷mov r0,#40h;置發(fā)送數(shù)據(jù)區(qū)首地址mov r2,#16 ;置發(fā)送數(shù)據(jù)長(zhǎng)度trsa:mov a,r0 ;讀一個(gè)數(shù)據(jù)mov sbuf,a ;發(fā)送jnb ti,$;等待一幀數(shù)據(jù)發(fā)送完畢clr ti;清發(fā)送中斷標(biāo)志inc r0;指向下一字節(jié)單元d

24、jnz r2,trsa;判16個(gè)數(shù)據(jù)發(fā)完否?未完繼續(xù)ret 乙機(jī)接收子程序rxdb: mov tmod,#20h;置t1定時(shí)器工作方式2mov tl1,#0e8h;置t1計(jì)數(shù)初值mov th1,#0e8h;置t1計(jì)數(shù)重裝值clr et1;禁止t1中斷setb tr1;t1啟動(dòng)mov scon,#40h;置串行方式1,禁止接收mov pcon,#00h;置smod=0(smod不能位操作)clr es;禁止串行中斷mov r0,#50h ;置接收數(shù)據(jù)區(qū)首地址mov r2,#16 ;置接收數(shù)據(jù)長(zhǎng)度setb ren;啟動(dòng)接收rdsb: jnb ri,$ ;等待一幀數(shù)據(jù)接收完畢clr ri ;清接收中

25、斷標(biāo)志mov a,sbuf ;讀接收數(shù)據(jù)mov r0,a ;存接收數(shù)據(jù)inc r0 ;指向下一數(shù)據(jù)存儲(chǔ)單元djnz r2,rdsb ;判16個(gè)數(shù)據(jù)接收完否?未完繼續(xù)ret v工作方式工作方式2 2應(yīng)用舉例應(yīng)用舉例 【例】設(shè)計(jì)一個(gè)串行方式2收發(fā)程序(smod=1,波特率固定為fosc/32),甲機(jī)串行發(fā)送片內(nèi)ram50h-5fh中的數(shù)據(jù),第9位數(shù)據(jù)作為奇偶校驗(yàn)位,接到接收方核對(duì)正確的回復(fù)信號(hào)(用ffh表示)后,再發(fā)送下一字節(jié)數(shù)據(jù),否則再重發(fā)一遍。乙機(jī)接收數(shù)據(jù),將其存在首址為40h的內(nèi)ram中,并核對(duì)奇偶校驗(yàn)位,核對(duì)正確,發(fā)出回復(fù)信號(hào)ffh;發(fā)現(xiàn)錯(cuò)誤,發(fā)出回復(fù)信號(hào)00h,并等待重新接收。甲機(jī)發(fā)送參

26、考程序如下trs2:mov scon,#80h ;置串行方式2,禁止接收mov pcon,#80h ;置smod=1mov r0,#50h ;置發(fā)送數(shù)據(jù)區(qū)首址trlp:mov a,r0 ;讀數(shù)據(jù)mov c,psw.0 ;奇偶標(biāo)志送tb8mov tb8,cmov sbuf,a ;啟動(dòng)發(fā)送jnb ti,$ ;等待一幀數(shù)據(jù)發(fā)送完畢clr ti ;清發(fā)送中斷標(biāo)志setb ren ;允許接收clr ri ;清接收中斷標(biāo)志jnb ri,$ ;等待接收回復(fù)信號(hào)mov a,sbuf ;讀回復(fù)信號(hào)cpl a ;回復(fù)信號(hào)取反jnz trlp ;非全0(回復(fù)信號(hào)ffh,錯(cuò)誤),轉(zhuǎn)重發(fā)inc r0 ;全0(回復(fù)信號(hào)=

27、ffh,正確),指向下一數(shù)據(jù)存儲(chǔ)單元cjne r0,#60h,trlp ;判16個(gè)數(shù)據(jù)發(fā)送完否?未完繼續(xù)ret乙機(jī)接收參考程序如下rxd2:mov scon,#80h;置串行方式2,禁止接收mov pcon,#80h;置smod=1mov r0,#40h ;置接收數(shù)據(jù)區(qū)首址setb ren ;啟動(dòng)接收rwap:jnb ri,$ ;等待一幀數(shù)據(jù)接收完畢clr ri ;清接收中斷標(biāo)志mov a,sbuf ;讀接收數(shù)據(jù),并在psw中產(chǎn)生接收數(shù)據(jù)的奇偶值jb psw.0,one ;p=1,轉(zhuǎn)另判jb rb8,err ;p=0,rb8=1,接收有錯(cuò);p=0,rb8=0,接收正確,繼續(xù)接收rlop: mo

28、v r0,a ;存接收數(shù)據(jù)inc r0 ;指向下一數(shù)據(jù)存儲(chǔ)單元rit:mov a,#0ffh ;置回復(fù)信號(hào)正確fdbk:mov sbuf,a ;發(fā)送回復(fù)信號(hào)cjne r0,#50h,rwap ;判16個(gè)數(shù)據(jù)接收完否?未完繼續(xù)clr ren ;16個(gè)數(shù)據(jù)正確接收完畢,禁止接收ret one:jnb rb8,err ;p=1,rb8=0,接收有錯(cuò)sjmp rit ;p=1,rb8=1,接收正確,繼續(xù)接收err:clr a ;接收有錯(cuò),置回復(fù)信號(hào)錯(cuò)誤標(biāo)志sjmp fdbk ;轉(zhuǎn)發(fā)送回復(fù)信號(hào)v工作方式工作方式3 3應(yīng)用舉例應(yīng)用舉例 【例】某雙機(jī)系統(tǒng),甲乙兩機(jī)的時(shí)鐘頻率為11.0592mhz,波特率設(shè)定

29、為9600bps,試編寫程序?qū)⒓讬C(jī)片外ram50h70h的數(shù)據(jù)塊通過串行口傳送到乙機(jī)的片內(nèi)ram 50h70h單元中,采用奇偶校驗(yàn)檢驗(yàn)差錯(cuò)。(1) 定時(shí)器/計(jì)數(shù)器t1的初始化,即對(duì)和t1相關(guān)的特殊功能寄存器th1、tl1、tmod、tcon進(jìn)行設(shè)定。對(duì)th1、tl1的設(shè)定即為對(duì)計(jì)數(shù)初值的確定。本題中假設(shè)smod=1,則由公式:波特率=2somdt1的溢出率/32可得初值=250=fah(2) 串行口的初始化,即對(duì)和串行口相關(guān)的寄存器scon、pcon進(jìn)行設(shè)定。串行數(shù)據(jù)的發(fā)送內(nèi)容包括數(shù)據(jù)和奇偶校驗(yàn)位兩部分內(nèi)容,若將串行口工作方式設(shè)定為方式3,允許接收。則scon=11010000b=0d0h,p

30、con=80h。(3) 甲機(jī):將片外ram50h70h的內(nèi)容逐一向乙機(jī)發(fā)送,發(fā)送前奇偶校驗(yàn)位放在tb8中。一幀發(fā)送完畢后,如收到乙機(jī)回送“數(shù)據(jù)發(fā)送正確(00h)”的應(yīng)答信號(hào),則可以發(fā)送下一個(gè)數(shù)據(jù);若是“數(shù)據(jù)不正確(ffh)”的應(yīng)答信號(hào),則重新發(fā)送原來的數(shù)據(jù),直至發(fā)送正確為止。(4)乙機(jī):接收甲機(jī)發(fā)送的數(shù)據(jù)并逐一寫入片內(nèi)ram50h70h。每接收一幀信息后進(jìn)行奇偶校驗(yàn),并與接收到的第9位數(shù)據(jù)rb8對(duì)比;對(duì)比正確則向甲機(jī)回復(fù)“數(shù)據(jù)正確(00h)”的應(yīng)答信號(hào),否則回復(fù)“數(shù)據(jù)不正確(ffh)”的應(yīng)答信號(hào),直至接收完所有數(shù)據(jù)。甲機(jī)發(fā)送參考程序如下org 0100hmov tmod,#20h ;設(shè)定時(shí)器t

31、1工作在方式2mov th1,#0fah ;設(shè)定時(shí)器t1自動(dòng)重裝載值mov tl1,#0fah ;設(shè)定時(shí)器t1計(jì)數(shù)初值mov pcon,#80h ;設(shè)smod=1mov scon,#0d0h ;串口設(shè)定為方式3,允許接收setb tr1 ;啟動(dòng)定時(shí)器t1mov r1,#50h ;設(shè)數(shù)據(jù)塊地址指針mov r2,#20h ;設(shè)數(shù)據(jù)塊長(zhǎng)度ex723_lp1:movx a,r1 ;取數(shù)據(jù)mov c,pmov tb8,c ;奇偶校驗(yàn)位送入tb8mov sbuf,a ;啟動(dòng)發(fā)送jnb ti,$ ;等待發(fā)送clr ti ;一幀發(fā)送完畢,清零tijnb ri,$ ;等待接收clr ri ;一幀接收完畢,清零r

32、imov a,sbuf ;接收數(shù)據(jù)送入a中jnz ex723_lp1 ;不為“00h”,重發(fā)inc r1 ;修改地址指針djnz r2,ex723_lp1 ;循環(huán)發(fā)送ret乙機(jī)接收主程序如下mov tmod,#20h ;設(shè)定時(shí)器t1工作在方式2mov th1,#0fah ;設(shè)定時(shí)器t1自動(dòng)重裝載值mov tl1,#0fah ;設(shè)定時(shí)器t1計(jì)數(shù)初值mov pcon,#80h ;設(shè)smod=1mov scon,#0d0h ;串口設(shè)定為方式3,允許接收setb tr1 ;啟動(dòng)定時(shí)器t1mov r1,#50h ;設(shè)數(shù)據(jù)塊地址指針mov r2,#20h ;設(shè)數(shù)據(jù)塊長(zhǎng)度ex723_lp2: jbc ri,

33、reciv ;等待接收ajmp ex723_lp2reciv:mov a,sbuf ;讀入接收數(shù)據(jù)jb psw.0,lz ;奇偶位為1,轉(zhuǎn)移 jb rb8,err ;psw.00,rb81,出錯(cuò)sjmp rig ;正確,轉(zhuǎn)riglz:jnb rb8,err ;psw.01,rb80,出錯(cuò)rig:mov r1,a ;存放數(shù)據(jù)mov sbuf,#00h ;發(fā)送數(shù)據(jù)正確標(biāo)志jnb ti,$ ;等待發(fā)送clr ti ;發(fā)送完畢,清tiinc r1djnz r2,ex723_lp2;繼續(xù)接收ret ;返回err:mov sbuf,#0ffh ;發(fā)送數(shù)據(jù)錯(cuò)誤標(biāo)志jnb ti,$ ;等待發(fā)送clr ti ;發(fā)送完畢,清tiret ;返回v主從式多機(jī)通信應(yīng)用舉例主從式多機(jī)通信應(yīng)用舉例 (1)主機(jī)向02號(hào)從機(jī)發(fā)送50h一5fh單元內(nèi)的數(shù)據(jù),串行工作方式2。 org 2000h main:mov sc

溫馨提示

  • 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)論