第7章74中斷應(yīng)用_第1頁
第7章74中斷應(yīng)用_第2頁
第7章74中斷應(yīng)用_第3頁
第7章74中斷應(yīng)用_第4頁
第7章74中斷應(yīng)用_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章MCS-51微型計算機系統(tǒng)原理及應(yīng)用《新編微機原理與應(yīng)用》—中國電力出版社2014/0667.4

MCS-51中斷系統(tǒng)與應(yīng)用§7.4.1

MCS-51中斷系統(tǒng)MCS-51中典型的8051單片機有5個中斷源,分別為2個從INT0、INT1(P3.2、P3.3)上輸入的外部中斷源0和外部中斷源1,2個片內(nèi)定時器/計數(shù)器T/C0、T/C1的溢出中斷源和1個片內(nèi)串行口發(fā)送或接收中斷源。2014/0662014/0661)8051中斷源

(1)外部中斷類

外部中斷是由外部原因引起的,即外部中斷0(INT0)和外部中斷1(INT1):INT0——外部中斷0請求信號,由P3.2引腳輸入。由IT0(TCON.0)決定中斷請求信號是低電平有效還是下降沿有效。一旦輸入信號有效,即向CPU申請中斷,并且使IE0=1。INT1——外部中斷1請求信號,由P3.3引腳輸入。由IT1(TCON.2)決定中斷請求信號是低電平有效還是下降沿有效。一旦輸入信號有效,即向CPU申請中斷,并且使IE1=1。1、中斷源和中斷標(biāo)志2014/066(2)定時中斷:當(dāng)定時器/計數(shù)器中的計數(shù)結(jié)構(gòu)發(fā)生計數(shù)溢出時,即表明定時時間到或計數(shù)值已滿,這時就以計數(shù)溢出信號作為中斷請求,去置位一個溢出標(biāo)志位,中斷源可以由單片機芯片外部引入。TF0——溢出中斷請求。當(dāng)定時器T0產(chǎn)生溢出時,其中斷請求標(biāo)志TF0=1,請求中斷處理。TF1——定時器T1溢出中斷請求。當(dāng)定時器T1產(chǎn)生溢出時,其中斷請求標(biāo)志TF1=1,請求中斷處理。(3)串行口中斷:為串行數(shù)據(jù)的傳送需要而設(shè)置的。RI或TI——串行中斷請求。當(dāng)接收或發(fā)送完一串行幀數(shù)據(jù)時,使內(nèi)部串行口中斷請求標(biāo)志RI或TI=1,并請求中斷。2014/066單元地址88H(1)定時器/計數(shù)器控制寄存器TCON(88H)2)中斷標(biāo)志2014/066(2)串行口控制寄存器SCON(98H)TIRI

99H98HTI—串行口發(fā)送中斷標(biāo)志位。串行口發(fā)送完一組數(shù)據(jù)時,向CPU發(fā)出中斷申請,同時也使TI由硬件自動置位。CPU響應(yīng)此中斷后,須由軟件復(fù)位。RI—串行口接收中斷標(biāo)志位。串行口接收到一組數(shù)據(jù)時,向CPU發(fā)出中斷申請,同時也使RI由硬件自動置位。CPU響應(yīng)此中斷后,須由軟件復(fù)位。MCS-51系統(tǒng)復(fù)位后,TCON和SCON中各位被復(fù)位成“0”狀態(tài)。2014/0662、MCS-51對中斷請求的控制1)對中斷允許的控制中斷允許總控位EA,配合各中斷源的中斷允許控制位共同實現(xiàn)對中斷請求的控制。這些中斷允許控制位集成在中斷允許寄存器IE(A8H)中。EAESET1EX1ET0EX0

