第5章80C51基本功能_第1頁
第5章80C51基本功能_第2頁
第5章80C51基本功能_第3頁
第5章80C51基本功能_第4頁
第5章80C51基本功能_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第5章章 80C51基本功能單元結(jié)構(gòu)與操基本功能單元結(jié)構(gòu)與操作原理作原理v5.1 定時定時/計數(shù)器計數(shù)器v5.2 串行接口串行接口v5.3 中斷系統(tǒng)中斷系統(tǒng)5.2 串行接口串行接口 80C51單片機有一個可編程的全雙工串行通信接口。通過軟件編程它可以用作通用異步接收和發(fā)送器UART,同時接收和發(fā)送數(shù)據(jù)(時鐘同步,時鐘不同步);也可以用作同步移位寄存器。其幀格式可有8位、10位和11位,并能設(shè)置成多種波特率。5.2.1 串行口的結(jié)構(gòu)和工作原理串行口的結(jié)構(gòu)和工作原理5.2.1.1 串行口結(jié)構(gòu) 80C51串行口結(jié)構(gòu)如圖5-7所示。它主要由兩個數(shù)據(jù)緩沖寄存器和一個輸入移位寄存器組成。發(fā)送數(shù)據(jù)緩沖器只

2、能寫入,不能讀出;接收數(shù)據(jù)緩沖器只能讀出,不能寫入。故兩個緩沖器共用同一個符號(SBUF),占用同一個地址(99H)。CPU寫SBUF,一方面修改發(fā)送緩沖器,一方面啟動串行發(fā)送;CPU讀SBUF,就是讀接收寄存器。此外串行口中還有兩個特殊功能寄存器SCON、PCON,分別用來控制串行口的工作方式和波特率。發(fā)送SBUF(99H)發(fā)送SBUF(99H)定時器T1門發(fā)送控制器接收控制器輸入移位寄存器+(98H)串行控制寄存器888串行口中斷TIRI內(nèi)部總線TXD(P3.1)RXD(P3.0) 80C51串行口通過編程可設(shè)置串行口通過編程可設(shè)置4種工作方式,三種幀格式。種工作方式,三種幀格式。方式方式

3、0以以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。其幀格式如下:收最低位。其幀格式如下:方式方式1以以10位數(shù)據(jù)為一幀傳輸,設(shè)有一個起始位位數(shù)據(jù)為一幀傳輸,設(shè)有一個起始位“0”,8 個數(shù)個數(shù)據(jù)位和一個停止位據(jù)位和一個停止位“1”。其幀格式為:。其幀格式為: 方式方式2和和3以以11位數(shù)據(jù)為一幀傳輸,設(shè)有一個起始位位數(shù)據(jù)為一幀傳輸,設(shè)有一個起始位“0”,8個數(shù)據(jù)位,個數(shù)據(jù)位,1個可編程位(第九位數(shù)據(jù))個可編程位(第九位數(shù)據(jù))D8和一個停止位和一個停止位“1”。其幀格式如下:其幀格式如下: 可編程位可編程位D8由軟件置由軟件置“1”或清或清“

4、0”,該位可作校驗位,也可,該位可作校驗位,也可作他用。作他用。5.2.1.2 串行口控制寄存器 SCON用于確定串行通道的工作方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志。其格式及功能如下: (1)SM0和SM1:工作方式控制位,可構(gòu)成以下4 種工作方式: (2)SM2:在方式2和方式3中用于多機通信控制。當(dāng)方式2或方式3處于接收時,若SM2=1,且接收到第9位RB8為0時,RI不置“1”,若SM2=1,且RB8為1時,則RI置“1”。 在方式1中,當(dāng)處于接收時,若SM2=1,則只有接收到有效的停止位時,RI才置“1”。 在方式0中,SM2應(yīng)置0。 (3)REN:允許串行接收控制位。用軟件置

5、“1”或清“0”。REN=1時,允許接收,REN=0時,禁止接收。 (4)TB8:在方式2和方式3中,它是準(zhǔn)備發(fā)送的第9個數(shù)據(jù)位。根據(jù)需要可用軟件置“1”或清“0”。它可作為數(shù)據(jù)的奇偶校驗位,或在多機通信中作為地址幀或數(shù)據(jù)幀的標(biāo)志。 (5)RB8:在方式2和方式3中,它是接收到的第9個數(shù)據(jù)位。既可以作為約定好的奇偶校驗位,也可以作為多機通信時的地址幀或數(shù)據(jù)幀的標(biāo)志。 (6)TI:發(fā)送中斷標(biāo)志位。在工作方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置“1”,向CPU申請發(fā)送中斷。CPU響應(yīng)中斷后,必須用軟件清“0”,在其工作方式中,它在停止位開始發(fā)送時由硬件置“1”,同樣必須用軟件清“0”。 (7)RI:接

6、收中斷標(biāo)志位。在工作方式0中,接收完8位數(shù)據(jù)后,由硬件置“1”,向CPU申請接收中斷。CPU響應(yīng)中斷后,必須用軟件清“0”,在其他工作方式中,在接收到停止位的中間時刻由硬件置“1”,向CPU申請中斷,表示一幀數(shù)據(jù)接收結(jié)束,并已裝入緩沖器,要求CPU取走數(shù)據(jù)。CPU響應(yīng)中斷,取走數(shù)據(jù)后必須由軟件清“0”,解除中斷請求,準(zhǔn)備接收下一幀數(shù)據(jù)。 串行發(fā)送中斷標(biāo)志與接收中斷標(biāo)志是同一個中斷源,在全雙工通信時,必須用軟件來判斷是發(fā)送中斷請求還是接收中斷請求。 SCON的地址是98H,可以位尋址。復(fù)位時,SCON所有位均清“0”。5.2.1.3 電源控制寄存器 PCON是為了在CHMOS的80C51單片機上

7、實現(xiàn)電源控制而設(shè)置的,其中只有一位SMOD與串行口工作有關(guān)。它的格式與功能如下: SMOD稱為波特率選擇位。在工作方式1、工作方式2和工作方式3時,若SMOD=1,則波特率提高一倍,若SMOD=0,則波特率不加倍。整機復(fù)位時SMOD=0(串行口每秒鐘發(fā)送/接收的位數(shù)稱為波特率)。 5.2.2 串行通信的工作方式 串行通信的工作方式包括: 5.2.2.1 工作方式0 在方式0下,串行口作同步移位寄存器使用,其波特率為fosc/12,即振蕩器頻率的1/12,固定不變。串行數(shù)據(jù)由RXD(P3.0)端輸入或輸出。同步移位脈沖由TXD(P3.1)端送出。這種方式常用于擴展I/O口。 發(fā)送時,當(dāng)一個數(shù)據(jù)寫

