單片機(jī)串行口_第1頁(yè)
單片機(jī)串行口_第2頁(yè)
單片機(jī)串行口_第3頁(yè)
單片機(jī)串行口_第4頁(yè)
單片機(jī)串行口_第5頁(yè)
已閱讀5頁(yè),還剩83頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口王麗王麗2016-2017(1)2016-2017(1)第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口南南航航金金城城學(xué)學(xué)院院自自動(dòng)動(dòng)化化系系第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口南南航航金金城城學(xué)學(xué)院院自自動(dòng)動(dòng)化化系系教學(xué)內(nèi)容教學(xué)內(nèi)容7.1 串行通信的概念串行通信的概念7.2 串行口結(jié)構(gòu)串行口結(jié)構(gòu)7.3 串行口的通信工作方式串行口的通信工作方式7.4 串行通信接口標(biāo)準(zhǔn)串行通信接口標(biāo)準(zhǔn)第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口

2、l熟悉熟悉89S5189S51串行接口的基本結(jié)構(gòu)和工作原理串行接口的基本結(jié)構(gòu)和工作原理l熟練掌握串行接口控制寄存器熟練掌握串行接口控制寄存器SCONSCON的含義和功能的含義和功能l掌握串行口的掌握串行口的4 4種工作方式及其波特率的計(jì)算種工作方式及其波特率的計(jì)算l熟練掌握雙機(jī)通信的收發(fā)設(shè)計(jì)程序熟練掌握雙機(jī)通信的收發(fā)設(shè)計(jì)程序教學(xué)目標(biāo)教學(xué)目標(biāo)南南航航金金城城學(xué)學(xué)院院自自動(dòng)動(dòng)化化系系第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口通信通信7.1串行通信的概念在實(shí)際工作中,在實(shí)際工作中,CPUCPU與外設(shè)之間常常要進(jìn)行信息與外設(shè)之間常常要進(jìn)行信息交換,所有信息交換被稱(chēng)為通信

3、。交換,所有信息交換被稱(chēng)為通信。通信方式:并行通信和串行通信;通信方式:并行通信和串行通信;第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口一、并行通信與串行通信一、并行通信與串行通信 1 1、并行通信:多位數(shù)據(jù)同時(shí)傳送,需要信號(hào)通道多、并行通信:多位數(shù)據(jù)同時(shí)傳送,需要信號(hào)通道多控制簡(jiǎn)單,傳輸速度快,傳輸線較多,短距離傳送7.1串行通信的概念第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口一、并行通信與串行通信一、并行通信與串行通信 2 2、串行通信:低速,需要信號(hào)通道少,長(zhǎng)距離通信、串行通信:低速,需要信號(hào)通道少,長(zhǎng)距離通信傳輸線少,可利用

4、電話網(wǎng),但傳送控制復(fù)雜。 7.1串行通信的概念第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口 單工:(或單工)配置: 數(shù)據(jù)只有一個(gè)方向傳送; m廣播、遙控、遙測(cè)、無(wú)線尋呼等屬于單工通信。 7.1.1串行通信的傳輸方向串行通信的傳輸方向串行通信的數(shù)據(jù)傳輸方式有三種:串行通信的數(shù)據(jù)傳輸方式有三種: 單工、半雙工和全雙工單工、半雙工和全雙工 第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口半雙向(或半雙工)配置:允許數(shù)據(jù)向兩個(gè)方向中的任一方向傳送,但每次只能有一個(gè)站點(diǎn)發(fā)送;例如,使用同一載波頻率的對(duì)講機(jī)、收發(fā)報(bào)機(jī)等都是半雙工的通信方式。7.1.1

5、串行通信的傳輸方向串行通信的傳輸方向串行通信的數(shù)據(jù)傳輸方式有三種:串行通信的數(shù)據(jù)傳輸方式有三種: 單工、半雙工和全雙工單工、半雙工和全雙工 第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口7.1.1串行通信的傳輸方向串行通信的傳輸方向串行通信的數(shù)據(jù)傳輸方式有三種:串行通信的數(shù)據(jù)傳輸方式有三種: 單工、半雙工和全雙工單工、半雙工和全雙工 全雙向(全雙工)配置全雙向(全雙工)配置同一時(shí)間可以雙向傳送數(shù)據(jù)。同一時(shí)間可以雙向傳送數(shù)據(jù)。等效于一對(duì)單向配置,它要求等效于一對(duì)單向配置,它要求兩端的通信設(shè)備都具有完整和兩端的通信設(shè)備都具有完整和獨(dú)立的發(fā)送和接受能力。獨(dú)立的發(fā)送和接受能

6、力。普通電話、手機(jī)都是最常用的普通電話、手機(jī)都是最常用的全雙工通信方式,計(jì)算機(jī)之間全雙工通信方式,計(jì)算機(jī)之間的高速數(shù)據(jù)通信也是這種方式。的高速數(shù)據(jù)通信也是這種方式。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口串行通信的過(guò)程及通信協(xié)議串行通信的過(guò)程及通信協(xié)議1、串并轉(zhuǎn)換與設(shè)備同步 要成功通信必須解決兩個(gè)問(wèn)題:(1)串并轉(zhuǎn)換 將計(jì)算機(jī)內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)將計(jì)算機(jī)內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),將其通過(guò)一換成串行數(shù)據(jù),將其通過(guò)一根通信線傳送;根通信線傳送;并將接收的串行數(shù)據(jù)再轉(zhuǎn)換并將接收的串行數(shù)據(jù)再轉(zhuǎn)換成并行數(shù)據(jù)送到計(jì)算機(jī)中。成并行數(shù)據(jù)送到計(jì)算機(jī)中。第第7 7章章 AT89S