AFHACHABHAAHA9HA8HEA—CPU中斷允許總控位,(位地址為AFH)。當(dāng)EA=1時,CPU開放中斷,每個中斷源是允許還是禁止分別由各自的允許位確定。當(dāng)EA=0,CPU關(guān)閉所有中斷請求,稱關(guān)中斷。2014/066ES—串行口中斷允許控制位,位地址為ACH。當(dāng)ES=1,允許串行口中斷,當(dāng)ES=0,禁止串行口中斷。ET1—定時器/計數(shù)器T/C1的溢出中斷允許控制位,位地址為ACH。當(dāng)ET1=1,允許T/C1中斷,當(dāng)ET1=0,禁止T/C1中斷。EX1—外部中斷1的中斷允許控制位,位地址為AAH。當(dāng)EX1=1,允許外部中斷1中斷,當(dāng)EX1=0,禁止外部中斷1中斷。ET0—定時器/計數(shù)器T/C0的溢出中斷允許控制位,位地址為A9H。當(dāng)ET0=1,允許T/C0中斷,當(dāng)ET0=0,禁止T/C0中斷。EX0—外部中斷0的中斷允許控制位,位地址為A8H。當(dāng)EX0=1,允許外部中斷0中斷,當(dāng)EX0=0,禁止外部中斷0中斷。2014/066中斷允許寄存器IE的單元地址是A8H,各控制位也可位尋址,故既可以用字節(jié)傳送指令也可以用位操作指令來對各個中斷請求加以控制。例:開放T1的溢出中斷MOVIE,#88H;

SETBEASETBET12014/0662)中斷優(yōu)先級的控制MCS-51具有兩個中斷優(yōu)先級,可由軟件設(shè)置每個中斷源為高優(yōu)先級中斷或低優(yōu)先級中斷。IP(B8H):中斷優(yōu)先級寄存器,鎖存各中斷優(yōu)先級的控制位,用戶可由軟件設(shè)定。PSPT1PX1PT0PX0BCHBBHBAHB9HB8HPS:串行口中斷優(yōu)先級控制位。當(dāng)PS=1時,串行口中斷被定義為高優(yōu)先級中斷,當(dāng)PS=0,串行口中斷被定義為低優(yōu)先級中斷。PT1:T/C1中斷優(yōu)先級控制位。當(dāng)PT1=1時,T/C1中斷被定義為高優(yōu)先級中斷,當(dāng)PT1=0,T/C1中斷被定義為低優(yōu)先級中斷。2014/066PX1:外部中斷1中斷優(yōu)先級控制位。當(dāng)PX1=1時,外部中斷1中斷被定義為高優(yōu)先級中斷,當(dāng)PX1=0,外部中斷1中斷被定義為低優(yōu)先級中斷。PT0:T/C0中斷優(yōu)先級控制位。當(dāng)PT0=1時,T/C0中斷被定義為高優(yōu)先級中斷,當(dāng)PT0=0,T/C0中斷被定義為低優(yōu)先級中斷。PX0:外部中斷0中斷優(yōu)先級控制位。當(dāng)PX0=1時,外部中斷0中斷被定義為高優(yōu)先級中斷,當(dāng)PX0=0,外部中斷0中斷被定義為低優(yōu)先級中斷。2014/066單片機響應(yīng)中斷的條件為中斷源有請求(中斷允許寄存器IE=1),且CPU開中斷(即EA=1)。這樣,在每個機器周期內(nèi),單片機對所有中斷源都進(jìn)行順序檢測,并可在任1個周期的S6期間,找到所有有效的中斷請求,還對其優(yōu)先級進(jìn)行排隊。但是,必須滿足下列條件:3、MCS-51對中斷的響應(yīng)2014/0661)中斷響應(yīng)的條件(1)無同級或高級中斷正在服務(wù);(2)現(xiàn)行指令執(zhí)行到最后1個機器周期且已結(jié)束;(3)若現(xiàn)行指令為RETI或需訪問特殊功能寄存器IE或IP的指令時,執(zhí)行完該指令且緊隨其后的另1條指令也已執(zhí)行完。單片機在下1個機器周期的S1期間響應(yīng)中斷。否則,將丟棄中斷查詢的結(jié)果。2014/066①關(guān)中斷②保存斷點③轉(zhuǎn)入中斷入口地址把被響應(yīng)的中斷源所對應(yīng)的中斷服務(wù)程序的入口地址(中斷矢量)送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序。2)中斷響應(yīng)過程