8、入發(fā)送緩沖寄存器SBUF(99H)時,即啟動發(fā)送。串行口把8位數(shù)據(jù)以fosc/12的波特率從RXD送出,低位在前,高位在后,發(fā)送完置中斷標(biāo)志TI為“1”。具體接線如圖5-8所示,其中74HC164是“串入并出”移位寄存器。圖5-8 方式0用于I/O擴展輸出數(shù)據(jù)輸出74HC164D73D64D55D46D013D211D310D112128RXDTXD80C51移位脈沖 接收時,REN是串行口允許接收控制位。REN=0,禁止接收,REN=1,允許接收。當(dāng)軟件置REN為“1”時,即開始從RXD以fosc/12的波特率輸入數(shù)據(jù)(低位在前),當(dāng)接收到8位數(shù)據(jù)時,置中斷標(biāo)志RI為“1”。具體接線如圖5-

9、9所示,其中74HC165是“并入串出”移位寄存器。 串行控制寄存器中TB8和RB8位在方式0中未用。每當(dāng)發(fā)送或接收完8位數(shù)據(jù)時,由硬件將發(fā)送中斷TI或接收中斷RI標(biāo)志置位。CPU響應(yīng)TI或RI中斷請求后,不會清除TI或RI標(biāo)志,必須由用戶用軟件清“0”。方式0時SM2位必須為“0”。圖5-9 方式0接收接線圖數(shù)據(jù)輸出74HC165D06D15D24D33D711D513D414D61292RXDTXD80C51移位脈沖 5.2.2.2 方式1 在方式1下,串行口為10位通用異步接口。發(fā)送或接收一幀信息,包括1位起始位“0”,8位數(shù)據(jù)和1位停止位“1”。其傳送波特率可調(diào)。 發(fā)送時,數(shù)據(jù)從引腳T

10、XD(P3.1)端出,當(dāng)數(shù)據(jù)寫入發(fā)送緩沖寄存器SBUF時,即啟動發(fā)送器發(fā)送。當(dāng)發(fā)送完一幀數(shù)據(jù)后,就把TI標(biāo)志置“1”,并申請中斷。 接收時,由REN置“1”,允許接收。串行口采樣引腳RXD(P3.0),當(dāng)采樣“1”至“0” 的跳變后,確認是起始位“0”,就開始接收一幀數(shù)據(jù),當(dāng)RI=0且停止位為“1”或者SM2=0時,停止位進入RB8位,同時置位中斷標(biāo)志RI;否則信息丟失。所以方式1接收時,應(yīng)先用軟件清除RI或SM2標(biāo)志。 5.2.2.3 方式2 在方式2下,串行口為11位異步通信接口。發(fā)送或接收一幀信息,包括1位起始位“0”,8位數(shù)據(jù)位,1位可編程位和1位停止位“1”。其傳送波特率與SMOD有

11、關(guān)。 發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如作奇偶校驗位或地址/數(shù)據(jù)指針標(biāo)識位),然后將要發(fā)送的的數(shù)據(jù)寫入SBUF即啟動發(fā)送器。 發(fā)送過程是由執(zhí)行任何一條以SBUF作為目的寄存器的指令而啟動的。寫SBUF信號,把8位數(shù)據(jù)裝入SBUF,同時還把TB8裝到發(fā)送移位寄存器的第9位位置上,并通知發(fā)送控制器:要求進行一次發(fā)送。然后即從TXD(P3.1)端輸出一幀信息。 接收時,由REN置“1”,允許接收,同時將RI清“0”。在滿足這個條件的前提下,再根據(jù)SM2的狀態(tài)和所接收到的RB8的狀態(tài)才能決定此串行口在信息到來后是否會使RI置“1”,并申請中斷,接收數(shù)據(jù)。 當(dāng) SM2=0時,不管RB8為“0”,

12、還是為“1”,RI都置“1”,此串行口將接收發(fā)來的信息。 當(dāng)SM2=1,且RB8為“1”時,表示在多機通信情況下,接收的信息為地址幀,此時RI置“1”。串行口將接收發(fā)來的信息。 當(dāng)SM2=1,且RB8為0時,表示接收的信息為數(shù)據(jù)幀,但不是發(fā)給本從機的,此時RI不置“1”,因而所接收的數(shù)據(jù)幀將丟失。 5.2.2.4 方式3 方式3為波特率可變的11位異步通信方式。除波特率外,方式3和方式2完全相同。5.2.2.5 多機通信 80C51的方式2和方式3有一個專門的應(yīng)用領(lǐng)域,即多機通信。這一功能使它可以方便地應(yīng)用于集散式分布系統(tǒng)中。這種系統(tǒng)采用一臺主機和多臺從機,它們的通信方式之一如圖 5-10所示

13、。圖5-10 多機通信連接圖80C51TXDRXD主機TXDRXD80C510#從機TXDRXD80C511#從機TXDRXD80C512#從機 多機通信的實現(xiàn),主要靠主、從機之間正確地設(shè)置與判斷多機通信控制位SM2和發(fā)送或接收的第9數(shù)據(jù)位(D8)。以下簡述如何實現(xiàn)多機通信。 在編程前,首先要給各從機定義一個地址字節(jié),以辨認從機。地址字節(jié)和數(shù)據(jù)字節(jié)可用第9數(shù)據(jù)位來區(qū)別,前者的第9位為1,而后者的第9位為0。所以,在主機發(fā)送地址幀時,地址/數(shù)據(jù)標(biāo)識位TB8應(yīng)設(shè)置為“1”,以表示是地址幀。例如,可以這樣編寫指令:MOV SCON,0D8H ;設(shè)串行口為方式3,TB8置“1”,允許接收 此時,所有的

14、從機初始化時均置SM2=1,使它們只處于接收地址幀的狀態(tài)。例如,從機中可以編寫這樣的指令:MOV SCON,0F0H ;置串行口為方式3,SM2=1,允許接收 當(dāng)從機接收到從主機發(fā)來的信號后,第9位RB8若為“1”,則置位中斷標(biāo)志RI,中斷后判斷主機送來的地址與本機地址是否相符。若相符,則被尋址的從機就清除其SM2標(biāo)志,即SM2=0,準(zhǔn)備接收即將從主機送來的數(shù)據(jù)幀,未被選中的從機仍保持SM2=1。 當(dāng)主機發(fā)送數(shù)據(jù)幀時,由于TB8=0,雖然各從機都接收到,但只有SM2=0的那個被尋址的從機才能接收到數(shù)據(jù),那些未被選中的從機將不理睬進入到串行口的數(shù)據(jù)字節(jié),繼續(xù)進行它們自己的工作,直到一個新的地址字

15、節(jié)到來,這樣就實現(xiàn)了主機控制的主從機之間的通信。綜上所述,通信只能在主從機之間進行,從機之間的通信只有經(jīng)主機才能實現(xiàn)。多機之間的通信過程可歸納如下:(1)主、從機均初始化為方式2或方式3,置SM2=1,允許中斷。(2)主機置TB8=1,發(fā)送要尋址的從機地址。(3)所有從機均接收主機發(fā)送的地址,并進行地址比較。(4)被尋址的從機確認地址后,置本機SM2=0,向主機返回地址,供主機核對。(5)核對無誤后,主機向被尋址的從機發(fā)送命令,通知從機接收或發(fā)送數(shù)據(jù)。(6)通信只能在主、從機之間進行,兩從機之間通信要通過主機作中介。(7)本次通信結(jié)束后,主、從機重置SM2=1,主機可再對其他從機尋址。 在實際