7、51 AT89S51單片機(jī)的串行口單片機(jī)的串行口(2 2)設(shè)備同步)設(shè)備同步m進(jìn)行串行通信的兩臺(tái)設(shè)備必須同步工作才能有效地檢測(cè)通信線路上的信號(hào)變化,從而采樣傳送數(shù)據(jù)脈沖。m設(shè)備同步對(duì)通信雙方有兩個(gè)共同要求:一是統(tǒng)一的編碼方法;二是相同的傳送速率。m采用統(tǒng)一的編碼方法確定了一個(gè)字符二進(jìn)制表示值的位發(fā)送順序和位串長(zhǎng)度,還有統(tǒng)一的邏輯電平規(guī)定。m通信雙方只有產(chǎn)生相同的傳送速率,才能確保設(shè)備同步,即雙方采用頻率相同的時(shí)鐘。波特率(波特率(Baud rateBaud rate)m即數(shù)據(jù)傳送速率,每秒鐘傳送二進(jìn)制代碼的位數(shù),單位是b/s。m波特率對(duì)于CPU與外界的通信是很重要的。m計(jì)算方法: 假設(shè)數(shù)據(jù)傳送

8、速率是120字符/s,而每個(gè)字符格式包含(1個(gè)起始位、1個(gè)終止位、8個(gè)數(shù)據(jù)位)。傳送的波特率為:10b字符120字符s1200bsm異步通信的傳送速率通常在5019200b/s之間。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口2 2、串行通信協(xié)議、串行通信協(xié)議m通信協(xié)議是對(duì)數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等。m通信雙方必須遵守統(tǒng)一的通信協(xié)議。串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種。m在此只討論異步串行通信協(xié)議。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口收、發(fā)設(shè)備使用收、發(fā)設(shè)備使用各自時(shí)鐘各自時(shí)鐘。 異步通信異步通信:

9、傳送的數(shù)據(jù)可以是傳送的數(shù)據(jù)可以是字符字符或一個(gè)或一個(gè)字節(jié)字節(jié)數(shù)據(jù),以數(shù)據(jù),以幀幀的形的形式一幀一幀傳送。式一幀一幀傳送。通信速度低,邏輯結(jié)構(gòu)簡(jiǎn)單。通信速度低,邏輯結(jié)構(gòu)簡(jiǎn)單。 7.1.2 異步通信的概念第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口異步通信方式異步通信方式01停停止止位位起起始始位位低位低位高位高位7位數(shù)據(jù)位位數(shù)據(jù)位奇偶奇偶校驗(yàn)校驗(yàn)停停止止位位第第N個(gè)字符個(gè)字符第第N-1個(gè)字符個(gè)字符m以字符構(gòu)成的幀為單位,字符間是異步的,字符內(nèi)各位是同步的第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口1、緊鄰的、緊鄰的2、有空閑位、有空閑位

10、異步通信方式異步通信方式第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口在幀格式中,一個(gè)字符由四個(gè)部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位。m起始為(0),然后是58位數(shù)據(jù)(規(guī)定低位在前,高位在后),然后奇偶校驗(yàn)位(可省略),最后停止位(1)。注:奇偶校驗(yàn)也可用這一位(1/0)確定所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。 停止位收到停止位后,上一字符已傳送完畢,同時(shí),為接收下一個(gè)字符做好準(zhǔn)備。幀幀第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m起始位(0)信號(hào)只占用一位,用來(lái)通知接收設(shè)備一個(gè)待接收的字符開(kāi)始到達(dá)。線路上在不傳送字符時(shí)應(yīng)保持為1

11、。接收端不斷檢測(cè)線路的狀態(tài),若連續(xù)為1以后又測(cè)到一個(gè)0,就知道發(fā)來(lái)一個(gè)新字符, 應(yīng)馬上準(zhǔn)備接收。字符的起始位還被用作同步接收端的時(shí)鐘,以保證以后的接收能正確進(jìn)行。m起始位后面緊接著是數(shù)據(jù)位,它可以是5位(D0-D4)、6位、7位或8位(D0-D7)。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m奇偶校驗(yàn)(D8)只占一位,但這一位也可省去。也可用這一位(1/0)來(lái)確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。m停止位:表征一個(gè)字符結(jié)束,用高電平(邏輯1)。停止位可以是1位、1.5位或2位。收到停止位后,表示上一字符已傳送完畢,同時(shí),為接收下一個(gè)字符做好準(zhǔn)備(等

12、待再接收到0,就是新的字符的起始位)。若停止位以后不再緊接著傳送下一個(gè)字符,則將線路電平保持為高電平(邏輯1)。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口二、異步通信與同步通信二、異步通信與同步通信 2 2、同步通信:、同步通信:發(fā)送方時(shí)鐘與接收方時(shí)鐘同步,既保持發(fā)送方時(shí)鐘與接收方時(shí)鐘同步,既保持 位同步,也保持字符同步。位同步,也保持字符同步。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m在數(shù)據(jù)開(kāi)始傳送前用同步字符來(lái)指示(常約定在數(shù)據(jù)開(kāi)始傳送前用同步字符來(lái)指示(常約定1 12 2個(gè)),并由個(gè)),并由時(shí)鐘來(lái)實(shí)現(xiàn)發(fā)送端和接收端同步,即

13、檢測(cè)到規(guī)定的同步字符后,時(shí)鐘來(lái)實(shí)現(xiàn)發(fā)送端和接收端同步,即檢測(cè)到規(guī)定的同步字符后,就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。m同步傳送時(shí),字符與字符之間沒(méi)有間隙,沒(méi)有起始位和停止位,同步傳送時(shí),字符與字符之間沒(méi)有間隙,沒(méi)有起始位和停止位,僅在數(shù)據(jù)塊開(kāi)始時(shí)用同步字符來(lái)指示同步。僅在數(shù)據(jù)塊開(kāi)始時(shí)用同步字符來(lái)指示同步。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m同步字符:單同步字符或雙同步字符方式,然后就是連續(xù)的數(shù)據(jù)塊。m可以由用戶(hù)約定,也可采用ASCII碼中規(guī)定的SYNC代碼,即16H。按同步方式通信時(shí),先發(fā)送同步字符,接收方檢測(cè)

14、到同步字符后,即準(zhǔn)備接收數(shù)據(jù)。m發(fā)送方除了傳送數(shù)據(jù)外,還要同時(shí)傳送時(shí)鐘信號(hào):用來(lái)實(shí)現(xiàn)發(fā)送端與接收端之間的同步。以保證接收正確無(wú)誤。m同步傳送可以提高傳輸速率(達(dá)56kb/s或更高),但硬件比較復(fù)雜。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口AT89S51串行口全雙工全雙工的通用異步收發(fā)通用異步收發(fā)(UART),可可同時(shí)雙向同時(shí)雙向傳輸傳輸。收、發(fā)雙方使用各自的時(shí)鐘使用各自的時(shí)鐘控制發(fā)送和接收過(guò)程,這樣可省去省去收、發(fā)雙方的一條同步時(shí)鐘信號(hào)線一條同步時(shí)鐘信號(hào)線,連接簡(jiǎn)單且易實(shí)現(xiàn)。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口257.2

15、7.2 串行口的結(jié)構(gòu)串行口的結(jié)構(gòu)第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口有兩個(gè)物理上獨(dú)立兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器接收、發(fā)送緩沖器SBUF(屬于特殊功能寄存器),可同時(shí)發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器發(fā)送緩沖器只能寫(xiě)入不能讀出接收緩沖器接收緩沖器只能讀出不能寫(xiě)入兩個(gè)緩沖器共用一個(gè)特殊功能寄存器字節(jié)地址共用一個(gè)特殊功能寄存器字節(jié)地址(99H)。兩個(gè)控制寄存器:SCON和PCON。267.2 7.2 串行口的結(jié)構(gòu)串行口的結(jié)構(gòu)第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口 在邏輯上,在邏輯上,SBUF只有一個(gè),它既表示發(fā)送寄存器,又表只有

16、一個(gè),它既表示發(fā)送寄存器,又表示接收寄存器,具有同一個(gè)單元地址示接收寄存器,具有同一個(gè)單元地址99H。但在物理結(jié)構(gòu)上,。但在物理結(jié)構(gòu)上,則有兩個(gè)完全獨(dú)立的則有兩個(gè)完全獨(dú)立的SBUF,一個(gè)是發(fā)送緩沖寄存器,一個(gè)是發(fā)送緩沖寄存器SBUF,另一個(gè)是接收緩沖寄存器另一個(gè)是接收緩沖寄存器SBUF。如果。如果CPU寫(xiě)寫(xiě)SBUF,數(shù)據(jù)就,數(shù)據(jù)就會(huì)被送入會(huì)被送入發(fā)送寄存器發(fā)送寄存器準(zhǔn)備發(fā)送;準(zhǔn)備發(fā)送; MOV SBUF, A;/將將CPU的數(shù)據(jù)寫(xiě)入發(fā)送緩沖器的數(shù)據(jù)寫(xiě)入發(fā)送緩沖器 如果如果CPU讀讀SBUF,則讀入的數(shù)據(jù)一定來(lái)自,則讀入的數(shù)據(jù)一定來(lái)自接收緩沖器接收緩沖器。即。即CPU對(duì)對(duì)SBUF的讀寫(xiě),實(shí)際上是

17、分別訪問(wèn)上述兩個(gè)不同的寄存的讀寫(xiě),實(shí)際上是分別訪問(wèn)上述兩個(gè)不同的寄存器。器。 MOV A,SBUF ;/將接收緩沖器的數(shù)據(jù)讀入將接收緩沖器的數(shù)據(jù)讀入CPU第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口 串行數(shù)據(jù)緩沖器串行數(shù)據(jù)緩沖器SBUFSBUF SBUF是串行口緩沖寄存器,包括是串行口緩沖寄存器,包括發(fā)送寄存發(fā)送寄存器器和和接收寄存器接收寄存器,以便能以全雙工方式進(jìn)行通信。,以便能以全雙工方式進(jìn)行通信。此外,在接收寄存器之前還有移位寄存器,從而此外,在接收寄存器之前還有移位寄存器,從而構(gòu)成了串行接收的雙緩沖結(jié)構(gòu),這樣可以避免在構(gòu)成了串行接收的雙緩沖結(jié)構(gòu),這樣可以避

18、免在數(shù)據(jù)接收過(guò)程中出現(xiàn)幀重疊錯(cuò)誤。發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)接收過(guò)程中出現(xiàn)幀重疊錯(cuò)誤。發(fā)送數(shù)據(jù)時(shí),由于由于CPU是主動(dòng)的,不會(huì)發(fā)生幀重疊錯(cuò)誤,因此是主動(dòng)的,不會(huì)發(fā)生幀重疊錯(cuò)誤,因此發(fā)送電路不需要雙重緩沖結(jié)構(gòu)。發(fā)送電路不需要雙重緩沖結(jié)構(gòu)。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口圖7-3 串行口結(jié)構(gòu)示意圖7.2 7.2 串行口的結(jié)構(gòu)串行口的結(jié)構(gòu)第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m接收器是雙緩沖結(jié)構(gòu),在前一個(gè)字節(jié)被從接收緩沖器SBUF讀出之前,第二個(gè)字節(jié)即開(kāi)始被接收(串行輸入至移位寄存器),但是,在第二個(gè)字節(jié)接收完畢而前一個(gè)字節(jié)CPU未