中斷源入口地址

外部中斷0 0003H

外部中斷1 0013H定時器/計數(shù)器T0 000BH定時器/計數(shù)器T1 001BH

串行口中斷 0023H2014/066

3)中斷的響應(yīng)時間不同的情況對中斷響應(yīng)的時間不同:(1)最短的響應(yīng)時間,需要5個機器周期。調(diào)用指令本身要用2個機器周期,從外部中斷請求有效到開始執(zhí)行中斷服務(wù)程序的第一條指令,至少需要3個機器周期。(2)如果遇到中斷受阻,中斷響應(yīng)時間會更長一些。不同中斷受阻情況,附加的等待時間為1~5個機器周期。(3)若系統(tǒng)中只有一個中斷源,則響應(yīng)時間為3~8個機器周期。如果有兩個以上中斷源同時申請中斷,則響應(yīng)時間將更長。

2014/0664、中斷請求的撤消1)定時器/計數(shù)器中斷請求的撤消

中斷請求被響應(yīng)后。硬件會自動清TF0或TF1。2)外部中斷請求的撤消

(1)跳沿方式外部中斷請求的撤消是自動撤消的。(2)電平方式外部中斷請求的撤消:除了標(biāo)志位清“0”之外,還需在中斷響應(yīng)后把中斷請求信號引腳從低電平強制改變?yōu)楦唠娖健?014/0663)串行口中斷請求的撤消

響應(yīng)串行口的中斷后,CPU無法知道是接收中斷還是發(fā)送中斷,還需測試這兩個中斷標(biāo)志位的狀態(tài),以判定是接收操作還是發(fā)送操作,然后才能清除。所以串行口中斷請求的撤消只能用軟件清除。

CLRTI;清TI標(biāo)志位 CLRRI;清RI標(biāo)志位

用P1.0接在觸發(fā)器的S端作為應(yīng)答線,當(dāng)CPU響應(yīng)中斷后可使用如下指令:

ANLPl,#0FEHORLP1,#01HCLRIE02014/0661、MCS-51中斷系統(tǒng)的初始化中斷初始化是指用戶對TCON、SCON、IE等特殊功能寄存器中的各控制位進(jìn)行賦值。中斷系統(tǒng)的初始化步驟:①CPU開中斷或關(guān)中斷②某中斷源中斷請求的允許或禁止(屏蔽)③設(shè)定所用中斷的中斷優(yōu)先級④若為外部中斷,則應(yīng)規(guī)定低電平還是負(fù)邊沿的中斷觸發(fā)方式§7.4.2

MCS-51中斷系統(tǒng)應(yīng)用2014/066例:寫出INT1為低電平觸發(fā)的中斷系統(tǒng)初始化程序位指令:SETBEA;SETBEX1;開INT1中斷SETBPX1;INT1為高優(yōu)先級CLRIT1;INT1低電平觸發(fā)字節(jié)指令:MOVIE,#84HORLIP,#04HANLTCON,#0FBH2014/066例:寫出INT0為負(fù)邊沿觸發(fā)的中斷系統(tǒng)初始化程序位指令:SETBEA;SETBEX0;開INT0中斷SETBPX0;INT0為高優(yōu)先級SETBIT0;INT0下降沿觸發(fā)字節(jié)指令:MOVIE,#81HORLIP,#01HORLTCON,#01H2014/0662、中斷服務(wù)程序編寫此程序應(yīng)注意以下幾點:①為了要跳到用戶設(shè)計的中斷服務(wù)程序,在相應(yīng)入口地址安排一條跳轉(zhuǎn)指令;②在中斷服務(wù)程序的末尾,安排一條返回指令RETI;③由于在響應(yīng)中斷時,CPU只自動保護(hù)斷點,所以CPU的其他現(xiàn)場的保護(hù)和恢復(fù)也必須由用戶在中斷服務(wù)程序中安排。2014/066例:P1.4—P1.7作為輸出口,P1.0—P1.3作為輸入口。要求采用中斷觸發(fā)方式,每中斷一次完成一次讀/寫操作,寫出CPU響應(yīng)INT0中斷時的主程序和中斷服務(wù)程序。2014/066ORG0000HAJMPMAIN;ORG0003HAJMPINTVS;…

