第7章+89C51串行口及串行通信技術(shù).ppt_第1頁
第7章+89C51串行口及串行通信技術(shù).ppt_第2頁
第7章+89C51串行口及串行通信技術(shù).ppt_第3頁
第7章+89C51串行口及串行通信技術(shù).ppt_第4頁
第7章+89C51串行口及串行通信技術(shù).ppt_第5頁
已閱讀5頁,還剩236頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2020年9月26日星期六,1,第7章 89C51串行口及串行通信技術(shù),本書前幾章涉及的數(shù)據(jù)傳送都是采用并行方式,如89C51與存儲器,存儲器與存儲器,89C51與并行打印機之間的通信。 89C51處理8位數(shù)據(jù),若以并行傳送方式一次傳送一個字節(jié)的數(shù)據(jù),至少需要8條數(shù)據(jù)線。,2020年9月26日星期六,2,當(dāng)89C51與打印機連接時,除8條數(shù)據(jù)線外,還需要狀態(tài)、應(yīng)答等控制線。一些微機系統(tǒng),如IBM-PC系列機,由于磁盤機、CRT、打印機與主機系統(tǒng)的距離有限,所以,使用多條電纜線以提高數(shù)據(jù)傳送速度還是合算的。但是,計算機之間、計算機與其終端之間的距離有時非常遠(yuǎn),此時,電纜線過多是不經(jīng)濟的。,第7章

2、 89C51串行口及串行通信技術(shù),2020年9月26日星期六,3,串行通信只用一位數(shù)據(jù)線傳送數(shù)據(jù)的位信號,即使加上幾條通信聯(lián)絡(luò)線,也用不了很多電纜線。因此,串行通信適合遠(yuǎn)距離數(shù)據(jù)傳送。 當(dāng)然,串行通信要求有轉(zhuǎn)換數(shù)據(jù)格式、時間控制等邏輯電路,這些電路目前已被集成在大規(guī)模集成電路中(稱為可編程串行通信控制器),使用很方便。,第7章 89C51串行口及串行通信技術(shù),2020年9月26日星期六,4,第七章 89C51串行口及串行通信技術(shù),本章將介紹89C51串行口的結(jié)構(gòu)及應(yīng)用,PC機與89C51間的雙機通信,一臺PC機控制多臺89C51前沿機的分布式系統(tǒng),以及通信接口電路和軟件設(shè)計,并給出設(shè)計實例,包

3、括接口電路、程序框圖、主程序和接收/發(fā)送子程序。,2020年9月26日星期六,5,第七章 89C51串行口及串行通信技術(shù),7.1 串行通信基本知識 7.2 串行口及應(yīng)用 7.3 89C51與89C51點對點異步通信 7.4 89C51與PC機間通信 7.5 思考題與習(xí)題,返回,2020年9月26日星期六,6,7.1 串行通信基本知識,7.1.1 數(shù)據(jù)通信 7.1.2 串行通信的傳輸方式 7.1.3 異步通信和同步通信 7.1.4 串行通信的過程及通信協(xié)議,返回,2020年9月26日星期六,7,7.1.1 數(shù)據(jù)通信,在實際工作中,計算機的CPU與外部設(shè)備之間常常要進行信息交換,一臺計算機與其他計

4、算機之間也往往要交換信息,所有這些信息交換均可稱為通信。 通信方式有兩種,即并行通信和串行通信。 通常根據(jù)信息傳送的距離決定采用哪種通信方式。,返回,2020年9月26日星期六,8,7.1.1 數(shù)據(jù)通信,例如,在IBM-PC機與外部設(shè)備(如打印機等)通信時,如果距離小于30m,可采用并行通信方式;當(dāng)距離大于30m時,則要采用串行通信方式。89C51單片機具有并行和串行二種基本通信方式。,返回,2020年9月26日星期六,9,7.1.1 數(shù)據(jù)通信,并行通信:是指數(shù)據(jù)的各位同時進行傳送(發(fā)送或接收)的通信方式。P148圖7-1(a) 優(yōu)點:是傳送速度快; 缺點:是數(shù)據(jù)有多少位,就需要多少根傳送線。

5、 例:89C51單片機與打印機之間的數(shù)據(jù)傳送就屬于并行通信。,返回,2020年9月26日星期六,10,7.1.1 數(shù)據(jù)通信,圖7-1(a)所示為89C51與外設(shè)間8位數(shù)據(jù)并行通信的連接方法。并行通信在位數(shù)多、傳送距離又遠(yuǎn)時就不太合適了。 串行通信:指數(shù)據(jù)是一位一位按順序傳送的通信方式。 它的突出優(yōu)點:是只需一對傳輸線(利用電話線就可作為傳輸線),這樣就大大降低了傳送成本,特別適用于遠(yuǎn)距離通信;,返回,2020年9月26日星期六,11,7.1.1 數(shù)據(jù)通信,其缺點:是傳送速度較低。假設(shè)并行傳送N位數(shù)據(jù)所需時間位T,那么串行傳送的時間至少為NT,實際上總是大于NT的。 圖7-1(b)所示為串行通信

6、方式的連接方法。,返回,圖7-1 數(shù)據(jù)通信方式,2020年9月26日星期六,13,7.1.2 串行通信的傳輸方式,串行通信的傳送方式通常有三種: 單向(或單工)配置,只允許數(shù)據(jù)向一個方向傳送; 半雙向(或半雙工)配置,允許數(shù)據(jù)向兩個方向中的任一方向傳送,但每次只能有一個站點發(fā)送; 全雙向(全雙工)配置,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設(shè)備都具有完整和獨立的發(fā)送和接受能力。 P146圖7-2所示為串行通信中的數(shù)據(jù)傳送方式。,返回,圖7-2 串行通信中的數(shù)據(jù)傳送方式,2020年9月26日星期六,15,7.1.3 異步通信和同步通信,串行通信有兩種基本通信方式,