19、讀取時(shí),會(huì)丟失前一個(gè)字節(jié)。m什么情況使TI=1:當(dāng)向SBUF發(fā)“寫(xiě)”命令時(shí)(執(zhí)行“MOV SBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開(kāi)始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標(biāo)志位TI=1。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m接收數(shù)據(jù)的條件: 接收中斷標(biāo)志位RI(SCON.0)=0; 允許接收位REN(SCON.4)=1。m什么情況使RI=1: 接收完一幀數(shù)據(jù)進(jìn)入移位寄存器,并裝載到接收SBUF中。 注:發(fā)送緩沖器發(fā)送時(shí)CPU是主動(dòng)的,不會(huì)產(chǎn)生重疊錯(cuò)誤,不需要用雙緩沖器結(jié)構(gòu)來(lái)保持最大傳送速率。第第7 7章章 AT89S51 AT89S

20、51單片機(jī)的串行口單片機(jī)的串行口 串行口的初始化編程:SCON和PCONSCON(98H):89C51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志。 7.2.1 7.2.1 串行口控制寄存器串行口控制寄存器SCONSCON第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口mSM0SM0和和SM1SM1串行口工作方式選擇位。對(duì)應(yīng)串行口工作方式選擇位。對(duì)應(yīng)4 4種通信種通信方式,其中,方式,其中,foscfosc是振蕩頻率。是振蕩頻率。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口SM2(SCON.5)多機(jī)通信控制位,主要用于方式2和方

21、式3。允許多機(jī)通信,SM2=1 。當(dāng)一片89C51(主機(jī))與多片89C51(從機(jī))通信時(shí),所有從機(jī)的SM2位都置1。主機(jī)首先發(fā)送的一幀地址,即從機(jī)機(jī)號(hào),其中第9位為1,所有的從機(jī)接收到數(shù)據(jù)后,將其中第9位裝入RB8中。各個(gè)從機(jī)根據(jù)收到的第9位數(shù)據(jù)(RB8中)的值來(lái)決定從機(jī)可否再接收主機(jī)的信息。若(RB8)0,說(shuō)明是數(shù)據(jù)幀,則使接收中斷標(biāo)志位RI0,信息丟失;若(RB8)1,說(shuō)明是地址幀,數(shù)據(jù)裝入SBUF并置RI1,中斷所有從機(jī),被尋址的目標(biāo)從機(jī)清除SM2以接收主機(jī)發(fā)來(lái)的一幀數(shù)據(jù)。其他從機(jī)仍然保持SM21。 若SM2=0,單機(jī)通信,接收一幀數(shù)據(jù)后,置RI=1,將接收到的數(shù)據(jù)裝入SBUF。m根據(jù)S

22、M2這個(gè)功能,可實(shí)現(xiàn)多個(gè)89C51應(yīng)用系統(tǒng)的串行通信。m在方式1時(shí),若SM2=1,則只有接收到有效停止位時(shí),RI才置1,以便接收下一幀數(shù)據(jù)。在方式0時(shí),SM2必須是0。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口REN允許接受控制位:由軟件置1或清0,只有當(dāng)REN1時(shí)才允許接收,相當(dāng)于串行接收的開(kāi)關(guān);若REN0,則禁止接收。 只有滿足RI0和REN1(允許接收)的條件,一幀數(shù)據(jù)就裝載入接收SBUF中。TB8(SCON.3)發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中。在方式2或方式3中,根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復(fù)位。在許多通信協(xié)議中可用作奇偶校驗(yàn)位,也可在多機(jī)通信中

23、作為發(fā)送地址幀或數(shù)據(jù)幀的標(biāo)志位。對(duì)于后者,TB81,說(shuō)明該幀數(shù)據(jù)為地址;TB80,說(shuō)明該幀數(shù)據(jù)為數(shù)據(jù)字節(jié)。在方式0或方式1中,該位未用。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口RB8(SCON.2)接收數(shù)據(jù)的第9位。在方式2或方式3中,接收到的第9位數(shù)據(jù)放在RB8位。它可以是奇/偶校驗(yàn)位,或是約定的地址/數(shù)據(jù)標(biāo)識(shí)位。在方式2和方式3多機(jī)通信中,若SM21,如果RB81,說(shuō)明收到的數(shù)據(jù)為地址幀。 方式1中,若SM20,RB8中存放的是已接收到的停止位。在方式0中,該位未用。TITI(SCON.1SCON.1)發(fā)送中斷標(biāo)志。發(fā)送完一幀數(shù)據(jù)被置發(fā)送中斷標(biāo)志。發(fā)送完一

24、幀數(shù)據(jù)被置1 1。 TITI置位意味著向置位意味著向CPUCPU提供提供“發(fā)送緩沖器發(fā)送緩沖器SBUFSBUF已空已空”的信息,的信息,CPUCPU可以準(zhǔn)備發(fā)送下一幀數(shù)據(jù)。可以準(zhǔn)備發(fā)送下一幀數(shù)據(jù)。 在方式在方式0 0串行發(fā)送第串行發(fā)送第8 8位結(jié)束或其他方式串行發(fā)送到停止位時(shí)位結(jié)束或其他方式串行發(fā)送到停止位時(shí)由硬件置由硬件置1 1,可用軟件查詢(xún)。串行口發(fā)送中斷被響應(yīng)后,可用軟件查詢(xún)。串行口發(fā)送中斷被響應(yīng)后,TITI不會(huì)自動(dòng)清不會(huì)自動(dòng)清0 0,必須由軟件清,必須由軟件清0 0。RIRI(SCON.0SCON.0)接收中斷標(biāo)志。接收完一幀有效數(shù)據(jù)后接收中斷標(biāo)志。接收完一幀有效數(shù)據(jù)后由硬件置由硬件置

25、1 1。表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收。表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收SBUFSBUF中,要求中,要求CPUCPU取走數(shù)據(jù)。取走數(shù)據(jù)。RIRI也必須由軟件清也必須由軟件清0 0,并準(zhǔn)備接收,并準(zhǔn)備接收下一幀數(shù)據(jù)。下一幀數(shù)據(jù)。 在方式在方式0 0中,第中,第8 8位數(shù)據(jù)發(fā)送結(jié)束時(shí),由硬件置位數(shù)據(jù)發(fā)送結(jié)束時(shí),由硬件置1 1;在其他三;在其他三種方式中,當(dāng)接收到停止位中間時(shí)由硬件置種方式中,當(dāng)接收到停止位中間時(shí)由硬件置1 1。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m串行中斷源只有串行中斷源只有1 1個(gè),是個(gè),是RIRI還是還是TITI呢?呢?CPUCPU事

26、先不知道事先不知道是發(fā)送中斷是發(fā)送中斷TITI還是接收中斷還是接收中斷RIRI產(chǎn)生的中斷請(qǐng)求,所以,在產(chǎn)生的中斷請(qǐng)求,所以,在全雙工通信時(shí),必須由全雙工通信時(shí),必須由軟件來(lái)判別軟件來(lái)判別。m復(fù)位時(shí),復(fù)位時(shí),SCONSCON所有位均清所有位均清0 0。7.2.2 7.2.2 電源控制寄存器電源控制寄存器PCON PCON 第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口7.3 串行口的通信工作方式串行口的通信工作方式 7.3.1 工作方式工作方式0 m1. 1.工作原理工作原理m串行口控制寄存器串行口控制寄存器SCONSCON中,中,SM0SM0、SM1=00SM1=0

27、0時(shí),串行口工作時(shí),串行口工作于方式于方式0 0,此時(shí)串行口作為同步移位寄存器使用,此時(shí)串行口作為同步移位寄存器使用; ;m此工作方式并不是單片機(jī)之間的串行通信,而是用于單片機(jī)此工作方式并不是單片機(jī)之間的串行通信,而是用于單片機(jī)串行口外接移位寄存器,實(shí)現(xiàn)串行口外接移位寄存器,實(shí)現(xiàn)I/OI/O口的擴(kuò)展??诘臄U(kuò)展。 第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m串行數(shù)據(jù)通過(guò)引腳串行數(shù)據(jù)通過(guò)引腳RXDRXD輸入或輸出,而輸入或輸出,而TXDTXD引腳用于引腳用于輸出移位時(shí)鐘,作為外接器件的同步信號(hào)。輸出移位時(shí)鐘,作為外接器件的同步信號(hào)。m方式方式0 0的波特率是固定值,

28、它與系統(tǒng)的振蕩頻率有關(guān),的波特率是固定值,它與系統(tǒng)的振蕩頻率有關(guān),以以 的速率進(jìn)行數(shù)據(jù)的發(fā)送或接收。的速率進(jìn)行數(shù)據(jù)的發(fā)送或接收。 m2. 2.方式方式0 0的應(yīng)用的應(yīng)用m串行口的方式串行口的方式0 0,不適合兩個(gè)單片機(jī)之間進(jìn)行通信,但,不適合兩個(gè)單片機(jī)之間進(jìn)行通信,但是可以通過(guò)外接移位寄存器的方法,進(jìn)行單片機(jī)是可以通過(guò)外接移位寄存器的方法,進(jìn)行單片機(jī)I/OI/O端端口的擴(kuò)展。口的擴(kuò)展。 D0D1D2D3D4D5D6D7 12/oscf第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口8位并入串出的移位寄存器,Q8為輸出端,CLK為時(shí)鐘脈沖輸入端,P/S為操作控制端,當(dāng)P

29、/S=1時(shí),鎖存并行輸入數(shù)據(jù),P/S=0時(shí),允許串行移位操作。AT89S51RXDTXDP1.0Q8CLKCD4014P/S并行輸入圖7-5 CD4014用于擴(kuò)展并行輸入口 例例7.17.1單片機(jī)外接單片機(jī)外接CD4014CD4014或或74LS16574LS165均可以用于擴(kuò)展并行輸入均可以用于擴(kuò)展并行輸入口,在本例中采用口,在本例中采用CD4014CD4014芯片作為擴(kuò)展芯片。采用查詢(xún)方式。芯片作為擴(kuò)展芯片。采用查詢(xún)方式。 /包含特殊功能寄存器庫(kù) /定義P1.0 /主函數(shù) /定義變量i,將接收到的數(shù)據(jù)放到變量i中 /鎖存并行輸入數(shù)據(jù) /允許串行移位操作 /設(shè)定方式0,允許接收 /等待接收完

30、畢 /清中斷標(biāo)志 /保存并行輸入數(shù)據(jù)例例7.17.1C語(yǔ)言參考程序如下: # include sbit P1.0=P10; void main() unsigned char i; P1.0=1; P1.0=0; SCON=0 x10; while (!RI) ; RI=0; i=SBUF; AT89S51RXDTXDP1.0Q8CLKCD4014P/S并行輸入CD4014用于擴(kuò)展并行輸入口第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口例例7.17.1匯編參考程序如下匯編參考程序如下: : ORG 0000H ORG 0000H LJMP KIN LJMP KIN

31、ORG 0100H ORG 0100H KIN: MOV SCON,#00H KIN: MOV SCON,#00H CLR ES CLR ES SETB P1.0 SETB P1.0 CLR P1.0 CLR P1.0 SETB REN SETB REN JNB RI,$ JNB RI,$ MOV 40H,SBUF MOV 40H,SBUF SJMP $ SJMP $ END END ; ;上電后程序從上電后程序從00000H00000H開(kāi)始開(kāi)始 ; ;轉(zhuǎn)移到主程序轉(zhuǎn)移到主程序 ; ;主程序從主程序從0100H0100H開(kāi)始開(kāi)始 ; ;設(shè)定串行口為方式設(shè)定串行口為方式0 0 ; ;禁止串行中斷

32、禁止串行中斷 ; ;鎖存并行輸入數(shù)據(jù)鎖存并行輸入數(shù)據(jù) ; ;允許串行移位操作允許串行移位操作 ; ;允許并啟動(dòng)接收(允許并啟動(dòng)接收(TXDTXD發(fā)送移位脈沖)發(fā)送移位脈沖) ; ;等待接收完畢等待接收完畢 ; ;保存并行輸入保存并行輸入 ; ;循環(huán)等待循環(huán)等待 ; ;匯編結(jié)束匯編結(jié)束第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m 例例7.27.2單片機(jī)外接單片機(jī)外接CD4094CD4094或或74LS16474LS164均可以用于擴(kuò)均可以用于擴(kuò)展并行輸出口,在本例中采用展并行輸出口,在本例中采用CD4094CD4094作為擴(kuò)展芯片作為擴(kuò)展芯片實(shí)現(xiàn)數(shù)據(jù)的并行輸出。實(shí)

33、現(xiàn)數(shù)據(jù)的并行輸出。 AT89S51RXDTXDP1.0DATACLKCD4094STB并行輸出圖7-6 CD4094用于擴(kuò)展并行輸出口CD40948位串入并出的同步移位寄存器;CLK為時(shí)鐘脈沖輸入端;STB=0時(shí),允許從DATA端輸入,8位并行輸出端關(guān)閉;STB=1時(shí),DATA輸入端關(guān)閉,允許8位并行數(shù)據(jù)輸出。 C語(yǔ)言參考程序如下:#include #define uchar unsigned char sbit STB=P10; sbit CLK=P31; void main() uchar data1; SCON=0 x00; STB=1; SBUF=data1; while(TI=0);

34、 TI=0; STB=0; CLK=0; CLK=1;while(1); / 包含頭文件 /定義無(wú)符號(hào)字符類(lèi)型的縮寫(xiě) /位定義 /主程序 /聲明變量,存放需送出的數(shù)據(jù) /置4094于串行移位工作方式 /置串行口于工作方式0 /送出高八位數(shù)據(jù) /檢查是否傳送完畢 /傳完清除標(biāo)志位,準(zhǔn)備下一次數(shù)據(jù)傳輸 /置4094于并行輸出工作方式 /串行口數(shù)據(jù)發(fā)送完畢,P3.1上已停止同步移位脈沖/為使4094并行輸出數(shù)據(jù),軟件產(chǎn)生一個(gè)脈沖上升沿 /原地循環(huán) 第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口例例7.27.2匯編語(yǔ)言參考程序如下:匯編語(yǔ)言參考程序如下:ORG 0000HO

35、RG 0000HLJMP OUT LJMP OUT ORG 0100HORG 0100HOUT: SETB P1.OUT: SETB P1.0 0 MOV SCON,#00H MOV SCON,#00H MOV R0,#31HMOV R0,#31HMOV SBUF,R0 MOV SBUF,R0 JNB TI,$ JNB TI,$ CLR TI CLR TI CLR P1.CLR P1.0 0 CLR P3.1 CLR P3.1 SETB P3.1SETB P3.1 ; ;跳轉(zhuǎn)至跳轉(zhuǎn)至OUTOUT程序段程序段 ; ;置置40944094于串行移位工作方式于串行移位工作方式 ; ;置串行口于工作方

36、式置串行口于工作方式0 0 ; ;將將31H31H單元的數(shù)寫(xiě)入單元的數(shù)寫(xiě)入SBUFSBUF,啟動(dòng)發(fā)送,啟動(dòng)發(fā)送 ; ;檢測(cè)串行口發(fā)送數(shù)據(jù)是否完畢,未完等待檢測(cè)串行口發(fā)送數(shù)據(jù)是否完畢,未完等待 ; ;發(fā)送完畢后清發(fā)送完畢后清TITI標(biāo)志標(biāo)志 ; ;置置40944094于并行輸出工作方式于并行輸出工作方式 ; ;數(shù)據(jù)發(fā)送完,停止同步移位脈沖數(shù)據(jù)發(fā)送完,停止同步移位脈沖 ; ;為使為使40944094并行輸出數(shù)據(jù),軟件產(chǎn)生一個(gè)脈沖上升沿并行輸出數(shù)據(jù),軟件產(chǎn)生一個(gè)脈沖上升沿第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口 方式1:真正用于串行發(fā)送或接收,為10位通用異步接口。

37、TXD與RXD分別用于發(fā)送與接收數(shù)據(jù);m幀格式:1位起始位、8位數(shù)據(jù)位(低位在前)、1位停止位,共10位;m在接收時(shí),停止位進(jìn)入SCON的RB8,7.3.2 7.3.2 工作方式工作方式1 11 1、工作原理、工作原理第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口方式方式1 1,波特率是可變的,以定時(shí),波特率是可變的,以定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T1T1的溢出率的溢出率作為波特率發(fā)生器,其關(guān)系式如下:作為波特率發(fā)生器,其關(guān)系式如下:23212256SMOD-Xoscf波特率()m方式1發(fā)送時(shí),數(shù)據(jù)從引腳TXD(P3.1)端輸出。m當(dāng)執(zhí)行寫(xiě)入發(fā)送SBUF的命令時(shí),啟動(dòng)了發(fā)

38、送器。m發(fā)送移位時(shí)鐘由定時(shí)器T1送來(lái)的溢出信號(hào)經(jīng)過(guò)16分頻或32分頻而得到的,方式1的波特率TX是可變的。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口方式方式1和接收時(shí)序和接收時(shí)序m 方式1接收時(shí),數(shù)據(jù)從引腳RXD(P3.0)端輸入。m接收的先決條件:REN位置1并檢測(cè)到起始位(RXD上檢測(cè)到10的跳變)而開(kāi)始的。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口當(dāng)一幀數(shù)據(jù)接收完畢后,還需判斷是否滿足以下條件,這次當(dāng)一幀數(shù)據(jù)接收完畢后,還需判斷是否滿足以下條件,這次接受才真正有效:接受才真正有效:RI=0RI=0。表示上一幀數(shù)據(jù)已被取走。表

39、示上一幀數(shù)據(jù)已被取走。SM2=0SM2=0或收到的停止位為或收到的停止位為1 1(方式(方式1 1時(shí),停止位進(jìn)入時(shí),停止位進(jìn)入RB8RB8)。)。 滿足以上條件則將接收到的數(shù)據(jù)裝入串行口的滿足以上條件則將接收到的數(shù)據(jù)裝入串行口的SBUFSBUF并置位并置位RIRI;如果不滿足,則該幀信息將會(huì);如果不滿足,則該幀信息將會(huì)丟失丟失。 值得注意的是,在整個(gè)接收過(guò)程中,值得注意的是,在整個(gè)接收過(guò)程中,REN=1REN=1是一個(gè)先決條件。是一個(gè)先決條件。只有當(dāng)只有當(dāng)REN=1REN=1時(shí),才能對(duì)時(shí),才能對(duì)RXDRXD進(jìn)行檢測(cè)。進(jìn)行檢測(cè)。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的

40、串行口m串行通信的編程有兩種方式:查詢(xún)方式和中斷方式。串行通信的編程有兩種方式:查詢(xún)方式和中斷方式。m都要注意清除標(biāo)志位都要注意清除標(biāo)志位TITI和和RIRI。 )(X-2561232212000oscf2. 2.應(yīng)用實(shí)例應(yīng)用實(shí)例例例7.3 7.3 設(shè)甲乙兩個(gè)單片機(jī)系統(tǒng)以串行工作方式設(shè)甲乙兩個(gè)單片機(jī)系統(tǒng)以串行工作方式1 1進(jìn)行數(shù)據(jù)傳進(jìn)行數(shù)據(jù)傳送,送,11.0592MHz11.0592MHz,波特率為,波特率為1200b/s1200b/s。甲機(jī)發(fā)送的。甲機(jī)發(fā)送的1616個(gè)字節(jié)個(gè)字節(jié)數(shù)據(jù)存在片內(nèi)數(shù)據(jù)存在片內(nèi)RAM40HRAM40H4FH4FH單元中,乙機(jī)接收后存在片內(nèi)單元中,乙機(jī)接收后存在片內(nèi)RA

41、M 50HRAM 50H為首的地址區(qū)域中。為首的地址區(qū)域中。解:串行工作方式解:串行工作方式1 1的波特率取決于定時(shí)器的波特率取決于定時(shí)器T1T1的溢出率的溢出率( (設(shè)設(shè)SMOD=0)SMOD=0),T1T1工作在方式工作在方式2 2,則,則T1T1的計(jì)數(shù)初值的計(jì)數(shù)初值X X:X X第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口m采用查詢(xún)方式進(jìn)行通信時(shí),發(fā)送和接收子程序流程圖: 甲機(jī)發(fā)送程序:甲機(jī)發(fā)送程序:#include #define uchar unsigned char uchar idata buf16; uchar i; void main( ) TM

42、OD=0 x20; TL1=0 xE8; TH1=0 xE8; PCON=0 x00; SCON=0 x40; TR1=1; for(i=0;i16;i+) SBUF=bufi; while(TI= =0); TI=0; /包含特殊功能寄存器庫(kù)包含特殊功能寄存器庫(kù) /定義定義uchar為無(wú)符號(hào)字符數(shù)據(jù)類(lèi)型為無(wú)符號(hào)字符數(shù)據(jù)類(lèi)型 /定義數(shù)組,將發(fā)送的定義數(shù)組,將發(fā)送的16個(gè)數(shù)據(jù)存放在個(gè)數(shù)據(jù)存放在buf數(shù)組數(shù)組 /定義變量定義變量i,作為作為16個(gè)數(shù)據(jù)循環(huán)發(fā)送的次數(shù)記錄個(gè)數(shù)據(jù)循環(huán)發(fā)送的次數(shù)記錄/置置T1定時(shí)器工作方式定時(shí)器工作方式2 /置置T1計(jì)數(shù)初值計(jì)數(shù)初值 /置置SMOD=0 /工作在方式工作在

43、方式1,不允許接收,不允許接收 / T1啟動(dòng)計(jì)數(shù)啟動(dòng)計(jì)數(shù)/循環(huán)發(fā)送循環(huán)發(fā)送16個(gè)數(shù)據(jù)個(gè)數(shù)據(jù) /發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù) /等待發(fā)送完畢等待發(fā)送完畢 /發(fā)送完后清中斷標(biāo)志發(fā)送完后清中斷標(biāo)志甲機(jī)發(fā)送程序:甲機(jī)發(fā)送程序:ORG 0000H LJMP TXDA ORG 0100H TXDA: MOV TMOD,#20H MOV TL1,#0E8H MOV TH1,#0E8H CLR ET1 SETB TR1 MOV SCON,#40H MOV PCON,#00H CLR ES MOV R0,#40H MOV R2,#16TRSA: MOV A,R0 MOVSBUF,A JNBTI,$ CLR CLRTI TI