16、應(yīng)用中,因為單片機功能有限,因而在較大的測控系統(tǒng)中,常常把單片機應(yīng)用系統(tǒng)作為前端機(也稱為下位機或從機)直接用于控制對象的數(shù)據(jù)采集與控制,而把PC機作為中央處理機(也稱為上位機或主機)用于數(shù)據(jù)處理和對下位機的監(jiān)控管理。它們之間的信息交換主要是采用串行通信,此時單片機可直接利用其串行接口,而PC機可利用其配置的8255或8251、16450等可編程串行接口芯片。實現(xiàn)單片機與PC機之間串行通信的關(guān)鍵是在通信協(xié)議的約定上要一致,例如,應(yīng)設(shè)定相同的波特率及幀格式等。在正式工作之前,雙方應(yīng)先互發(fā)聯(lián)絡(luò)信號,以確保通信收發(fā)數(shù)據(jù)的準(zhǔn)確性。 此外,還有一點需注意的是,如果是多臺單片機與PC機通信,80C51機可

17、采用多機通信工作方式,而PC機的串行接口芯片不具備多機通信功能,其11位幀格式中的第9位是奇偶位。為能實現(xiàn)80C51機中TB8的功能,可以通過靈活運用這些接口芯片,用軟件實現(xiàn)上述功能。具體方法是對8250等串行接口芯片進行初始化時,使其通信線路控制寄存器的D5=D3=1,在發(fā)送地址時,置D4=0(則奇偶位為1);在發(fā)送數(shù)據(jù)時,置D4=1(則奇偶位為0)。由此可實現(xiàn)PC機與80C51單片機的多機通信。5.2.3 串行口應(yīng)用舉例串行口應(yīng)用舉例5.2.3.1 用串行口擴展I/O口 串行口的方式0主要用于擴展并行I/O口。(1)用并行輸入8位移位寄存器74HC165作擴展輸入口 例55 圖5-11是利

18、用80C51的3根口線擴展為16根輸入口線的實用電路,由2塊74HC165串接而成(前級的數(shù)據(jù)輸出QH與后級的信號輸入端SIN相連)?,F(xiàn)編程從16位擴展口讀入20個字節(jié)數(shù)據(jù),并把它們轉(zhuǎn)存到內(nèi)部RAM的50H63H單元中。v圖5-11 利用串行口擴展輸入口74HC165D06D15D24D33D711D513D414D612QHP3.0P3.180C51圖5-10SIN12816+5V74HC165D06D15D24D33D711D513D414D612QH12816+5VP1.0S/LCKS/LCK99解 根據(jù)題意,編程如下: MOV R7,#20 ;設(shè)置讀入字節(jié)數(shù) MOV R0,#50 ;設(shè)

19、片內(nèi)RAM指針 SETB F0 ;設(shè)置讀入字節(jié)奇偶數(shù)標(biāo)志RCV0: CLR P1.0 ;并行輸入數(shù)據(jù) SETB P1.0 ;允許串行移位RCV0:MOV SCON,#10H ;設(shè)串行口方式0并啟動接收 JNB RI,$ ;等待接收一幀數(shù)據(jù) CLR RI ;清接收中斷標(biāo)志 MOV A,SBUF ;取緩沖器數(shù)據(jù) MOV R0,A INC R0 CPL F0 JB F0,RCV2 ;判是否接收完偶數(shù)幀,接收完則重新并行置入 DEC R7 SJMP RCV1 ;否則再接收一幀數(shù)RCV2:DJNZ R7,RCV0 ;判是否已讀入預(yù)定的字節(jié)數(shù) ;對讀入數(shù)據(jù)進行處理 程序中F0用來讀入字節(jié)數(shù)的奇偶性標(biāo)志。由

20、于每次由擴展口并行置入到移位寄存器的是兩個字節(jié)數(shù)據(jù),置入一次,串行口應(yīng)接收兩幀數(shù)據(jù),故已接收的數(shù)據(jù)字節(jié)數(shù)為奇數(shù)時F0=0,不再并行置入數(shù)據(jù)就直接啟動接收過程,否則F0=1,則調(diào)動接收過程前,應(yīng)該先在外部移位寄存器中置入新的數(shù)據(jù)。 (2)用8位并行輸出串行移位寄存器74HC164作擴展輸出口。 例5.6 圖5-12是利用74HC164擴展為16根輸出口線的實用電路。由于74HC164無并行輸出控制端,在串行輸入過程中,其輸出端的狀態(tài)會不斷變化,故在某些使用場合,在74HC164與輸出裝置之間,還應(yīng)加上輸出可控的緩沖級(如74HC244),以便串行輸入過程結(jié)束后再輸出。 圖中的輸出裝置是2位共陽極

21、七段顯示發(fā)光二極管,采用靜態(tài)顯示方式。由于74HC164在低電平輸出時,允許通過的電流可達8mA,故不需再加驅(qū)動電路。與動態(tài)掃描顯示比較,靜態(tài)顯示方式的優(yōu)點是CPU不必頻繁地為顯示服務(wù),軟件設(shè)計比較簡單,很容易做到顯示不閃爍。圖5-12 利用串行口擴展輸出口74HC1643 4 5 613111012P3.0P3.180C51圖5-11899P1.0CLR1,2A,B共陽極LED. g f e d c b a147VCC74HC1643 4 5 6131110128CLR1,2A,B共陽極LED. g f e d c b a147VCC7CKCK7+5V 編程把片內(nèi)20H、21H中的數(shù)字取出,

22、由串行口送給顯示器,顯示相應(yīng)的數(shù)字。解 根據(jù)題意,編程如下: MOV R7,#2 ;設(shè)置顯示位數(shù) MOV R0,#50 ;設(shè)顯示數(shù)據(jù)區(qū)指針 MOV SCON,#00H ;設(shè)串行口方式0DISP1:MOV A,R0 ADD A,#0BH ;設(shè)置偏移值 MOVC A,A+PC ;取X段顯示碼 MOV SBUF,A ;調(diào)動串行口發(fā)送過程 JNB TI,$ ;等待接收一幀數(shù)據(jù) CLR TI ;清串行口發(fā)送中斷標(biāo)志 INC R0 ;修改指針取下一個數(shù) DJNZ R7,DISP1 RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H ;0,1,2,3,4的顯示代碼 DB 92H,82H,0

23、F8H,80H,98H ;5,6,7,8,9的顯示代碼5.2.3.2 用串行口進行異步通信 例5.7 編程把片內(nèi)40H4FH單元中數(shù)據(jù)串行發(fā)送,定義為方式2,TB8作為奇偶校驗位,在數(shù)據(jù)寫入發(fā)送器之前,先將數(shù)據(jù)的奇偶位寫入TB8,這時第9位數(shù)據(jù)作為奇偶校驗用。解 :根據(jù)題意,編程如下: MOV SCON,#80H ;設(shè)串行口方式2 MOV PCON,#80H ;波特率為Fosc/32 MOV R0,40H ;設(shè)片內(nèi)指針 MOV R2,10H ;數(shù)據(jù)長度送R2LOOP:MOV A,R0 ;取數(shù)據(jù)送A MOV C,P ;奇偶位送TB8 MOV TB8,C MOV SBUF,A ;啟動發(fā)送WAIT:

24、 JBC TI,CONT ;判斷發(fā)送中斷標(biāo)志 SJMP WQITCONT:INC R0 DJNZ R2,LOOP例5.8 :用工作方式2編制一個串行口接收程 序,校對奇偶 校驗位,并進行接收正確和接收錯 誤的判斷和處理。解 :根據(jù)題意,程序如下: MOV SCON,#90H ;設(shè)置工作方式2,并允許接收LOOP:JBC RI,READ ;等待接收數(shù)據(jù)并清RI SJMP LOOPREAD:MOV A,SBUF ;讀入一幀數(shù)據(jù) JB PSW.0 ONE ;判斷接收端奇偶 JB RB8,ERR ;判斷發(fā)送端奇偶 SJMP RIGHTONE: JNB RB8,ERR ;數(shù)據(jù)長度送R2RIGHT: ;接

25、收正確ERR: ;接收錯誤 當(dāng)接收到一個字符時,從SBUF送到累加器A中會產(chǎn)生接收端的奇偶值,而保存在RB8中的值為發(fā)送端的奇偶值,若接收正確,兩個奇偶值應(yīng)相等,否則接收字符有錯,需通知對方重發(fā)。 例5.9 雙機異步通信的連接線路如圖5-13所示。設(shè)甲機發(fā)送乙機接收,波特率為2400波特,兩機晶振均為6MHz。要求甲機將外部數(shù)據(jù)存儲器4000H40FFH單元的內(nèi)容向乙機發(fā)送,在發(fā)送數(shù)據(jù)之前將數(shù)據(jù)塊長度發(fā)送給乙機,發(fā)送完256B后,向乙機發(fā)送一個累加和校驗。數(shù)據(jù)傳送結(jié)束時,向甲機發(fā)送一個狀態(tài)字節(jié),表示傳送是正確還是錯誤。圖5-13 雙機異步通信的連接線路解 因波特率已指定為2400波特,首先需要

26、確定定時初值和SMOD的值。初值按下式計算: 此時若取SMOD=0,則X=249.49249,誤差較大;取SMOD=1,則X=242.98243=F3H,誤差較小。 發(fā)送程序作如下約定:(1)定時器T1按方式2工作,計數(shù)初值為F3H,SMOD=1。(2)串行口按方式1工作,允許接收。(3)R6設(shè)為數(shù)據(jù)塊長度寄存器,R5設(shè)為累加和寄存器。 甲機發(fā)送程序清單TRT:MOV TMOD,20H ;設(shè)定時器1工作在方式2 MOV TH1,0F3H ;設(shè)定時器1的初值 MOV TL1,0F3H SETB TR1 ;啟動定時器1 MOV SCON,50H ;串行口初始化為方式1,允許接收 MOV PCON,

27、80H ;SMOD=1RPT: MOV DPTR,4000H MOV R6,00H ;長度寄存器初始化 MOV R5,00H ;校驗和寄存器初始化 MOV SBUF,R6 ;發(fā)送長度 JNB TI, ;等待發(fā)送 CLR TIL1: MOVX A,DPTR ;讀取數(shù)據(jù) MOV SBUF,A ;發(fā)送數(shù)據(jù) ADD A,R5 ;形成累加和送至R5 MOV R5,A INC DPTR ;修改地址指針 JNB TI, ;等待發(fā)送 CLR TI DJNZ R6,L1 ;判斷是否發(fā)送完256個數(shù)據(jù) MOV SBUF,R5 ;發(fā)校驗碼 MOV R5,00H JNB TI, CLR TI JNB RI, ;等乙機

28、回答 CLR RI MOV A,SBUF JZ L8 ;發(fā)送正確則返回 AJMP RPT ;發(fā)送有錯則重發(fā)L8:RET乙機接收程序清單:接收程序的通信約定同發(fā)送程序。RSU:MOV TMOD,20H ;T1初始化 MOV TH1,0F3H MOV TL1,0F3H SETB TR1 MOV SCON,50H MOV PCON,80HRPT:MOV DPTR,4000H JNB RI, CLR RI MOV A,SBUF ;接收發(fā)送長度 MOV R6,A MOV R5,00H ;累加和寄存器清“0”WTD:JNB RI, CLR RI MOV A,SBUF ;接收數(shù)據(jù) MOVX DPTR,A ;

29、存儲數(shù)據(jù) INC DPTR ;修改地址指針 ADD A,R5 MOV R5,A DJNZ R6,WTD ;未接收完繼續(xù) JNB RI, ;接收校驗碼 CLR RI MOV A,SBUF XRL A,R5 ;比較校驗碼 MOV R5,00H JZ L6 ;正確則轉(zhuǎn)至R6 MOV SBUF,0FFH ;出錯送0FFH JNB TI, CLR TI ALMP RPT ;重新接收 L6: MOV SBUF,00H ;正確回送00H JNB TI, ;發(fā)送完返回 CLR TI RET5.3 中斷系統(tǒng) 在計算機與外部設(shè)備交換信息時,存在一個快速的CPU與慢速的外設(shè)之間的矛盾。若采用查詢方式,則不但占用了C

30、PU的操作時間,并且響應(yīng)速度慢。此外對CPU外部隨機出現(xiàn)的緊急事件,也常常需要CPU馬上響應(yīng)。為解決這個問題,在計算機中引入了中斷技術(shù)。5.3.1 中斷的概念 中斷是通過硬件來改變CPU程序運行方向的。計算機在執(zhí)行程序的過程中,由于CPU以外的某種原因,需中止當(dāng)前程序的執(zhí)行,而去執(zhí)行相應(yīng)的處理程序,待處理結(jié)束后,再回來繼續(xù)執(zhí)行被中止了的原程序,這種情況稱為中斷。中斷之后所執(zhí)行的程序稱為中斷服務(wù)或中斷處理程序,原來運行的程序稱為主程序。主程序被斷開的位置稱為斷點。引起中斷的原因,或發(fā)出中斷申請的來源稱為中斷源。 引入中斷技術(shù)可以實現(xiàn): (1)使CPU與外設(shè)同步工作。CPU啟動外設(shè)工作后,就繼續(xù)執(zhí)