7、即異步通信和同步通信。 1、異步通信 在異步通信中,數(shù)據(jù)是一幀一幀(包括一個字符代碼或一字節(jié)數(shù)據(jù))傳送的,每一幀的數(shù)據(jù)格式如P149圖7-3所示,返回,圖7-3 異步通信數(shù)據(jù)格式,2020年9月26日星期六,17,1、異步通信,在幀格式中,一個字符由四個部分組成: 起始位、數(shù)據(jù)位、奇偶校驗位和停止位。 首先是一個起始位(0), 然后是5-8位數(shù)據(jù)位(規(guī)定低位在前,高位在后), 接下來是奇偶校驗位(可省略), 最后是停止位(1)。,返回,2020年9月26日星期六,18,1、異步通信,起始位(0)信號只占用一位,用來通知接收設(shè)備一個待接收的字符開始到達。線路上在不傳送字符時應(yīng)保持為1。接收端不斷

8、檢測線路的狀態(tài),若連續(xù)為1以后又測到一個0,就知道發(fā)來一個新字符, 應(yīng)馬上準(zhǔn)備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進行。 起始位后面緊接著是數(shù)據(jù)位,它可以是5位(D0-D4)、 6位、7位或8位(D0-D7)。,返回,2020年9月26日星期六,19,1、異步通信,奇偶校驗(D8)只占一位,但在字符中也可以規(guī)定不用奇偶校驗位,則這一位就可省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。 停止位用來表征字符的結(jié)束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時,也為接收下

9、一個字符做好準(zhǔn)備-只要再接收到0,就是新的字符的起始位。若停止位以后不是緊接著傳送下一個字符,則使線路電平保持為高電平(邏輯1)。,返回,2020年9月26日星期六,20,P149圖7-3(a)表示一個字符緊接一個字符傳送的情況,上一個字符的停止位和下一個字符的起始位是緊鄰的; P149圖7-3(b)則是兩個字符間有空閑位的情況,空閑位為1,線路處于等待狀態(tài)。存在空閑位正是異步通信的特征之一。 例如,規(guī)定用ASCII編碼,字符為七位,加一個奇偶校驗位、一個起始位、一個停止位,則一幀共十位。,1、異步通信,返回,2020年9月26日星期六,21,2、同步通信,同步通信中,在數(shù)據(jù)開始傳送前用同步字

10、符來指示(常約定1個-2個),并由時鐘來實現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。 同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示,其數(shù)據(jù)格式如P150圖7-4所示。,返回,圖7-4 異步通信數(shù)據(jù)格式,2020年9月26日星期六,23,2、同步通信,同步字符的插入可以是單同步字符方式或雙同步字符方式,如P150圖7-4所示,然后是連續(xù)的數(shù)據(jù)塊。同步字符可以由用戶約定,當(dāng)然也可以采用ASCII碼中規(guī)定的SYNC代碼,即16H。按同步方式通信時,先發(fā)送同步字符,接收方檢測到同步字符后,即準(zhǔn)備接收

11、數(shù)據(jù)。,返回,2020年9月26日星期六,24,2、同步通信,在同步傳送時,要求用時鐘來實現(xiàn)發(fā)送端與接收端之間的同步。為了保證接收正確無誤,發(fā)送方除了傳送數(shù)據(jù)外,還要同時傳送時鐘信號。 同步傳送可以提高傳輸速率(達56kb/s或更高),但硬件比較復(fù)雜。,返回,2020年9月26日星期六,25,3、波特率(Baud rate),波特率:即數(shù)據(jù)傳送速率,表示每秒鐘傳送二進制代碼的位數(shù),它的單位是b/s。 波特率對于CPU與外界的通信是很重要的。 假設(shè):數(shù)據(jù)傳送速率是120字符/s,而每個字符格式包含1個代碼位(1個起始位、1個終止位、8個數(shù)據(jù)位)。這時,傳送的波特率為: 10b字符120字符s12

12、00bs,返回,2020年9月26日星期六,26,3、波特率(Baud rate),每一位代碼的傳送時間Td為波特率的倒數(shù)。 Td1b(1200bs-1)0.833ms 異步通信的傳送速率在50b/s-19200b/s之間,常用于計算機到終端機和打印機之間的通信、直通電報以及無線電通信的數(shù)據(jù)發(fā)送等。,返回,2020年9月26日星期六,27,7.1.4 串行通信的過程及通信協(xié)議,1、串并轉(zhuǎn)換與設(shè)備同步 兩個通信設(shè)備在串行線路上成功地實現(xiàn)通信必 須解決兩個問題: 一是串并轉(zhuǎn)換,即如何把要發(fā)送的并行數(shù) 據(jù)串行化,把接收的串行數(shù)據(jù)并行化; 二是設(shè)備同步,即同步發(fā)送設(shè)備與接收設(shè)備的 工作節(jié)拍,以確保發(fā)送

13、數(shù)據(jù)在接收端被正確讀出。,返回,2020年9月26日星期六,28,1、串并轉(zhuǎn)換與設(shè)備同步,(1)串并轉(zhuǎn)換 串行通信:是將計算機內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)換成 串行數(shù)據(jù),將其通過一根通信線傳送;并將接收 的串行數(shù)據(jù)再轉(zhuǎn)換成并行數(shù)據(jù)送到計算機中。,返回,2020年9月26日星期六,29,1、串并轉(zhuǎn)換與設(shè)備同步,在計算機串行發(fā)送數(shù)據(jù)之前,計算機內(nèi)部的并行數(shù)據(jù)被送入移位寄存器并一位一位地輸出,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)。如P151圖7-5所示。 在接收數(shù)據(jù)時,來自通信線路的串行數(shù)據(jù)被壓入移位寄存器,滿8位后并行送到計算機內(nèi)部。 如P151圖7-6所示。 在串行通信控制電路中,串-并、并-串轉(zhuǎn)換邏輯被集成在串行異步

14、通信控制器芯片中。89C51單片機的串行口和IBM-PC相同。,返回,圖7-5 發(fā)送時的并-串轉(zhuǎn)換,圖7-6 接收時的串-并轉(zhuǎn)換,2020年9月26日星期六,32,(2)設(shè)備同步,進行串行通信的兩臺設(shè)備必須同步工作才能有效地檢測通信線路上的信號變化,從而采樣傳送數(shù)據(jù)脈沖。 設(shè)備同步對通信雙方有兩個共同要求: 一是通信雙方必須采用統(tǒng)一的編碼方法; 二是通信雙方必須能產(chǎn)生相同的傳送速率。,返回,2020年9月26日星期六,33,(2)設(shè)備同步,采用統(tǒng)一的編碼方法確定了一個字符二進制表示值的位發(fā)送順序和位串長度,當(dāng)然還包括統(tǒng)一的邏輯電平規(guī)定,即電平信號高低與邏輯1和邏輯0的固定對應(yīng)關(guān)系。 通信雙方只