44、 INC INCR0R0 DJNZ DJNZR2,TRSA R2,TRSA SJMP $ SJMP $ ; 上電后程序從上電后程序從00000H開(kāi)始開(kāi)始 ;轉(zhuǎn)移到主程序轉(zhuǎn)移到主程序 ;主程序從主程序從0100H開(kāi)始開(kāi)始 ;置置T1定時(shí)器工作方式定時(shí)器工作方式2 ;置置T1計(jì)數(shù)初值計(jì)數(shù)初值. ;置置T1計(jì)數(shù)重裝值計(jì)數(shù)重裝值;禁止禁止T1中斷中斷;T1啟動(dòng)啟動(dòng) ;置串行方式置串行方式1,禁止接收禁止接收 ;置置SMOD=0(SMOD不能位操作不能位操作) ;禁止串行中斷禁止串行中斷 ;置發(fā)送數(shù)據(jù)區(qū)首地址置發(fā)送數(shù)據(jù)區(qū)首地址 ;置發(fā)送數(shù)據(jù)長(zhǎng)度置發(fā)送數(shù)據(jù)長(zhǎng)度 ;讀一個(gè)數(shù)據(jù)讀一個(gè)數(shù)據(jù) ;發(fā)送發(fā)送 ;等待一

45、幀數(shù)據(jù)發(fā)送完畢等待一幀數(shù)據(jù)發(fā)送完畢 ; ;清發(fā)送中斷標(biāo)志清發(fā)送中斷標(biāo)志 ; ;指向下一字節(jié)單元指向下一字節(jié)單元 ; ;判判16個(gè)數(shù)據(jù)發(fā)完否個(gè)數(shù)據(jù)發(fā)完否?未完繼續(xù)未完繼續(xù) ; ;循環(huán)等待循環(huán)等待乙機(jī)接收程序如下:乙機(jī)接收程序如下: #include #include #define uchar unsigned char #define uchar unsigned char uchar i; uchar i; void mainvoid main( ) unsigned char unsigned char * *P; P; P=0 x50; P=0 x50; TMOD=0 x20TMOD=0