31、行主程序,而外設(shè)把數(shù)據(jù)準(zhǔn)備好后,發(fā)出中斷請求,請求CPU中斷原程序的執(zhí)行,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,中斷處理完后,CPU恢復(fù)執(zhí)行主程序,外設(shè)也繼續(xù)工作。這樣CPU可指揮多個外設(shè)同時工作,大大提高了CPU的利用率; (2)實時處理。在實時控制中,現(xiàn)場采集到的各種數(shù)據(jù)可在任一時刻發(fā)出中斷請求。要求CPU及時處理,若CPU是開放的,則CPU就可馬上對數(shù)據(jù)進行處理; (3)故障處理。若計算機在運行過程中出現(xiàn)了事先預(yù)料不到的情況或故障時(如掉電、存儲出錯、溢出等),可以利用中斷系統(tǒng)自動處理,而不必停機。5.3.2 80C51單片機中斷系統(tǒng)單片機中斷系統(tǒng) 80C51單片機的中斷系統(tǒng)由與中斷有關(guān)的特殊功能寄存器

32、、中斷入口、順序查詢邏輯電路等組成,其結(jié)構(gòu)框圖如圖5-14所示。 由圖可見,80C51單片機有5 個中斷請求源,4個用于中斷控制的特殊功能寄存器IE、IP、TCON(用6位)和SCON(用2位),可提供兩個中斷優(yōu)先級,實現(xiàn)兩級中斷嵌套。5個中斷源對應(yīng)5個固定的中斷入口地址(矢量地址)。5.3.2.1 中斷請求源 80C51單片機提供了5 個中斷請求源,其中2個為外部中斷請求和,分別由P3.2和P3.3腳輸入 ,兩個為片內(nèi)定時/計數(shù)器T0和T1的溢出中斷請求TF0(TCON.5)和TF1(TCON.7),1個片內(nèi)串行口發(fā)送或接收中斷請求TI(SCON.1)或RI(SCON.0),這些中斷請求源分

33、別由特殊功能寄存器TCON和SCON的相應(yīng)位鎖存。圖5-14 中斷系統(tǒng)結(jié)構(gòu)框圖中斷轉(zhuǎn)移入口IE0EX0PX0ET0PT0IT0INT001TF0IE1EX1PX1ET1PT1IT1INT101TF1ESPS+TIRI高優(yōu)先級中斷轉(zhuǎn)移入口低優(yōu)先級EA圖5-12(TCON)(IE)(IP) (1)定時/計數(shù)器控制寄存器TCON。TCON為定時計數(shù)器T0、T1的控制寄存器,同時也鎖存了T0、T1的溢出中斷源和外部中斷請求源等,與中斷有關(guān)的位如下: IT0:外部中斷0觸發(fā)方式控制位。當(dāng)IT0=0時,外部中斷0控制為電平觸發(fā)方式。在此方式下,CPU在每個機器周期的S5P2期間采樣(P3.2)的輸入電平,

34、若采到低電平,則認為有中斷請求,隨即置位IE0。若采到高電平,則認為無中斷請求或中斷請求已清除,隨即對IE0清“0”。在電平觸發(fā)方式中,CPU響應(yīng)中斷后不能自動使IE0清“0”,也不能由軟件使IE0清“0”,故在中斷返回前必須清除引腳上的低電平,否則會再次響應(yīng)中斷造成出錯。 若IT0=1,外部中斷0控制為邊沿觸發(fā)方式。在此方式下,CPU在每個機器周期的S5P2期間采樣(P3.2)的輸入電平,若相繼兩次采樣,一個周期采樣為高電平,接下來的下一個周期采樣為低電平,則置位IE0,表示外部中斷0正在向CPU請求中斷,直到該中斷被CPU響應(yīng)時,IE0由硬件自動清“0”。在邊沿觸發(fā)方式中,為保證CPU在兩

35、個機器周期內(nèi)檢測到先高后低的負跳變,輸入高低電平的持續(xù)時間起碼要保持1個機器周期。 IE0:外部中斷0標(biāo)志,若IE0=1,則外部中斷0向CPU請求中斷。 IT1:外部中斷1觸發(fā)方式控制位,功能與IT0類似。 IE1:外部中斷1標(biāo)志,功能與IE0類似。 TF0:T0溢出中斷標(biāo)志,在啟動T0計數(shù)后,T0從初值開始加1計數(shù),當(dāng)計滿溢出時,由硬件使TF0置1,向CPU申請中斷,CPU響應(yīng)TF0中斷后,由硬件對TF0清“0”, TF0也可由軟件清“0”(查詢方式)。 TF1:T1溢出中斷標(biāo)志,功能與TF0類似。系統(tǒng)復(fù)位后,TCON各位均清“0”。 (2)串行口控制寄存器SCON。SCON為串行口控制寄存

36、器,字節(jié)地址為98H,SCON的低2位TI和RI鎖存串行口的接收中斷標(biāo)志和發(fā)送中斷標(biāo)志。其格式如下: TI:串行口的發(fā)送中斷標(biāo)志。在串行口以方式0發(fā)送時,每當(dāng)發(fā)送完8位數(shù),由硬件使TI置“1”;若以方式1、方式2或方式3發(fā)送時,在發(fā)送停止位的開始時使TI置“1”,TI=1表示串行口發(fā)送正在向CPU請求中斷。但CPU響應(yīng)中斷時,不會對TI清“0”,必須由軟件清“0”。 RI:串行口的接收中斷標(biāo)志。若串行口接收器允許接收,并以方式0工作,每當(dāng)接到第9位時,使RI置“1”,若以方式1、2、3工作,且SM2=0時,每當(dāng)接到停止位的中間時使RI置“1”,當(dāng)串行口以方式2或方式3工作,且SM2=1時,僅當(dāng)

37、接收到的第9位數(shù)據(jù)RB8為“1”,且同時還要在接收到停止位中間時才使RI置“1”。RI=1表示接收器正在向CPU請求中斷。同樣CPU響應(yīng)中斷時,不會對RI清“0”,必須由軟件清“0”。 系統(tǒng)復(fù)位后,SCON各位均清“0”。5.3.2.2 中斷控制 (1)中斷禁止與開放。特殊功能寄存器IE為中斷允許寄存器,通過向IE寫入中斷控制字,控制CPU對中斷源的開放與屏蔽,以及每個中斷源是否允許中斷。其格式為: EA:CPU中斷總允許位。當(dāng)EA=1時,CPU允許中斷,每個中斷源是允許還是禁止,分別由各自的允許位確定,當(dāng)EA=0時,CPU屏蔽所有的中斷要求。 ES:串行口中斷允許位。ES=1,允許串行口中斷

38、,ES=0,禁止串行口中斷。 ET1:T1中斷允許位。ET1=1,允許T1中斷,ET1=0,禁止T1中斷。 EX1:外部中斷1允許位。EX1=1,允許外部中斷1中斷,EX1=0,禁止外部中斷1中斷。 ET0:T0中斷允許位。ET0=1,允許T0中斷,ET0=0,禁止T0中斷。 EX0:外部中斷0允許位。EX0=1,允許外部中斷0中斷,EX0=0,禁止外部中斷0中斷。 系統(tǒng)復(fù)位后,IE中各位均清“0”,禁止所有中斷。 ( 2)中斷優(yōu)先級設(shè)定。80C51單片機有兩個中斷優(yōu)先級,對于每一個中斷請求源,可編程為高優(yōu)先級中斷或低優(yōu)先級中斷,可實現(xiàn)二級中斷嵌套。一個正在執(zhí)行的低優(yōu)先級中斷能被高優(yōu)先級中斷所