15、有產(chǎn)生相同的傳送速率,才能確保設(shè)備同步,這就要求發(fā)送設(shè)備和接收設(shè)備采用相同頻率的時鐘。發(fā)送設(shè)備在統(tǒng)一的時鐘脈沖上發(fā)出數(shù)據(jù),接收設(shè)備才能正確檢測出與時鐘脈沖同步的數(shù)據(jù)信息。,返回,2020年9月26日星期六,34,2、串行通信協(xié)議,通信協(xié)議:是對數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等。 通信雙方必須遵守統(tǒng)一的通信協(xié)議。串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種。 在此只討論異步串行通信協(xié)議和異步串性協(xié)議規(guī)定的字符數(shù)據(jù)的傳送格式。,返回,2020年9月26日星期六,35,2、串行通信協(xié)議,(1)起始位 通信線上沒有數(shù)據(jù)被傳送時處于邏輯1狀態(tài)。 當(dāng)發(fā)送設(shè)備要發(fā)送一個字符數(shù)據(jù)時,首先發(fā)出一個邏

16、輯0信號,這個邏輯低電平就是起始位。 起始位通過通信線傳向接收設(shè)備,接收設(shè)備檢測到這個邏輯低電平后,就開始準(zhǔn)備接收數(shù)據(jù)位信號。 起始位所起的作用就是設(shè)備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步。,返回,2020年9月26日星期六,36,2、串行通信協(xié)議,(2)數(shù)據(jù)位 當(dāng)接收設(shè)備收到起始位后,緊接著就會收到數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是5、6、7或8。IBM-PC中經(jīng)常采用7位或8位數(shù)據(jù)傳送,89C51串行口采用8位或9位數(shù)據(jù)傳送。這些數(shù)據(jù)位被接收到移位寄存器中,構(gòu)成傳送數(shù)據(jù)字符。在字符數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始發(fā)送,依次順序在接收設(shè)備中被轉(zhuǎn)換為并行數(shù)據(jù)。,返回,2020年9月26日星期

17、六,37,2、串行通信協(xié)議,(3)奇偶校驗位 數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗位。奇偶校驗用于有限差錯檢測,通信雙方需約定已知的奇偶校驗方式。如果選擇偶校驗,那么組成數(shù)據(jù)位和奇偶位的邏輯1的個數(shù)必須是偶數(shù);如果選擇奇校驗,那么邏輯1的個數(shù)必須是奇數(shù)。,返回,2020年9月26日星期六,38,2、串行通信協(xié)議,(4)停止位約定 在奇偶位或數(shù)據(jù)位(當(dāng)無奇偶校驗時)之后發(fā)送的是停止位。停止位是一個字符數(shù)據(jù)的結(jié)束標(biāo)志,可以是1位,1.5位或2位的高電平。接收設(shè)備收到停止位之后,通信線路上便又恢復(fù)邏輯1狀態(tài),直至下一個字符數(shù)據(jù)的起始位到來。,返回,2020年9月26日星期六,39,2、串行通信協(xié)議,(

18、5)波特率設(shè)置 通信線上傳送的所有位信號都保持一致的信號持續(xù)時間,每一位的信號持續(xù)時間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個二進制位來衡量的,這個速度叫波特率。如果數(shù)據(jù)以300個二進制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s。,返回,2020年9月26日星期六,40,2、串行通信協(xié)議,(6)掛鉤(握手)信號約定 (見本章7.4節(jié)實例),返回,2020年9月26日星期六,41,7.2 串行口及應(yīng)用,89C51單片機除具有4個8位并行口外,還具有串行接口。 此串行接口是一個全雙工串行通信接口,即能同時進行串行發(fā)送和接收數(shù)據(jù)。 它可以作UATR(通用異步接收和發(fā)送

19、器)用,也可以作同步移位寄存器用。 使用串行接口可以實現(xiàn)89C51單片機系統(tǒng)之間點對點的單機通信和89C51與系統(tǒng)機(如IBM-PC機等)的單機或多機通信。,返回,2020年9月26日星期六,42,7.2 串行口及應(yīng)用,7.2.1 89C51串行口 7.2.2 89C51串行口的工作方式及應(yīng)用,返回,2020年9月26日星期六,43,7.2.1 89C51串行口,1、結(jié) 構(gòu) 2、串行口控制字及控制寄存器 3、串行通信工作方式 4、波特率設(shè)計,返回,2020年9月26日星期六,44,1、結(jié) 構(gòu),89C51通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進行

20、通信。 其內(nèi)部結(jié)構(gòu)簡化示意圖如P153圖7-7所示。圖中有兩個物理獨立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H,可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入,不能讀出; 接收緩沖器只能讀出,不能寫入。,返回,2020年9月26日星期六,45,1、結(jié) 構(gòu),串行發(fā)送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖。移位脈沖的速率即是波特率。,返回,圖7-7 串行口內(nèi)部結(jié)構(gòu)示意簡圖,2020年9月26日星期六,47,1、結(jié) 構(gòu),從圖中可看出,接收器是雙緩沖結(jié)構(gòu),在前一個字節(jié)被從接收緩沖器SBU