46、 x20; TL1=0 xE8 TL1=0 xE8; TH1=0 xE8TH1=0 xE8; PCON=0 x00; PCON=0 x00; SCON=0 x50; SCON=0 x50; TR1=1TR1=1; forfor(i=0;i16;i+i=0;i16;i+) while while(RI= =0RI= =0); ; RI=0; RI=0; * *P =SBUF; P =SBUF; P+ P+; / /包含特殊功能寄存器庫(kù)包含特殊功能寄存器庫(kù) / /定義定義ucharuchar為無(wú)符號(hào)字符數(shù)據(jù)類(lèi)型為無(wú)符號(hào)字符數(shù)據(jù)類(lèi)型 / /定義變量定義變量i i,作為接收,作為接收1616個(gè)數(shù)據(jù)的次

47、數(shù)記錄。個(gè)數(shù)據(jù)的次數(shù)記錄。 / /主函數(shù)主函數(shù) / /定義指針變量并賦初值定義指針變量并賦初值 / /置置T1T1定時(shí)器工作方式定時(shí)器工作方式2 2 / /置置T1T1計(jì)數(shù)初值計(jì)數(shù)初值 / /置置SMOD=0SMOD=0 / /工作在方式工作在方式1 1,允許接收,允許接收 / T1/ T1啟動(dòng)計(jì)數(shù)啟動(dòng)計(jì)數(shù) /循環(huán)體(連續(xù)接收循環(huán)體(連續(xù)接收1616個(gè)數(shù)據(jù))個(gè)數(shù)據(jù)) / /等待接收數(shù)據(jù)等待接收數(shù)據(jù) / /接收完一個(gè)字節(jié)的數(shù)據(jù)后清中斷標(biāo)志接收完一個(gè)字節(jié)的數(shù)據(jù)后清中斷標(biāo)志 / /接收數(shù)據(jù),送指定單元接收數(shù)據(jù),送指定單元/單元地址加單元地址加1 1,準(zhǔn)備存放下一個(gè)數(shù)據(jù),準(zhǔn)備存放下一個(gè)數(shù)據(jù)乙機(jī)接收程序

