Chapter4 定時(shí)器、中斷和串口 part2_第1頁(yè)
Chapter4 定時(shí)器、中斷和串口 part2_第2頁(yè)
Chapter4 定時(shí)器、中斷和串口 part2_第3頁(yè)
Chapter4 定時(shí)器、中斷和串口 part2_第4頁(yè)
Chapter4 定時(shí)器、中斷和串口 part2_第5頁(yè)
已閱讀5頁(yè),還剩194頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章MCS-51單片機(jī)的定時(shí)器、中斷和串口part2串行通信技術(shù)及MCS-51單片機(jī)串口串行通信基本知識(shí)1串行口及應(yīng)用2RS-232C標(biāo)準(zhǔn)接口總線及串行通信硬件設(shè)計(jì)389C51與89C51點(diǎn)對(duì)點(diǎn)異步通信489C51與PC機(jī)間通信軟件的設(shè)計(jì)5PC機(jī)與多個(gè)單片機(jī)間的通信6本章重點(diǎn)內(nèi)容89C51串行口的結(jié)構(gòu)及應(yīng)用PC機(jī)與89C51間的雙機(jī)通信一臺(tái)PC機(jī)控制多臺(tái)89C51前沿機(jī)的分布式系統(tǒng),以及通信接口電路和軟件設(shè)計(jì),并給出程序框圖、主程序和接收/發(fā)送子程序.串行通信技術(shù)及MCS-51單片機(jī)串口

串行通信概述什么叫串行通信?

在生活中同學(xué)們排橫隊(duì)行走—并行;

排縱隊(duì)行走—串行。計(jì)算機(jī)中在傳輸信息、數(shù)據(jù)時(shí)也有并行、串行的問(wèn)題。000011001P1.0P1.1P1.2P1.3RXDTXD單片機(jī)外設(shè)1外設(shè)21010110101000串行通信技術(shù)及MCS-51單片機(jī)串口數(shù)據(jù)通信在實(shí)際工作中,計(jì)算機(jī)的CPU與外部設(shè)備之間常常要進(jìn)行信息交換,一臺(tái)計(jì)算機(jī)與其他計(jì)算機(jī)之間也往往要交換信息,所有這些信息交換均可稱(chēng)為通信.通信方式有兩種,即并行通信和串行通信.通常根據(jù)信息傳送的距離決定采用哪種通信方式.例如,在IBM-PC機(jī)與外部設(shè)備(如打印機(jī)等)通信時(shí),如果距離小于30m,可采用并行通信方式;當(dāng)距離大于30m時(shí),則要采用串行通信方式.89C51單片機(jī)具有并行和串行二種基本通信方式.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念并行通信是指數(shù)據(jù)的各位同時(shí)進(jìn)行傳送(發(fā)送或接收)的通信方式.

優(yōu)點(diǎn):傳送速度快

缺點(diǎn):數(shù)據(jù)有多少位,就需要多少根傳送線.例如,89C51單片機(jī)與打印機(jī)之間的數(shù)據(jù)傳送就屬于并行通信.下圖4-31(a)所示為89C51單片機(jī)與外設(shè)間8位數(shù)據(jù)并行通信的連接方法.并行通信在位數(shù)多、傳送距離又遠(yuǎn)時(shí)就不太合適了.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念

89C51

P1.0~P1.7GND~D0D7GND(a)外部設(shè)備

89C51

GNDGND外部設(shè)備RXDRXDTXDTXD(b)4-31兩種通信方式連接串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念串行通信指數(shù)據(jù)是一位一位按順序傳送的通信方式.優(yōu)點(diǎn):只需一對(duì)傳輸線(利用電話線就可作為傳輸線),這樣就大大降低了傳輸成本,特別適用于遠(yuǎn)距離通信;缺點(diǎn):傳送速度較低.假設(shè)并行傳送N位數(shù)據(jù)所需時(shí)間為T(mén),那么串行傳送的時(shí)間至少為NT,實(shí)際上總是大于NT的.

上圖4-31(b)所示為串行通信方式的連接方法.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念串行通信的傳輸方式串行通信的傳送方向通常有三種:一種為單向(或單工,Simplex)配置,只允許數(shù)據(jù)向一個(gè)方向傳送;另一種是半雙向(或半雙工Half-duplex)配置,允許數(shù)據(jù)向兩個(gè)方向中的任一方向傳遞,但每次只能有一個(gè)站點(diǎn)發(fā)送;第三種傳遞方式是全雙向(全雙工Duplex)配置,允許同時(shí)雙向傳送數(shù)據(jù),因此,全雙工配置是一對(duì)單向配置,它要求兩端的通信設(shè)備都具有完整和獨(dú)立的發(fā)送和接收能力.下圖4-32所示為串行通信中的數(shù)據(jù)傳遞方式.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念(a)(b)(c)4-32串行通信傳輸方式串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念異步通信和同步通信串行通信有兩種基本通信方式,即異步通信和同步通信.

一.異步通信

在異步通信中,數(shù)據(jù)是一幀一幀(包括一個(gè)字符代碼或一字節(jié)數(shù)據(jù))傳送的,每一幀的數(shù)據(jù)格式如下圖4-33所示.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念第n個(gè)字符第n+1個(gè)字符起始位停止位停止位起始位8位數(shù)據(jù)奇偶校驗(yàn)數(shù)據(jù)0/10/10/10/10/10/10/10/10/10/10/100110/10/1……(a)第n個(gè)字符第n+1個(gè)字符起始位停止位起始位8位數(shù)據(jù)奇偶校驗(yàn)0/10/10/10/10/10/10/10/10/100/11011……(b)11空閑位4-33異步通信的一幀數(shù)據(jù)格式串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念在幀格式中,一個(gè)字符由四部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位.

首先是一個(gè)起始位(0);然后是5位~8位數(shù)據(jù)(規(guī)定低位在前,高位在后);接下來(lái)是奇偶校驗(yàn)位(可省略);最后是停止位(1).起始位(0)信號(hào)只占用一位,用來(lái)通知接收設(shè)備一個(gè)待接收的字符開(kāi)始到達(dá).

線路上在不傳送字符時(shí)應(yīng)保持為1.

接收端不斷檢測(cè)線路的狀態(tài),若連續(xù)為1以后又測(cè)到一個(gè)0,就知道發(fā)來(lái)一個(gè)新字符,應(yīng)馬上準(zhǔn)備接收.

字符的起始位還被用做同步接收端的時(shí)鐘,以保證以后的接收能正確進(jìn)行.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念起始位后面緊接著是數(shù)據(jù)位,它可以是5位(D0~D4)、6位、7位或8位(D0~D7).奇偶校驗(yàn)(D8)只占一位,但在字符中也可以規(guī)定不用奇偶校驗(yàn)位,則這一位就可省去.也可用這一位(1/0)來(lái)確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等).例如,規(guī)定用ASCⅡ編碼,字符為七位,加一個(gè)奇偶校驗(yàn)位、一個(gè)起始位、一個(gè)停止位,則一幀共十位.

串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念異步通信和同步通信二.同步通信

同步通信中,在數(shù)據(jù)開(kāi)始傳送前用同步字符來(lái)指示(常約定1個(gè)~2個(gè)),并由時(shí)鐘來(lái)實(shí)現(xiàn)發(fā)送端和接收端同步,即檢測(cè)到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落.同步傳送時(shí),字符與字符之間沒(méi)有間隙,也不用起始位和停止位,僅在數(shù)據(jù)開(kāi)始時(shí)用同步字符SYNC來(lái)指示,其數(shù)據(jù)格式如圖4-34所示.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)同步字符同步字符1同步字符2圖4-34同步傳送的數(shù)據(jù)格式串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念