21、F讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CPU未讀取時,會丟失前一個字節(jié)。 串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進行讀或?qū)懙?。?dāng)向SBUF發(fā)“寫”命令時(執(zhí)行“MOV SBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標(biāo)志位TI=1。,返回,2020年9月26日星期六,48,1、結(jié) 構(gòu),在滿足串行口接收中斷標(biāo)志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當(dāng)發(fā)讀SBUF

22、命令時(執(zhí)行“MOV A,SBUF”命令),便由接收緩沖器(SBUF)取出信息通過89C51內(nèi)部總線送CPU。 對于發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會產(chǎn)生重疊錯誤,一般不需要用雙緩沖器結(jié)構(gòu)來保持最大傳送速率。,返回,2020年9月26日星期六,49,2、串行口控制字及控制寄存器,89C51串行口是可編程接口,對它初始化編程只 用兩個控制字分別寫入特殊功能寄存器SCON (98H)和電源控制寄存器PCON(87H)中即可。 (1)SCON(98H) 89C51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志等均由特殊功能寄存器SCON控制和指示,其控制字格式如P154圖7-8所示。

23、,返回,圖7-8 串行口控制寄存器SCON,2020年9月26日星期六,51,2、串行口控制字及控制寄存器,SM0和SM1(SCON.7,SCON.6)串行口工作方式選擇位。兩個選擇位對應(yīng)4種通信方式,如P154表7-1所示。其中,fosc是振蕩頻率。,2020年9月26日星期六,52,2、串行口控制字及控制寄存器,SM2(SCON.5)多機通信控制位,主要用于方式2和方式3。 若置SM2=1,則允許多機通信。當(dāng)一片89C51(主機)與多片89C51(從機)通信時,所有從機的SM2位都置1。主機首先發(fā)送的一幀數(shù)據(jù)為地址,即從機機號,其中第9位為1,所有的從機接收到數(shù)據(jù)后,將其中第9位裝入RB8

24、中。,返回,2020年9月26日星期六,53,2、串行口控制字及控制寄存器,各個從機根據(jù)收到的第9位數(shù)據(jù)(RB8中)的值來決定從機可否再接收主機的信息。 若(RB8)0,說明是數(shù)據(jù)幀,則使接收中斷標(biāo)志位RI0,信息丟失; 若(RB8)1,說明是地址幀,數(shù)據(jù)裝入SBUF并置RI1,中斷所有從機,被尋址的目標(biāo)從機清除SM2以接收主機發(fā)來的一幀數(shù)據(jù)。其他從機仍然保持SM21。,返回,2020年9月26日星期六,54,2、串行口控制字及控制寄存器,若SM2=0,即不屬于多機通信情況,則接收一貞數(shù)據(jù)后,不管第九位數(shù)據(jù)是0還是1,都制RI=1,接收到的數(shù)據(jù)裝入SBUF。 根據(jù)SM2這個功能,可實現(xiàn)多個89

25、C51應(yīng)用系統(tǒng)的串行通信。 在方式1時,若SM2=1,則只有接收到有效停止位時,RI才制1,以便接收下一貞數(shù)據(jù)。在方式0時,SM2必須是0。,返回,2020年9月26日星期六,55,2、串行口控制字及控制寄存器,REN(SCON.4)允許接收控制位。由軟件置1或清0,只有當(dāng)REN1時才允許接收,相當(dāng)于串行接收的開關(guān);若REN0,則禁止接收。 在串行通信接收控制過程中,如果滿足RI0和REN1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中。,返回,2020年9月26日星期六,56,2、串行口控制字及控制寄存器,TB8(SCON.3)發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中。在方式2或

26、方式3中,根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復(fù)位。在許多通信協(xié)議中可用作奇偶校驗位,也可在多機通信中作為發(fā)送地址幀或數(shù)據(jù)幀的標(biāo)志位。對于后者,TB81,說明該幀數(shù)據(jù)為地址;TB80,說明該幀數(shù)據(jù)為數(shù)據(jù)字節(jié)。在方式0或方式1中,該為未用。,返回,2020年9月26日星期六,57,2、串行口控制字及控制寄存器,RB8(SCON.2)接收數(shù)據(jù)的第9位。在方式2或方式3中,接收到的第9位數(shù)據(jù)放在RB8位。它或是約定的奇/偶校驗位,或是約定的地址/數(shù)據(jù)標(biāo)識位。在方式2和方式3多機通信中,若SM21,如果RB81,說明收到的數(shù)據(jù)為地址幀。 在方式1中,若SM20(即不是多機通信情況),RB8中存放的是已接收到

27、的停止位。在方式0中,該位未用。,返回,2020年9月26日星期六,58,2、串行口控制字及控制寄存器,TI(SCON.1)發(fā)送中斷標(biāo)志。在一幀數(shù)據(jù)發(fā)送完時被置位。在方式0串行發(fā)送第8位結(jié)束或其他方式串行發(fā)送到停止位的開始時由硬件置位,可用軟件查詢。它同時也申請中斷,TI置位意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準(zhǔn)備發(fā)送下一幀數(shù)據(jù)。串行口發(fā)送中斷被響應(yīng)后,TI不會自動清0,必須由軟件清0。,返回,2020年9月26日星期六,59,2、串行口控制字及控制寄存器,RI(SCON.0)接收中斷標(biāo)志。在節(jié)收到一幀有效數(shù)據(jù)后由硬件置位。在方式0中,第8位數(shù)據(jù)發(fā)送結(jié)束時,由硬件置位

28、;在其他三種方式中,當(dāng)接收到停止位中間時由硬件置位。RI1,申請中斷,表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù)。CPU響應(yīng)中斷,取走數(shù)據(jù)。RI也必須由軟件清0,清除中斷申請,并準(zhǔn)備接收下一幀數(shù)據(jù)。,返回,2020年9月26日星期六,60,2、串行口控制字及控制寄存器,串行發(fā)送中斷標(biāo)志TI和接收中斷標(biāo)志RI是同一個中斷源,CPU事先不知道是發(fā)送中斷TI還是接收中斷RI產(chǎn)生的中斷請求,所以,在全雙工通信時,必須由軟件來判別。 復(fù)位時,SCON所有位均清0。,返回,2020年9月26日星期六,61,2、串行口控制字及控制寄存器,(2)PCON(87H) 電源控制寄存器PCON

29、中只有SMOD位與串行口工作有關(guān),如圖7-9所示。,圖7-9 電源控制寄存器PCON,2020年9月26日星期六,62,2、串行口控制字及控制寄存器,SMOD(PCON.7)波特率倍增位。 在串行口方式1、方式2和方式3時,波特率和SMOD成正比,亦即當(dāng)SMOD1時,波特率提高一倍。 復(fù)位時,SMOD0。,返回,2020年9月26日星期六,63,3、串行通信工作方式,根據(jù)實際需要,89C51串行口可設(shè)置4種工作方式,可有8位、10位或11位幀格式。 方式0:以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。其幀格式如下:,返回,2020年9月26日星期六,64,3、串行通信工作方式,方