ORG0100HMAIN:SETBEA;

SETBEX0;

SETBPX0;

SETBIT0;HERE:AJMPHERE;ORG0200HINTVS:MOVA,#0FFH;

MOVP1,A;

MOVA,P1;

SWAPA;

MOVP1,A;

RETIEND2014/0667.5

MCS-51內(nèi)部資源應(yīng)用§7.5.1

MCS-51內(nèi)部定時計數(shù)器及其應(yīng)用

MCS-51單片機內(nèi)部有2個16位的可編程的定時器/計數(shù)器,即定時器/計數(shù)器0(T/C0)和定時器/計數(shù)器1(T/C1),它們都有定時和對外部事件計數(shù)的功能。T/C0是由兩個8位的特殊功能寄存器TH0(8CH)和TL0(8AH)組成的,T/C1是由TH1(8DH)和TL1(8BH)組成。通過對TH1、TL1、TH0和TL0的初始化編程來控制T/C0和T/C1的計數(shù)初值。2014/066圖定時器/計數(shù)器結(jié)構(gòu)框圖2014/0661、定時/計數(shù)器的內(nèi)部結(jié)構(gòu)及工作原理加法計數(shù)器是計滿溢出時才申請中斷,所以在給計數(shù)器賦初值時,不能直接輸入所需的計數(shù)值,而應(yīng)輸入的是計數(shù)器計數(shù)的最大值與這一計數(shù)值的差值。設(shè)最大值為M,計數(shù)值為N,初值為X,則X的計算方法如下:計數(shù)狀態(tài):X=M-N定時狀態(tài):X=M-定時時間/T而T=12÷晶振頻率

2014/0662014/0661111102、定時/計數(shù)器工作方式及控制寄存器1)定時器/計數(shù)器的方式寄存器TMOD2014/066M1M0工作方式控制位

方式0的計數(shù)最大值:213

方式1的計數(shù)最大值:216方式2的計數(shù)最大值:28方式3的計數(shù)最大值:282014/066

TF0、TF1分別是定時器/計數(shù)器T0、T1的溢出標(biāo)志位,加法計數(shù)器計滿溢出時置1,申請中斷,在中斷響應(yīng)后自動復(fù)0。TF產(chǎn)生的中斷申請是否被接受,還需要由中斷是否開放來決定。2)定時器/計數(shù)器控制寄存器TCONTR1、TR0分別是定時器/計數(shù)器T1、T0的運行控制位,通過軟件置1后,定時器/計數(shù)器才開始工作,在系統(tǒng)復(fù)位時被清0。2014/0663)定時/計數(shù)器的工作方式(1)方式0定時:內(nèi)部機器周期計數(shù):外部脈沖信號方式0:高8位和低5位的13位計數(shù)器的運行方式。當(dāng)TL1/TL0的低5位溢出時,向TH1(TH0)進(jìn)位,而TH1(TH0)溢出時向TF1(TF0)標(biāo)志進(jìn)位。2014/066方式1(16位計數(shù)器)(2)方式1:

是一個16位定時器/計數(shù)器,TH1(TH0)和TL1(TL0)均是8位的,構(gòu)成16位計數(shù)器。2014/066(3)方式2:8位計數(shù)值自動重裝圖方式2(初始常數(shù)自動重裝載)計數(shù)初值計數(shù)初值2014/066(4)方式3

增加一個附加的8位定時器/計數(shù)器,從而具有3個定時器/計數(shù)器。2014/066工作方式3下的T0:T0分為兩個獨立的8位計數(shù)器:TL0和TH0。TL0使用T0的狀態(tài)控制位C/T、GATE、TR0。而TH0被固定為一個8位定時器(不能作外部計數(shù)模式),并使用定時器T1的狀態(tài)控制位TR1和TF1,同時占用定時器T1的中斷請求源TF1。