同步字符的插入可以是單同步字符方式或雙同步字符方式,如圖4-34所示,然后是連續(xù)的數(shù)據(jù)塊.同步字符可以由用戶約定,當(dāng)然也可以采用ASCⅡ碼中規(guī)定的SYNC代碼,即16H.按同步方式通信時(shí),先發(fā)送同步字符,接收方檢測(cè)到同步字符后,即準(zhǔn)備接收數(shù)據(jù).在同步傳送時(shí),要求用時(shí)鐘來(lái)實(shí)現(xiàn)發(fā)送端與接收端之間的同步.為了保證接收正確無(wú)誤,發(fā)送方除了傳送數(shù)據(jù)外,還要同時(shí)傳送時(shí)鐘信號(hào).同步傳送可以提高傳輸速率(達(dá)56kb/s或更高),但硬件比較復(fù)雜.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念異步通信和同步通信三.波特率(Baudrate)

波特率,即符號(hào)傳送速率,表示單位時(shí)間內(nèi)載波調(diào)制狀態(tài)改變次數(shù),它的單位是B/s.波特率對(duì)于CPU與外界的通信是很重要的.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念波特率:指數(shù)據(jù)信號(hào)對(duì)載波的調(diào)制速率,它用單位時(shí)間內(nèi)載波調(diào)制狀態(tài)改變次數(shù)來(lái)表示,其單位為波特(Baud)。波特率與比特率的關(guān)系為:比特率=波特率X單個(gè)調(diào)制狀態(tài)對(duì)應(yīng)的二進(jìn)制位數(shù)。比特率:在數(shù)字信道中,比特率是數(shù)字信號(hào)的傳輸速率,它用單位時(shí)間內(nèi)傳輸?shù)亩M(jìn)制代碼的有效位(bit)數(shù)來(lái)表示,其單位為每秒比特?cái)?shù)bit/s(bps)。假設(shè)波特率是120字符/s,而每個(gè)字符格式包含10個(gè)代碼位(1個(gè)起始位、1個(gè)終止位、8個(gè)數(shù)據(jù)位).這時(shí),傳送的比特率為

10b/字符×120字符/s=1200b/s

每一位代碼的傳送時(shí)間Td為波特率的倒數(shù).

異步通信的傳送速率在50b/s~19200b/s之間,常用于計(jì)算機(jī)到終端機(jī)和打印機(jī)之間的通信、直通電報(bào)以及無(wú)線電通信的數(shù)據(jù)發(fā)送等.1b1200b·s-1Td==0.833ms串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念串行通信的過(guò)程及通信協(xié)議一.串并轉(zhuǎn)換與設(shè)備同步兩個(gè)通信設(shè)備在串行線上成功地實(shí)現(xiàn)通信必須解決兩個(gè)問(wèn)題:一是串并轉(zhuǎn)換,即如何把要發(fā)送的并行數(shù)據(jù)串行化,把接收的串行數(shù)據(jù)并行化;二是設(shè)備同步,即同步發(fā)送設(shè)備和接收設(shè)備的工作節(jié)拍,以確保發(fā)送數(shù)據(jù)在接收端被正確讀出.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念1.串并轉(zhuǎn)換串行通信是將計(jì)算機(jī)內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),將其通過(guò)一根通信線傳送;并將接收的串行數(shù)據(jù)再轉(zhuǎn)換成并行數(shù)據(jù)送到計(jì)算機(jī)中.在計(jì)算機(jī)串行發(fā)送數(shù)據(jù)之前,計(jì)算機(jī)內(nèi)部的并行數(shù)據(jù)被送入移位寄存器并一位一位地移出,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù).如圖4-35所示.在接收數(shù)據(jù)時(shí),來(lái)自通信線路的串行數(shù)據(jù)被送入移位寄存器,滿8位后并行送到計(jì)算機(jī)內(nèi)部.如圖4-36所示.在串行通信控制電路中,串-并、并-串轉(zhuǎn)換邏輯被集成在串行異步通信控制器芯片中.89C51單片機(jī)的串行口和IBM-PC機(jī)中的8250芯片都可完成這一功能.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念并行數(shù)據(jù)串行數(shù)據(jù)11122233345678445566777888圖4-35發(fā)送時(shí)的并-串轉(zhuǎn)換串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念串行數(shù)據(jù)并行數(shù)據(jù)11112222333444555666777888圖4-36接收時(shí)的串-并轉(zhuǎn)換串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念2.設(shè)備同步進(jìn)行串行通信的兩臺(tái)設(shè)備必須同步工作才能有效地檢測(cè)通信線路上的信號(hào)變化,從而采樣傳送數(shù)據(jù)脈沖.設(shè)備同步對(duì)通信雙方有兩個(gè)共同要求:一是通信雙方必須采用統(tǒng)一的編碼方法;二是通信雙方必須能產(chǎn)生相同的傳送速率.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念二.串行通信協(xié)議

通信協(xié)議是對(duì)數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等.通信雙方必須遵守統(tǒng)一的通信協(xié)議.串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種.在此只討論異步串行通信協(xié)議和異步串行協(xié)議規(guī)定的字符數(shù)據(jù)的傳送格式.1.起始位通信線上沒(méi)有數(shù)據(jù)被傳送時(shí)處于邏輯1狀態(tài)。當(dāng)發(fā)送設(shè)備要發(fā)送一個(gè)字符數(shù)據(jù)時(shí),首先發(fā)出一個(gè)邏輯0信號(hào),這個(gè)邏輯低電平就是起始位.起始位通過(guò)通信線傳向接收設(shè)備,接收設(shè)備檢測(cè)到這個(gè)邏輯低電平后,就開(kāi)始準(zhǔn)備接收數(shù)據(jù)位信號(hào).起始位所起的作用就是設(shè)備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步.串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念2.數(shù)據(jù)位當(dāng)接收設(shè)備收到起始位后,緊接著就會(huì)收到數(shù)據(jù)位.?dāng)?shù)據(jù)位的個(gè)數(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ù)傳送過(guò)程中,數(shù)據(jù)位從最低有效位開(kāi)始發(fā)送,依次順序在接收設(shè)備中被轉(zhuǎn)換為并行數(shù)據(jù).3.奇偶校驗(yàn)位數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗(yàn)位.奇偶校驗(yàn)用于有限差錯(cuò)檢測(cè),通信雙方需約定一致的奇偶校驗(yàn)方式.如果選擇偶校驗(yàn),那么組成數(shù)據(jù)位和奇偶位的邏輯1的個(gè)數(shù)必須是偶數(shù);如果選擇奇校驗(yàn),那么邏輯1的個(gè)數(shù)必須是奇數(shù).串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念4.停止位約定在奇偶位或數(shù)據(jù)位(當(dāng)無(wú)奇偶校驗(yàn)時(shí))之后發(fā)送的是停止位.停止位是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志,可以是1位,1.5位或2位的高電平.接收設(shè)備收到停止位之后,通信線路上便又恢復(fù)邏輯1狀態(tài),直至下一個(gè)字符數(shù)據(jù)的起始位到來(lái).5.波特率設(shè)置通信線上傳送的所有位信號(hào)都保持一致的信號(hào)持續(xù)時(shí)間,每一位的信號(hào)持續(xù)時(shí)間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個(gè)二進(jìn)制位來(lái)衡量的,這個(gè)速度叫波特率.如果數(shù)據(jù)以300個(gè)二進(jìn)制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s.6.掛鉤(握手)信號(hào)約定