30、式1:以10位為一幀傳輸,設(shè)有1個起始位(0), 8個數(shù)據(jù)位和1個停止位(1)。其幀格式為:,返回,2020年9月26日星期六,65,3、串行通信工作方式,方式2和方式3:以11位為1幀傳輸,設(shè)有1個起始位(0),8個數(shù)據(jù)位,1個附加第9位和1個停止位(1)。其幀格式為: 附加第9位(D8)由軟件置1或清0。 發(fā)送時在TB8中,接收時送RB8中。,返回,2020年9月26日星期六,66,3、串行通信工作方式,(1)串行口方式0 方式0為同步移位寄存器輸入/輸出方式,常用于擴展I/O口。 串行數(shù)據(jù)通過RXD輸入或輸出,而TXD用于輸出移位時鐘,作為外接部件的同步信號。 圖7-10(a)為發(fā)送電路

31、,圖7-11(a)為接收電路。 這種方式不適用于兩個89C51之間的直接數(shù)據(jù)通信,但可以通過外接移位寄存器來實現(xiàn)單片機的接口擴展。,返回,圖7-10 方式0發(fā)送電路及時序,圖7-11 方式0接收電路及時序,2020年9月26日星期六,69,3、串行通信工作方式,例:74LS164可用于擴展并行輸出口, 74LS165可用于擴展輸入口。 在這種方式下,收/發(fā)的數(shù)據(jù)為8位,低位在前,無起始位、奇偶校驗位及停止位,波特率是固定的。,返回,2020年9月26日星期六,70,3、串行通信工作方式,發(fā)送過程中,當(dāng)執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF(99H)的指令時,串行口把SBUF中8位數(shù)據(jù)以fosc/

32、12的波特率從RXD(P3.0)端輸出,發(fā)送完畢置中斷標(biāo)志TI=1。方式0發(fā)送時序如圖7-10(b)所示。,返回,2020年9月26日星期六,71,3、串行通信工作方式,寫SBUF指令在S6P1處產(chǎn)生一個正脈沖,在下一個機器周期的S6P2處數(shù)據(jù)的最低位輸出到RXD(P3.0)腳上;再在下一個機器周期的S3,S4,S5輸出移位時鐘為低電平,而在S6級下一個機器周期的S1,S2為高電平,就這樣講8位數(shù)據(jù)由低位至高位一位一位順序通過RXD線輸出,并在TXD腳上輸出fosc/12的移位時鐘,在“寫SBUF”有效后的第10個機器周期的S1P1將發(fā)送中斷標(biāo)志TI置位。圖中,74LS164是TTL“串入并出

33、”移位寄存器。,返回,2020年9月26日星期六,72,3、串行通信工作方式,接收時,用軟件置REN=1(同時,RI=0),即開始接收。接收時序如圖7-11(b)所示。當(dāng)使SCON中的REN=1(RI=0)時,產(chǎn)生一個正脈沖,在下一個機器周期的S3P1S5P2,從TXD(P3.1)腳上輸出低電平的移位時鐘,在此機器周期的S5P2對P3.0腳采樣,并在本機器周期的S6P2通過串行口內(nèi)的輸入移位寄存器將采樣值移位接收;在同一個機器的S6P1到下一個機器周期的S2P2,輸出移位時鐘為高電平。,返回,2020年9月26日星期六,73,3、串行通信工作方式,于是,將數(shù)據(jù)字節(jié)從低位至高位一位一位地接收下來

34、并裝入SBUF中,在啟動接收過程(即寫SCON,清RI位)將SCON中的RI清0之后的第10個機器周期的S1P1,RI被置位。這一幀數(shù)據(jù)接收完畢,可進行下一幀接收。圖7-11(b)中,74LS165是TTL“并入串出”移位寄存器,QH端為74LS165的串行輸出端,經(jīng)P3.0輸入至89C51。,返回,2020年9月26日星期六,74,3、串行通信工作方式,(2)串行口方式1 方式1真正用于串行發(fā)送或接收,為10位通用異步接口。TXD與RXD分別用于發(fā)送與接收數(shù)據(jù)。 收發(fā)一幀數(shù)據(jù)的格式為1位起始位、8位數(shù)據(jù)位(低位在前)、1位停止位,共10位。 在接收時,停止位進入SCON的RB8,此方式的傳送

35、波特率可調(diào)。 串行口方式1的發(fā)送和接收時序如圖7-12(a)和(b)所示,返回,圖7-12 方式1發(fā)送和接收時序,2020年9月26日星期六,76,3、串行通信工作方式,方式1發(fā)送時,數(shù)據(jù)從引腳TXD(P3.1)端輸出。當(dāng)執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖器SBUF的命令時,就啟動了發(fā)送器開始發(fā)送。發(fā)送時的定時信號,也就是發(fā)送移位時鐘(TX時鐘),是由定時器T1(見圖7-7)送來的溢出信號經(jīng)過16分頻或32分頻(取決于SMOD的值)而得到的,TX時鐘就是發(fā)送波特率。,返回,2020年9月26日星期六,77,3、串行通信工作方式,可見,方式1的波特率是可變的。發(fā)送開始的同時,SEND變?yōu)橛行?,將起始位向TXD

36、輸出;此后每經(jīng)過一個TX時鐘周期(16分頻計數(shù)器溢出一次為一個時鐘周期,因此,TX時鐘頻率由波特率決定。)產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位;8位數(shù)據(jù)位全部發(fā)送完后,置為位TI,并申請中斷置TXD為1作為停止位,再經(jīng)一個時鐘周期,SEND失效。,返回,2020年9月26日星期六,78,3、串行通信工作方式,方式1接收時,數(shù)據(jù)從引腳RXD(P3.0)端輸入。接收是在SCON寄存器中REN位置1的前提下,并檢測到起始位(RXD上檢測到10的跳變,即起始位)而開始的。,返回,2020年9月26日星期六,79,3、串行通信工作方式,接收時,定時信號有兩種(如圖7-12(b)所示):一種是接收移