48、:乙機(jī)接收程序:ORG 0000H ORG 0000H LJMP RXDB LJMP RXDB ORG 0100H ORG 0100H RXDB: MOV TMOD,#20HRXDB: MOV TMOD,#20H MOV TL1,#0E8H MOV TL1,#0E8H MOV TH1,#0E8H MOV TH1,#0E8H CLR ET1 CLR ET1 SETB TR1 SETB TR1 MOV SCON,#40H MOV SCON,#40H MOV PCON,#00H MOV PCON,#00H CLR ES CLR ES MOV R0,#50HMOV R0,#50H MOV R2,#16

49、 MOV R2,#16 SETB REN SETB RENRDSB: JNBRDSB: JNB RI,$ RI,$ CLR CLR RI RI MOV MOV A,SBUF A,SBUF MOV MOV R0,A R0,A INC INC R0 R0 DJNZ DJNZ R2,RDSB R2,RDSB SJMP $ SJMP $ ; ;在在0000H0000H單元存放轉(zhuǎn)移指令單元存放轉(zhuǎn)移指令 ; ;轉(zhuǎn)移到主程序轉(zhuǎn)移到主程序; ;主程序從主程序從0100H0100H開(kāi)始開(kāi)始; ;置置T1T1定時(shí)器工作方式定時(shí)器工作方式2 2; ;置置T1T1計(jì)數(shù)初值計(jì)數(shù)初值; ;置置T1T1計(jì)數(shù)重裝值計(jì)數(shù)重裝值