串行通信技術(shù)及MCS-51單片機(jī)串口—基本概念串行口及應(yīng)用89C51單片機(jī)除具有4個(gè)8位并行口外,還具有1個(gè)串行接口.

此串行接口是一個(gè)全雙工串行通信接口,即能同時(shí)進(jìn)行串行發(fā)送和接收數(shù)據(jù).它可以作UATR(通用異步接收和發(fā)送器)用,也可以作同步移位寄存器用.

使用串行接口可以實(shí)現(xiàn)89C51單片機(jī)系統(tǒng)之間點(diǎn)對(duì)點(diǎn)的單機(jī)通信和89C51與系統(tǒng)機(jī)(如IBM-PC機(jī)等)的單機(jī)或多機(jī)通信.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用89C51串行口89C51有一個(gè)可編程的全雙工串行通信接口,它可用作UART,也可用作同步移位寄存器.其幀格式可以有8位、10位或11位,并能設(shè)置各種波特率,給使用帶來(lái)了很大的靈活性.一.結(jié)構(gòu)

89C51通過(guò)引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進(jìn)行通信.其內(nèi)部結(jié)構(gòu)簡(jiǎn)化示意圖如圖4-37所示.

圖中有兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H,可同時(shí)發(fā)送、接收數(shù)據(jù).發(fā)送緩沖器只能寫(xiě)入,不能讀出;接收緩沖器只能讀出,不能寫(xiě)入.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用讀SBUF:MOVA,SBUF;讀入寫(xiě)SBUF:MOVSBUF,A;發(fā)送TXD(P3.1)÷12÷2TH1TL1÷16÷16輸入移位寄存器接收SBUF(99H)發(fā)送SBUF(99H)RXD(P3.0)SMOD=0T1溢出率fOSCSMOD=1移位時(shí)鐘TIRI內(nèi)部BUS裝載SBUF圖4-37串行口內(nèi)部結(jié)構(gòu)示意圖串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用89C51用定時(shí)器T1作為串行通信波特率發(fā)生器,T1溢出經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖.移位脈沖的速率即是波特率.最高波特率為12M/(12×2×16)=31250(baud)從圖中可看出,接收器是雙緩沖結(jié)構(gòu),在前一個(gè)字節(jié)被從接收SBUF讀出之前,第二個(gè)字節(jié)即開(kāi)始被接收(串行輸入至移位寄存器),但是,在第二個(gè)字節(jié)接收完畢而前一個(gè)字節(jié)CPU未讀取時(shí),會(huì)丟失前一個(gè)字節(jié).串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進(jìn)行讀或?qū)懙模l(fā)送:當(dāng)向SBUF發(fā)“寫(xiě)”命令時(shí)(執(zhí)行“MOVSBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開(kāi)始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標(biāo)志位TI=1.接收:在滿足串行口接收中斷標(biāo)志位RI=0的條件下,置允許接收位REN=1就會(huì)接收一幀數(shù)據(jù)進(jìn)入移位寄存器,并裝載到SBUF中,同時(shí)使RI=1.當(dāng)89C51發(fā)出讀SBUF命令時(shí)(MOVA,SBUF),便由接收緩沖器SBUF取出數(shù)據(jù)送入A.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用二.串行口控制字及控制寄存器

89C51串行口是可編程接口,對(duì)它初始化編程只用兩個(gè)控制字分別寫(xiě)入特殊功能寄存器SCON(98H)和電源控制寄存器PCON(87H)中即可.1.SCON(98H)

89C51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志等均由特殊功能寄存器SCON控制和指示,其控制字格式如圖4-38所示.

①SM0和SM1(SCON.7,SCON.6)—串行口工作方式選擇位.兩個(gè)選擇位對(duì)應(yīng)4種通信方式,如表4-1所示.其中,fOSC是振蕩頻率.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用SM0SM1SM2RENTB8RB8TIRISCON(98H)接收中斷標(biāo)志發(fā)送中斷標(biāo)志接收數(shù)據(jù)第9位發(fā)送數(shù)據(jù)第9位接收控制1:允許0:不允許1:允許0:不允許多機(jī)控制工作方式控制圖4-38串行口控制寄存器SCON串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用表4-1串行口的工作方式SM0SM100011011工作方式方式0方式1方式2方式3說(shuō)明同步移位寄存器10位異步收發(fā)11位異步收發(fā)11位異步收發(fā)波特率由定時(shí)器控制由定時(shí)器控制fOSC/32或fOSC/64fOSC/12串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用②SM2(SCON.5)—多機(jī)通信控制位,用于方式2和方式3.若置SM2=1,則允許多機(jī)通信.多機(jī)通信協(xié)議規(guī)定,第9位數(shù)據(jù)(D8)為1,說(shuō)明本幀數(shù)據(jù)為地址幀;若第9位為0,則本幀為數(shù)據(jù)幀.

多機(jī)通信過(guò)程:當(dāng)一片89C51(主機(jī))與多片89C51(從機(jī))通信時(shí),所有從機(jī)的SM2位都置1.主機(jī)首先發(fā)送的一幀數(shù)據(jù)為地址,即某從機(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)志位RI=0,信息丟失;若(RB8)=1,說(shuō)明是地址幀,數(shù)據(jù)裝入SBUF并置RI=1,中斷所有從機(jī),被尋址的目標(biāo)從機(jī)清除SM2以接收主機(jī)發(fā)來(lái)的一幀數(shù)據(jù).其他從機(jī)仍然保持SM2=1.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用若SM2=0.即不屬于多機(jī)通信情況。則接收一幀數(shù)據(jù)后,不管第9位數(shù)據(jù)是0還是1,都置RI=1,接收到的數(shù)據(jù)裝入SBUF中.根據(jù)SM2這個(gè)功能,可實(shí)現(xiàn)多個(gè)89C51應(yīng)用系統(tǒng)的串行通信.

在方式1時(shí),若SM2=1,則只有接收到有效停止位時(shí),RI才置1,以便接收下一幀數(shù)據(jù).在方式0時(shí),SM2必須是0.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用多機(jī)通信過(guò)程:1.使所有從機(jī)SM2=1,在此時(shí),只有RB8=1或收到有效停止位,才激活RI;2.主機(jī)發(fā)地址,第9位(TB8)為1;3.從機(jī)收到后,與自己的地址比較;4.被尋址從機(jī)清除SM2,其余從機(jī)維持SM2=1不變;5.主機(jī)發(fā)送數(shù)據(jù),被尋址從機(jī)因SM2=0,故可以接收,其他從機(jī)則不理;6.當(dāng)主機(jī)改變聯(lián)系從機(jī)時(shí),先前被尋址的從機(jī)分析出是尋址其他從機(jī)時(shí),恢復(fù)SM2=1.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用

③REN(SCON.4)—允許接收控制位.由軟件置1或清0,只有當(dāng)REN=1時(shí)才允許接收,相當(dāng)于串行接收的開(kāi)關(guān);若REN=0,則禁止接收.

在串行通信接收控制過(guò)程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用④TB8(SCON.3)—發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中.在方式2或方式3中,根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復(fù)位.

在許多通信協(xié)議中可用作奇偶校驗(yàn)位,也可在多機(jī)通信中作為發(fā)送地址幀或數(shù)據(jù)幀的標(biāo)志位.對(duì)于后者,TB8=1,說(shuō)明該幀數(shù)據(jù)為地址;TB8=0,說(shuō)明該幀數(shù)據(jù)為數(shù)據(jù)字節(jié).

在方式0或方式1中,該位未用.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用⑤RB8(SCON.2)—接收數(shù)據(jù)的第9位.

在方式2或方式3中,接收到的第9位數(shù)據(jù)放在RB8位.

它或是約定的奇/偶校驗(yàn)位,或是約定的地址/數(shù)據(jù)標(biāo)識(shí)位.在方式2和方式3多機(jī)通信中,若SM2=1,如果RB8=1,說(shuō)明收到的數(shù)據(jù)為地址幀.

在方式1中,若SM2=0(即不是多機(jī)通信情況),RB8中存放的是已接收到的停止位.在方式0中,該位未用.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用⑥TI(SCON.1)—發(fā)送中斷標(biāo)志.在一幀數(shù)據(jù)發(fā)送完時(shí)被置位.

在方式0串行發(fā)送第8位結(jié)束或其他方式串行發(fā)送到停止位的開(kāi)始時(shí)由硬件置位,可用軟件查詢.

它同時(shí)也申請(qǐng)中斷,TI置位意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準(zhǔn)備發(fā)送下一幀數(shù)據(jù).串行口發(fā)送中斷被響應(yīng)后,TI不會(huì)自動(dòng)清0,必須由軟件清0.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用⑦RI(SCON.0)—接收中斷標(biāo)志.

在接收到一幀有效數(shù)據(jù)后由硬件置位.在方式0中,第8位數(shù)據(jù)發(fā)送結(jié)束時(shí),由硬件置位;在其他三種方式中,當(dāng)接收到停止位中間時(shí)由硬件置位.RI=1,申請(qǐng)中斷,表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù).CPU響應(yīng)中斷,取走數(shù)據(jù).RI也必須由軟件清0,清除中斷申請(qǐng),并準(zhǔn)備接收下一幀數(shù)據(jù).串行發(fā)送中斷標(biāo)志TI和接收中斷標(biāo)志RI是同一個(gè)中斷源,CPU事先不知道是發(fā)送中斷TI還是接收中斷RI產(chǎn)生的中斷請(qǐng)求,所以,在全雙工通信時(shí),必須由軟件來(lái)判別.復(fù)位時(shí),SCON所有位均清0.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用SMODPCON(87H)波特率選擇位SMOD=1時(shí),方式1、方式2、方式3的波特率加倍圖4-39電源控制寄存器PCON2.PCON(87H)電源控制寄存器PCON中只有SMOD位與串行口工作有關(guān),如圖4-39所示.