37、位時鐘(RX時鐘),它的頻率和傳送波特率相同,也是由定時器T1的溢出信號經(jīng)過16或32分頻而得到的;另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍,亦即在一位數(shù)據(jù)期間有16位檢測器采樣脈沖,為完成檢測,以16倍于波特率的速率對RXD進行采樣。,返回,2020年9月26日星期六,80,3、串行通信工作方式,為了接受準(zhǔn)確無誤,在正式接受數(shù)據(jù)之前,還必須判定這個10跳變是否是干擾引起的。為此,在這位中間(即一位時間分成16等份,在第7,第8及第9等份)連續(xù)對RXD采樣三次,取其中兩次相同的值進行判斷。這樣能較好地消除干擾的影響。當(dāng)確認(rèn)是真正的起始位(0)后,就開始接受一幀數(shù)據(jù)。當(dāng)一幀數(shù)據(jù)接受完

38、畢后,必須同時滿足以下兩個條件,這次接受才真正有效。,返回,2020年9月26日星期六,81,3、串行通信工作方式,RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中數(shù)據(jù)已被取走。由軟件使RI=0,以便提供“接收SBUF已空”的信息。 SM2=0或收到的停止位為1(方式1時,停止位進入RB8),則將接收到的數(shù)據(jù)裝入串行口的SBUF和RB8(RB8裝入停止位),并置位RI;如果不滿足,接收到的數(shù)據(jù)不能裝入SBUF,這意味著該幀信息將會丟失。,返回,2020年9月26日星期六,82,3、串行通信工作方式,注意:在整個接收過程中,保證REN=1是一個先決條件。只有當(dāng)REN=

39、1時,才能對RXD進行檢測。,返回,2020年9月26日星期六,83,3、串行通信工作方式,(3)串行口方式2和方式3 串行口工作在方式2和方式3均為每幀11位異步通信格式,由TXD和RXD發(fā)送與接收(兩種方式操作是完全一樣的,所不同的只是波特率)。,返回,2020年9月26日星期六,84,3、串行通信工作方式,每幀11位,即1位起始位,8位數(shù)據(jù)位(低位在前),1位可編程的第9數(shù)據(jù)位和1位停止位。發(fā)送時,第9數(shù)據(jù)位(TB8)可以設(shè)置為1或0,也可將奇偶位裝入TB8,從而進行奇偶校驗;接收時,第9數(shù)據(jù)位進入SCON的RB8。 方式2和方式3的發(fā)送、接收時序如圖7-13所示。其操作與方式1類似。,

40、返回,圖7-13 方式2、方式3發(fā)送和接收時序,2020年9月26日星期六,86,3、串行通信工作方式,發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如作奇偶校驗位或地址/數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫入SBUF,即可啟動發(fā)送過程。串行口能自動把TB8取出,并裝入到第9位數(shù)據(jù)位的位置,再逐一發(fā)送出去。發(fā)送完畢,使TI=1。,返回,2020年9月26日星期六,87,3、串行通信工作方式,接收時,使SCON中的REN=1,允許接收。當(dāng)檢測到RXD(P3.0)端有10的跳變(起始位)時,開始接收9位數(shù)據(jù),送入移位寄存器(9位)。當(dāng)滿足RI=0且SM2=0,或接收到的第9位數(shù)據(jù)為1時,前8位數(shù)據(jù)送入SB

41、UF,附加的第9位數(shù)據(jù)送入SCON中的RB8,置RI為1;否則,這次接收無效,也不置位RI。,返回,2020年9月26日星期六,88,4、波特率設(shè)計,在串行通信中,收發(fā)雙方對發(fā)送或接收的數(shù)據(jù)速率有一定的約定,通過軟件對89C51串行口編程可約定四種工作方式。其中,方式0和方式2的波特率是固定的;而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決定。 串行口的四種工作方式對應(yīng)著三種波特率。由于輸入的移位時鐘來源不同,因此,各種方式的波特率計算公式也不同。,返回,2020年9月26日星期六,89,4、波特率設(shè)計,(1)方式0的波特率 由P161圖7-14可見,方式0時,發(fā)送或接收一位數(shù)據(jù)的

42、移位時鐘脈沖由S6(即第6個狀態(tài)周期,第12個節(jié)拍)給出,即每個機器周期產(chǎn)生一個移位時鐘,發(fā)送或接收一位數(shù)據(jù)。因此,波特率固定為振蕩頻率的1/12,并不受PCON寄存器中SMOD位的影響。,返回,2020年9月26日星期六,90,4、波特率設(shè)計,圖7-14 串行口方式0波特率的產(chǎn)生,返回,2020年9月26日星期六,91,4、波特率設(shè)計,方式0波特率 fosc / 12 注意:符號“”表示左面的表達式只是引用右面表達式的數(shù)值,即右面的表達式是提供了一種計算的方法。,返回,2020年9月26日星期六,92,4、波特率設(shè)計,(2)方式2的波特率 串行口方式2波特率的產(chǎn)生與方式0不同,即輸入的時鐘源

43、不同,其時鐘輸入部分入圖7-15所示。 控制接收與發(fā)送的移位時鐘由振蕩頻率fosc的第二節(jié)拍P2時鐘(即fosc/2)給出,所以,方式2波特率取決于PCON中SMOD位的值: SMOD=0時,波特率為fosc的1/64; SMOD=1時,波特率為fosc的1/32。 即方式2波特率2SMOD/64fosc,返回,2020年9月26日星期六,93,4、波特率設(shè)計,圖7-15 串行口方式2波特率的產(chǎn)生,返回,2020年9月26日星期六,94,4、波特率設(shè)計,(3)方式1和方式3的波特率 方式1和方式3的移位時鐘脈沖由定時器T1的溢出率決定,如圖7-16所示。因此,89C51串行口方式1和方式3的波