50、 ; ;禁止禁止T1T1中斷中斷 ;T1;T1啟動(dòng)啟動(dòng); ;置串行方式置串行方式1, 1,禁止接收禁止接收; ;置置SMOD=0(SMODSMOD=0(SMOD不能位操作不能位操作) ); ;禁止串行中斷禁止串行中斷 ; ;置接收數(shù)據(jù)區(qū)首地址置接收數(shù)據(jù)區(qū)首地址 ; ;置接收數(shù)據(jù)長(zhǎng)度置接收數(shù)據(jù)長(zhǎng)度; ;啟動(dòng)接收啟動(dòng)接收; ;等待一幀數(shù)據(jù)接收完畢等待一幀數(shù)據(jù)接收完畢; ;清接收中斷標(biāo)志清接收中斷標(biāo)志; ;讀接收數(shù)據(jù)讀接收數(shù)據(jù); ;存接收數(shù)據(jù)存接收數(shù)據(jù); ;指向下一數(shù)據(jù)存儲(chǔ)單元指向下一數(shù)據(jù)存儲(chǔ)單元; ;判判1616個(gè)數(shù)據(jù)接收完否個(gè)數(shù)據(jù)接收完否? ?未完繼續(xù)未完繼續(xù) ; ;循環(huán)等待循環(huán)等待第第7 7章

51、章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口全雙工應(yīng)用實(shí)例m利用AT89S51單片機(jī)的串行口,設(shè)計(jì)一個(gè)工作方式1的全雙工收發(fā)程序,并將接收到的數(shù)據(jù)借助P1口進(jìn)行LED顯示。假設(shè)晶振頻率為11.0592MHz,SMOD=0,波特率為2400b/s。雙方均采用中斷方式進(jìn)行通信。2240032122560-Xoscf()解:串行工作方式解:串行工作方式1的波特率取決于的波特率取決于T1的溢出率,的溢出率,T1工作于工作于方式方式2,當(dāng),當(dāng)SMOD=0時(shí),則時(shí),則T1的計(jì)數(shù)初值的計(jì)數(shù)初值X: XF4H,(TH1)=(TL1)=F4H 要求:要求:發(fā)送器來(lái)說(shuō),發(fā)送發(fā)送器來(lái)說(shuō),發(fā)送1幀數(shù)

52、據(jù)后,接收回執(zhí)信息幀數(shù)據(jù)后,接收回執(zhí)信息0,并用,并用P1顯示;顯示;接收器,接收接收器,接收1幀數(shù)據(jù)并存儲(chǔ)后,向甲方發(fā)送一個(gè)回執(zhí)信號(hào)幀數(shù)據(jù)并存儲(chǔ)后,向甲方發(fā)送一個(gè)回執(zhí)信號(hào)0;mC語(yǔ)言參考程序如下:發(fā)送方源程序:/初始化串行口void csh( )SM0=0;SM1=1; REN=1; TI=0;RI=0;PCON=0; TH1=0 xF4;TL1=0XF4; TMOD=0X20; EA=1;ES=1; TR1=1; void main()char c=data; csh( ); while(1) TI=0;SBUF=c; while(!TI); TI=0; void intrr( ) int