SMOD(PCON.7)—波特率倍增位.在串行口方式1、方式2和方式3時(shí),波特率和2SMOD成正比,亦即當(dāng)SMOD=1時(shí),波特率提高一倍.復(fù)位時(shí),SMOD=0.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用三.串行通信工作方式根據(jù)實(shí)際需要,89C51串行口可設(shè)置4種工作方式,可有8位、10位或11位幀格式.方式0以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位.其幀格式如下:D0D1D2D3D4D5D6D7……串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用方式1以10位為一幀傳輸,設(shè)有1個(gè)起始位(0),8個(gè)數(shù)據(jù)位和1個(gè)停止位(1).其幀格式為D0D1D2D3D4D5D6D7起始停止方式2和方式3以11位為1幀傳輸,設(shè)有1個(gè)起始位(0),8個(gè)數(shù)據(jù)位,1個(gè)附加第9位和1個(gè)停止位(1).其幀格式為D0D1D2D3D4D5D6D7起始停止D8

附加第9位(D8)由軟件置1或清0.發(fā)送時(shí)在TB8中,接收時(shí)送RB8中.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用1.串行口方式0

方式0為同步移位寄存器輸入/輸出方式,常用于擴(kuò)展I/O口.

串行數(shù)據(jù)通過(guò)RXD輸入或輸出,而TXD用于輸出移位時(shí)鐘,作為外接部件的同步信號(hào).

圖4-40(a)為發(fā)送電路,圖4-41(a)為接收電路.這種方式不適用于兩個(gè)89C51之間的直接數(shù)據(jù)通信,但可以通過(guò)外接移位寄存器來(lái)實(shí)現(xiàn)單片機(jī)的接口擴(kuò)展.例如,74LS164可用于擴(kuò)展并行輸出口,74LS165可用于擴(kuò)展輸入口.在這種方式下,收/發(fā)的數(shù)據(jù)為8位,低位在前,無(wú)起始位、奇偶校驗(yàn)位及停止位,波特率是固定的.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用345610111213TI(b)圖4-40方式0發(fā)送電路及時(shí)序+5V(a)S1…S6S1…S6機(jī)器周期寫(xiě)“SBUF”RXD(數(shù)據(jù))TXD(移位時(shí)鐘)D0D1D2D3D4D5D6D789C51P3.074LS164D2D1CPP3.1P1.0CLR1278914TXDRXD串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用方式0發(fā)送過(guò)程:

執(zhí)行一條將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF(99H)的指令時(shí),串行口把SBUF中8位數(shù)據(jù)以fOSC/12的波特率從RXD(P3.0)端輸出,發(fā)送完畢置中斷標(biāo)志TI=1.

方式0發(fā)送時(shí)序如圖4-40(b)所示.寫(xiě)SBUF指令在S6P1處產(chǎn)生一個(gè)正脈沖,在下一個(gè)機(jī)器周期的S6P2處數(shù)據(jù)的最低位輸出到RXD(P3.0)腳上;再在下一個(gè)機(jī)器周期的S3,S4,S5輸出移位時(shí)鐘為低電平,而在S6及下一個(gè)機(jī)器周期的S1,S2為高電平,就這樣將8位數(shù)據(jù)由低位至高位一位一位順序通過(guò)RXD線輸出,并在TXD腳上輸出fOSC/12的移位時(shí)鐘.

在“寫(xiě)SBUF”有效后的第10個(gè)機(jī)器周期的S1P1將發(fā)送中斷標(biāo)志TI置位.圖中,74LS164是TTL“串入并出”移位寄存器.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用(a)S1…S6S1…S6機(jī)器周期寫(xiě)“SCON”RXD(數(shù)據(jù))TXD(移位時(shí)鐘)RI(b)圖4-41方式0接收電路及時(shí)序P3.074LS165QCPP3.1P1.09271514+5VTXDRXD1P1.1D0D1D2D3D4D5D6D7串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用方式0接收過(guò)程:用軟件置REN=1(同時(shí),RI=0).即開(kāi)始接收.

接收時(shí)序如圖4-41(b)所示.當(dāng)使SCON中的REN=1(RI=0)時(shí),產(chǎn)生一個(gè)正的脈沖,在下一個(gè)機(jī)器周期的S3P1~S5P2,從TXD(P3.1)腳上輸出低電平的移位時(shí)鐘,在此機(jī)器周期的S5P2對(duì)P3.0腳采樣,并在本機(jī)器周期的S6P2通過(guò)串行口內(nèi)的輸入移位寄存器將采樣值移位接收;在同一個(gè)機(jī)器周期的S6P1到下一個(gè)機(jī)器周期的S2P2,輸出移位時(shí)鐘為高點(diǎn)平.將數(shù)據(jù)字節(jié)從低位至高位一位一位地接收下來(lái)并裝入SBUF中,在啟動(dòng)接收過(guò)程(即寫(xiě)SCON,清RI位)將SCON中的RI清0之后的第10個(gè)機(jī)器周期的S1P1,RI被置位.這一幀數(shù)據(jù)接收完畢,可進(jìn)行下一幀接收.圖中,74LS165是TTL“并入串出”移位寄存器.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用