39、中斷,但不能被另一個低優(yōu)先級中斷所中斷,一直執(zhí)行到結(jié)束,遇到中斷返回指令RETI,返回主程序后再執(zhí)行一條指令才能響應(yīng)新的中斷請求。 特殊功能寄存器IP為中斷優(yōu)先級寄存器,鎖存各中斷源優(yōu)先級的控制位,用戶可由軟件設(shè)定。其格式如下: PS:串行口中斷優(yōu)先級控制位。PS=1,設(shè)定串行口為高優(yōu)先級中斷,PS=0,串行口為低優(yōu)先級中斷。 PT1:T1中斷優(yōu)先級控制位。PT1=1,設(shè)定定時器T1為高優(yōu)先級中斷,PT1=0,T1為低優(yōu)先級中斷。 PX1:外部中斷1中斷優(yōu)先級控制位。PX1=1,設(shè)定外部中斷1為高優(yōu)先級中斷,PX1=0,為低優(yōu)先級中斷。 PT0:T0中斷優(yōu)先級控制位。PT0=1,設(shè)定定時器T0

40、為高優(yōu)先級中斷,PT0=0,T0為低優(yōu)先級中斷。 PX0:外部中斷0中斷優(yōu)先級控制位。PX0=1,設(shè)定外部中斷0為高優(yōu)先級中斷,PX0=0,為低優(yōu)先級中斷。 系統(tǒng)復(fù)位后,IE中各位均清“0”。各中斷源均為低優(yōu)先級中斷。 80C51單片機的中斷系統(tǒng)有兩個不可尋址的優(yōu)先級有效觸發(fā)器。其中一個指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來申請的中斷都被阻止。另外一個觸發(fā)器指示某低優(yōu)先級的中斷正在執(zhí)行,所有的同級中斷都被阻止,但不阻止高優(yōu)先級的中斷。 若同時收到幾個同一優(yōu)先級的中斷請求時,CPU通過內(nèi)部硬件查詢邏輯按自然優(yōu)先級順序確定響應(yīng)哪一個中斷請求。其自然優(yōu)先級由硬件形成,排列如下: 中斷源 同級自然中斷

41、優(yōu)先級 外部中斷0 最高級 定時器T0中斷 外部中斷1 定時器T1中斷 串行口中斷 最低級 5.3.2.3 中斷的響應(yīng)條件與響應(yīng)過程 (1)響應(yīng)條件。單片機響應(yīng)中斷的條件是:中斷源有請求,CPU允許所有中斷源請求中斷(EA=1),中斷允許寄存器IE相應(yīng)位置“1”。這樣,在每個機器周期內(nèi),單片機對所有中斷源都進行順序檢測,并可在任一周期的S6期間,找到所有有效的中斷請求,并對其優(yōu)先級排隊,只要滿足下列條件: 1)無同級或高級中斷正在服務(wù); 2)現(xiàn)行指令執(zhí)行到最后一個機器周期且已結(jié)束; 3)若現(xiàn)行指令為RETI或訪問特殊功能寄存器IE或IP的指令時,執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完。

42、單片機便在緊接著的下一個機器周期S1期間響應(yīng)中斷,否則將丟棄中斷查詢的結(jié)果。 (2)中斷響應(yīng)過程。單片機一旦響應(yīng)中斷,首先置位響應(yīng)的優(yōu)先級有效觸發(fā)器,然后執(zhí)行一個硬件子程序調(diào)用,把斷點壓入堆棧保護,然后將對應(yīng)的中斷入口地址值裝入程序計數(shù)器PC,使程序轉(zhuǎn)向該中斷入口地址,以執(zhí)行中斷服務(wù)程序。 由上可知,單片機響應(yīng)中斷后,只保護斷點而不保護現(xiàn)場(如累加器A、程序狀態(tài)字寄存器PSW的內(nèi)容),且不清除串行口中斷標(biāo)志TI和RI,也無法清除外部中斷請求信號和,故用戶在編程時應(yīng)予考慮。80C51單片機中各中斷源與對應(yīng)的入口地址如下: 中斷源 入口地址 外部中斷0 0003H 定時器T0中斷 000BH 外部

43、中斷1 0013H 定時器T1 中斷 001BH 串行口中斷 0023H 各入口地址之間只相隔8個字節(jié),一般的中斷服務(wù)程序是容納不下的。通常在中斷服務(wù)程序入口地址處放一條無條件轉(zhuǎn)移指令,這樣可使中斷服務(wù)程序安排在64K空間的任意處。 CPU從以上相應(yīng)的地址開始執(zhí)行中斷服務(wù)程序,直到遇到一條RETI指令為止,若用戶在中斷服務(wù)程序中開始安排了保護現(xiàn)場指令(相應(yīng)寄存器內(nèi)容壓入堆棧),則在RETI指令前應(yīng)有恢復(fù)現(xiàn)場(相應(yīng)寄存器內(nèi)容彈出堆棧)指令 。5.3.2.4 中斷響應(yīng)時間 由上述可知,CPU不是在任何情況下都對中斷請求立即響應(yīng),而且不同的情況對中斷響應(yīng)的時間也不同,下面以外部中斷為例,說明中斷響應(yīng)

44、時間。 外部中斷請求信號的電平在每個機器周期的S5P2期間,經(jīng)反相后鎖存到IE0或IE1標(biāo)志位,CPU在下一個機器周期才會查詢到這些值,這時如果滿足響應(yīng)條件,CPU響應(yīng)中斷時,需執(zhí)行一條兩個機器周期的調(diào)用指令,以轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序入口。這樣從外部中斷請求有效到開始執(zhí)行中斷服務(wù)程序的第一條指令至少需要3個機器周期。 如果在申請中斷時,CPU正在處理最長指令(如乘、除法指令),則額外等待時間增加3個機器周期,若正在執(zhí)行RETI或訪問IE、IP指令,則額外等待時間又增加2個機器周期。 綜合估算,若系統(tǒng)中只有一個中斷源,則響應(yīng)時間為38個機器周期。5.3.3 5.3.3 中斷系統(tǒng)應(yīng)用舉例中斷系統(tǒng)應(yīng)

45、用舉例 例5.10 晶振Fosc=6MHz利用T0產(chǎn)生周期為2ms方波,由P1.0輸出。要求采用中斷方式處理。解 : 根據(jù)題意,定時/計數(shù)器T0采用方式1,定時值為1ms,其初值計算如下:機器周期T=12/Fosc=12/6106s=2s則T0的初值為:X=216-1000/2=65036即:X=65036D=0FE0CH=1111111000001100B則:(TH0)=0FEH,(TL0)=0CH程序編寫如下: ORG 0000H AJMP MAIN ;轉(zhuǎn)主程序 ORG 000BH ;中斷入口地址 MOV TL0,#0CH ;重賦初值 MOV TH1,#0FEH CPL P1.0 ;輸出取