53、errupt 4 char temp;temp=SBUF;P1=temp; RI=0; EA=0; /置串行方式1 /允許接收 /設(shè)置SMOD=0 /設(shè)置TH1、TL1初值 /設(shè)置T1工作方式 /開(kāi)中斷 /開(kāi)定時(shí)器T1,產(chǎn)生波特率 /定義待發(fā)送的數(shù)據(jù)data /調(diào)用初始化函數(shù) /發(fā)送一組數(shù)據(jù) /等待發(fā)送結(jié)束 /顯示接收到的回執(zhí)信號(hào) /關(guān)中斷接收方源程序:接收方源程序:/初始化串行口初始化串行口void csh( )void csh( ) SM0=0;SM0=0;SM1=1; SM1=1; REN=1; REN=1; TI=0;TI=0;RI=0;RI=0;PCON=0; PCON=0; TH1

54、=0 xF4;TH1=0 xF4;TL1=0XF4; TL1=0XF4; TMOD=0X20; TMOD=0X20; EA=1;EA=1;ES=1; ES=1; TR1=1; TR1=1; / /設(shè)置工作方式設(shè)置工作方式1 1 / /允許接收允許接收 /設(shè)置設(shè)置SMOD=0SMOD=0 /T1/T1設(shè)置初值設(shè)置初值 /T1/T1設(shè)置工作方式設(shè)置工作方式 / /開(kāi)中斷開(kāi)中斷 / / 開(kāi)啟定時(shí)器開(kāi)啟定時(shí)器T1T1 /串行口和T1初始化 /等待串行口接收中斷 /串行口接收中斷函數(shù) /保存接收到數(shù)據(jù) /顯示串行口接收到的數(shù)據(jù) /發(fā)送和接收標(biāo)志清0 /向甲方發(fā)送一個(gè)回執(zhí)信號(hào)0 /關(guān)中斷void main

55、( )csh( ); while(1); void intrr( ) interrupt 4 char temp;temp=SBUF; P1=temp; RI=0;TI=0; SBUF=0; while(!TI);TI=0; EA=0; 全雙工源程序:全雙工源程序:/初始化串行口初始化串行口void csh( )void csh( ) SM0=0;SM0=0;SM1=1; SM1=1; REN=1; REN=1; TI=0;TI=0;RI=0;RI=0;PCON=0; PCON=0; TH1=0 xF4;TH1=0 xF4;TL1=0XF4; TL1=0XF4; TMOD=0X20; TMOD

56、=0X20; TR1=1; TR1=1; EA=1;EA=1;ES=1; ES=1; / /設(shè)置工作方式設(shè)置工作方式1 1 / /允許接收允許接收 /設(shè)置設(shè)置SMOD=0SMOD=0 /T1/T1設(shè)置初值設(shè)置初值 /T1/T1設(shè)置工作方式設(shè)置工作方式 / /開(kāi)中斷開(kāi)中斷 / / 開(kāi)啟定時(shí)器開(kāi)啟定時(shí)器T1T1 /串行口和T1初始化 /等待串行口接收中斷 /串行口接收中斷函數(shù) /接收中斷,并清0 /保存接收到的數(shù)據(jù) /進(jìn)行LED顯示 /發(fā)送標(biāo)志清0 /發(fā)送下一幀數(shù)據(jù)void main( ) csh( ); char data *c ; char data *temp; while(1); void

57、 intrr( ) interrupt 4 while(!TI) RI=0; char *temp; temp+;*temp=SBUF; P1=temp; TI=0; c+; SBUF=*C; 中斷方式,另外甲機(jī)發(fā)送片內(nèi)RAM一組數(shù)據(jù),并將接收數(shù)據(jù)存入片內(nèi)ram內(nèi)第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口7.3.3 方式方式2方式2和方式3,9位異步通信接口。每幀數(shù)據(jù)為每幀數(shù)據(jù)為11位位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控為1或0的第9位數(shù)據(jù)和1位停止位. 62SMOD264方式方式2波特率波特率 = fosc第第7 7章章 AT89S51 AT89

58、S51單片機(jī)的串行口單片機(jī)的串行口1)方式方式2發(fā)送發(fā)送發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如奇偶校驗(yàn)位或多機(jī)通信的地址/數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫(xiě)入SBUF,即啟動(dòng)發(fā)送。TB8自動(dòng)裝入自動(dòng)裝入第9位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使TI位置“1”。63第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口2)方式方式2接收接收SM0、SM1=10,且,且REN = 1時(shí),以方式時(shí),以方式2接收數(shù)據(jù)。數(shù)據(jù)接收數(shù)據(jù)。數(shù)據(jù)由由RXD端輸入,接收端輸入,接收11位信息。當(dāng)位檢測(cè)邏輯采樣到位信息。當(dāng)位檢測(cè)邏輯采樣到RXD的的負(fù)跳變,便開(kāi)始接收一幀信息

59、。負(fù)跳變,便開(kāi)始接收一幀信息。接收第接收第9位數(shù)據(jù)后,位數(shù)據(jù)后,需滿足以下兩個(gè)條件,需滿足以下兩個(gè)條件,才將接收到的數(shù)才將接收到的數(shù)據(jù)送入據(jù)送入SBUF,且且RI置置“1”。 。(1)RI = 0,意味著接收緩沖器為空。,意味著接收緩沖器為空。(2)SM2 = 0或接收到的第或接收到的第9位數(shù)據(jù)位位數(shù)據(jù)位RB8 = 1。若不滿足這兩個(gè)條件若不滿足這兩個(gè)條件,接收的信息將被丟棄。第第7 7章章 AT89S51 AT89S51單片機(jī)的串行口單片機(jī)的串行口2. 2. 應(yīng)用實(shí)例:應(yīng)用實(shí)例:方式方式2 2實(shí)現(xiàn)雙機(jī)通信,帶有奇偶校驗(yàn)和應(yīng)答功實(shí)現(xiàn)雙機(jī)通信,帶有奇偶校驗(yàn)和應(yīng)答功能能 例例7.5 7.5 設(shè)計(jì)一

60、個(gè)串行方式設(shè)計(jì)一個(gè)串行方式2 2收發(fā)程序,設(shè)收發(fā)程序,設(shè)SMOD=1SMOD=1,波特率,波特率固定為。固定為。甲機(jī)甲機(jī): :發(fā)送發(fā)送片內(nèi)片內(nèi)RAM50H5FHRAM50H5FH中的數(shù)據(jù),第中的數(shù)據(jù),第9 9位數(shù)據(jù)作為奇偶位數(shù)據(jù)作為奇偶校驗(yàn)位,采用校驗(yàn)位,采用偶校驗(yàn)偶校驗(yàn)方式,接到接收方核對(duì)正確的回復(fù)信號(hào)方式,接到接收方核對(duì)正確的回復(fù)信號(hào)(用(用00H00H表示)后,再發(fā)送下一字節(jié)數(shù)據(jù),否則重發(fā)該字節(jié)。表示)后,再發(fā)送下一字節(jié)數(shù)據(jù),否則重發(fā)該字節(jié)。乙機(jī)乙機(jī): :接收到的數(shù)據(jù)存在接收到的數(shù)據(jù)存在首址為首址為40H40H的片內(nèi)的片內(nèi)RAMRAM中,并核對(duì)奇中,并核對(duì)奇偶校驗(yàn)位。偶校驗(yàn)位。核對(duì)正確核

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論