2.串行口方式1方式1真正用于串行發(fā)送或接收,為10位通用異步接口.TXD與RXD分別用于發(fā)送與接收數(shù)據(jù).

收發(fā)一幀數(shù)據(jù)的格式為1位起始位、8位數(shù)據(jù)位(低位在前)、1位停止位,共10位.

在接收時(shí),停止位進(jìn)入SCON的RB8,此方式的傳送波特率可調(diào).

串行口方式1的發(fā)送和接收時(shí)序如圖4-42所示.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用接收D0D1D2D3D4D5D6D7TX時(shí)鐘寫(xiě)“SBUF”SENDTXDTI起始位停止位發(fā)送D0D1D2D3D4D5D6D7停止位起始位RX時(shí)鐘位檢測(cè)器采樣RXDRI圖4-42方式1發(fā)送和接收時(shí)序串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用方式1發(fā)送時(shí):

數(shù)據(jù)從引腳TXD(P3.1)端輸出.

當(dāng)執(zhí)行數(shù)據(jù)寫(xiě)入發(fā)送緩沖器SBUF的命令時(shí),就啟動(dòng)了發(fā)送器開(kāi)始發(fā)送.

發(fā)送時(shí)的定時(shí)信號(hào),也就是發(fā)送移位時(shí)鐘(TX時(shí)鐘),是由定時(shí)器T1送來(lái)的溢出信號(hào)經(jīng)過(guò)16分頻或32分頻(取決于SMOD的值)而得到的,TX時(shí)鐘就是發(fā)送波特率.方式1的波特率是可變的.發(fā)送開(kāi)始的同時(shí),SEND變?yōu)橛行?,將起始位向TXD輸出;此后每經(jīng)過(guò)一個(gè)TX時(shí)鐘周期(16分頻計(jì)數(shù)器溢出一次為一個(gè)時(shí)鐘周期,因此,TX時(shí)鐘頻率由波特率決定).產(chǎn)生一個(gè)移位脈沖,并由TXD輸出一個(gè)數(shù)據(jù)位.8位數(shù)據(jù)全部發(fā)送完畢后,置位TI,并申請(qǐng)中斷置TXD為1作為停止位,再經(jīng)過(guò)一個(gè)時(shí)鐘周期,SEND失效.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用方式1接收時(shí):數(shù)據(jù)從引腳RXD(P3.0)端輸入.

接收是在SCON寄存器中REN位置1的前提下,并檢測(cè)到起始位(RXD上檢測(cè)到1

0的跳變,即起始位)而開(kāi)始的.

接收時(shí),定時(shí)信號(hào)有兩種(如圖4-42(b)所示):一種是接收移位時(shí)鐘(RX時(shí)鐘),它的頻率和傳送波特率相同,也是由定時(shí)器T1的溢出信號(hào)經(jīng)過(guò)16或32分頻而得到的;另一種是位檢測(cè)器采樣脈沖,它的頻率是RX時(shí)鐘的16倍,亦即在一位數(shù)據(jù)期間有16位檢測(cè)器采樣脈沖,為完成檢測(cè),以16倍于波特率的速率對(duì)RXD進(jìn)行采樣.

為了接收準(zhǔn)確無(wú)誤,在正式接收數(shù)據(jù)之前,還必須判定這個(gè)1

0跳變是否是干擾引起的.為此,在這位中間(即一位時(shí)間分成16等份,在第7,第8及第9等份)連續(xù)對(duì)RXD采樣三次,取其中兩次相同的值進(jìn)行判斷.這樣能較好地消除干擾的影響.

當(dāng)確認(rèn)是真正的起始位(0)后,就開(kāi)始接收一幀數(shù)據(jù).當(dāng)一幀數(shù)據(jù)接收完畢后,必須同時(shí)滿足以下兩個(gè)條件,這次接收才真正有效.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用①RI=0,即上一幀數(shù)據(jù)接收完成時(shí),RI=1發(fā)出的中斷請(qǐng)求已被響應(yīng),SBUF中數(shù)據(jù)已被取走.由軟件使RI=0,以便提供“接收SBUF已空”的信息.②SM2=0或收到的停止位為1(方式1時(shí),停止位進(jìn)入RB8),則將接收到的數(shù)據(jù)裝入串行口的SBUF和RB8(RB8裝入停止位),并置位RI;如果不滿足,接收到的數(shù)據(jù)不能送入SBUF,這意味著該幀信息將會(huì)丟失.

值得注意的是,在整個(gè)接收過(guò)程中,保證REN=1是一個(gè)先決條件.只有當(dāng)REN=1時(shí),才能對(duì)RXD進(jìn)行檢測(cè).串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用3.串行口方式2和方式3串行口工作方式2和方式3均為每幀11位異步通信格式,由TXD和RXD發(fā)送與接收(兩種方式操作是完全一樣的,所不同的只是波特率).

每幀11位,即1位起始位,8位數(shù)據(jù)位(低位在前),1位可編程的第9數(shù)據(jù)位和1位停止位.發(fā)送時(shí),第9數(shù)據(jù)位(TB8)可以設(shè)置為1或0,也可將奇偶位裝入TB8,從而進(jìn)行奇偶校驗(yàn);接收時(shí),第9數(shù)據(jù)位進(jìn)入SCON的RB8.

方式2和方式3的發(fā)送、接收時(shí)序如圖4-43所示.其操作與方式1類(lèi)似.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用發(fā)送過(guò)程:先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如作奇偶校驗(yàn)位或地址/數(shù)據(jù)標(biāo)志位)然后將要發(fā)送的數(shù)據(jù)寫(xiě)入SBUF,即可啟動(dòng)發(fā)送過(guò)程.

串行口能自動(dòng)把TB8取出,并裝入到第9位數(shù)據(jù)位的位置,再逐一發(fā)送出去.發(fā)送完畢,使TI=1.接收過(guò)程:使SCON中的REN=1,允許接收.

當(dāng)檢測(cè)到RXD(P3.0)端有1

0的跳變(起始位)時(shí),開(kāi)始接收9位數(shù)據(jù),送入移位寄存器(9位).

當(dāng)滿足RI=0且SM2=0,或接收到的第9位數(shù)據(jù)為1時(shí),前8位數(shù)據(jù)送入SBUF,附加的第9位數(shù)據(jù)送入SCON中的RB8,置RI為1;否則,這次接收無(wú)效,也不置位RI.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用接收TX時(shí)鐘寫(xiě)“SBUF”SENDTXDTI起始位停止位發(fā)送D0D1D2D3D4D5D6D7停止位起始位RX時(shí)鐘位檢測(cè)器采樣RXDRI圖4-43方式2、方式3發(fā)送和接收時(shí)序D0D1D2D3D4D5D6D7TB8RB8串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用

方式01、8位數(shù)據(jù)2、波特率固定為

fOSC/12

3、TXD輸出固定頻率、