46、反 RETI ;中斷返回MAIN: TMOD,#01 ;T0初始化 MOV TL0,#0CH ;賦初值 MOV TH0,#0FEH MOV IE,#82H ;CPU開中斷,T0開中斷HERE: SJMP HERE 例5.11 利用定時器作外部中斷源。 80C51內(nèi)部有兩個定時/計數(shù)器,它們可以改用外部中斷源。當(dāng)它們選擇計數(shù)方式時,T0或T1引腳上的負跳變將使T0或T1計數(shù)器加1計數(shù),若計數(shù)初值設(shè)定為滿量程,即全1狀態(tài),則T0或T1引腳上的一個負跳變即可觸發(fā)溢出中斷。此時的TF0或TF1作為外部中斷標(biāo)志。 以T1為例,將其作為外部中斷源的程序如下: MOV TMOD,60H ;置T1為計數(shù)方式2

47、 MOV TH1,F(xiàn)FH ;置計數(shù)初值 MOV TL1,F(xiàn)FH SETB EA ;開CPU中斷 SETB ET1 ;允許T1中斷 SETB TR1 ;啟動T1計數(shù) 此例T1端作外部中斷請求輸入端,中斷的同時,0FFH可以自動加載到TL0上 例5.12 利用中斷和查詢相結(jié)合擴展中斷源。 當(dāng)外部中斷源比較多時,可以在80C51的一個外部中斷請求輸入端“線或”多個中斷源,這些中斷源同時分別接到輸入端口的各位,其電路如圖5-15所示。 圖5-15中IE1IE4為中斷源,它們同時分別接到P1.0P1.3,平時IE1IE4都為低電平端為無效高電平。當(dāng)IE1IE4信號中有一個以上變?yōu)楦唠娖胶?,端變?yōu)榈碗娖剑?/p>

48、產(chǎn)生中斷請求。在中斷服務(wù)程序中CPU對P1.0P1.3腳進行查詢,確定其中哪一個中斷源產(chǎn)生了請求以轉(zhuǎn)到相應(yīng)的服務(wù)程序中去。在這樣方式中查詢的順序決定了中斷優(yōu)先級的順序。設(shè)IE1IE4的中斷服務(wù)程序的入口地址分別為INT1INT4,中斷服務(wù)程序和查詢程序如下: ORG 000BH AJMP IT IT: PUSH ACC ;保護現(xiàn)場信息 PUSH PSW JNB P1.0,T2 ;順序查詢中斷源 ACALL INT1T2: JNB P1.1,T3 ACALL INT2T3: JNB P1.2,T4 ACALL INT3T4: JNB P1.3,T5 ACALL INT4T5: POP PSW P

49、OP ACC RETIINT1: ;EI1中斷服務(wù)子程序 RET INT2: ;EI2中斷服務(wù)子程序 RET INT3: ;EI3中斷服務(wù)子程序 RET INT4: ;EI4中斷服務(wù)子程序 RET 例5.13 利用定時中斷抗干擾。 單片機應(yīng)用系統(tǒng)開發(fā)完成后,在工作現(xiàn)場由于系統(tǒng)本身的噪聲干擾、電磁干擾、過壓干擾以及環(huán)境干擾等原因,往往會出現(xiàn)“死機”現(xiàn)象。解決的辦法有多種,這里介紹利用定時中斷防止“死機”的方法。 設(shè)計思想是先估算系統(tǒng)主程序執(zhí)行一次循環(huán)所需時間t,然后把定時器T0或T1的定時時間取得比t稍大,并在主程序中包含對定時器的初始化程序,這樣,如果系統(tǒng)主程序運行正常,因定時時間比t大,故在

50、定時時間還未到時,主程序已完成一次循環(huán),T0或T1被重新初始化,使定時時間常數(shù)重新置入其中,故不會產(chǎn)生溢出中斷。若應(yīng)用系統(tǒng)由于干擾失控,主程序不能正常循環(huán)運行,T0或T1不能及時初始化,則經(jīng)過時間t后,T0或T1必將產(chǎn)生溢出中斷,轉(zhuǎn)入中斷服務(wù)程序,這表明程序運行出現(xiàn)故障,用戶可安排中斷服務(wù)程序跳轉(zhuǎn)回主程序需要的地址,以便重新使主程序運行。圖5-15 擴展多中斷源接口電路EI0EI1EI2EI3EI4+5V1NT01NT1P1.0P1.1P1.2P1.380C51圖5-13 將T1設(shè)置為工作方式2,晶振頻率為6MHz,防止“死機”的程序如下: SETB ET1 ;T1開中斷 SETB PT1 ;

51、T1中斷設(shè)置為高優(yōu)先 SETB EA ;CPU 開中斷 MOV TL1,#data ;T1賦初值(根據(jù)t) MOV TH1,#data MOV TMOD #20H ;T1工作方式2,定時 SETB TR1 ;啟動T1計數(shù) ORG 001BH ;T1溢出中斷入口地址 POP A ;丟棄PC壓入堆棧的錯誤地址 POP A MOV A,#data ;將需轉(zhuǎn)去的主程序地址(2個字節(jié))送入棧頂 PUSH A MOV A,#data PUSH A RETI ;中斷返回 例5.14 編程實現(xiàn)一臺主機和多臺(255臺)從機之間進行通信。 解 多機通信需要符合一定的通信協(xié)議。為敘述方便,在此定如下幾條協(xié)議: (

52、1)系統(tǒng)中255臺從機地址分別為0FFH。 (2)地址FFH是對所有從機都起作用的一條控制命令:命令各從機恢復(fù)SM2=1的狀態(tài)。 (3)主機發(fā)送的控制命令代碼為: 00 要求從機接收數(shù)據(jù)塊; 01 要求從機發(fā)送數(shù)據(jù)塊; 其他 非法命令。 (4)數(shù)據(jù)塊長度:16個字節(jié)。 (5)從機狀態(tài)字格式為: 其中,若ERR=1,從機接受到非法命令; 若TRDY=1,從機發(fā)送準(zhǔn)備就緒; 若RRDY=1,從機接收準(zhǔn)備就緒; 下面給出的串行口通信程序是按如下思路編制的。主機程序部分以子程序的方式給出,要進行串行通信時,可以直接調(diào)用這個子程序。主機在接受或發(fā)送完一個數(shù)據(jù)塊后可返回主程序,完成其他任務(wù)。從機部分以串行

53、口中斷服務(wù)程序的方式給出。若從機未做好接受或發(fā)送數(shù)據(jù)的準(zhǔn)備,就從中斷程序中返回,在主程序中做好準(zhǔn)備。故主機在這種情況下不能簡單地等待從機準(zhǔn)備就緒,而要重新與從機聯(lián)絡(luò),使從機再次進入串行口中斷。系統(tǒng)可采用定時器1作為波特率發(fā)生器,也可采用固定的波特率。主機和從機中對定時器初始化的程序及定時器中斷程序從略。圖5-16為多機通信主機子程序框圖,圖5-17為多機通信從機中斷服務(wù)程序框圖。保護現(xiàn)場YN地址符合否?命令分類YN是命令幀嗎?YN從機發(fā)送準(zhǔn)備就緒否?接收數(shù)據(jù)幀從機接收準(zhǔn)備就緒否?0001NY返回中斷發(fā)回地址接收下一幀RRDY=0送主機非法命令RRDY=1送主機TRDY=0送主機接收完否?NYS