44、特率由定時器T1的溢出率與SMOD值同時決定。 即:方式1、方式3波特率T1溢出率/n,返回,2020年9月26日星期六,95,4、波特率設(shè)計,返回,圖7-16 串行口方式1、方式3波特率的產(chǎn)生,2020年9月26日星期六,96,4、波特率設(shè)計,當(dāng)SMOD=0時,n=32;SMOD=1時,n=16。 所以,可用下式確定方式1和方式3的波特率: 方式1、方式3波特率2SMOD/32(T1溢出速率) 其中,T1溢出速率取決于T1的計數(shù)速率 (計數(shù)速率fosc/12)和T1預(yù)置的處置。 若定時器T1采用模式1時,波特率公式如下:,串行方式1、方式3波特率 2SMOD/32(fosc/12)/(216

45、-初值),返回,2020年9月26日星期六,97,4、波特率設(shè)計,P163表7-2列出了串行口方式1、方式3常用波特率及其初值。 定時器T1用作波特率發(fā)生器時,通常選用定時器模式2(自動重裝初值定時器)比較實用。要設(shè)置定時器T1為定時方式(使C/T=0),讓T1計數(shù)內(nèi)部振蕩脈沖,即計數(shù)速率為fosc/12(注意應(yīng)禁止T1中斷,以免溢出而產(chǎn)生不必要的中斷)。先設(shè)定TH1和TL1定時即輸初值為X,那么每過“28-X”個機器周期,定時器T1就會產(chǎn)生一次溢出。,返回,2020年9月26日星期六,98,表7-2 常用波特率與其他參數(shù)選取關(guān)系,2020年9月26日星期六,99,4、波特率設(shè)計,因此,T1溢

46、出速率為 T1溢出速率(fosc/12)/(28-X) 于是,可得出定時器T1模式2的初始值X:,返回,2020年9月26日星期六,100,4、波特率設(shè)計,例7-1:89C51單片機時鐘振蕩頻率為11.0592MHz,選用定時器T1工作模式2作為波特率發(fā)生器,波特率為2400b/s,求初值。 解:設(shè)置波特率控制為(SMOD)=0 所以,(TH1)=(TL1)=F4H。,返回,2020年9月26日星期六,101,4、波特率設(shè)計,系統(tǒng)晶體振蕩頻率選為11.0592MHz就是為了使初值為整數(shù),從而產(chǎn)生精確的波特率。 如果串行通信選用很低的波特率,可將定時器T1置于模式0或模式1,即13位或16位定時

47、方式;但在這種情況下,T1溢出時,需要中斷服務(wù)程序重裝初值。中斷響應(yīng)時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的辦法加以調(diào)整。,返回,2020年9月26日星期六,102,7.2.2 89C51串行口的工作方式及應(yīng)用,如前所述,89C51串行口的工作主要受串行口控制寄存器SCON的控制,另外,也和電源控制寄存器PCON有些關(guān)系。SCON寄存器用來控制串行口的工作方式,還有一些其他的控制作用。 89C51單片機串行口的四種工作方式傳送的數(shù)據(jù)位數(shù)敘述如下:,返回,2020年9月26日星期六,103,7.2.2 89C51串行口的工作方式及應(yīng)用,方式0:移位寄存器輸入/輸出方式。串行數(shù)據(jù)

48、通過RXD線輸入或輸出,而TXD線專用于輸出時鐘脈沖給外部移位寄存器。方式0可用來同步輸出或接收8位數(shù)據(jù)(最低位首先輸出),波特率固定為fosc/12,其中,fosc為單片機的時鐘頻率。,返回,2020年9月26日星期六,104,7.2.2 89C51串行口的工作方式及應(yīng)用,方式1:10位異步接收/發(fā)送方式。一幀數(shù)據(jù)包括1位起始位(0),8位數(shù)據(jù)位和1位停止位(1)。串行接口電路在發(fā)送時能自動插入起始位和停止位;在接收時,停止位進入特殊功能寄存器SCON的RB8位。方式1的傳送波特率是可變的,可通過改變內(nèi)部定時器的定時值來改變波特率。 方式2:11位異步接收/發(fā)送方式。除了1位起始位、8位數(shù)據(jù)

49、位、1位停止位之外,還可以插入第9位數(shù)據(jù)位。 方式3:同方式2,只是波特率可變。,返回,2020年9月26日星期六,105,1、串行口方式0的應(yīng)用,89C51單片機串行口基本上是異步通信接口,但在方式0時是同步操作。外接串入并出或并入串出器件,可實現(xiàn)I/O的擴展。 串行口方式0的數(shù)據(jù)傳送可以采用中斷方式,也可以采用查詢方式。無論哪種方式,都要借助于TI或RI標(biāo)志。,返回,2020年9月26日星期六,106,1、串行口方式0的應(yīng)用,在串行口發(fā)送時,或者靠TI置位后引起中斷申請,在中斷服務(wù)程序中發(fā)送下一組數(shù)據(jù);或者通過查詢TI的值,只要TI為0就繼續(xù)查詢,直到TI為1后結(jié)束查詢,進入下一個字符的發(fā)

50、送。 在串行口接收時,由RI引起中斷或?qū)I查詢來決定何時接收下一個字符。無論采用什么方式,在開始串行通信前,都要先對SCON寄存器初始化,進行工作方式的設(shè)置。在方式0中,SCON寄存器的初始化只是簡單地把00H送入SCON就可以了。,返回,2020年9月26日星期六,107,1、串行口方式0的應(yīng)用,例7-2:用89C51串行口外接164串入并出移位寄存器擴展8位并行口;8位并行口的每位都接一個發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán)。設(shè)發(fā)光二極管為共陰極接法,如P165圖7-17所示。 解:設(shè)數(shù)據(jù)串行發(fā)送采用中斷方式,顯示的延遲通過調(diào)用延遲程序DELAY來實現(xiàn)。,返回

51、,2020年9月26日星期六,108,1、串行口方式0的應(yīng)用,圖7-17 串入并出電路,返回,2020年9月26日星期六,109,1、串行口方式0的應(yīng)用,程序清單: ORG 0023H ;串行口中斷入口 AJMP SBR ;轉(zhuǎn)入串行口中斷服務(wù)程序 ORG 2000H ;主程序起始地址 MOV SCON ,#00H ;串行口方式0初始化 MOV A ,#88H ;最左一位發(fā)光二極管先亮 CLR P1.0 ;關(guān)閉并行輸出 MOV SBUF,A ;開始串行輸出,返回,2020年9月26日星期六,110,1、串行口方式0的應(yīng)用,LOOP : SJMP $ ;等待中斷 SBR : SETB P1.0 ;