RXD為數(shù)據(jù)輸入輸出方式1方式3方式2串行通信四種方式1、一個(gè)起始位“0”、8個(gè)數(shù)據(jù)位、一個(gè)停止位“1”2、波特率可變3、TXD數(shù)據(jù)輸出、

RXD數(shù)據(jù)輸入1、一個(gè)起始位“0”、9個(gè)數(shù)據(jù)位、一個(gè)停止位“1”2、波特率固定3、TXD數(shù)據(jù)輸出、

RXD數(shù)據(jù)輸入1、一個(gè)起始位“0”、9個(gè)數(shù)據(jù)位、一個(gè)停止位“1”2、波特率可變3、TXD數(shù)據(jù)輸出、

RXD數(shù)據(jù)輸入串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用工作方式幀位數(shù)數(shù)據(jù)位發(fā)送條件接收條件D9程序方式088TI=0RI=0REN=1CLRTIMOVSBUF,AJNBTI,$CLRTI方式1108SETBRENCLRRIJNBRI,$MOVA,SBUFCLRRI方式23119TB8RB8CLRTISETBTB8MOVSBUF,AJNBTI,$CLRTI串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用四.波特率設(shè)計(jì)在串行通信中,收發(fā)雙方對(duì)發(fā)送或接收的數(shù)據(jù)速率有一定的約定,通過(guò)軟件對(duì)89C51串行口編程可約定四種工作方式.

其中,方式0和方式2的波特率是固定的;而方式1和方式3的波特率是可變的,由定時(shí)器T1的溢出率來(lái)決定.

串行口的四種工作方式對(duì)應(yīng)著三種波特率.由于輸入的移位時(shí)鐘來(lái)源不同,因此,各種方式的波特率計(jì)算公式也不同.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用1.方式0的波特率由圖4-44可見(jiàn),方式0時(shí),發(fā)送或接收一位數(shù)據(jù)的移位時(shí)鐘脈沖由S6(即第6個(gè)狀態(tài)周期,第12個(gè)節(jié)拍)給出,即每個(gè)機(jī)器周期產(chǎn)生一個(gè)移位脈沖時(shí)鐘,發(fā)送或接收一位數(shù)據(jù),因此,波特率固定為振蕩頻率的1/12,并不受PCON寄存器中SMOD位的影響.

方式0波特率≌f(shuō)OSC/12

注意,符號(hào)“≌”表示左面的表達(dá)式只是引用右面表達(dá)式的數(shù)據(jù),即右面的表達(dá)式是提供了一種計(jì)算的方法.串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用÷12發(fā)送SBUF(99H)fOSCS6TXD(P3.1)RXD

(P3.0)輸入移位寄存器圖4-44串行口方式0波特率的產(chǎn)生÷2發(fā)送SBUF(99H)fOSCTXD(P3.1)RXD(P3.0)輸入移位寄存器÷2÷16÷16SMOD=1SMOD=0圖4-45串行口方式2波特率的產(chǎn)生串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用2.方式2的波特率串行口方式2波特率的產(chǎn)生與方式0不同,即輸入的時(shí)鐘源不同,其時(shí)鐘輸入部分如圖4-45所示.

控制接收與發(fā)送的移位時(shí)鐘由振蕩頻率fOSC的第二節(jié)拍P2時(shí)鐘(即fOSC/2)給出,所以,方式2波特率取決于PCON中SMOD位的值:當(dāng)SMOD=0時(shí),波特率為fOSC的1/64;若SMOD=1,則波特率為fOSC的1/32,即方式2波特率≌×fOSC2SMOD64串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用3.方式1和方式3的波特率

方式1和方式3的移位時(shí)鐘脈沖由定時(shí)器TI的溢出率決定,如圖4-16所示.因此,89C51串行口方式1和方式3的波特率由定時(shí)器T1的溢出率與SMOD值同時(shí)決定.即

方式1、方式3波特率≌T1溢出率/n

當(dāng)SMOD=0時(shí),n=32;SMOD=1時(shí),n=16.所以,可用下式確定方式1和方式3的波特率:

方式1、方式3波特率≌×(T1溢出速率)

其中,T1溢出速率取決于T1的計(jì)數(shù)速率(計(jì)數(shù)速率≌f(shuō)OSC/12)和T1預(yù)置的初值.若定時(shí)器T1采用模式1時(shí),波特率公式如下:串行方式1、方式3波特率≌×

/(216

-初值)2SMOD322SMOD32fOSC12串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用

表4-2列出了串行口方式1、方式3常用波特率及其初值.

定時(shí)器T1用作波特率發(fā)生器時(shí),通常選用定時(shí)器模式2(自動(dòng)重裝初值定時(shí)器)比較實(shí)用.

要設(shè)置定時(shí)器T1為定時(shí)方式(使C/T=0),讓T1計(jì)數(shù)內(nèi)部振蕩脈沖,即計(jì)數(shù)速率為fOSC/12(注意應(yīng)禁止T1中斷,以免溢出而產(chǎn)生不必要的中斷).

先設(shè)定TH1和TL1定時(shí)計(jì)數(shù)初值為X,那么每過(guò)“28-X”個(gè)機(jī)器周期,定時(shí)器T1就會(huì)產(chǎn)生一次溢出.因此,T1溢出速率為T(mén)1溢出速率≌/(28-X)

串行口方式1、方式3波特率≌

×于是,可得出定時(shí)器T1模式2的初始值:

X≌256-2SMOD32fOSC12×(256-X)12fOSCfosc×(SMOD+1)384×波特率串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用表4-2常用波特率與其他參數(shù)選取關(guān)系定時(shí)器T1SMOD串行口工作方式波特率/(b·s-1)fosc/MHzC/T模式定時(shí)器初值方式0方式21M12××××375k187.5k121210××××××方式1和方式362.5k19.2k9.6k4.8k2.4k1.2k137.51101211.059211.059211.059211.059211.059211.0592121100000

00000000

022222221FFHFDHFDHFAHF4HE8H1DHFEEBH下頁(yè)續(xù)串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用方式0方式20.5M187.5k66×××××××119.2k9.6k4.8k2.4k1.2k0.6k11055方式1和方式3666666661100000

00000000

022222221FEHFDHFDHFAHF3HE6H72HFEEBH(接上頁(yè)圖)串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用

例4-12:89C51單片機(jī)時(shí)鐘脈沖振蕩頻率為11.0592MHz,選用定時(shí)器T1工作模式2作為波特率發(fā)生器,波特率為2400b/s,求初值.解:設(shè)置波特率控制位(SMOD)=0

所以,(TH1)=(TL1)=F4H系統(tǒng)晶體振蕩頻率選為11.0592MHz就是為了使初值為整數(shù),從而產(chǎn)生精確的波特率.

如果串行通信選用很低的波特率,可將定時(shí)器T1置于模式0或模式1,即13位或16位定時(shí)方式;但在這種情況下,T1溢出時(shí),需用中斷服務(wù)程序重裝初值.中斷響應(yīng)時(shí)間和執(zhí)行指令時(shí)間會(huì)使波特率產(chǎn)生一定的誤差,可用改變初值的辦法加以調(diào)整.X≌256-11.0592×106×(0+1)384×2400=244=F4H串行通信技術(shù)及MCS-51單片機(jī)串口—基本應(yīng)用89C51串行口的應(yīng)用

如前所述,89C51串行口的工作主要受串行口控制寄存器SCON的控制,另外,也和電源控制寄存器PCON有些關(guān)系.SCON寄存器用來(lái)控制串行口的工作方式,還有一些其他的控制作用.