方式3只適用于定時器/計數(shù)器T0。T1不能工作在方式3,T1方式3時相當(dāng)于TR1=0,停止計數(shù)(此時T1可用來作串行口波特率產(chǎn)生器)。2014/0664、定時/計數(shù)器的應(yīng)用(1)初始化的步驟

①確定工作方式,給TMOD送一個方式控制字;

②計算計數(shù)初值X,并寫入TH0、TL0或TH1、TL1;

③根據(jù)需要置位EA使CPU開放中斷,同時置位ETX,允許T/C中斷;

④給TCON送命令控制字,即置位TRX啟動T/C計數(shù)。(2)計數(shù)器初值的計算設(shè)需要計數(shù)器計數(shù)的個數(shù)為N,計數(shù)初值為X,則:

X=M-N2014/066例1:利用T0方式0產(chǎn)生1ms定時,在P1.0引腳上輸出周期為2ms的方波。設(shè)單片機晶振頻率fosc=12MHZ。(1)計算初值X則:213-X=1×10-3/(1×10-6),X=8192-1000=7192

方波周期為2ms,則T0定時為1ms計數(shù)溢出1次(每1ms產(chǎn)生一次中斷),CPU響應(yīng)中斷后,在中斷服務(wù)程序中對P1.0取反。即X=00011100

0001

1000B,所以,T0的初值為:

TH0=0E0HTL0=18H(2)初始化程序設(shè)計

2014/066查詢方式的參考程序:LOOP:MOVTMOD,#00H;置計數(shù)器的方式控制字

MOVTH0,#0E0H;T0置初值

MOVTL0,#18HSETBEASETBET0

SETBTR0

;接通T0LOOP1:JNBTF0,LOOP1

;查詢TF0標(biāo)志 CLRTR0

;T0溢出,關(guān)閉T0 CPLP1.0;P1.0的狀態(tài)求反

SJMPLOOP2014/066ORG0000H

AJMPMAINORG000BH

AJMPTCOS

ORG1200HTCOS:CPLP1.0MOVTH0,#0E0HMOVTL0,#18HRETIENDORG1000HMAIN:MOVSP,#6FHMOVTMOD,#00HMOVTH0,#0E0HMOVTL0,#18HSETBEASETBET0SETBTR0HERE:SJMPHERE

…………

中斷方式的參考程序:2014/066例:利用T0產(chǎn)生在P1.0引腳上輸出周期為2s的方波。設(shè)單片機晶振頻率fosc=12MHZ。(1)計算初值X則:216-X=50ms/(1×10-6)s,X=65536-50000=15536解:方波周期為2s,則T0定時應(yīng)為1s,計數(shù)溢出。計數(shù)值超出最大值。TH0=3CHTL0=B0HT0工作方式,定時50ms,循環(huán)20次,則實現(xiàn)1s定時。(2)初始化程序設(shè)計

2014/066ORG0000H

AJMPMAINORG000BH

AJMPBRT0

ORG1200HBRT0:DJNZR0,NEXT

CPLP1.0

MOVR0,#20NEXT:MOVTH0,#3CHMOVTL0,#0B0HRETIENDORG1000HMAIN:MOVSP,#6FHMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBEASETBET0SETBTR0MOVR0,#20HERE:SJMPHERE

…………

2014/066§7.5.2

MCS-51內(nèi)部串行口MCS-51單片機內(nèi)部有1個全雙工串行口,可同時發(fā)送和接收數(shù)據(jù)。它有4種工作方式,可供不同場合使用。波特率由軟件設(shè)置,通過片內(nèi)的定時/計數(shù)器產(chǎn)生。接收、發(fā)送均可工作在查詢方式或中斷方式,使用十分靈活。MCS-51的串行口除了用于數(shù)據(jù)通信外,還可以非常方便地構(gòu)成一個或多個并行輸入/輸出口,或作串/并轉(zhuǎn)換,用來驅(qū)動鍵盤與顯示器。2014/0661、MCS-51串行口的結(jié)構(gòu)

