版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第七章89C51串行口及串行通信技術(shù)7.1串行通信基本知識7.2串行口及應(yīng)用7.3RS-232C標準接口總線及串行通信硬件設(shè)計7.489C51與89C51點對點異步通信7.589C51與PC機間通信軟件的設(shè)計7.6PC機與多個單片機間的通信1單片機原理與接口技術(shù)77.0
緒如89C51與存儲器,存儲器與存儲器,89C51與并行打印機之間的通信。89C51處理8位數(shù)據(jù),至少需要8條數(shù)據(jù)線。計算機之間、計算機與其終端之間的距離有時非常遠,此時,電纜線過多是不經(jīng)濟的數(shù)據(jù)傳送:并行方式2單片機原理與接口技術(shù)7串行通信只用一位數(shù)據(jù)線傳送數(shù)據(jù)的位信號,即使加上幾條通信聯(lián)絡(luò)控制線,也用不了很多電纜線。串行通信適合遠距離數(shù)據(jù)傳送,如大型主機與其遠程終端之間、處于兩地的計算機之間采用串行通信就非常經(jīng)濟。串行通信要求有轉(zhuǎn)換數(shù)據(jù)格式、時間控制等邏輯電路,這些電路目前已被集成在大規(guī)模集成電路中(稱為可編程串行通信控制器),使用很方便。7.0
緒數(shù)據(jù)傳送:串行方式3單片機原理與接口技術(shù)7本章將介紹89C51串行口的結(jié)構(gòu)及應(yīng)用,一臺PC機控制多臺89C51前沿機的分布式系統(tǒng),通信接口電路和軟件設(shè)計,并給出設(shè)計實例,包括接口電路、程序框圖、主程序和接收/發(fā)送子程序。7.0
緒4單片機原理與接口技術(shù)77.1串行通信基本知識7.1.1數(shù)據(jù)通信7.1.2串行通信的傳輸方式7.1.3異步通信和同步通信7.1.4串行通信的過程及通信協(xié)議5單片機原理與接口技術(shù)77.1.1數(shù)據(jù)通信通信CPU與外設(shè)之間進行信息交換,多臺計算機之間也往往要交換信息,所有這些信息交換均可稱為通信。通信方式有兩種------并行通信和串行通信。6單片機原理與接口技術(shù)77.1.1
數(shù)據(jù)通信通常根據(jù)信息傳送的距離決定采用哪種通信方式。例如,PC機與外部設(shè)備(如打印機等)通信時,如果距離小于30m,可采用并行通信方式;當距離大于30m時,則要采用串行通信方式。89C51單片機具有并行和串行二種基本通信方式。7單片機原理與接口技術(shù)7并行通信數(shù)據(jù)的各位同時進行傳送(發(fā)送或接收)的通信方式。優(yōu)點傳送速度快;缺點數(shù)據(jù)有多少位,就需要多少根傳送線。并行通信在位數(shù)多、傳送距離又遠時不合適7.1.1
數(shù)據(jù)通信8單片機原理與接口技術(shù)7串行通信數(shù)據(jù)是一位一位按順序傳送的通信方式。優(yōu)點只需一對傳輸線(利用電話線就可作為傳輸線),大大降低了傳送成本,適用遠距離通信;缺點傳送速度較低。設(shè)并行傳送N位數(shù)據(jù)所需時間位T,那么串行傳送的時間至少為NT,實際上總是大于NT的。7.1.1
數(shù)據(jù)通信9單片機原理與接口技術(shù)710單片機原理與接口技術(shù)77.1.2串行通信的傳輸方式串行通信的傳送方式通常有三種:單向(或單工)半雙向(或半雙工)全雙向(全雙工)11單片機原理與接口技術(shù)77.1.2串行通信的傳輸方式單向(或單工):只允許數(shù)據(jù)向一個方向傳送半雙向(或半雙工):允許數(shù)據(jù)向兩個方向中的任一方向傳送,但每次只能有一個站點發(fā)送全雙向(全雙工):允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設(shè)備都具有完整和獨立的發(fā)送和接受能力。12單片機原理與接口技術(shù)7串行通信中的數(shù)據(jù)傳送方式13單片機原理與接口技術(shù)77.1.3異步通信和同步通信串行通信兩種基本方式:異步通信和同步通信1、異步通信數(shù)據(jù)是一幀一幀(包括一個字符代碼或一字節(jié)數(shù)據(jù))傳送的,每一幀的數(shù)據(jù)格式如圖所示14單片機原理與接口技術(shù)7圖異步通信數(shù)據(jù)格式15單片機原理與接口技術(shù)71、異步通信在幀格式中,一個字符由四個部分組成:起始位、數(shù)據(jù)位、奇偶校驗位、停止位首先是一個起始位(0),然后是5位--8位數(shù)據(jù)(規(guī)定低位在前,高位在后),接下來是奇偶校驗位(可省略),最后是停止位(1)。16單片機原理與接口技術(shù)71、異步通信起始位(0):信號只占用一位,用來通知接收設(shè)備一個待接收的字符開始到達。線路上在不傳送字符時應(yīng)保持為1。接收端不斷檢測線路的狀態(tài),若連續(xù)為1以后又測到一個0,就知道發(fā)來一個新字符,應(yīng)馬上準備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進行。數(shù)據(jù)位:起始位后面緊接著是數(shù)據(jù)位,它可以是5位、6位、7位或8位。17單片機原理與接口技術(shù)71、異步通信奇偶校驗(D8):只占一位,但在字符中也可以規(guī)定不用奇偶校驗位,則這一位就可省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。停止位:用來表征字符的結(jié)束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時,也為接收下一個字符做好準備--只要再接收到0,就是新的字符的起始位。若停止位以后不是緊接著傳送下一個字符,則使線路電平保持為高電平(邏輯1)。18單片機原理與接口技術(shù)7例如,規(guī)定用ASCII編碼,字符為七位,加一個奇偶校驗位、一個起始位、一個停止位,則一幀共十位。1、異步通信19單片機原理與接口技術(shù)72、同步通信在數(shù)據(jù)開始傳送前用同步字符來指示(常約定1個--2個),并由時鐘來實現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示,其數(shù)據(jù)格式如圖所示。20單片機原理與接口技術(shù)7圖同步通信數(shù)據(jù)格式21單片機原理與接口技術(shù)72、同步通信同步字符的插入可以是單同步字符方式或雙同步字符方式,如圖所示,然后是連續(xù)的數(shù)據(jù)塊。同步字符可由用戶約定。按同步方式通信時,先發(fā)送同步字符,接收方檢測到同步字符后,即準備接收數(shù)據(jù)。
在同步傳送時,要求用時鐘來實現(xiàn)發(fā)送端與接收端之間的同步。為了保證接收正確無誤,發(fā)送方除了傳送數(shù)據(jù)外,還要同時傳送時鐘信號。同步傳送可以提高傳輸速率(達56kb/s或更高),但硬件比較復(fù)雜。22單片機原理與接口技術(shù)73、波特率(Baudrate)波特率,即數(shù)據(jù)傳送速率,表示每秒鐘傳送二進制代碼的位數(shù),它的單位是b/s。波特率對于CPU與外界的通信是很重要的。假設(shè)數(shù)據(jù)傳送速率是120字符/s,而每個字符格式包含10個代碼位(1個起始位、1個終止位、8個數(shù)據(jù)位)。這時,傳送的波特率為:
10b/字符×120字符/s=1200b/s23單片機原理與接口技術(shù)73、波特率(Baudrate)每一位代碼的傳送時間Td為波特率的倒數(shù)。
Td=1b/(1200bs-1)=0.833ms異步通信的傳送速率在50b/s--19200b/s之間,常用于計算機到終端機和打印機之間的通信、直通電報以及無線電通信的數(shù)據(jù)發(fā)送等。24單片機原理與接口技術(shù)77.1.4串行通信的過程及通信協(xié)議1、串←→并轉(zhuǎn)換與設(shè)備同步
兩個通信設(shè)備在串行線路上成功地實現(xiàn)通信必須解決兩個問題:
一是串←→并轉(zhuǎn)換,
即如何把要發(fā)送的并行數(shù)據(jù)串行化,把接收的
串行數(shù)據(jù)并行化;二是設(shè)備同步,
即同步發(fā)送設(shè)備與接收設(shè)備的工作節(jié)拍,以確保發(fā)送數(shù)據(jù)在接收端被正確讀出。25單片機原理與接口技術(shù)7(1)串←→并轉(zhuǎn)換
串行通信是將計算機內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),將其通過一根通信線傳送;并將接收的串行數(shù)據(jù)再轉(zhuǎn)換成并行數(shù)據(jù)送到計算機中。26單片機原理與接口技術(shù)7在計算機串行發(fā)送數(shù)據(jù)之前,計算機內(nèi)部的并行數(shù)據(jù)被送入移位寄存器并一位一位地輸出,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)。如圖所示。在接收數(shù)據(jù)時,來自通信線路的串行數(shù)據(jù)被壓入移位寄存器,滿8位后并行送到計算機內(nèi)部。如圖所示。在串行通信控制電路中,串--并、并--串轉(zhuǎn)換邏輯被集成在串行異步通信控制器芯片中。27單片機原理與接口技術(shù)728單片機原理與接口技術(shù)729單片機原理與接口技術(shù)7(2)設(shè)備同步進行串行通信的兩臺設(shè)備必須同步工作才能有效地檢測通信線路上的信號變化,從而采樣傳送數(shù)據(jù)脈沖。設(shè)備同步對通信雙方有兩個共同要求:一是通信雙方必須采用統(tǒng)一的編碼方法;二是通信雙方必須能產(chǎn)生相同的傳送速率。30單片機原理與接口技術(shù)7采用統(tǒng)一的編碼方法確定了一個字符二進制表示值的位發(fā)送順序和位串長度,當然還包括統(tǒng)一的邏輯電平規(guī)定,即電平信號高低與邏輯1和邏輯0的固定對應(yīng)關(guān)系。通信雙方只有產(chǎn)生相同的傳送速率,才能確保設(shè)備同步,這就要求發(fā)送設(shè)備和接收設(shè)備采用相同頻率的時鐘。發(fā)送設(shè)備在統(tǒng)一的時鐘脈沖上發(fā)出數(shù)據(jù),接收設(shè)備才能正確檢測出與時鐘脈沖同步的數(shù)據(jù)信息。31單片機原理與接口技術(shù)72、串行通信協(xié)議通信協(xié)議是對數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等。通信雙方必須遵守統(tǒng)一的通信協(xié)議。串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種。在此只討論異步串行通信協(xié)議和異步串行協(xié)議規(guī)定的字符數(shù)據(jù)的傳送格式。32單片機原理與接口技術(shù)72、串行通信協(xié)議(1)起始位通信線上沒有數(shù)據(jù)被傳送時處于邏輯1狀態(tài)。當發(fā)送設(shè)備要發(fā)送一個字符數(shù)據(jù)時,首先發(fā)出一個邏輯0信號,這個邏輯低電平就是起始位。起始位通過通信線傳向接收設(shè)備,接收設(shè)備檢測到這個邏輯低電平后,就開始準備接收數(shù)據(jù)位信號。起始位所起的作用就是設(shè)備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步。33單片機原理與接口技術(shù)72、串行通信協(xié)議(2)數(shù)據(jù)位當接收設(shè)備收到起始位后,緊接著就會收到數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是5、6、7或8。89C51串行口采用8位或9位數(shù)據(jù)傳送。這些數(shù)據(jù)位被接收到移位寄存器中,構(gòu)成傳送數(shù)據(jù)字符。在字符數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始發(fā)送,依次順序在接收設(shè)備中被轉(zhuǎn)換為并行數(shù)據(jù)。34單片機原理與接口技術(shù)72、串行通信協(xié)議(3)奇偶校驗位數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗位。奇偶校驗用于有限差錯檢測,通信雙方需約定已知的奇偶校驗方式。如果選擇偶校驗,那么組成數(shù)據(jù)位和奇偶位的邏輯1的個數(shù)必須是偶數(shù);如果選擇奇校驗,那么邏輯1的個數(shù)必須是奇數(shù)。35單片機原理與接口技術(shù)72、串行通信協(xié)議(4)停止位在奇偶位或數(shù)據(jù)位(當無奇偶校驗時)之后發(fā)送的是停止位。停止位是一個字符數(shù)據(jù)的結(jié)束標志,可以是1位,1.5位或2位的高電平。接收設(shè)備收到停止位之后,通信線路上便又恢復(fù)邏輯1狀態(tài),直至下一個字符數(shù)據(jù)的起始位到來。36單片機原理與接口技術(shù)72、串行通信協(xié)議(5)波特率設(shè)置通信線上傳送的所有位信號都保持一致的信號持續(xù)時間,每一位的信號持續(xù)時間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個二進制位來衡量的,這個速度叫波特率。如果數(shù)據(jù)以300個二進制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s。37單片機原理與接口技術(shù)72、串行通信協(xié)議(6)掛鉤(握手)信號約定
(見本章7.4節(jié)實例)38單片機原理與接口技術(shù)77.2串行口及應(yīng)用7.2.189C51串行口7.2.289C51串行口的工作方式及應(yīng)用39單片機原理與接口技術(shù)77.2.189C51串行口1、結(jié)構(gòu)2、串行口控制字及控制寄存器3、串行通信工作方式4、波特率設(shè)計40單片機原理與接口技術(shù)71、結(jié)構(gòu)引腳RXD(P3.0,串行數(shù)據(jù)接收端)引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)內(nèi)部有兩個物理獨立的接收、發(fā)送緩沖器SBUF,占用同一地址99H,可同時發(fā)送、接收數(shù)據(jù)。
發(fā)送緩沖器只能寫入,不能讀出;
接收緩沖器只能讀出,不能寫入。串行發(fā)送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖。移位脈沖的速率即是波特率。41單片機原理與接口技術(shù)7圖串行口內(nèi)部結(jié)構(gòu)示意簡圖42單片機原理與接口技術(shù)71、結(jié)構(gòu)接收器是雙緩沖結(jié)構(gòu),在前一個字節(jié)被從接收緩沖器SBUF讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CPU未讀取時,會丟失移位寄存器的字節(jié)數(shù)據(jù)。串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進行讀或?qū)懙?。當向SBUF發(fā)“寫”命令時:
MOVSBUF,A
即是向發(fā)送緩沖器SBUF裝載并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標志位TI=1。43單片機原理與接口技術(shù)71、結(jié)構(gòu)在滿足串行口接收中斷標志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當發(fā)讀SBUF命令時:
MOVA,SBUF
便由接收緩沖器(SBUF)取出信息通過89C51內(nèi)部總線送CPU。對于發(fā)送緩沖器,因為發(fā)送時CPU是主動的,不會產(chǎn)生重疊錯誤,一般不需要用雙緩沖器結(jié)構(gòu)來保持最大傳送速率。44單片機原理與接口技術(shù)72、串行口控制字及控制寄存器89C51串行口是可編程接口,用到兩個特殊功能寄存器:
SCON(98H)
PCON(87H)(電源控制寄存器)。(1)SCON(98H)
89C51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標志等均由特殊功能寄存器SCON控制和指示,其控制字格式如圖所示:45單片機原理與接口技術(shù)7圖串行口控制寄存器SCON46單片機原理與接口技術(shù)72、串行口控制字及控制寄存器①SM0和SM1(SCON.7,SCON.6)——串行口工作方式選擇位。兩個選擇位對應(yīng)4種通信方式,如表7-1所示。其中,fosc是振蕩頻率。47單片機原理與接口技術(shù)72、串行口控制字及控制寄存器②SM2(SCON.5)——多機通信控制位,
主要用于方式2和方式3。若置SM2=1,則允許多機通信。當一片89C51(主機)與多片89C51(從機)通信時,所有從機的SM2位都置1。主機首先發(fā)送的一幀數(shù)據(jù)為地址,即從機機號,其中第9位為1,所有的從機接收到數(shù)據(jù)后,將其中第9位裝入RB8中。各個從機根據(jù)收到的第9位數(shù)據(jù)(RB8中)的值來決定從機可否再接收主機的信息。若(RB8)=0,說明是數(shù)據(jù)幀,則使接收中斷標志位RI=0,信息丟失;若(RB8)=1,說明是地址幀,數(shù)據(jù)裝入SBUF并置RI=1,中斷所有從機,被尋址的目標從機清除SM2以接收主機發(fā)來的一幀數(shù)據(jù)。其他從機仍然保持SM2=1。48單片機原理與接口技術(shù)72、串行口控制字及控制寄存器②SM2(SCON.5)——多機通信控制位,
主要用于方式2和方式3。若SM2=0,即不屬于多機通信情況,則接收一幀數(shù)據(jù)后,不管第九位數(shù)據(jù)是0還是1,都制RI=1,接收到的數(shù)據(jù)裝SBUF。根據(jù)SM2這個功能,可實現(xiàn)多個89C51應(yīng)用系統(tǒng)的串行通信。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1,以便接收下一幀數(shù)據(jù)。在方式0時,SM2必須是0。49單片機原理與接口技術(shù)72、串行口控制字及控制寄存器③REN(SCON.4)——允許接收控制位。由軟件置1或清0,只有當REN=1時才允許接收,相當于串行接收的開關(guān);若REN=0,則禁止接收。在串行通信接收控制過程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中。50單片機原理與接口技術(shù)72、串行口控制字及控制寄存器④TB8(SCON.3)——發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中。在方式2或方式3中,根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復(fù)位。在許多通信協(xié)議中可用作奇偶校驗位,也可在多機通信中作為發(fā)送地址幀或數(shù)據(jù)幀的標志位。對于后者,TB8=1,說明該幀數(shù)據(jù)為地址;TB8=0,說明該幀數(shù)據(jù)為數(shù)據(jù)字節(jié)。在方式0或方式1中,該位未用。51單片機原理與接口技術(shù)72、串行口控制字及控制寄存器⑤RB8(SCON.2)——接收數(shù)據(jù)的第9位。在方式2或方式3中,接收到的第9位數(shù)據(jù)放在RB8位?;蚴羌s定的奇/偶校驗位,或是約定的地址/數(shù)據(jù)標識位。在方式2和方式3多機通信中,若SM2=1,如果RB8=1,說明收到的數(shù)據(jù)為地址幀。在方式1中,若SM2=0(即不是多機通信情況),RB8中
存放的是已接收到的停止位。在方式0中,該位未用。52單片機原理與接口技術(shù)72、串行口控制字及控制寄存器⑥TI(SCON.1)——發(fā)送中斷標志。在一幀數(shù)據(jù)發(fā)送完時被置位。
在方式0串行發(fā)送第8位結(jié)束或
其他方式串行發(fā)送到停止位的開始時
由硬件置位,可用軟件查詢。它同時也申請中斷,TI置位意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準備發(fā)送下一幀數(shù)據(jù)。串行口發(fā)送中斷被響應(yīng)后,
TI不會自動清0,必須由軟件清0。53單片機原理與接口技術(shù)72、串行口控制字及控制寄存器⑦RI(SCON.0)——接收中斷標志。在接收到一幀有效數(shù)據(jù)后由硬件置位。在方式0中,第8位數(shù)據(jù)發(fā)送結(jié)束時,由硬件置位;在其他三種方式中,當接收到停止位中間時由硬件置位。RI=1,申請中斷,表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù)。CPU響應(yīng)中斷,取走數(shù)據(jù)。RI也必須由軟件清0,清除中斷申請,并準備接收下一幀數(shù)據(jù)。54單片機原理與接口技術(shù)72、串行口控制字及控制寄存器(2)PCON(87H)
電源控制寄存器PCON中只有SMOD位與串行口工作有關(guān),如圖所示圖電源控制寄存器PCON55單片機原理與接口技術(shù)72、串行口控制字及控制寄存器SMOD(PCON.7)——波特率倍增位。在串行口方式1、方式2和方式3時,波特率和SMOD成正比,亦即當SMOD=1時,波特率提高一倍。復(fù)位時,SMOD=0。56單片機原理與接口技術(shù)73、串行通信工作方式根據(jù)實際需要,89C51串行口可設(shè)置4種工作方式,可有8位、10位或11位幀格式。方式0以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。其幀格式如下:57單片機原理與接口技術(shù)7方式1以10位為一幀傳輸,設(shè)有1個起始位(0),8個數(shù)據(jù)位和1個停止位(1)。其幀格式為:3、串行通信工作方式58單片機原理與接口技術(shù)73、串行通信工作方式方式2和方式3以11位為1幀傳輸,設(shè)有1個起始位(0),8個數(shù)據(jù)位,1個附加第9位和1個停止位(1)。其幀格式為:附加第9位(D8)由軟件置1或清0。發(fā)送時在TB8中,接收時送RB8中。59單片機原理與接口技術(shù)7同步移位寄存器輸入/輸出方式,常用于擴展I/O口RXD:數(shù)據(jù)輸入或輸出端,TXD:輸出移位時鐘,作為外接部件的同步信號這種方式不適用于兩個89C51之間的直接數(shù)據(jù)通信,但可以通過外接移位寄存器來實現(xiàn)單片機的接口擴展。(1)串行口方式060單片機原理與接口技術(shù)7圖方式0發(fā)送電路及時序61單片機原理與接口技術(shù)7圖方式0接收電路及時序62單片機原理與接口技術(shù)774LS164可用于擴展并行輸出口,74LS165可用于擴展輸入口。在這種方式下,收/發(fā)的數(shù)據(jù)為8位,低位在前,無起始位、奇偶校驗位及停止位,波特率是固定的。63單片機原理與接口技術(shù)7發(fā)送過程中,當執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF(99H)的指令時,串行口把SBUF中8位數(shù)據(jù)以fosc/12的波特率從RXD(P3.0)端輸出,發(fā)送完畢置中斷標志TI=1。方式0發(fā)送時序如圖所示。寫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ā)送中斷標志TI置位。64單片機原理與接口技術(shù)7
接收時,用軟件置REN=1(同時,RI=0),即開始接收。接收時序如圖所示。當使SCON中的REN=1(RI=0)時,產(chǎn)生一個正脈沖,在下一個機器周期的S3P1~S5P2,從TXD(P3.1)腳上輸出低電平的移位時鐘,在此機器周期的S5P2對P3.0腳采樣,并在本機器周期的S6P2通過串行口內(nèi)的輸入移位寄存器將采樣值移位接收;在同一個機器的S6P1到下一個機器周期的S2P2,輸出移位時鐘為高電平。于是,將數(shù)據(jù)字節(jié)從低位至高位一位一位地接收下來并裝入SBUF中。在啟動接收過程(即寫SCON,清RI位)將SCON中的RI清0之后的第10個機器周期的S1P1,RI被置位。這一幀數(shù)據(jù)接收完畢,可進行下一幀接收。65單片機原理與接口技術(shù)73、串行通信工作方式(2)串行口方式1真正用于串行發(fā)送或接收,為10位通用異步接口。TXD與RXD分別用于發(fā)送與接收數(shù)據(jù)。收發(fā)一幀數(shù)據(jù)的格式為1位起始位、8位數(shù)據(jù)位、1位停止位,共10位。(低位在前)在接收時,停止位進入SCON的RB8,此方式的傳送波特率可調(diào)。串行口方式1的發(fā)送和接收時序如圖所示66單片機原理與接口技術(shù)7圖方式1發(fā)送和接收時序67單片機原理與接口技術(shù)7數(shù)據(jù)從引腳TXD(P3.1)端輸出。當執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖器SBUF的命令時,就啟動了發(fā)送器開始發(fā)送。發(fā)送時的定時信號,也就是發(fā)送移位時鐘(TX時鐘),是由定時器T1送來的溢出信號經(jīng)過16分頻或32分頻(取決于SMOD的值)而得到的,TX時鐘就是發(fā)送波特率方式1的波特率是可變的。發(fā)送開始的同時,SEND變?yōu)橛行?,將起始位向TXD輸出;此后每經(jīng)過一個TX時鐘周期產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位;8位數(shù)據(jù)位全部發(fā)送完后,置為位TI,并申請中斷置TXD為1作為停止位,再經(jīng)一個時鐘周期,SEND失效。方式1發(fā)送時:68單片機原理與接口技術(shù)7數(shù)據(jù)從引腳RXD(P3.0)端輸入。接收是在SCON寄存器中REN位置1的前提下,并檢測到起始位(RXD上檢測到1→0的跳變,即起始位)而開始的。接收時,定時信號有兩種(如圖(b)所示):一種是接收移位時鐘(RX時鐘),它的頻率和傳送波特率相同,也是由定時器T1的溢出信號經(jīng)過16或32分頻而得到的;另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍,即在一位數(shù)據(jù)期間有16位檢測器采樣脈沖,為完成檢測,以16倍于波特率的速率對RXD進行采樣。方式1接收時:69單片機原理與接口技術(shù)7為了接受準確無誤,在正式接受數(shù)據(jù)之前,還必須判定這個1→0跳變是否是干擾引起的。為此,在這位中間(即一位時間分成16等份,在第7,第8及第9等份)連續(xù)對RXD采樣三次,取其中兩次相同的值進行判斷。這樣能較好地消除干擾的影響。當確認是真正的起始位(0)后,就開始接受一幀數(shù)據(jù)。當一幀數(shù)據(jù)接受完畢后,必須同時滿足以下兩個條件,這次接受才真正有效。70單片機原理與接口技術(shù)7①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,這意味著該幀信息將會丟失。
值得注意的是,在整個接收過程中,保證REN=1是一個先決條件。只有當REN=1時,才能對RXD進行檢測。71單片機原理與接口技術(shù)73、串行通信工作方式(3)串行口方式2和方式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。發(fā)送、接收時序如圖所示。72單片機原理與接口技術(shù)7圖方式2、方式3發(fā)送和接收時序73單片機原理與接口技術(shù)7發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如作奇偶校驗位或地址/數(shù)據(jù)標志位),然后將要發(fā)送的數(shù)據(jù)寫入SBUF,即可啟動發(fā)送過程。串行口能自動把TB8取出,并裝入到第9位數(shù)據(jù)位的位置,再逐一發(fā)送出去。發(fā)送完畢,使TI=1。接收時,使SCON中的REN=1,允許接收。當檢測到RXD(P3.0)端有1→0的跳變(起始位)時,開始接收9位數(shù)據(jù),送入移位寄存器(9位)。當滿足RI=0且SM2=0,或接收到的第9位數(shù)據(jù)為1時,前8位數(shù)據(jù)送入SBUF,附加的第9位數(shù)據(jù)送入SCON中的RB8,置RI為1;否則,這次接收無效,也不置位RI。74單片機原理與接口技術(shù)74、波特率設(shè)計串行口的四種工作方式對應(yīng)著三種波特率。由于輸入的移位時鐘來源不同,因此,各種方式的波特率計算公式也不同。75單片機原理與接口技術(shù)7方式0時,發(fā)送或接收一位數(shù)據(jù)的移位時鐘脈沖由S6(即第6個狀態(tài)周期,第12個節(jié)拍)給出,即每個機器周期產(chǎn)生一個移位時鐘,發(fā)送或接收一位數(shù)據(jù)。因此,波特率固定為振蕩頻率的1/12,并不受PCON寄存器中SMOD位的影響。圖串行口方式0波特率的產(chǎn)生(1)方式0的波特率76單片機原理與接口技術(shù)7方式0波特率≌fosc/12注意,符號“≌”表示左面的表達式只是引擁右面表達式的數(shù)值,即右面的表達式是提供了一種計算的方法。77單片機原理與接口技術(shù)7(2)方式2的波特率SMOD=0時,波特率為fosc的1/64;SMOD=1時,波特率為fosc的1/32。方式2波特率取決于PCON中SMOD位的值波特率≌2SMOD/64×fosc圖串行口方式2波特率的產(chǎn)生78單片機原理與接口技術(shù)7(3)方式1和方式3的波特率方式1和方式3的移位時鐘脈沖由定時器T1的溢出率決定波特率由定時器T1的溢出率與SMOD值同時決定。方式1、方式3波特率≌T1溢出率/n圖串行口方式1、方式3波特率的產(chǎn)生79單片機原理與接口技術(shù)7SMOD=0時,n=32SMOD=1時,n=16。所以,可用下式確定方式1和方式3的波特率:
波特率≌(T1溢出速率)×2SMOD/32其中,T1溢出速率取決于T1的計數(shù)速率(計數(shù)速率≌fosc/12)和T1預(yù)置的處置。若定時器T1采用模式1時,波特率公式如下:波特率≌2SMOD/32×(fosc/12)/(216-初值)80單片機原理與接口技術(shù)7表7-2常用波特率與其他參數(shù)選取關(guān)系表7-2列出了串行口方式1、方式3常用波特率及其初值。81單片機原理與接口技術(shù)7定時器T1用作波特率發(fā)生器時,通常選用定時器模式2(自動重裝初值定時器)比較實用。要設(shè)置定時器T1為定時方式,計數(shù)速率為fosc/12注意應(yīng)禁止T1中斷,以免溢出而產(chǎn)生不必要的中斷。先設(shè)定TH1和TL1定時即輸初值為X,那么每過“28-X”個機器周期,定時器T1就會產(chǎn)生一次溢出。82單片機原理與接口技術(shù)7因此,T1溢出速率為T1溢出速率≌(fosc/12)/(28-X)于是,可得出定時器T1模式2的初始值X:83單片機原理與接口技術(shù)7例7-1:89C51單片機時鐘振蕩頻率為11.0592MHz,選用定時器T1工作模式2作為波特率發(fā)生器,波特率為2400b/s,求初值。解:設(shè)置波特率控制為(SMOD)=0所以,(TH1)=(TL1)=F4H。84單片機原理與接口技術(shù)7系統(tǒng)晶體振蕩頻率選為11.0592MHz就是為了使初值為整數(shù),從而產(chǎn)生精確的波特率。如果串行通信選用很低的波特率,可將定時器T1置于模式0或模式1,即13位或16位定時方式;但在這種情況下,
T1溢出時,需要中斷服務(wù)程序重裝初值。
中斷響應(yīng)時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,
可用改變初值的辦法加以調(diào)整。85單片機原理與接口技術(shù)77.2.289C51串行口的應(yīng)用89C51串行口的四種工作方式傳送的數(shù)據(jù)位數(shù)敘述如下:①方式0:移位寄存器輸入/輸出方式。串行數(shù)據(jù)通過RXD線輸入或輸出,TXD線專用于輸出時鐘脈沖給外部移位寄存器。方式0可用來同步輸出或接收8位數(shù)據(jù)(最低位首先輸出),波特率固定為fosc/1286單片機原理與接口技術(shù)7②方式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ù)位、1位停止位之外,還可以插入第9位數(shù)據(jù)位。④方式3:同方式2,只是波特率可變。7.2.289C51串行口的應(yīng)用87單片機原理與接口技術(shù)71、串行口方式0的應(yīng)用方式0時是同步操作。外接串入—并出或并入—串出器件,可實現(xiàn)I/O的擴展。數(shù)據(jù)傳送可以采用中斷方式,也可以采用查詢方式。無論哪種方式,都要借助于TI或RI標志。在串行口發(fā)送時,或者靠TI置位后引起中斷申請,在中斷服務(wù)程序中發(fā)送下一組數(shù)據(jù);或者通過查詢TI的值,只要TI為0就繼續(xù)查詢,直到TI為1后結(jié)束查詢,進入下一個字符的發(fā)送。在串行口接收時,由RI引起中斷或?qū)I查詢來決定何時接收下一個字符。無論采用什么方式,在開始串行通信前,都要先對SCON寄存器初始化,進行工作方式的設(shè)置。88單片機原理與接口技術(shù)71、串行口方式0的應(yīng)用例7-2:用89C51串行口外接164串入—并出移位寄存器擴展8位并行口;8位并行口的每位都接一個發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán)。設(shè)發(fā)光二極管為共陰極接法,如圖所示。解:設(shè)數(shù)據(jù)串行發(fā)送采用中斷方式,顯示的延遲通過調(diào)用延遲程序DELAY來實現(xiàn)。89單片機原理與接口技術(shù)7程序清單:
ORG0023H ;串行口中斷入口
AJMPSBR ;轉(zhuǎn)入串行口中斷服務(wù)程序
ORG2000H;主程序起始地址
MOVSCON,#00H ;串行口方式0初始化
MOVA,#80H ;最左一位發(fā)光二極管先亮
CLRP1.0 ;關(guān)閉并行輸出
MOVSBUF,A ;開始串行輸出LOOP:SJMP$;等待中斷SBR: SETBP1.0 ;啟動并行輸出
ACALLDELAY ;顯示延遲一段時間
CLRTI ;清發(fā)送中斷標志
RRA ;準備右邊一位顯示
CLRP1.0 ;關(guān)閉并行輸出
MOVSBUF,A ;再一次串行輸出
RETI ;中斷返回90單片機原理與接口技術(shù)7用方式0外加移位寄存器來擴展8位輸出口時,要求移位寄存器帶有輸出控制,否則串行移位過程也會反映到并行輸出口;另外,輸出口最好再接一個寄存器或鎖存器,以免在輸出門關(guān)閉使(STB=0)輸出又發(fā)生變化。用方式0加上并入——串出移位寄存器可擴展一個8位并行輸入口。移位寄存器必須帶有預(yù)置/移位的控制端,由單片機的一個輸出端子加以控制,以實現(xiàn)先由8位輸入口置數(shù)到移位寄存器,然后再串行移位從單片機的串行口輸入到接收緩沖器,最后再讀入到CPU中。91單片機原理與接口技術(shù)7例7-3:
用89C51串行口外加移位寄存器165或166擴展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號。當K=0時,表示要求輸入數(shù)據(jù),輸入的8位為開關(guān)量,提供邏輯模擬子程序的輸入信號。如圖所示。74HC165并入串出寄存器的shift端口,shift為1,允許把外部的數(shù)據(jù)置入到74hc165中,shift為0開始串行移位到單片機sbuf中92單片機原理與接口技術(shù)7START:MOVSCON,#10H;串行口方式0初始化
JBP1.1,$ ;開關(guān)K未閉合,等待
SETBP1.0 ;并行置入數(shù)據(jù)?
CLRP1.0 ;開始串行移位?
JNBRI,$ ;查詢RI,完全移到sbuf后ri自動為1 CLRRI ;查詢結(jié)束,清RI MOVA,SBUF ;讀數(shù)據(jù)到累加器
ACALLLOGSIM ;進行邏輯模擬
SJMPSTART ;準備下一次模擬93單片機原理與接口技術(shù)72、串行口方式1的發(fā)送和接收例7-4:
89C51串行口按雙工方式收發(fā)ASCII字符,最高位用來作奇偶校驗位,采用奇校驗方式,要求傳送的波特率為1200b/s。編寫有關(guān)的通信程序。解:
7位ASCII碼加1位奇校驗共8位數(shù)據(jù),采用串行口方式1。奇偶校驗位P是當累加器A中1的數(shù)目為奇數(shù)時,P=1。如果直接把P的值放入ASCII碼的最高位,恰好成了偶校驗,與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗。94單片機原理與接口技術(shù)72、串行口方式1的發(fā)送和接收設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為6MHz,通過查波特率初值(表7-2)可知定時器的初裝值為F3H。定時器T1采用工作模式2,可以避免計數(shù)溢出后用軟件重裝定時初值的工作。95單片機原理與接口技術(shù)7主程序
MOVTMOD,#20H;定時器1設(shè)為模式2MOVTL1,#0F3H;定時器初值
MOVTH1,#0F3H;8位重裝值
SETBTR1;啟動定時器1MOVSCON,#50H;設(shè)置為方式1, ;REN=1MOVR0,#20H;發(fā)送數(shù)據(jù)區(qū)首址
MOVR1,#40H;接收數(shù)據(jù)區(qū)首址
ACALLSOUT;先輸出一個字符
SETBESSETBEASJMP$;等待中斷96單片機原理與接口技術(shù)7中斷
ORG0023H;串行口中斷入口
AJMPSBR1;轉(zhuǎn)至中斷服務(wù)程序
…….
ORG0100H
SBR1:JNBRI,SEND;TI=1,為發(fā)送中斷
ACALLSIN;RI=1,為接收中斷
SJMPNEXT;轉(zhuǎn)至統(tǒng)一的出口SEND:ACALLSOUT;調(diào)用發(fā)送子程序NEXT:RETI;中斷返回97單片機原理與接口技術(shù)7發(fā)送子程序
SOUT:CLRTIMOVA,@R0;取發(fā)送數(shù)據(jù)到AMOVC,P;奇偶標識賦予CCPLC;奇校驗
MOVACC.7,CINCR0;修改發(fā)送數(shù)據(jù)指針
MOVSBUF,A;發(fā)送ASCII碼
RET;返回98單片機原理與接口技術(shù)7接收子程序
SIN:CLRRI MOVA,SBUF;讀出接收緩沖區(qū)內(nèi)容
MOVC,P;取出校驗位
CPLC;奇校驗
ANLA,#7FH;刪去校驗位
MOV@R1,A;讀入接收緩沖區(qū)
INCR1;修改接收數(shù)據(jù)指針
RET;返回99單片機原理與接口技術(shù)7在主程序中已初始化REN=1,則允許接收。以上程序基本上具備了全雙工通信的能力,但不能說很完善。例如,在接收子程序中,雖然檢驗了奇偶校驗位,但沒有進行出錯處理;另外,發(fā)送和接收數(shù)據(jù)區(qū)的范圍都很有限,也不能滿足實際需要。但有了一個基本的框架之后,逐漸完善還是可以做到的。100單片機原理與接口技術(shù)72、串行口方式1的發(fā)送和接收例7-5:采用查詢方式由串行口發(fā)送帶奇偶校驗位的數(shù)據(jù)塊。由內(nèi)部RAM單元20H-3FH取出ASCII碼數(shù)據(jù),在最高位上加奇偶校驗位后由串行口發(fā)出。采用8位異步通信方式,波特率為1200b/s,fosc=11.059MHz。
由要求可知,應(yīng)把串行口設(shè)置為方式1,采用定時器1模式2作為波特率發(fā)生器,預(yù)置值(TH1)=0E8H。101單片機原理與接口技術(shù)7主程序;
MOVTMOD,#20H ;設(shè)置定時器1為模式2 MOVTL1,#0E8H ;初值,波特率為1200b/s MOVTH1,#0E8H SETBTR1 ;啟動T1運行
MOVSCON,#01000000B ;設(shè)置串行口為方式1 MOVR0,#20H MOVR7,#32 ;數(shù)據(jù)塊長度LOOP:
MOVA,@R0
ACALLSP-OUT
JNBP,ERROR;傳輸出錯處理,由SP-OUT中“CPLC”結(jié)果決定
INCR0DJNZR7,LOOP ……102單片機原理與接口技術(shù)7串行口發(fā)送子程序(奇校驗)SP-OUT:MOVC,PSW.0;設(shè)置奇校驗位,校驗位P=1為奇校驗
CPLC;奇校驗(無此指令位偶校驗)
MOVACC.7,C;ACC.7補0或1
MOVSBUF,A;啟動串行口發(fā)送過程
JNBTI,$CLRTI;清TI標志,允許在發(fā)送
RETERROR:(略)103單片機原理與接口技術(shù)7例7-6:由串行口接收帶奇偶校驗位的數(shù)據(jù)塊。解:采用查詢方式,本例與上例相呼應(yīng),接收器把接收到的32B數(shù)據(jù)存放在20H-3FH單元內(nèi),波特率同上,若奇校驗出錯,則置進位位為1。程序清單:104單片機原理與接口技術(shù)7主程序;
MOVSCON,#01010000B;設(shè)串口方式1,允許接收
MOVTMOD,#20H ;設(shè)置定時器T1為模式2 MOVTL1,#0E8H ;初值,波特率為1200b/s MOVTH1,#0E8H SETBTR1 ;啟動T1運行
MOVR0,#20H MOVR7,#32 ;數(shù)據(jù)塊長度LOOP:
ACALLSP-IN ;調(diào)接收一幀子程序
JCERROR ;由SP-IN中“CPLC”結(jié)果決定
MOV@R0,A ;存放接收的數(shù)據(jù)
INCR0DJNZR7,LOOP……105單片機原理與接口技術(shù)7接收一幀子程序;
SP-IN: JNBRI,$ ;RI由硬件置位
CLRRI ;軟件清除RI
MOVA,SBUF
MOVC,P ;檢查奇校驗位
CPLC;置C為主程序“JCERROR”用
ANLA,#7FH ;去掉奇校驗位
RETERROR: (略)106單片機原理與接口技術(shù)7例7-7:利用串行口和堆棧技術(shù)發(fā)送字符串常量。解:上面兩個例子中,發(fā)送和接收的都是一些變量數(shù)據(jù),且存放在內(nèi)部RAM單元中。現(xiàn)說明如何利用堆棧技術(shù)發(fā)送存放在程序存儲器內(nèi)的字符串常量。下面的例子中,這些字符串是發(fā)送給CRT終端的,以回車符(CR)和換行符(LF)開始,以換碼符(ESC)為結(jié)尾。下面是程序片斷:107單片機原理與接口技術(shù)7CREQU0DH;ASCII回車符LFEQU0AH;ASCII換行符ESCEQU1BH;ASCII換碼符……MOVTMOD,#20H;設(shè)置定時器T1為模式2MOVTL1,#0FDH;設(shè)波特率位9600b/s
;(fosc=11.059MHz)MOVTH1,#0FDHSETBTR1;啟動T1運行MOVSCON,#01000000B;設(shè)置串行口方式1ACALLXSTRINGDBCR,LFDB‘NU&BIAA’;字符串常量DBESC……108單片機原理與接口技術(shù)7XSTRING: POPDPH;把第1個字符的地址裝入DPTR POPDPLXSTR-1: CLRA;設(shè)偏移量為零
MOVCA,@A+DPTR;取第1個字符XSTR-2: MOVSBUF,A;啟動一幀發(fā)送過程
JNBTI,$
;等待發(fā)送一幀完
CLRTI INCDPTR;指向下一字符
CLRA;偏移量為0 MOVCA,@A+DPTR;取下一字符
CJNEA,#ESC,XSTR-2;讀到ESC符時,停止發(fā)送
MOVA,#1 JMP@A+DPTR ;返回執(zhí)行ESC符后 ;的一條指令,即接著 ;執(zhí)行背景程序109單片機原理與接口技術(shù)7說明:程序中采用了“ACALLXSTRING”指令,而實際上由XSTRING開始的程序段形式上并不構(gòu)成一個子程序,因為子程序應(yīng)由RET作為結(jié)尾。采用ACALL指令的目的在于利用子程序調(diào)用協(xié)議,即執(zhí)行調(diào)用指令后,把一個單元(存放常量CR)的地址壓入了堆棧。這樣,XSTRING段的第1,2條指令執(zhí)行后,就把放置字符常量CR的單元地址置入DPTR了。ESC后一個單元應(yīng)是背景程序中送完字符串后要執(zhí)行的那條指令,故執(zhí)行完XSTRING程序段的最后2條指令,將繼續(xù)執(zhí)行背景程序。110單片機原理與接口技術(shù)73、串行口方式2、方式3的發(fā)送和接收串行口方式2與方式3基本一樣(只是波特率設(shè)置不同),接收/發(fā)送11位信息:開始為1位起始位(0),中間8位數(shù)據(jù)位,數(shù)據(jù)位之后為1位程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式1多了一位程控位。111單片機原理與接口技術(shù)7例7-8:用第9個數(shù)據(jù)位作奇偶校驗位,編制串行口方式2的發(fā)送程序。解:設(shè)計一個發(fā)送程序,將片內(nèi)RAM50H~5FH中的數(shù)據(jù)串行發(fā)送;串行口設(shè)定為方式2狀態(tài),TB8作奇偶校驗位。在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時,第9位數(shù)據(jù)作奇偶校驗用。方式2發(fā)送程序流程圖如圖所示。112單片機原理與接口技術(shù)7程序清單如下:TRT: MOVSCON,#80H;方式2設(shè)定
MOVPCON,#80H;取波特率為fosc/32
MOVR0,#50H
MOVR7,#10H ;數(shù)據(jù)長度10H→R7LOOP: MOVA,@R0;取數(shù)據(jù)→A
MOVC,PSW.0;P→TB8 MOVTB8,C
MOVSBUF,A;數(shù)據(jù)→SBUF,啟動發(fā)送WAIT: JBCTI,CONT;判斷發(fā)送中斷標志
SJMPWAITCONT: INCR0 DJNZR7,LOOP RET113單片機原理與接口技術(shù)7例7-9編制一個串行口方式2接收程序,并核對奇偶校驗位。解:根據(jù)上面介紹的特點,在方式2、方式3的發(fā)送過程中,將數(shù)據(jù)和附加在TB8中的奇偶位一塊發(fā)向?qū)Ψ?。因此,作為接收的一方?yīng)設(shè)法取出該奇偶位進行核對,相應(yīng)的接收程序段為:114單片機原理與接口技術(shù)7RRR:MOVSCON,#90H;選方式2,并允許接收(REN=1)LOOP:JBCRI,RECEIV ;等待接收數(shù)據(jù)并清RI SJMPLOOPRECEIV:MOVA,SBUF;將接收到的字符取出后,送到ACC。注意, ;傳送指令影響PSW,產(chǎn)生接收端的奇偶值 JBPSW.0,ONE ;判斷接收端的奇偶值
JBRB8,ERR ;判斷發(fā)送端的奇偶值 SJMPRIGHTONE: JNBRB8,ERRRIGHT: …… ;接收正確 ……ERR: …… ;接收有錯115單片機原理與接口技術(shù)7當接收到一個字符時,從SBUF轉(zhuǎn)移到ACC中時會產(chǎn)生接收端的奇偶值,而保存在RB8中的值為發(fā)送端的奇偶值,兩個奇偶值應(yīng)相等,否則接收字符有錯。發(fā)現(xiàn)錯誤要及時通知對方重發(fā)。116單片機原理與接口技術(shù)7例7-10:編制一個發(fā)送程序,將片內(nèi)RAM中50H—5FH的數(shù)據(jù)串行發(fā)送。串行口設(shè)定為工作方式2,TB8作奇偶校驗位。解:在數(shù)據(jù)寫入發(fā)送SBUF之前,先將數(shù)據(jù)的奇偶標志P寫入TB8,此時,第9位數(shù)據(jù)便可作奇偶校驗用??刹捎貌樵兒椭袛鄡煞N方式發(fā)送。117單片機原理與接口技術(shù)7(1)采用查詢方式的程序段
ORG0000H AJMPMAIN ;上電,轉(zhuǎn)向主程序
ORG0100H ;主程序MAIN: MOVSCON,#80H ;設(shè)工作方式2 MOVPCON,#80H ;取波特率為fosc/32 MOVR0,#50H ;首址50H送R0 MOVR7,#10H ;數(shù)值長度送R7LOOP: MOVA,@R0 ;取數(shù)據(jù)
MOVC,PSW.0 ;P→C MOVTB8,C ;奇偶標志送TB8 MOVSBUF,A ;發(fā)送數(shù)據(jù)WAIT: JBCTI,CONT AJMPWAIT ;等待中斷標志TI=1CONT: INCR0 DJNZR7,LOOP ;數(shù)值尚未發(fā)送完,繼續(xù)發(fā)送下一個數(shù)據(jù)
SJMP$ END118單片機原理與接口技術(shù)7(2)采用中斷方式的程序段
ORG0000HAJMPMAIN;上電,轉(zhuǎn)向主程序
ORG0023H;串行口的中斷入口地址
AJMPSERVE;轉(zhuǎn)向中斷服務(wù)程序
ORG0100H;主程序MAIN:
MOVSCON,#80HMOVPCON,#80HMOVR0,#50HMOVR7,#0FH;中斷方式中因為是先傳一個數(shù)據(jù),再進入中斷
SETBES;允許串行口中斷
SETBEA;CPU允許中斷
MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;發(fā)送第一個數(shù)據(jù)
SJMP$119單片機原理與接口技術(shù)7SERVE:
CLRTI;清除發(fā)送中斷標志
INCR0;修改數(shù)據(jù)地址
MOVA,@R0MOVC,PSW.0;P→CMOVTB8,CMOVSBUF,A;發(fā)送數(shù)據(jù)
DJNZR7,ENDT;判斷數(shù)據(jù)塊發(fā)送完否;若未發(fā)送完,則轉(zhuǎn)ENDTCLRES;若發(fā)送完,則禁止串行口中斷ENDT:RETI;中斷返回
END120單片機原理與接口技術(shù)7例7-11:編制一個接收程序,將接收的16B數(shù)據(jù)送入片內(nèi)RAM的5OH—5FH單元中。設(shè)串行口工作于方式3,波特率為2400b/s。解:方式3為11位異步通信方式,波特率取決于TI的溢出率??芍?,當晶振為11.059MHz,波特率為2400b/s時,可取SMOD=0。121單片機原理與接口技術(shù)7源程序如下:MAIN: MOVTMOD,#20H ;設(shè)TI工作于模式2 MOVTH1,#0F4H ;賦循環(huán)計數(shù)初值
MOVTL1,#0F4H ;賦計數(shù)值
SETBTR1 ;啟動定時器TI MOVR0,#50H ;首地址送R0 MOVR7,#10H ;數(shù)據(jù)長度送R7 MOVSCON,#0D0H ;串行口工作與方式3,可接收
MOVPCON,#00H ;設(shè)SMOD=0WAIT: JBCRI,PR1 ;接收完一幀數(shù)據(jù),清RI,轉(zhuǎn)PR1 SJMPWAIT ;否則等待PR1: MOVA,SBUF ;讀入數(shù)據(jù)
JNBP,PNP ;P=0,轉(zhuǎn)PNP JNBRB8,PER ;P=1,RB8=0,轉(zhuǎn)出錯處理
SJMPRIGHTPNP: JBRB8,PER ;P=0,RB8=1,轉(zhuǎn)出錯處理RIGHT: MOV@R0,A ;數(shù)據(jù)送內(nèi)存
INCR0 ;修改地址指針
DJNZR7,WAIT ;數(shù)據(jù)未接收完,繼續(xù)接收下一個數(shù)據(jù)
CLRPSW.5 ;置正確接收完畢標志F0=0 RETPER: SETBPSW.5 RET122單片機原理與接口技術(shù)77.389C51與89C51點對點異步通信7.3.1通信協(xié)議7.3.2波特率設(shè)置7.3.3通信程序舉例123單片機原理與接口技術(shù)77.3.1通信協(xié)議要想保證通信成功,通信雙方必須有一系列的約定,比如:作為發(fā)送方,必須知道什么時候發(fā)送信息,發(fā)什么,對方是否收到,收到的有沒有錯,要不要重發(fā),怎樣通知對方結(jié)束等等。作為接收方,必須知道對方是否發(fā)送了信息,發(fā)的是什么,收到的信息是否有錯,如果有錯怎樣通知對方重發(fā),怎樣判斷結(jié)束等這種約定就叫做通信規(guī)程或協(xié)議,它必須在編程之前確定下來。124單片機原理與接口技術(shù)77.3.1通信協(xié)議要想使通信雙方能夠正確交換信息和數(shù)據(jù),在協(xié)議中對什么時候開始通信,什么時候結(jié)束通信,何時交換信息等等都必須作出明確的規(guī)定。只有雙方遵守這些規(guī)定才能順利地進行通信。125單片機原理與接口技術(shù)77.3.2波特率設(shè)置波特率,它反映了串行通信的速率,也反映了對于傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。一般異步通信的波特率在50b/s—9600b/s之間。由于異步通信雙方各用自己的時鐘源,要保證捕捉到的信號正確,最好采用較高頻率的時鐘。一般選擇時鐘頻率比波特率高16倍或64倍。若是時鐘頻率等于波特率,則頻率稍有偏差便會產(chǎn)生接收錯誤。126單片機原理與接口技術(shù)7
在異步通信中,收、發(fā)雙方必須事先規(guī)定兩件事:一是字符格式,即規(guī)定字符各部分所占的位數(shù),是否采用奇偶校驗以及校驗的方式(偶校驗還是奇校驗)等通信協(xié)議;二是采用的波特率以及時鐘頻率和波特率的比例關(guān)系。
89C51的串行通信的波特率由定時器T1的溢出率獲得(僅指串行口方式1、方式3時),當串行口工作于方式1或方式3時,波特率為:127單片機原理與接口技術(shù)7其中,k為定時器1的位數(shù)定時器模式0,k=13;定時器模式1,k=16;定時器模式2和摸式3.k=8。128單片機原理與接口技術(shù)7若定時器T1工作于模式1,采用11.059MHz的晶振,要求利用定時器1產(chǎn)生1200b/s的波特率,則令SMOD=0,可算得初值為那么,TH1的初值為0FFH,TL1的初值為0E8H。129單片機原理與接口技術(shù)7有關(guān)的程序如下:MAIN: SETBPT1 ;設(shè)定T1為高中斷優(yōu)先級
S
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度電氣設(shè)備安裝與維修合同
- 總經(jīng)理聘請合同模板
- 房地產(chǎn)代理合同范文:委托與代理
- 代理合同:房地產(chǎn)估價委托協(xié)議書
- 廣告業(yè)務(wù)經(jīng)營權(quán)轉(zhuǎn)讓合同
- 產(chǎn)品責(zé)任保險合同專業(yè)版解析
- 自動化機器租賃協(xié)議
- 2024裝修工程轉(zhuǎn)包合同范本
- 年度長期合作協(xié)議范例
- 全面購銷合同模板珍藏
- 君子自強不息課件
- 2022人教版高二英語新教材選擇性必修全四冊課文原文及翻譯(英漢對照)
- WDZANYJY23低壓電力電纜技術(shù)規(guī)格書
- 抗高血壓藥物基因檢測課件
- 醫(yī)院管理醫(yī)院應(yīng)急調(diào)配機制
- (公開課)文言文斷句-完整版課件
- 小學(xué)生性教育調(diào)查問卷
- 醫(yī)院感染管理質(zhì)量持續(xù)改進反饋表
- 旅游行政管理第二章旅游行政管理體制課件
- 學(xué)生崗位實習(xí)家長(或法定監(jiān)護人)知情同意書
- 衛(wèi)生院關(guān)于召開基本公共衛(wèi)生服務(wù)項目培訓(xùn)會的通知
評論
0/150
提交評論