MSC-51單片機(jī)串行口的四種工作方式傳送的數(shù)據(jù)位數(shù)敘述如下:①方式0:移位寄存器輸入/輸出方式.串行數(shù)據(jù)通過(guò)RXD線輸入或輸出,而TXD線專(zhuān)用于輸出時(shí)鐘脈沖給外部移位寄存器.方式0可用來(lái)同步輸出或接收8數(shù)據(jù)(最低位首先輸出,)波特率固定為fOSC/12,其中,fOSC為單片機(jī)的時(shí)鐘頻率.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

②方式1:10位異步接收/發(fā)送方式.一幀數(shù)據(jù)包括1位起始位(0),8位數(shù)據(jù)位和1位停止位(1).串行接口電路在發(fā)送時(shí)能自動(dòng)插入起始位和停止位;在接收時(shí),停止位進(jìn)入特殊功能寄存器SCON的RB8位.方式1的傳送波特率是可變的,可通過(guò)改變內(nèi)部定時(shí)器的定時(shí)值來(lái)改變波特率.③方式2:11位異步接收/發(fā)送方式.除了1位起始位、8位數(shù)據(jù)位、1位停止位之外,還可以插入第9位數(shù)據(jù)位.④方式3:同方式2,只是波特率可變.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例一.串行口方式0的應(yīng)用

89C51單片機(jī)串行口基本上是異步通信接口,但在方式0時(shí)是同步操作.外接串入-并出或并入-串出器件,可實(shí)現(xiàn)I/O的擴(kuò)展.串行口方式0的數(shù)據(jù)傳送可以采用中斷方式,也可以采用查詢方式.無(wú)論哪種方式,都要借助于TI或RI標(biāo)志.

在串行口發(fā)送時(shí),或者靠TI置位后引起中斷申請(qǐng),在中斷服務(wù)程序中發(fā)送下一組數(shù)據(jù);或者通過(guò)查詢TI的值,只要TI為0就繼續(xù)查詢,直到TI為1后結(jié)束查詢,進(jìn)入下一個(gè)字符的發(fā)送.在串行口接收時(shí),由RI引起中斷或?qū)I查詢來(lái)決定何時(shí)接收下一個(gè)字符.

無(wú)論采用什么方式,在開(kāi)始串行通信前,都要先對(duì)SCON寄存器初始化,進(jìn)行工作方式的設(shè)置.在方式0中,SCON寄存器的初始化只是簡(jiǎn)單地把00H送入SCON就可以了.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

例4-13:用89C51串行口外接164串入-并出移位寄存器擴(kuò)展8位并行口;8位并行口的每位都接一個(gè)發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán).設(shè)發(fā)光二極管為共陰極接法,如圖4-47所示.89C51RXDTXDP1.0CLKACLR74HC164圖4-47B串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

解:設(shè)數(shù)據(jù)串行發(fā)送采用中斷方式,顯示的延遲通過(guò)調(diào)用延遲程序DELAY來(lái)實(shí)現(xiàn).程序清單:ORG0023H;串行口中斷入口AJMPSBR;轉(zhuǎn)入串行口中斷服務(wù)程序ORG2000H;主程序起始地址MOVSCON,#00H;串行口方式0初始化MOVA,#80H;最左一位發(fā)光二極管先亮CLRP1.0;關(guān)閉并行輸出MOVSBUF,A;開(kāi)始串行輸出SJMP$;等待中斷SETBP1.0;啟動(dòng)并行輸出ACALLDELAY;顯示延遲一段時(shí)間CLRTI;清發(fā)送中斷標(biāo)志RRA;準(zhǔn)備右邊一位顯示CLRP1.0;關(guān)閉并行輸出MOVSBUF,A;再一次串行輸出RETI;中斷返回LOOPSBR:串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例用方式0外加移位寄存器來(lái)擴(kuò)展8位輸出口時(shí),要求移位寄存器帶有輸出控制,否則串行移位過(guò)程也會(huì)反映到并行輸出口;另外,輸出口最好再接一個(gè)寄存器或鎖存器,以免在輸出門(mén)關(guān)閉時(shí)(CLR=0)輸出又發(fā)生變化.用方式0加上并入-串出移位寄存器可擴(kuò)展一個(gè)8位并行輸入口.移位寄存器必須帶有預(yù)置/移位的控制端,由單片機(jī)的一個(gè)輸出端子加以控制,以實(shí)現(xiàn)先由8位輸入口置數(shù)到移位寄存器,然后再串行移位從單片機(jī)的串行口輸入到接收緩沖器,最后再讀入到CPU中.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

例4-14:用89C51串行口外加移位寄存器165或166)擴(kuò)展8位輸入口,輸入數(shù)據(jù)由8個(gè)開(kāi)關(guān)提供,另有一個(gè)開(kāi)關(guān)K提供聯(lián)絡(luò)信號(hào).當(dāng)K=0時(shí),表示要求輸入數(shù)據(jù),輸入的8位為開(kāi)關(guān)量,提供邏輯模擬子程序的輸入信號(hào).如圖4-48所示.89C51RXDTXDP1.0P1.1QHCLK74HC165SHIFTK圖4-48串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例解:串行口方式0的接收要用SCON寄存器中的REN位作為開(kāi)關(guān)來(lái)控制.因此,初始化時(shí),除了設(shè)置工作方式之外,還要使REN位為1,其余各位仍然為0.對(duì)RI采用查詢方式來(lái)編寫(xiě)程序,當(dāng)然,先要查詢開(kāi)關(guān)K是否閉合.程序清單:START:MOVSCON,#10H;串行口方式0初始化,REN=1JBP1.1,$;開(kāi)關(guān)K未閉合,等候SETBP1.0;SHIFT=1,并行置入數(shù)據(jù)CLRP1.0;SHIFT=0,開(kāi)始串行移位JNBRI,$;查詢RI

CLRRI;查詢結(jié)束,清RIMOVA,SBUF;讀數(shù)據(jù)到累加器ACALLLOGSIM;進(jìn)行邏輯模擬SJMPSTART;準(zhǔn)備下一次模擬串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例二.串行口方式1的發(fā)送和接收

例4-15:89C51串行口按雙工方式收發(fā)ASCⅡ字符,最高位用來(lái)作奇偶校驗(yàn)位,采用奇校驗(yàn)方式,要求傳送的波特率為1200b/s.編寫(xiě)有關(guān)的通信程序.

解:7位ASCⅡ碼加1位奇校驗(yàn)共8位數(shù)據(jù),故可采用串行口方式1.

89C51單片機(jī)的奇偶檢驗(yàn)位P是當(dāng)累加器A中1的數(shù)目為奇數(shù)時(shí),P=1.如果直接把P的值放入ASCⅡ碼的最高位,恰好成了偶校驗(yàn),與要求不符.因此,要把P的值取反以后放入ASCⅡ碼最高位,才是要求的奇校驗(yàn).串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

雙工通信要求收、發(fā)能同時(shí)進(jìn)行.實(shí)際上,收、發(fā)操作主要是在串行接口進(jìn)行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫(xiě)入發(fā)送緩沖器.數(shù)據(jù)傳送用中斷方式進(jìn)行,響應(yīng)中斷以后,通過(guò)檢測(cè)是RI置位還是TI置位來(lái)決定CPU是進(jìn)行發(fā)送操作還是接收操作.發(fā)送和接收都通過(guò)調(diào)用子程序來(lái)完成,設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fOSC為6MHz,通過(guò)查波特率初值(表7-2)可知定時(shí)器的初裝值為F3H.定時(shí)器T1采用工作模式2,可以避免計(jì)數(shù)溢出后用軟件重裝定時(shí)初值的工作.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例程序清單:MOVTMOD,#20H;定時(shí)器1設(shè)為模式2