51單片機的串行口由發(fā)送/接收緩沖器以及2個專用寄存器SCON和PCON組成。用P3.0、P3.1,為RXD和TXD,從而構(gòu)成全雙工的通信方式。2個獨立的接收、發(fā)送緩沖器SBUF(特殊功能寄存器)共用一個字節(jié)地址(99H),用來發(fā)送和接收。2014/0662014/0661)串行數(shù)據(jù)發(fā)送電路發(fā)送電路由發(fā)送緩沖寄存器SBUF、零檢測器和發(fā)送控制器等電路組成,用于串行口的發(fā)送。2)串行數(shù)據(jù)接收電路接收電路由接收緩沖寄存器SBUF、接收移位寄存器和接收控制器等組成,用于串行數(shù)據(jù)的接收。2014/0663)串行口數(shù)據(jù)緩沖器SBUF

SBUF是2個在物理上獨立的接收、發(fā)送緩沖器,可同時發(fā)送、接收數(shù)據(jù)。2個緩沖器只用1個字節(jié)地址99H,可通過指令對SBUF的讀寫來區(qū)別是對接收緩沖器的操作還是對發(fā)送緩沖器的操作。

CPU寫SBUF,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器。串行口對外也有兩條獨立的收發(fā)信號線RXD(P3.0)和TXD(P3.1),因此可以同時發(fā)送、接收數(shù)據(jù),實現(xiàn)全雙工傳送。2014/066在進(jìn)行異步通信時,數(shù)據(jù)的發(fā)送和接收分別在各自的時鐘(TCLK和RCLK)控制下進(jìn)行的,但都必須與字符位數(shù)的波特率保持一致。MCS-51串行口的發(fā)送和接收時鐘可由兩種方式產(chǎn)生,一種是由主機頻率fosc經(jīng)分頻后產(chǎn)生,另一種方式是由內(nèi)部定時器T1或T2的溢出率經(jīng)16分頻后提供。4)串行通信時鐘2014/0665)發(fā)送和接收控制電路

串行發(fā)送:由指令MOVSBUF,A啟動,CPU把數(shù)據(jù)(字符)寫入串行口的發(fā)送緩沖器SBUF(發(fā))中,然后在移位脈沖的控制下,低位在前,高位在后,從TXD端(方式0除外)一位位地向外發(fā)送。串行口接收:當(dāng)REN置“1”后,允許接收。接收端RXD一位位地接收數(shù)據(jù),直到收到一個完整的字符數(shù)據(jù)后,使接收中RI置“1”,向CPU申請中斷。CPU響應(yīng)中斷,用指令MOVA,SBUF把接收緩沖器SBUF的內(nèi)容讀入累加器A中。2014/0662、串行口的工作方式

MCS-51的串行口有四種工作方式,由SCON中的SM1和SM0來決定。1)方式0:同步移位方式

工作方式0為同步移位寄存器方式,其波特率是固定為振蕩頻率fosc的1/12。在這種工作方式下,發(fā)送和接收串行數(shù)據(jù)都通過RXD(P3.0)進(jìn)行,從TXD(P3.1)輸出移位脈沖,控制外部的移位寄存器移位。2014/0662)方式1:雙機異步通信方式在方式1,串行口被設(shè)置為波特率可變的8位異步通信接口。

方式1傳送的波特率,取決于定時器1的溢出率和特殊功能寄存器PCON中SMOD的值,計算方法如下:方式1波特率=(2SMOD/32)×定時器T1的溢出率當(dāng)串行口置為方式1,且REN=1,RI=0時,串行口處于接收(輸入狀態(tài))。2014/0661)串行口控制寄存器SCON

SCON寄存器用來控制串行口的工作方式和狀態(tài),它可以是位尋址。在復(fù)位時所有位被清0,字地址為98H。SCON的格式為:3、串行口工作方式設(shè)置2014/066SM0、SM1:定義串行口的操作模式,對應(yīng)4種模式。其中fOSC是振蕩器頻率,UART為通用異步接收和發(fā)送器的英文縮寫。SM2:多機通信控制位。主要用于工作方式2和方式3。2014/0662)特殊功能寄存器PCON