52、啟動并行輸出 ACALL DELAY ;顯示延遲一段時間 CLR TI ;清發(fā)送中斷標(biāo)志 RR A ;準(zhǔn)備右邊一位顯示 CLR P1.0 ;關(guān)閉并行輸出 MOV SBUF , A ;再一次串行輸出 RETI ;中斷返回,返回,2020年9月26日星期六,111,1、串行口方式0的應(yīng)用,用方式0外加移位寄存器來擴展8位輸出口時,要求移位寄存器帶有輸出控制,否則串行移位過程也會反映到并行輸出口;另外,輸出口最好再接一個寄存器或鎖存器,以免在輸出門關(guān)閉使(STB=0)輸出又發(fā)生變化。,返回,2020年9月26日星期六,112,1、串行口方式0的應(yīng)用,用方式0加上并入串出移位寄存器可擴展一個8位并行輸

53、入口。移位寄存器必須帶有預(yù)置/移位的控制端,由單片機的一個輸出端子加以控制,以實現(xiàn)先由8位輸入口置數(shù)到移位寄存器,然后再串行移位從單片機的串行口輸入到接收緩沖器,最后再讀入到CPU中。,返回,2020年9月26日星期六,113,1、串行口方式0的應(yīng)用,例7-3:用89C51串行口外加移位寄存器165或166擴展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號。當(dāng)K=0時,表示要求輸入數(shù)據(jù),輸入的8位為開關(guān)量,提供邏輯模擬子程序的輸入信號。如P165圖7-18所示。,返回,2020年9月26日星期六,114,1、串行口方式0的應(yīng)用,圖7-18 并入串出電路,返回,2020年9月26

54、日星期六,115,1、串行口方式0的應(yīng)用,解:串行口方式0的接收要用SCON寄存器中的REN位作為開關(guān)來控制。因此,初值化時,除了設(shè)置工作方式之外,還要使REN位為1,其余各位仍然為0。 對RI采用查詢方式來編寫程序,當(dāng)然,先要查詢開關(guān)K是否閉合。 程序清單:,返回,2020年9月26日星期六,116,1、串行口方式0的應(yīng)用,START: MOV SCON ,#10H ;串行口方式0初始化 JB P1.1 ,$ ;開關(guān)K未閉合,等待 SETB P1.0 ;P/S=1,并行置入數(shù)據(jù) CLR P1.0 ;P/S=0,開始串行移位 JNB RI ,$ ;查詢RI CLR RI ;查詢結(jié)束,清RI M

55、OV A ,SBUF ;讀數(shù)據(jù)到累加器 ACALL LOGSIM ;進行邏輯模擬 SJMP START ;準(zhǔn)備下一次模擬,返回,2020年9月26日星期六,117,2、串行口方式1的發(fā)送和接收,例7-4:89C51串行口按雙工方式收發(fā)ASCII字符,最高位用來作奇偶校驗位,采用奇校驗方式,要求傳送的波特率為1200b/s。編寫有關(guān)的通信程序。,返回,2020年9月26日星期六,118,2、串行口方式1的發(fā)送和接收,解:7位ASCII碼加1位奇校驗共8位數(shù)據(jù), 故可采用串行口方式1。 89C51單片機的奇偶校驗位P是當(dāng)累加器A中1的數(shù)目為奇數(shù)時,P=1。如果直接把P的值放入ASCII碼的最高位,

56、恰好成了偶校驗,與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗。,返回,2020年9月26日星期六,119,2、串行口方式1的發(fā)送和接收,雙工通信要求收、發(fā)能同時進行。實際上,收、發(fā)操作主要是在串行接口進行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進行,響應(yīng)中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進行發(fā)送操作還是接收操作。,返回,2020年9月26日星期六,120,2、串行口方式1的發(fā)送和接收,發(fā)送和接收都通過調(diào)用子程序來完成, 設(shè):發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為6MHz,通過查波

57、特率初值(P163表7-2)可知定時器的初裝值為F3H。定時器T1采用工作模式2,可以避免計數(shù)溢出后用軟件重裝定時初值的工作。,返回,2020年9月26日星期六,121,2、串行口方式1的發(fā)送和接收,程序清單: 主程序 MOV TMOD ,#20H ;定時器1設(shè)為模式2 MOV TL1 , #0F3H ;定時器初值 MOV TH1 ,#0F3H ;8位重裝值 SETB TR1 ;啟動定時器1 MOV SCON ,#50H ;設(shè)置為方式1,REN=1,返回,2020年9月26日星期六,122,2、串行口方式1的發(fā)送和接收,程序清單: 主程序 MOV R0 ,#20H ;發(fā)送數(shù)據(jù)區(qū)首址 MOV R

58、1 ,#40H ;接收數(shù)據(jù)取首址 ACALL SOUT ;先輸出一個字符 SETB ES SETB EA SJMP $ ;等待中斷,返回,2020年9月26日星期六,123,2、串行口方式1的發(fā)送和接收,中斷服務(wù)程序 ORG 0023H ;串行口中斷入口 AJMP SBR1 ;轉(zhuǎn)至中斷服務(wù)程序 ORG 0100H SBR1: JNB RI ,SEND ;TI=1,為發(fā)送中斷 ACALL SIN ;RI=1,為接收中斷 SJMP NEXT ;轉(zhuǎn)至統(tǒng)一的出口 SEND: ACALL SOUT ;調(diào)用發(fā)送子程序 NEXT: RETI ;中斷返回,返回,2020年9月26日星期六,124,2、串行口方

59、式1的發(fā)送和接收,發(fā)送子程序 SOUT: CLR TI MOV A ,R0 ;取發(fā)送數(shù)據(jù)到A MOV C ,P ;奇偶標(biāo)識賦予C CPL C ;奇校驗 INC R0 ;修改發(fā)送數(shù)據(jù)指針 MOV SBUF ,A ;發(fā)送ASCII碼 RET ;返回,返回,2020年9月26日星期六,125,2、串行口方式1的發(fā)送和接收,接收子程序 SIN: CLR RI MOV A ,SBUF ;讀出接收緩沖區(qū)內(nèi)容 MOV C ,P ;取出校驗位 CPL C ;奇校驗 ANL A ,#7FH ;刪去校驗位 MOV R1 ,A ;讀入接收緩沖區(qū) INC RI ;修改接收數(shù)據(jù)指針 RET ;返回,返回,2020年9月26日星期六

溫馨提示

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

最新文檔

評論

0/150

提交評論