MOVTL1,#0F3H;定時(shí)器初值MOVTH1,#0F3H

;8位重裝值SETBTR1;啟動(dòng)定時(shí)器1MOVSCON,#50H;將串行口設(shè)置為方式1,REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址MOVR1,#40H;接收數(shù)據(jù)區(qū)首址ACALLSOUT;先輸出一個(gè)字符SETBESSETBEASJMP$;等待中斷LOOP:主程序串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例中斷服務(wù)程序ORG0023H;串行口中斷入口AJMP

SBR1;轉(zhuǎn)至中斷服務(wù)程序ORG0100HJNBRI,SEND;TI=1,為發(fā)送中斷ACALLSIN;RI=1,為接收中斷SJMPNEXT;轉(zhuǎn)至統(tǒng)一的出口ACALLSOUT;調(diào)用發(fā)送子程序RETI中斷返回SBR1:SEND:NEXT:串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例CLRTIMOVA,@R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶標(biāo)志賦予CCPLC;奇校驗(yàn)MOVACC.7,C;加到ASCⅡ碼高位INCR0;修改發(fā)送數(shù)據(jù)指針MOVSBUF,A;發(fā)送ASCⅡ碼RET;返回SOUT:發(fā)送子程序串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例接收子程序CLRRI

MOVA,SBUF;讀出接收緩沖區(qū)內(nèi)容MOVC,P;取出檢驗(yàn)位CPLC;奇校驗(yàn)ANLA,#7FH;刪去校驗(yàn)位MOV@R1,A;讀入接收緩沖區(qū)INCR1;修改接收數(shù)據(jù)指針RET;返回SIN:串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例在主程序中已初始化REN=1,則允許接收.以上程序基本上具備了全雙工通信的能力,但不能說(shuō)很完善.例如,在接收子程序中雖然檢驗(yàn)了奇偶校驗(yàn)位,但沒(méi)有進(jìn)行出錯(cuò)處理;另外,發(fā)送和接收數(shù)據(jù)區(qū)的范圍都很有限,也不能滿足實(shí)際需要.但有一個(gè)基本的框架之后,逐漸完善還是可以做到的.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

例4-16:采用查詢方式由串行口發(fā)送帶奇偶校驗(yàn)位的數(shù)據(jù)塊.解:本例由內(nèi)部RAM單元20H~30H取出ASCⅡ碼數(shù)據(jù),在最高位上加奇校驗(yàn)位后由串行口發(fā)出.采用8位異步通信方式,波特率為1200b/s,fOSC=11.059MHz.由要求可知,應(yīng)把串行口設(shè)置為方式1,采用定時(shí)器1模式2作為波特率發(fā)生器,預(yù)置值(TH1)=0E8H.串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例程序清單:MOVTMOD,#20H;設(shè)置定時(shí)器1為模式2

MOVTL1,#0E8H;初值,波特率為1200b/sMOVTH1,#0E8HSETBTR1;啟動(dòng)T1運(yùn)行MOVSCON,#01000000B;設(shè)置串行口為方式1MOVR0,#20HMOVR7,#32;數(shù)據(jù)塊長(zhǎng)度主程序串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例MOVA,@R0

ACALLSP_OUT

JNBP,ERROR

;傳輸出錯(cuò)處理,

;由SP-OUT中“CPLC”結(jié)果決定INCR0DJNZR7,LOOPLOOP:…串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例串行口發(fā)送子程序(奇校驗(yàn))MOVC,PSW.0;設(shè)置奇校驗(yàn)位,校驗(yàn)位P=1為奇校驗(yàn)CPLC;奇校驗(yàn)(無(wú)此指令為偶校驗(yàn))MOVACC.7,C;ACC.7補(bǔ)0或1MOVSBUF,A;啟動(dòng)串行口發(fā)送過(guò)程JNBTI,$;等待發(fā)送完CLRTI;清TI標(biāo)志,允許再發(fā)送RETSP_OUT:ERROR:(略)串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

例4-17:由串行口接收帶奇偶校驗(yàn)位的數(shù)據(jù)塊解:采用查詢方式,本例與上例相呼應(yīng),接收器把接收到的32B數(shù)據(jù)存放在20H~3FH單元內(nèi),波特率同上,若奇校驗(yàn)出錯(cuò)則置進(jìn)位位為1.

串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例程序清單:主程序MOVSCON,#01010000B;串行口方式1,允許接收MOVTMOD,#20H;設(shè)置定時(shí)器T1為模式2MOVTL1,#0E8H;初值,波特率為1200b/sMOVTH1,#0E8HSETBTR1;啟動(dòng)T1運(yùn)行MOVR0,#20HMOVR7,#32;數(shù)據(jù)塊長(zhǎng)度

串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例ACALLSP-IN;調(diào)接受一幀子程序JCERROR;由中SP-IN“CPLC”結(jié)果決定MOV@R0,A;存放接收的數(shù)據(jù)INCR0DJNZR7,LOOPLOOP:…串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例接收一幀子程序JNBRI,$;RI由硬件置位CLRRI;軟件清除RI

MOVA,SBUFMOVC,P;檢查奇校驗(yàn)位CPLC;置C為主程序“JCERROR”用ANLA,#7FH;去掉奇校驗(yàn)位RETSP-IN:ERROR:(略)串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例

例4-18:利用串行口和堆棧技術(shù)發(fā)送字符串常量.解:上面兩個(gè)例子中,發(fā)送和接收的都是一些變量數(shù)據(jù),且存放在內(nèi)部RAM單元中.現(xiàn)說(shuō)明如何利用堆棧技術(shù)發(fā)送存放在程序存儲(chǔ)器內(nèi)的字符串常量.下面的例子中,這些字符串是發(fā)送給CRT終端的,以回車(chē)符(CR)和換行符(LF)開(kāi)始,以換碼符(ESC)為結(jié)尾.下面是程序片斷:串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例CREQU0DH;ASCⅡ回車(chē)符LFEQU0AH;ASCⅡ換行符ESCEQU1BH;ASCⅡ換碼符…MOVTMOD,#20H;設(shè)置定時(shí)器T1為模式2

MOVTL1,#0FDH;設(shè)波特率為9600b/s

(fOSC=11.0592MHz)串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例MOVTH1#0FDH

SETBTR1;啟動(dòng)T1運(yùn)行MOVSCON,#01000000B;設(shè)置串行口方式1

ACALLXSTRING

DBCR,LF

DB‘NU&BIAA’;字符串常量DBESC…串行通信技術(shù)及MCS-51單片機(jī)串口—應(yīng)用舉例POPDPH;把第1個(gè)字符的地址裝入DPTR

POPDPL

CLRA;設(shè)偏移量為零MOVCA,@A+DPTR;取第1個(gè)字符MOVSBUF,A;啟動(dòng)一幀發(fā)送過(guò)程JNBTI,$;等待發(fā)送一幀完CLRTI

INCDPTR;指向下一字符CLRA;偏移量為0

MOVCA,@A+DPTR;取下一字符CJNEA,#ESC,XSTR-2;讀到ESC

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論