PCON主要是為電源控制設(shè)置的專用寄存器,字節(jié)地址為87H,不能按位尋址。

特殊功能寄存器PCON中,只SMOD與串行口的工作有關(guān),

該位是串行口波特率系數(shù)的控制位:SMOD=1時,波特率加倍,否則不加倍。2014/0664、串行口的工作方式及應(yīng)用

MCS-51的串行口有四種工作方式,由SCON中的SM1和SM0來決定。1)方式0

工作方式0為同步移位寄存器方式,其波特率是固定為振蕩頻率fosc的1/12。在這種工作方式下,發(fā)送和接收串行數(shù)據(jù)都通過RXD(P3.0)進(jìn)行,從TXD(P3.1)輸出移位脈沖,控制外部的移位寄存器移位。2014/066串行口每秒鐘發(fā)送或接收的數(shù)據(jù)位數(shù)稱為波特率。假設(shè)發(fā)送一位數(shù)據(jù)所需時間為T,則波特率為1/T。即:SMOD=0,波特率為(1/64)fOSC;SMOD=1,波特率為(1/32)fOSC。方式2波特率=(2SMOD/64)×fosc三、串行口的波特率

(1)方式0的波特率:單片機晶振頻率的1/12,即每個機器周期接收或發(fā)送一位數(shù)據(jù)。

(2)方式2的波特率:PCON的最高位SMOD的寫入值有關(guān):2014/066

(3)方式1和方式3的波特率,除了與SMOD位有關(guān)之外,還與定時器T1的溢出率有關(guān)。定時器T1作為波特率發(fā)生器,常選用定時方式2(8位重裝載初值方式),并且禁止T1中斷。此時TH1從初值計數(shù)到產(chǎn)生溢出,它每秒鐘溢出的次數(shù)稱為溢出率。于是2014/066例:根據(jù)如下圖的線路連接,請編出發(fā)光二極管自左至右以一定速度顯示的程序。設(shè)發(fā)光二極管為共陰極接法。2014/066ORG2000HMOVSCON,#00H;串行口初始化為方式0。CLRP1.0;禁止CD4094并行輸出。MOVA,#80H;起始顯示碼送A。MOVSBUF,A;8031串行輸出。LOOP:SJMPLOOP;等待串行口輸出完。分析:CD4094是一種8位串行輸入(DATA端)并行輸出的同步移位寄存器。CLK為同步脈沖輸入端。STB為控制端:若STB=0,則8位并行數(shù)據(jù)輸出關(guān)閉,但允許串行數(shù)據(jù)從DATA輸入;若STB=1,則DATA輸入端關(guān)閉,但允許8位數(shù)據(jù)并行輸出。設(shè)串行口采用中斷方式發(fā)送,發(fā)光二極管的顯示時間依靠延時程序DELAY實現(xiàn)。整個程序由主程序和中斷服務(wù)程序兩部分組成。2014/066中斷服務(wù)程序代碼:ORG0023LJMPSBV;轉(zhuǎn)SBV。ORG0100HSBV:SETBP1.0;點亮發(fā)光二極管。

LCALLDELAY;點亮一段時間。

CLRTI;清發(fā)送中斷標(biāo)志。

RRA;準(zhǔn)備點亮下一位。

CLRP1.0;滅顯示。

MOVSBUF,A;串行口輸出。

RETI;中斷返回。DELAY:MOVR7,#05HWAIT1:MOVR6,#0FFHWAIT2:DJNZR6,WAIT2DJNZR7,WAIT1RETEND2014/066例:

根據(jù)如圖電路,編出MCS-51串行輸入開關(guān)量并把它存入20H單元的程序。要求控制開關(guān)KC斷開(KC=1)時,8031處于等待狀態(tài),KC合上(KC=0)時8031開始輸入和進(jìn)行模擬。2014/066分析:CD4014是并行輸入串行輸出的同步移位寄存器。其中,Q8為串行輸出端,CLK為同步移位脈沖輸入端,P/S為控制端。若P/S=0,則CD4014可以串行輸出(并行輸入端關(guān)閉);若P/S,則CD4014可以并行輸入數(shù)據(jù)(串行輸出端關(guān)閉)。程序采用對P1.0查詢,查詢到KC閉合時再通過對P1.1的控制而完成開關(guān)量的輸入。ORG2000HSTART:JBP1.0,$;若KC斷開,則等待。

SETBP1.1;令CD4014并行輸入開關(guān)量。

CLRP1.1;CD4014開始串行輸出。

MOVSCON,#10H;令串行口方式為0,啟動接收。

JNBRI,$;等待接收。

CLRRI;若接收已完,則清RI。

MOVA,SBUF;開關(guān)量送累加器A。

MOV20H,A;存入內(nèi)存。

SJMPSTART;準(zhǔn)備下次開關(guān)量輸入。

END2014/0662)方式1在方式1,串行口被設(shè)置為波特率可變的8位異步通信接口。

方式1傳送的波特率,取決于定時器1的溢出率和特殊功能寄存器PCON中SMOD的值,計算方法如下:方式1波特率=(2SMOD/32)×定時器T1的溢出率當(dāng)串行口置為方式1,且REN=1,RI=0時,串行口處于接收(輸入狀態(tài))。2014/066

例:用中斷法編出8051單片機串行口方式1下的發(fā)送程序:fosc=6MHz,定時器T1做波特率發(fā)生器,波特率為2400bps,選SMOD=1;發(fā)送字符塊在內(nèi)存RAM中的TBLOCK單元,字符塊長度為20。采用奇校驗,校驗位在數(shù)據(jù)第8位。

解:SM0、SM1=01時為方式1,在SM2=0,允許發(fā)送數(shù)據(jù),其余各位均取0。則SCON=0100000B=40H

對于PCON:由于SMOD=1,所以PCON=80H(同系統(tǒng)復(fù)位以后的狀態(tài),可不賦值)。對于TMOD:由于只用T1,且為定時方式2,所以

TMOD=00100000B=20H通過查表確定X=F4H

2014/066主程序:

MOVTMOD,#20H;定時器T1設(shè)為方式2MOVTL1,#0F4H;裝入定時器初值MOVTH1,#0F4H;8位重裝值SETBTR1;啟動定時器T1MOVSCON,#40H;串行口設(shè)為方式1MOVPCON,#80H;SMOD=1MOVR0,#TBLOCK;發(fā)送緩沖區(qū)首址MOVR2,#20;數(shù)據(jù)長度

MOVA,R2MOVSBUF,A;先輸出字符長度SETBEA;開中斷SETBET1;允許T1中斷中斷SETBES;允許串行口中斷SJMP$;等待中斷2014/066中斷服務(wù)程序:

ORG0023H;串行中斷入口LJMPTXSV;轉(zhuǎn)至中斷服務(wù)程序TXSV:CLRES;清串行口中斷CLRTI;清TIMOVA,@R0;發(fā)送字符

MOVC,PSW.0CPLCMOVACC.7,CMOVSBUF,A;啟動發(fā)送DJNZR2,NEXT;數(shù)據(jù)未發(fā)送完成CLRESSJMP$NEXT:INCR0;修改地址指針RETI;中斷返回;形成奇校驗C2014/0663)方式2和方式3

串行口工作為方式2時,被定義為9位異步通信接口。方式2波特率=(2SMOD/64)fosc

方式3為波特率可變的9位異步通信方式,除了波特率有所區(qū)別之外,其余都與方式2相同。方式3的波特率=(2SMOD/32)×(定時器T1的溢出率)2014/066常用波特率和定時器T1初值2014/066圖2.1MCS-51單片機結(jié)構(gòu)框圖例:用查詢法編出串行口在方式3下的接收程序。設(shè)單片機主頻為6MHz,波特率為2400bps,接收數(shù)據(jù)區(qū)始址為RBLOCK(內(nèi)部

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論