54、M2=1恢復(fù)現(xiàn)場發(fā)送數(shù)據(jù)幀TRDY=1送主機發(fā)送完否?YN子程序入口串行口初始化發(fā)送地址幀YN從機應(yīng)答否?YN應(yīng)答地址相符否?發(fā)送命令幀YN從機應(yīng)答否?YN命令正確否?命令分類YN從機接收準(zhǔn)備就緒否?接收數(shù)據(jù)塊從機發(fā)送準(zhǔn)備就緒否?發(fā)送數(shù)據(jù)塊命令從機復(fù)位0001NY返回圖5-17 多機通信從機中斷服務(wù)程序框圖圖5-16 多機通信主機子程序框圖(1)主機串行通信子程序 入口參數(shù):R0 主機發(fā)送的數(shù)據(jù)塊首址;R1 主機接受的數(shù)據(jù)塊首址;R2 被尋址從機地址;R3 主機命令;R4 數(shù)據(jù)塊長度 子程序清單如下: MS10: MOVSCON,#0D8H ;設(shè)串行口方式3,允許接受,TB8置“1”MS101

55、:MOVA,F(xiàn)2 ;發(fā)送地址幀 MOVSBUF,A JNBTI,$ CLRTI JNBRI,$ ;等待從機應(yīng)答 CLRRI MOVA,SBUF XRLA,R2 JZMS103 ;判應(yīng)答地址是否相符MS102:SETB TB8 MOVSBUF,#0FFH ;不相符重新聯(lián)絡(luò) JNBTI,$ CLRTI SJMP MS101 ;轉(zhuǎn)重發(fā)地址 MS103:CLRTB8 ;地址符合,準(zhǔn)備發(fā)送命令 MOVSBUF,R3;發(fā)送命令 JNBTI,$ CLRTI JNBRI,$ ;等待從機應(yīng)答 CLRRI MOVA,SBUF ;取應(yīng)答信息 JNBACC.7,MS104 ;判斷命令是否出錯 SJMP MS102 ;

56、若從機接受命令出錯,重新聯(lián)絡(luò)MS104:CJNE R3,#00,MS105 ;判斷是否要求從機接收數(shù)據(jù) JNBACC.0,MS102 ;從機接收數(shù)據(jù)準(zhǔn)備就緒否LPTX:MOVSBUF,R0 ;主機發(fā)送數(shù)據(jù)塊 JNBTI,$ ;等待發(fā)送完1幀 CLRTI INCR0 ;修改地址指針 DJNZ R4,LPTX ;判斷數(shù)據(jù)塊是否傳完 RET ;返回主程序MS105: JNBACC.1,MS102 ;從機發(fā)送數(shù)據(jù)準(zhǔn)備就緒否LPRX: JNBRI,LPRX ;等待接受完1幀 CLRRI MOVA,SBUF ;取出接受到的字符 MOVR1,A INCR1 DJNZ R4,LPRX ;未接受完則繼續(xù) RET

57、 若主機向10號從機發(fā)送數(shù)據(jù)塊,數(shù)據(jù)塊放置在內(nèi)部RAM區(qū)的4041單元中,則主程序調(diào)用子程序的入口條件如下: MOVR2,#0AH MOVR3,#00H MOVR4,#10H MOVR0,#40H LACLL MS10 (2)從機串行通信程序。 從機的串行通信采用中斷控制啟動方式,串行口中斷服務(wù)程序利用1區(qū)工作寄存器。在串行口通信啟動后,仍采用查詢方式來接受或發(fā)送數(shù)據(jù)塊。從機的初始化程序中應(yīng)包括定時器1和串行口初始化以及開中斷程序,定時器1的初始化和開中斷從略。程序中用F0(PSW.5)作發(fā)送準(zhǔn)備就緒標(biāo)志,F(xiàn)1(PSW.1)作接受準(zhǔn)備就緒標(biāo)志。初始化程序的其他有關(guān)部分如下: MOVSP,#1F

58、H ;設(shè)置堆棧指針 MOVSCON,#0F0H;置串行口模式3,SM=1,允許接受 MOV08H,#40H;接受緩沖區(qū)首址送1區(qū)工作寄存器R0 MOV09H,#50H;接受緩沖區(qū)首址送1區(qū)工作寄存器R1 MOV0AH,#10H;接受或接受字節(jié)數(shù)送1區(qū)工作寄存器R2 (3)串行口中斷服務(wù)程序(由0023H轉(zhuǎn)來)SS10:CLRRI PUSH A ;保護現(xiàn)場 PUSH PSW SETB RS0 ;選1區(qū)工作寄存器 CLR RS1 MOVA,SBUF XRLA,#SLAVE ;SLAVE為本地從機地址 JZ SSI01 ;判斷地址是否符合RETU:POPPSW ;恢復(fù)現(xiàn)場 POPA RETISSI0

59、1:CLRSM2 ;地址符合,準(zhǔn)備接受數(shù)據(jù) MOVSBUF,#SLAVE ;從機地址送主機,準(zhǔn)備核對 JNB TI,$ ;等待發(fā)送完1幀 CLR TI JNB RI,$ ;等待接受完1幀 CLR RI JNB RB8,SSI02 ;是數(shù)據(jù)幀跳轉(zhuǎn) SETB SM2 ;復(fù)位信號,把SM2置“1” SJMP RETUSSI02:MOV A,SBUF ;取命令 CJNE A,#02H,SS1 ;檢查命令是否合法SS1: JC SSI03 ;A02H則繼續(xù) MOV SBUF,#80H;非法命令,置ERR=1 JNB TI,$ ;等待發(fā)送完1幀 CLR TI SJMP RETU ;返回SSI03:JZ C

60、MD0 ;A00H,準(zhǔn)備接受數(shù)據(jù)塊 JB F0,SSI04;發(fā)送準(zhǔn)備就緒否 MOV SBUF,#00H;回答未準(zhǔn)備就緒 JNB TI,$ ;等待發(fā)送完1幀 CLR TI SJMPRETUSSI04:MOVSBUF,#02H;發(fā)送準(zhǔn)備就緒,置TRDY=1 JNBTI,$ CLRTI CLRF0 ;清發(fā)送準(zhǔn)備標(biāo)志LP1: MOVSBUF,R0;發(fā)送數(shù)據(jù)塊 JNBTI,$ CLRTI INCR0 ;修改數(shù)據(jù)指針 DJNZR2,LP1 SETBSM2 ;發(fā)送完,置SM2=1 SJMPRETUCMD0:JBF1,SSI05;判斷接受準(zhǔn)備就緒否 MOVSBUF,#00H;回答未準(zhǔn)備就緒 JNBTI,$ C

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論