第五章-80C51單片機(jī)的功能單元_第1頁(yè)
第五章-80C51單片機(jī)的功能單元_第2頁(yè)
第五章-80C51單片機(jī)的功能單元_第3頁(yè)
第五章-80C51單片機(jī)的功能單元_第4頁(yè)
第五章-80C51單片機(jī)的功能單元_第5頁(yè)
已閱讀5頁(yè),還剩152頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章80C51單片機(jī)的功能單元

基本內(nèi)容5.1 并行I/O接口及簡(jiǎn)單應(yīng)用5.2 定時(shí)器/計(jì)數(shù)器5.3 中斷系統(tǒng)5.4 串行接口5.1并行I/O接口及簡(jiǎn)單應(yīng)用5.1并行I/O接口80C51共有四個(gè)8位的并行雙向口32根輸入/輸出(I/O)口線各口的每一位均由鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器所組成表5—180C51并行I/O接口的比較5.1.1P1口

P1.0—P1.7:準(zhǔn)雙向I/O口(內(nèi)置了上拉電阻)

輸出時(shí)一切照常,僅在作輸入口用時(shí)要先對(duì)其寫“1”。21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線Vcc引腳P1.i內(nèi)部上拉電阻1、結(jié)構(gòu)ABP1.0—P1.7:準(zhǔn)雙向I/O口(內(nèi)置了上拉電阻)

輸出時(shí)一切照常,僅在作輸入口用時(shí)要先對(duì)其寫“1”。21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線Vcc引腳P1.X內(nèi)部上拉電阻21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線Vcc引腳P1.i內(nèi)部上拉電阻輸出數(shù)據(jù)=1時(shí)110截止=12.功能(1)輸出操作21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線Vcc引腳P1.i內(nèi)部上拉電阻輸出數(shù)據(jù)=0時(shí)001=0導(dǎo)通21DQCK/Q讀引腳=1讀鎖存器寫鎖存器內(nèi)部總線Vcc引腳P1.X內(nèi)部上拉電阻輸入數(shù)據(jù)時(shí),要先對(duì)其寫“1”110截止(2)讀操作MOVP1,#0FFHMOVA,P15.1.2P3口1.結(jié)構(gòu)P3.0—P3.7:雙功能口(內(nèi)置了上拉電阻)

它具有特定的第二功能。在不使用它的第二功能時(shí)它就是普通的通用準(zhǔn)雙向I/O口。讀引腳Vcc第二功能輸入21DQCK/Q讀鎖存器寫鎖存器內(nèi)部總線第二功能輸出引腳P3.X3內(nèi)部上拉電阻421DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線替代功能輸出(WR,RD,TxD)P3.i3內(nèi)部上拉電阻Vcc4第二功能輸出時(shí),內(nèi)部自動(dòng)D=1111反相器替代功能輸入2.功能(1)作I/O口使用

B端為高電平,輸出輸入功能同P1(2)替代(第二)功能輸入輸出鎖存器為1,與非門的輸出狀態(tài)取決于B點(diǎn)B21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線此端自動(dòng)=1引腳P3.X3內(nèi)部上拉電阻Vcc

第二功能輸入(RxD,T0,T1,INT0,INT1)4第二功能輸入時(shí),信號(hào)經(jīng)緩沖器4直接進(jìn)入內(nèi)總線1110截止5.1.3P2口1.結(jié)構(gòu)P2.0—P2.7:雙向I/O(內(nèi)置了上拉電阻)

尋址外部程序存儲(chǔ)器時(shí)輸出高8位地址;不接外部程序存儲(chǔ)器時(shí)可作為8位準(zhǔn)雙向I/O口使用。21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線地址高8位控制引腳P2.X3內(nèi)部上拉電阻Vcc21DQCK/Q讀引腳=0讀鎖存器寫鎖存器內(nèi)部總線地址高8位控制引腳P2.X控制=0時(shí),此腳作通用輸出口:輸出=0時(shí)001導(dǎo)通3內(nèi)部上拉電阻00Vcc=0=02.功能(1)作I/O口使用

B端為高電平,輸出輸入功能同P1引腳P2.X21DQCK/Q讀引腳=0讀鎖存器寫鎖存器內(nèi)部總線地址高8位控制控制=0時(shí),此腳作通用輸出口:輸出=1時(shí)110截止3內(nèi)部上拉電阻11Vcc=1=021DQCK/Q讀引腳=0讀鎖存器寫鎖存器內(nèi)部總線地址高8位控制=1引腳P2.X控制=1時(shí),此腳作高8位地址A8—A15輸出口:當(dāng)輸出=1時(shí)10截止3內(nèi)部上拉電阻1=1Vcc=1(2)地址總線的高8位輸出狀態(tài)21DQCK/Q讀引腳=0讀鎖存器寫鎖存器內(nèi)部總線地址高8位控制=1引腳P2.X01導(dǎo)通3內(nèi)部上拉電阻0=0Vcc=0控制=1時(shí),此腳作高8位地址A8—A15輸出口:當(dāng)輸出=0時(shí)5.1.4P0口1.結(jié)構(gòu)P0.0—P0.7:雙向I/O(內(nèi)置場(chǎng)效應(yīng)管上拉)

尋址外部程序存儲(chǔ)器時(shí)分時(shí)作為雙向8位數(shù)據(jù)口和輸出低8位地址復(fù)用口;不接外部程序存儲(chǔ)器時(shí)可作為8位準(zhǔn)雙向I/O口使用。21DQCK/Q讀引腳讀鎖存器寫鎖存器內(nèi)部總線地址/數(shù)據(jù)控制引腳P0.X34Vcc21DQCK/Q讀引腳=1讀鎖存器寫鎖存器內(nèi)部總線地址/數(shù)據(jù)控制引腳P0.X34控制=0時(shí),此腳作輸入口(事先必須對(duì)它寫“1”)00100截止截止=0Vcc2.功能

(1)不接外部程序存儲(chǔ)器時(shí)可作為8位準(zhǔn)雙向I/O口使用。5.1.4P0口21DQCK/Q讀引腳=0讀鎖存器寫鎖存器內(nèi)部總線地址/數(shù)據(jù)控制=1引腳P0.X34控制=1時(shí),此腳作地址/數(shù)據(jù)復(fù)用口:(1)輸出地址/數(shù)據(jù)=0

時(shí)1011=0導(dǎo)通截止=0Vcc(2)尋址外部程序存儲(chǔ)器時(shí)分時(shí)作為雙向8位數(shù)據(jù)口和輸出低8位地址復(fù)用口21DQCK/Q讀引腳=0讀鎖存器寫鎖存器內(nèi)部總線地址/數(shù)據(jù)控制=1引腳P0.X34控制=1時(shí),此腳作地址/數(shù)據(jù)復(fù)用口:(2)輸出地址/數(shù)據(jù)=1

時(shí)1100=1截止導(dǎo)通=1Vcc注意:用作地址、數(shù)據(jù)總線時(shí),P0口不能進(jìn)行位操作,用作I/O口時(shí),輸出驅(qū)動(dòng)器是開漏電路,需要外接上拉電阻,當(dāng)用作地址、數(shù)據(jù)總線時(shí),則不外接上拉電阻。I/O口的負(fù)載能力P0口每一位可驅(qū)動(dòng)8個(gè)LSTTL輸入;P1口,P2口,P3口的每一位驅(qū)動(dòng)4個(gè)LSTTL輸入;I/O口的簡(jiǎn)單應(yīng)用例:?jiǎn)纹瑱C(jī)控制的跑馬燈(1)電路設(shè)計(jì)(2)流程圖

ORG 0 ;程序從0地址開始LJMPSTARTORG30H START: MOV A,#FEH ;讓ACC的內(nèi)容為11111110 LOOP: MOV P2,A ;從Port2輸出ACC的內(nèi)容 RL A ;將ACC的內(nèi)容左移 CALL DELAY ;調(diào)用延遲子程序 JMP LOOP ;跳到LOOP處執(zhí)行 ;==================================DELAY: ;延遲子程序(0.1秒) MOV R7,#200;R7寄存器加載200次數(shù) D1: MOV R6,#250;R6寄存器加載250次數(shù) DJNZ R6,$ ;本條執(zhí)行R6次 DJNZ R7,D1 ;D1循環(huán)執(zhí)行R7次 RET ;返回主程序 END ;結(jié)束程序(3)程序例:?jiǎn)纹瑱C(jī)控制的數(shù)碼管靜態(tài)顯示

(1)電路(2)程序ORG00HLJMPSTARORG30HSTAR:MOVP1,0FFHST1:MOVR0,#0ST2:MOVA,R0ACALLSEG7MOVP1,AACALLDELAY;延時(shí)500msACALLDELAY;延時(shí)500msINCR0CJNER0.#10H,ST2JMPST1DELAY:...RETSEG7:INCAMOVCA,@A+PCRETDB0C0H,…END例:?jiǎn)纹瑱C(jī)開關(guān)控制LED管顯示程序ORG00HSTAR:MOVP1,#0FFHMOVP2,#0FFHST1:MOVA,P1MOVP2,ASJMPST1END5.2定時(shí)器/計(jì)數(shù)器2個(gè)16位定時(shí)器/計(jì)數(shù)器

——(52系列有3個(gè)16位Timer)

——(部分產(chǎn)品(80C552)中,還包含有一個(gè)用做看門狗的8位定時(shí)器(T3)。)1、加1計(jì)數(shù)器下降沿觸發(fā),加1計(jì)數(shù)2、計(jì)數(shù)器對(duì)Tx引腳(P3.4P3.5)輸入的負(fù)脈沖進(jìn)行計(jì)數(shù)3、定時(shí)器對(duì)片內(nèi)機(jī)器時(shí)鐘(周期方波)進(jìn)行計(jì)數(shù),每過一個(gè)機(jī)器周期,計(jì)數(shù)器加14、與Timer工作有關(guān)的特殊功能寄存器:

TCON控制寄存器88H有位尋址TMOD方式寄存器89H無(wú)位尋址TH08BH無(wú)位尋址TL08AH無(wú)位尋址

TH18DH無(wú)位尋址TL18CH無(wú)位尋址5.2.2定時(shí)器/計(jì)數(shù)器控制圖4---5定時(shí)器/計(jì)數(shù)器T0、T1的內(nèi)部結(jié)構(gòu)簡(jiǎn)圖定時(shí)器/計(jì)數(shù)器T0、T1由以下幾部分組成:①計(jì)數(shù)器TH0、TL0和TH1、TL1;②特殊功能寄存器TMOD、TCON;③時(shí)鐘分頻器;④輸入引腳T0、T1、INT0、INT1。1、定時(shí)器方式寄存器TMOD(89H)GATEC/T

M1

M0GATEC/T

M1

M0T1T0M1,M0:工作方式定義位(定義4種方式):00:13位Timer01:16位Timer——經(jīng)常用到10:可自動(dòng)重裝的8位Timer——經(jīng)常用到11:T0分為2個(gè)8位Timer;T1此時(shí)不工作C/T:計(jì)數(shù)器/定時(shí)器選擇位

=1外部事件計(jì)數(shù)器。對(duì)Tx引腳的負(fù)脈沖計(jì)數(shù);

=0片內(nèi)時(shí)鐘定時(shí)器。對(duì)機(jī)器周期脈沖計(jì)數(shù)定時(shí)定時(shí)器方式寄存器TMOD(續(xù))GATEC/TM1M0GATEC/TM1M0T1T0GATE門控位:Timer可由軟件與硬件兩者控制

GATE=0——普通用法

Timer的啟/停由軟件對(duì)TRx位寫“1”/“0”控制(89H)

GATE=1——門控用法

Timer的啟/停由軟件對(duì)TRx位寫“1”/“0”

和在INTx引腳上出現(xiàn)的信號(hào)的高/低共同控制2、定時(shí)器控制寄存器TCON(88H)TF1TR1TF0TR0IE1IT1IE0IT0TFx:Timer0/1計(jì)數(shù)溢出標(biāo)志位。

=1計(jì)數(shù)溢出;=0計(jì)數(shù)未滿

TFx標(biāo)志位可用于申請(qǐng)中斷或供CPU查詢。在進(jìn)入中斷服務(wù)程序時(shí)會(huì)自動(dòng)清零;但在查詢方式時(shí)必須軟件清零。TRx:Timer0/1運(yùn)行控制位。

=1啟動(dòng)計(jì)數(shù);=0停止計(jì)數(shù)5.2.3定時(shí)器結(jié)構(gòu)與工作方式1、工作方式0:——13位的定時(shí)/計(jì)數(shù)器計(jì)數(shù)時(shí),TLx的低5位溢出后向THx進(jìn)位,THx溢出后將TFx置位,并向CPU申請(qǐng)中斷。最大計(jì)數(shù)值213=8192(計(jì)數(shù)初值為0)2、工作方式1:——16位的定時(shí)/計(jì)數(shù)器振蕩器12TLx

THx(8位)(8位)TFx申請(qǐng)中斷Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制=1開關(guān)接通或門與門

計(jì)數(shù)時(shí),TLx的低8位溢出后向THx進(jìn)位,THx溢出后將TFx置位,并向CPU申請(qǐng)中斷。最大計(jì)數(shù)值216=65536(計(jì)數(shù)初值為0)3、工作方式2:——可重裝載的8位定時(shí)/計(jì)數(shù)器

計(jì)數(shù)時(shí),TLx的8位溢出后將TFx置位,并向CPU申請(qǐng)中斷,同時(shí)將THx的初值裝入TLx。最大計(jì)數(shù)值28=2564、工作方式3:——一個(gè)8位定時(shí)器/計(jì)數(shù)器和一個(gè)8位定時(shí)器(T0有,T1無(wú))TL0用于8位定時(shí)器/計(jì)數(shù)器,TH0用于8位定時(shí)器定時(shí)器/計(jì)數(shù)器的工作與方式0時(shí)相同,只是此時(shí)的計(jì)數(shù)器為8位計(jì)數(shù)器TL0,它占用了T0的GATE、INT0、TR0、T0引腳以及中斷源等。

TH0所構(gòu)成的定時(shí)器只能作為定時(shí)器用,因?yàn)榇藭r(shí)的外部引腳T0已為定時(shí)器/計(jì)數(shù)器TL0所占用。不過這時(shí)它卻占用了定時(shí)器/計(jì)數(shù)器T1的啟動(dòng)/停止控制位TR1、計(jì)數(shù)溢出標(biāo)志位TF1及中斷源。

只在定時(shí)器/計(jì)數(shù)器T1用做波特率發(fā)生器時(shí),定時(shí)器/計(jì)數(shù)器T0才選作方式3。圖方式3時(shí),定時(shí)器/計(jì)數(shù)器T1的結(jié)構(gòu)簡(jiǎn)圖5.2.4定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)容量及初值1、最大計(jì)數(shù)容量用N表示計(jì)數(shù)位數(shù),最大計(jì)數(shù)容量為2N若工作在方式1,則N=16,從0開始,記到65536個(gè)時(shí),內(nèi)容由FFFFH變?yōu)?0000H,”溢出”,故TFX被置1,請(qǐng)求中斷。若工作在方式2,則N=8,從0開始,記到256個(gè)時(shí),內(nèi)容由FFH變?yōu)?00H,”溢出”,故TFX被置1,請(qǐng)求中斷。2、計(jì)數(shù)初值計(jì)數(shù)容量為2N-初值。3、初值計(jì)算定時(shí)時(shí)間=(2N-初值)×機(jī)器周期初值=2N-定時(shí)時(shí)間/機(jī)器周期其中,機(jī)器周期=12/fosc,故,初值=2N-定時(shí)時(shí)間×fosc/124、定時(shí)器/計(jì)數(shù)器溢出率的計(jì)算t=Tc×(2L-TC)=12/fosc(2L--TC)其中:t——定時(shí)時(shí)間。Tc——機(jī)器周期。fosc——晶體振蕩器頻率。L——計(jì)數(shù)器的長(zhǎng)度。對(duì)于T0及T1:方式0L=13213=8192方式1L=16216=65536方式2L=828=256對(duì)于T2:L=16216=65536定時(shí)器(方式1)應(yīng)用程序舉例分析:已知fosc

=6MHz則:(振蕩周期)1Tc=1/6MHz

(機(jī)器周期)1Tm=12Tc=12/6MHz=2S

粗略地說:Tmin2S16位定時(shí)器最大數(shù)值為:216=65536=0FFFFH+1

故選擇方式1

工作可以得到:

Tmax=655362=131072S=131.072mS例1:若晶振頻率為6MHz,計(jì)算單片機(jī)的最小與最大定時(shí)時(shí)間:定時(shí)器(方式1)應(yīng)用程序舉例分析:已知fosc

=6MHz則:(機(jī)器周期)1Tm=12Tc=12/6MHz=2S100mS÷2S=5000016位定時(shí)器最大數(shù)值為:

216=65536(=0FFFFH+1)

故選擇方式1工作可以滿足要求。計(jì)算初值:65536-50000=15536=3CB0H例2:要求對(duì)T0產(chǎn)生100mS定時(shí)進(jìn)行初始化。

(晶振=6MHz)例3:要求對(duì)T0在方式2下產(chǎn)生200S定時(shí)進(jìn)行初始化。(晶振=12MHz)

初值=28-200S/1S=256-200=56=38H例4:若晶振為6MHz,當(dāng)工作在方式2時(shí),求初值為56的定時(shí)時(shí)間。時(shí)鐘周期為2S定時(shí)時(shí)間=(256-56)×2S=400S步驟:(1)合理選擇工作方式(2)計(jì)算初值(3)編程A.初始化,定義TMOD,寫入初值,啟動(dòng)定時(shí)器運(yùn)行;B.注意是否要重裝定時(shí)初值,若需連續(xù)反復(fù)使用原定時(shí)時(shí)間,且未工作在方式2時(shí),應(yīng)重裝定時(shí)初值,若使用中斷,要正確編寫中斷服務(wù)程序;C.若用于計(jì)數(shù)方式,則外部事件脈沖須從P3.4(T0),P3.5(T1)入。5.2.5定時(shí)器/計(jì)數(shù)器的編程和使用

THx/TLx賦初值:如THx賦高8位,TLx賦低8位工作方式的編程要點(diǎn):

TMOD選方式:寫“M1,M0”=01b選方式1

若不用門控位,直接用軟件寫TRx控制啟/停

若使用門控位,先置位TRx,然后由INTx端的高/低電平來(lái)控制其啟/停

若要允許中斷,還須先置位ETx、EA等中斷允許控制位,并編寫中斷服務(wù)程序

若不用中斷,可查詢“計(jì)數(shù)溢出標(biāo)志TFx”

的方式工作,但溢出標(biāo)志TFx須軟件清0GATEC/TM1M0GATEC/TM1M0定時(shí)器方式寄存器TMOD由分析得知:T0選擇方式1,初值=3CB0H

XXXX0001初始化:MOVTMOD,#01H;選T0方式1

MOVTH0,#3CH;賦初值高8位

MOVTL0,#0B0H;賦初值低8位

SETBTR0;啟動(dòng)T0定時(shí)若需要定時(shí)器0產(chǎn)生中斷還應(yīng)當(dāng)寫如下語(yǔ)句:

SETBET0;開T0中斷允許

SETBEA;開總中斷允許以及相應(yīng)的中斷服務(wù)程序。方式0時(shí):MOVTHi,#TCH;送高8位MOVTLi,#TCL;送低5位方式1時(shí):MOVTHi,#TCH;送高8位MOVTLi,#TCL;送低8位方式2時(shí):

TCB——8位MOVTHi,#TCBMOVTLi,#TCB定時(shí)器/計(jì)數(shù)器的編程定時(shí)器/計(jì)數(shù)器的編程可分為以下幾步:①寫TMOD,只能用字節(jié)尋址。設(shè)置定時(shí)器/計(jì)數(shù)器的工作方式(M1、M0)、功能選擇(C/)及是否使用門控(GATE)②將時(shí)間常數(shù)或計(jì)數(shù)常數(shù)寫入THi及TLi,也只能用字節(jié)尋址。根據(jù)上面的計(jì)算結(jié)果寫入THi及TLi③啟動(dòng)定時(shí)或計(jì)數(shù),即寫TCON,可用字節(jié)尋址也可用位尋址④定時(shí)器中斷開放和禁止,即寫IE(IE.7,IE.3,IE.1)定時(shí)器/計(jì)數(shù)器的編程啟動(dòng)定時(shí)或計(jì)數(shù)SETBTRi;啟動(dòng)定時(shí)器SETBTCON.4(T0)SETBTCON.6(T1)CLRTRi;停止定時(shí)器

定時(shí)器中斷開放和禁止SETBETi;允許中斷ETiSETBEA;開放中斷CLRETi;禁止中斷ETiCLREA;關(guān)閉中斷例5使用定時(shí)器/計(jì)數(shù)器T1的方式1,采用查詢法設(shè)計(jì)一個(gè)1s的程序段。晶體振蕩器的頻率為fosc=12MHz1S/1S=1000000,因此需多次反復(fù),先設(shè)計(jì)一個(gè)50ms的定時(shí)器,再循環(huán)20次。DELAY:MOVR0,#20MOVTMOD,#0001000BMOVTH1,#03CHMOVTL1,#0B0HSETBTR1;啟動(dòng)T1LP1:JBTF1,LP2;若查詢到溢出標(biāo)志位為1SJMPLP1LP2:CLRTF1MOVTH1,#03CHMOVTL1,#0B0HDJNZR0,LP1CLRTR1;關(guān)T1SJMP$END5.3單片機(jī)的中斷系統(tǒng)數(shù)據(jù)的輸入/輸出傳送方式查詢傳送方式(LOOKUP):傳送前一方先查詢另一方的狀態(tài),若已經(jīng)準(zhǔn)備好就傳送,否則就繼續(xù)查詢/等待中斷傳送方式(IRQ):一方通過申請(qǐng)中斷的方式與另一方進(jìn)行數(shù)據(jù)傳送無(wú)條件傳送方式:一方對(duì)另一方來(lái)說總是準(zhǔn)備好的直接存儲(chǔ)器存取方式(DMA):雙方直接通過總線傳送數(shù)據(jù),不經(jīng)CPU中轉(zhuǎn)5.3.1中斷和中斷處理過程1、中斷的概念數(shù)據(jù)傳送的雙方平時(shí)各自做自己的工作,一旦甲方要求與乙方進(jìn)行數(shù)據(jù)傳送,就主動(dòng)發(fā)出信號(hào)提出申請(qǐng),乙方接到申請(qǐng)后若同意傳送,安排好當(dāng)前的工作,再響應(yīng)與甲方發(fā)生數(shù)據(jù)傳送。完事后,回去繼續(xù)做打斷前的工作。中斷功能強(qiáng)弱是計(jì)算機(jī)性能優(yōu)劣的重要標(biāo)志提高CPU效率解決速度矛盾實(shí)現(xiàn)并行工作應(yīng)付突發(fā)事件……中斷傳送方式特點(diǎn)2、中斷系統(tǒng)的功能(1)實(shí)現(xiàn)中斷及返回(2)能實(shí)現(xiàn)優(yōu)先權(quán)排隊(duì)(3)高優(yōu)先級(jí)中斷源可以中斷低級(jí)中斷源的中斷處理3、中斷的處理過程CPU自動(dòng)完成(1)關(guān)中斷(2)保存斷點(diǎn)(3)給出中斷入口地址轉(zhuǎn)入被響應(yīng)的中斷處理程序用戶編寫(4)保護(hù)現(xiàn)場(chǎng)(5)執(zhí)行中斷服務(wù)程序(6)恢復(fù)現(xiàn)場(chǎng)(7)開中斷(8)中斷返回5.3.2C-51中斷系統(tǒng)①中斷源②中斷申請(qǐng)③開放中斷④保護(hù)現(xiàn)場(chǎng)⑤中斷服務(wù)⑥恢復(fù)現(xiàn)場(chǎng)⑦中斷返回中斷涉及的幾個(gè)環(huán)節(jié)5.3.2.1中斷、中斷源及優(yōu)先級(jí)1、單片機(jī)的中斷源51子系列允許5個(gè)(52子系列6個(gè))中斷源:(1)外部中斷請(qǐng)求:INT0IT0(TCON.0)=0,低電平有效

IT0(TCON.0)=1,下降沿有效(2)外部中斷請(qǐng)求:

INT1IT1(TCON.1)=0,低電平有效

IT1(TCON.1)=1,下降沿有效(3)定時(shí)器/計(jì)數(shù)器T0中斷請(qǐng)求TF0(4)T1中斷請(qǐng)求:TF1(5)1個(gè)串行口中斷請(qǐng)求TI/RI2、CPU識(shí)別中斷申請(qǐng)的依據(jù):

CPU在每個(gè)機(jī)器周期的S5P2期間,會(huì)自動(dòng)查詢各個(gè)中斷申請(qǐng)標(biāo)志位,若查到某標(biāo)志位被置位,將啟動(dòng)中斷機(jī)制。TcTsTmTmS5S6S4S3S2S5S6S4S3S2S1Tc=1/foscTs=6TcTm=12Tc=6Ts中斷系統(tǒng)硬件結(jié)構(gòu)注:各中斷允許控制位=0,開關(guān)斷開;=1,開關(guān)接通IE0EX0TF0IE1TF1TIESET1EX1ET0外部中斷請(qǐng)求0外部中斷請(qǐng)求1內(nèi)部定時(shí)器0內(nèi)部定時(shí)器1內(nèi)部串行口TRRIIE寄存器

EA位IP寄存器各單路開關(guān)總開關(guān)中斷源標(biāo)志位查詢機(jī)構(gòu)高中斷級(jí)中斷請(qǐng)求低中斷級(jí)中斷請(qǐng)求中斷入口中斷源標(biāo)志位INT0INT1中斷入口中斷源標(biāo)志位3、中斷入口地址000BHTF0定時(shí)/計(jì)數(shù)器0(T0)002BHTF2定時(shí)/計(jì)數(shù)器2(T2)0023HRI/TI串行口接收/發(fā)送001BHTF1定時(shí)/計(jì)數(shù)器1(T1)0013HIE1外部中斷1(INT1)0003HIE0外部中斷0(INT0)中斷優(yōu)先級(jí)中斷矢量申請(qǐng)標(biāo)志中斷源最高優(yōu)先級(jí)最低優(yōu)先級(jí)5.3.2.3中斷的控制和操作中斷源中斷標(biāo)志中斷允許控制中斷優(yōu)先級(jí)中斷外部觸發(fā)方式中斷請(qǐng)求撤除

EA

—ET2ESET1EX1ET0EX0IE1、中斷允許寄存器IE(0A8H)

EX0/EX1/ET1/ET0/ES位:分別是INT0/1,Timer0/1,串行口的中斷允許控制位:

=0時(shí)禁止中斷;=1

時(shí)允許中斷。ET2:T2中斷允許控制位(僅52子系列有)

=0時(shí)禁止中斷;=1

時(shí)允許中斷。EA:總的中斷允許控制位(總開關(guān)):

=0時(shí)禁止全部中斷;=1

時(shí)允許中斷。2、定時(shí)器控制寄存器TCON(88H)TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0TCONTF0/TF1:定時(shí)器溢出中斷申請(qǐng)標(biāo)志位:

=0:定時(shí)器未溢出;

=1:定時(shí)器溢出申請(qǐng)中斷,進(jìn)中斷后自動(dòng)清零。TR0/TR1:定時(shí)器運(yùn)行啟停控制位:

=0:定時(shí)器停止運(yùn)行;

=1:定時(shí)器啟動(dòng)運(yùn)行。TCON:Timer控制寄存器,是管理定時(shí)器工作的SFR(其中低4位管外部中斷)定時(shí)器控制寄存器TCON(88H)TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0TCONIE0/IE1:外部中斷申請(qǐng)標(biāo)志位:

=0:沒有外部中斷申請(qǐng);

=1:有外部中斷申請(qǐng)。IT0/IT1:外部中斷請(qǐng)求的觸發(fā)方式選擇位:

=0:在INT0/INT1端申請(qǐng)中斷的信號(hào)低電平有效;=1:在INT0/INT1端申請(qǐng)中斷的信號(hào)負(fù)跳變有效.TCON:Timer控制寄存器,低4位管理外部中斷?

RI,TI:串行口收/發(fā)數(shù)據(jù)申請(qǐng)中斷標(biāo)志位=1申請(qǐng)中斷;=0不申請(qǐng)中斷?

TB8:方式2、3中,是要發(fā)送的第9位數(shù)據(jù)。多機(jī)通信中,TB8=0表示發(fā)送的是數(shù)據(jù);

TB8=1表示發(fā)送的是地址。(奇偶校驗(yàn))?

RB8:在方式2、3中,是收到的第9位數(shù)據(jù)。在多機(jī)通信中,用作區(qū)別地址幀/數(shù)據(jù)幀的標(biāo)志。(奇偶校驗(yàn))

SM0SM1

SM2RENTB8RB8

TIR1?

REN:串行口接收允許控制位

=1表示允許接收;=0禁止接收。SCON3、串口控制寄存器SCON(88H)

PT2PSPT1

PX1

PT0PX0IPPX0/PX1:INT0/1優(yōu)先級(jí)控制位:

=0

時(shí)屬低優(yōu)先級(jí);=1

時(shí)屬高優(yōu)先級(jí)。PT0/PT1/PT2:T0/1/2中斷優(yōu)先級(jí)控制位:

=0

時(shí)屬低優(yōu)先級(jí);=1

時(shí)屬高優(yōu)先級(jí)。PS1:串行口中斷優(yōu)先級(jí)控制位:

=0

時(shí)屬低優(yōu)先級(jí);=1

時(shí)屬高優(yōu)先級(jí)。4、中斷優(yōu)先級(jí)控制寄存器IP(0B8H)單片機(jī)的中斷矢量與優(yōu)先級(jí)中斷矢量:MCS-51單片機(jī)的5個(gè)中斷源分別對(duì)應(yīng)有各自的中斷服務(wù)程序入口地址——中斷矢量000BHTF0定時(shí)/計(jì)數(shù)器0(T0)002BHTF2定時(shí)/計(jì)數(shù)器2(T2)0023HRI/TI串行口接收/發(fā)送001BHTF1定時(shí)/計(jì)數(shù)器1(T1)0013HIE1外部中斷1(INT1)0003HIE0外部中斷0(INT0)中斷優(yōu)先級(jí)中斷矢量申請(qǐng)標(biāo)志中斷源最高優(yōu)先級(jí)最低優(yōu)先級(jí)對(duì)同時(shí)發(fā)生多個(gè)中斷申請(qǐng)時(shí):?不同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng)(很難遇到)

——先高后低?相同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng)(很難遇到)

——按序執(zhí)行?正處理低優(yōu)先級(jí)中斷又接到高級(jí)別中斷

——高打斷低?正處理高優(yōu)先級(jí)中斷又接到低級(jí)別中斷

——高不理低中斷優(yōu)先級(jí)處理原則?沒有同級(jí)的中斷或更高級(jí)別的中斷正在處理;在中斷源提出了中斷申請(qǐng)且CPU此前已經(jīng)允許中斷的前提下,還須滿足以下三個(gè)條件:?正在執(zhí)行的指令必須執(zhí)行完最后1個(gè)機(jī)器周期;?若正在執(zhí)行RETI,或正在訪問IE或IP寄存器,須執(zhí)行完上述指令和下一條指令以后方能響應(yīng)中斷。5.3.3.4中斷應(yīng)用

1、中斷前初始化選擇優(yōu)先級(jí):根據(jù)需要選擇,可有/可無(wú),IP設(shè)置控制位:TCON

INTx—觸發(fā)方式(ITx)

Tx—TCON,TMOD,TRx,初值……

RI/TI—SCON,REN,RB8,TB8,……開中斷允許:必須,IE2、中斷服務(wù)程序進(jìn)入中斷服務(wù)后:保護(hù)現(xiàn)場(chǎng),關(guān)中斷,……退出中斷服務(wù)前:恢復(fù)現(xiàn)場(chǎng),開中斷,設(shè)Tx的初值,清TI/RI,……中斷服務(wù)程序的最后一條指令必是RETI在CPU已經(jīng)開放了外部中斷允許的前提下:在INT0/INT1引腳輸入一個(gè)負(fù)脈沖或低電平,TCON寄存器中的IE0/IE1標(biāo)志位自動(dòng)變“1”,檢測(cè)到IE0/IE1變“1”后,將產(chǎn)生指令:

LCALL0003H(/0013H)執(zhí)行中斷服務(wù)程序,并將IE0/IE1標(biāo)志位自動(dòng)清“0”,以備下次申請(qǐng)。外部中斷(INT0,INT1)申請(qǐng)過程外部低電平中斷的撤除外來(lái)的低電平→反相→CLK端產(chǎn)生上跳沿→D端的“0”打到Q端→申請(qǐng)中斷INTxP1.0CLKSQD外來(lái)中斷申請(qǐng)信號(hào)(低電平)MCS-5174LS74S=0則Q=1中斷返回前對(duì)P1.0送“0”

→令Q端變?yōu)椤?”指令如下:

ANLP1,#0FEH=CLRP1.0;令Q端置“1”

ORLP1,#01H=SETBP1.0;令S端置“1”,以免下次中斷來(lái)時(shí)Q端不能變“0”中斷應(yīng)用程序舉例:例:通過外部中斷1,在中斷服務(wù)中將B寄存器里的內(nèi)容左環(huán)移一位。

已知:(B)=01h,要求采用邊沿觸發(fā),低優(yōu)先級(jí)。此例的實(shí)際意義:在INT1引腳接一個(gè)按鈕開關(guān)到地,每按一下按鈕就申請(qǐng)一次中斷,中斷服務(wù)則是:依次點(diǎn)亮八盞燈中的一盞。中斷應(yīng)用程序舉例:例:通過外部中斷1,在中斷服務(wù)中將B寄存器里的內(nèi)容左環(huán)移一位。

已知:(B)=01h,要求采用邊沿觸發(fā),低優(yōu)先級(jí)。此例的實(shí)際意義:在INT1引腳接一個(gè)按鈕開關(guān)到地,每按一下按鈕就申請(qǐng)一次中斷,中斷服務(wù)則是:依次點(diǎn)亮八盞燈中的一盞。P1.0P1.7INT1300

ORG0000HLJMPMAIN

ORG0013H;中斷矢量

LJMPINTMAIN:SETBEA;開總中斷允許“開關(guān)”

SETBEX1;開分中斷允許“開關(guān)”

CLRPX1;0優(yōu)先級(jí)(也可不要此句)

SETBIT1;邊沿觸發(fā)

MOVB,#01H;給B

寄存器賦初值HERE:SJMPHERE;原地等待中斷申請(qǐng)INT:MOVA,B;自B寄存器中取數(shù)

RLA;左環(huán)移一次

MOVB,A;存回B,備下次取用

(MOVP1,A);輸出到P1口

RETI;中斷返回中斷服務(wù)程序中斷請(qǐng)求撤除單片機(jī)內(nèi)部硬件自動(dòng)復(fù)位需要用軟件清除標(biāo)志位撤除中斷請(qǐng)求例在P1.0引腳上產(chǎn)生周期為400μS的方波輸出。使用定時(shí)器/計(jì)數(shù)器T0的分別在方式0,方式1,方式2下的設(shè)計(jì)程序。晶體振蕩器的頻率為fosc=12MHz。注:作定時(shí)器用,每200μS翻轉(zhuǎn)一次定時(shí)器/計(jì)數(shù)器及中斷的應(yīng)用舉例定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例解:①定時(shí)常數(shù)計(jì)算

振蕩器的頻率fosc=12MHz=12×106Hz,方式0計(jì)數(shù)器長(zhǎng)度L=13,2L=213=8192定時(shí)時(shí)間t=200μS=200×10-6s定時(shí)常數(shù):TC=2L-fosc×t/12=8192-200×10-6/10-6=8192-200=7992=1F38H0001111100111000所以TH0=0F9H,TL0=18H②TMOD的設(shè)定(即控制字)0定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例③編程ORG0000HAJMPMAINORG000BHAJMPINQPMAIN:MOVTMOD,#00HMOVTH0,#0F9HMOVTL0,#18HSETBTR0SETBET0SETBEAAJMP$ORG200HINQP:CPLP1.0MOVTH0,#0F9HMOVTL0,#18HRETIEND方式1--在P1.0引腳上產(chǎn)生周期為400μS的方波解:①定時(shí)常數(shù)計(jì)算定時(shí)常數(shù):TC=2L-fosc×t/12=65536-200=65336=FF38H所以TH0=0FFH,TL0=38H②TMOD的設(shè)定(即控制字)00000001B

③編程

ORG00HAJMPSTARORG000BHAJMPINQP

ORG100HSTAR:MOVTMOD,#01HMOVTH0,#0FFHMOVTL0,#38HSETBTR0SETBET0SETBEAAJMP$ORG200HINQP:CPLP1.0MOVTH1,#0FFHMOVTL1,#38HRETI

END方式2--在P1.0引腳上產(chǎn)生周期為400μS的方波解:①定時(shí)常數(shù)計(jì)算定時(shí)常數(shù):TC=2L-fosc×t/12=256-200=56=38H所以TH0=38H,TL0=38H②TMOD的設(shè)定(即控制字)00000010B

③編程

ORG00HAJMPSTARORG000BHAJMPINQP

ORG100HSTAR:MOVTMOD,#02HMOVTH0,#38HMOVTL0,#38HSETBTR0SETBET0SETBEAAJMP$ORG200HINQP:CPLP1.0RETI

END計(jì)數(shù)器使用例:設(shè)定時(shí)器/計(jì)數(shù)器T0為計(jì)數(shù)方式2。當(dāng)T0引腳出現(xiàn)負(fù)跳變時(shí),向CPU申請(qǐng)中斷。解:①定時(shí)常數(shù)計(jì)算當(dāng)T0引腳出現(xiàn)負(fù)跳變時(shí),即向CPU申請(qǐng)中斷一次,故此時(shí)的定時(shí)常數(shù)應(yīng)為TCB=0FFH。②TMOD的設(shè)定(即控制字)③編程

ORG000BHRETIORG0100HMAIN:MOVTMOD,#06HMOVTL0,#0FFHMOVTH0,#0FFHSETBTR0SETBET0SETBEAAJMP$CLRET0CLREA….從此例中可以看出:這時(shí)相當(dāng)于T0的計(jì)數(shù)中斷轉(zhuǎn)換為一個(gè)外部中斷。例:已知fosc=6MHZ,檢測(cè)T0引腳上的脈沖數(shù),并將1S內(nèi)的脈沖數(shù)保存在片內(nèi)RAM的30H和31H單元中(設(shè)1S內(nèi)脈沖數(shù)≤65536個(gè))解:選T0作為計(jì)數(shù)器,T0選工作方式1,且不會(huì)溢出。所以不開T0計(jì)數(shù)中斷T1作為定時(shí)器,定時(shí)1秒,所以選工作方式1,定時(shí)值為100mS,定時(shí)中斷10次(R7作為循環(huán)次數(shù)),可實(shí)現(xiàn)1S(1)初值216-10000/2=65536-50000=15536=3CB0H(2)TMOD00010101(3)程序ORG00HSJMPSTARORG001BHLJMPT1FORG0020HSTAR:MOVSP,#06HMOVR7,#10MOVTMOD,#15HMOVTH0,#0MOVTLO,#0MOVTH1,#3CHMOVTL1,#0B0HSETBPT1;T1優(yōu)先級(jí)高M(jìn)OVIE,#10001101BSETBTR0SETBTR1MOVR7,#10SJMP$T1F:MOVTH1,#03CHMOVTL1,#0B0HDJNZR7,RTNCLRTR1CLRTR0MOV30H,TH0MOV31H,TL0RTN:RETIEND例:利用定時(shí)器/計(jì)數(shù)器測(cè)定下圖所示波形的一個(gè)周期長(zhǎng)度。這里利用門信號(hào)GATE啟動(dòng)定時(shí)器的方法INT0為高電平時(shí),啟動(dòng)定時(shí)器T0;T1為計(jì)數(shù)器,計(jì)滿2個(gè)結(jié)束·定時(shí)器T0,100ms的定時(shí)器,TMOD的設(shè)置如下:·定時(shí)器T1,2次的計(jì)數(shù)器,TMOD的設(shè)置如下:9H5H初值計(jì)數(shù)一、基本定時(shí)時(shí)間為100ms時(shí)間常數(shù)計(jì)算:晶體振蕩器為6MHz,,機(jī)器周期Tc為:Tc=12/6×106=2×10-6s·設(shè)置初值為x:216-x=100×10-3/2×10-6=50×103x=216-50×103=15536=3CB0H二、總時(shí)間為R3*100ms每次T0計(jì)滿100ms時(shí),R3加1R3---表示達(dá)到基本定時(shí)時(shí)間的次數(shù),T0的啟停相對(duì)復(fù)雜T1的啟??刂茷槌R?guī)控制中斷優(yōu)先級(jí):T1高于T0T0啟??刂茊?dòng):軟硬同時(shí)控制停止:軟件控制T1計(jì)數(shù)值到時(shí)清軟件控制位初始化時(shí)軟件控制位置1P3.2高電平

ORG0LJMPMAINORG0BHAJMPTIME0ORG1BHAJMPTIME1

ORG××××HMAIN:MOVR3,#0;軟件計(jì)數(shù)SETBP3.2SETBP3.5MOVTMOD,#59HMOVTH0,#3CHMOVTL0,#0B0H

MOVTH1,#0FFH;計(jì)數(shù)初值MOVTL1,#0FEH

SETBTR0SETBTR1MOVIP,#08H;T1優(yōu)先T0SETBET1SETBET0SETB20H.1;設(shè)為中斷標(biāo)志LOOP:SETB20H.0SETBET0SETBEAJB20H.0,$JB20H.1,LOOPRET

TIME0:CLRTR0MOVTMOD,#51H;GATE=0

SETBTR1

MOVTH0,#3CHMOVTL0,#0B0HINCR3CPL20H.0

RETITIME1:CLR20H.0

CLR20H.1;清除中斷標(biāo)志CLRET0CLRET1CLREACLRTR0CLRTR1RETI

R3×100ms即為周期長(zhǎng)度可測(cè)的最大周期長(zhǎng)度為256×100ms=25.6s。

例60S倒計(jì)時(shí)器設(shè)計(jì)(1)硬件電路(2)軟件編程

ORG00HSJMPSTARORG1BHSJMPT1S;轉(zhuǎn)T1中斷服務(wù)程序ORG30HSTAR:MOVR2,#60;倒計(jì)時(shí)初值;定時(shí)中斷溢出計(jì)數(shù)器R4初值為20MOVR4,#20MOVIE,#88H;T1開中斷MOVTMOD,#10H;T1方式1MOVTH1,#3CH;定時(shí)初值MOVTL1,#OB0H;定時(shí)初值SETBTR1;啟動(dòng)T1ACALLDIS;調(diào)用顯示子程序SJMP$

TIS:MOVTH1,#3CH;中斷程序MOVTL1,#0B0H;重裝初值DJNZR4,T1S1;定時(shí)1S到否MOVR4,#20;到1S,重置R4=20DJNZR2,T1S0;倒計(jì)時(shí)遞減CLRTR1;倒計(jì)時(shí)結(jié)束,關(guān)定時(shí)器T1S0:ACALLDIS;調(diào)顯示T1S1:RETI;中斷返回SEG7:INCA;A的值加一MOVCA,@A+PC;取顯示斷段RETDB0C0H,0F9H,0A4H,0B0H;0至3的共陽(yáng)型顯示碼DB99H,92H,82H,0F8H;4至7的共陽(yáng)型顯示碼DB80H,90H,88H,83H;8至B的共陽(yáng)型顯示碼DB0C6H,0A1H,86H,8EH;C至F的共陽(yáng)型顯示碼

DIS:MOVA,R2;單字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)為十進(jìn)制數(shù)MOVB,#10DIVABACALLSEG7MOVP1,A;顯示十位MOVA,BACALLSEG7MOVP2,A;顯示個(gè)位RET;子程序返回END串行通信的基本特征是數(shù)據(jù)逐位順序進(jìn)行傳送串行通信的格式及約定(如:同步方式、通訊速率、數(shù)據(jù)塊格式、信號(hào)電平……等)不同,形成了多種串行通信的協(xié)議與接口標(biāo)準(zhǔn)。常見的有:?通用異步收發(fā)器(UART)——本課程介紹的串口?通用串行總線(USB)?I2C總線?CAN總線?SPI總線?RS-485,RS-232C,RS422A標(biāo)準(zhǔn)……等等5.4串行接口全雙工串行接口(UART)?數(shù)據(jù)通信的幾個(gè)術(shù)語(yǔ):

并行:數(shù)據(jù)各位同時(shí)進(jìn)行傳送

串行:數(shù)據(jù)逐位順序進(jìn)行傳送?全雙工:(串行通信)收/發(fā)可同時(shí)進(jìn)行半雙工:(串行通信)收/發(fā)不可同時(shí)進(jìn)行?異步串行通信:以字符為單位進(jìn)行傳送同步串行通信:以數(shù)據(jù)塊為單位進(jìn)行傳送波特率(bps.):單位時(shí)間傳送的位數(shù)SBUF(發(fā))SBUF(收)發(fā)送控制器TI接收控制器RI移位寄存器波特率發(fā)生器T11A累加器控制門RxDTxD去申請(qǐng)中斷引腳引腳CPU內(nèi)部5.4.1

串行口的構(gòu)成1、串行口的結(jié)構(gòu)?串口接收/發(fā)送數(shù)據(jù),無(wú)論是否采用中斷方式工作,每接收/發(fā)送一個(gè)數(shù)據(jù)都必須用指令對(duì)RI/TI

清0,以備下一次收/發(fā)。?波特率發(fā)生器

SM0SM1

SM2RENTB8RB8

TIR1SCON?

SM0,SM1:串行口4種工作方式的選擇位。

00方式0:8位移位寄存器I/O,波特率固定為fosc/12

01方式1:8位UART(1+8+1位),

波特率可變,按公式計(jì)算

10方式2:9位UART(1+8+1+1位),

波特率固定=foscx1/32或1/64

11方式3:9位UART(1+8+1+1位),

波特率可變,按公式計(jì)算?

SM2:串行口多機(jī)通信控制位

(作為方式2、方式3的附加控制位)?2、串行口相關(guān)的SFR(SCON,PCON)(1)串行控制寄存器SCON?

RI,TI:串行口收/發(fā)數(shù)據(jù)申請(qǐng)中斷標(biāo)志位=1申請(qǐng)中斷;=0不申請(qǐng)中斷?

TB8:方式2、3中,是要發(fā)送的第9位數(shù)據(jù)。多機(jī)通信中,TB8=0表示發(fā)送的是數(shù)據(jù);

TB8=1表示發(fā)送的是地址。(奇偶校驗(yàn))?

RB8:在方式2、3中,是收到的第9位數(shù)據(jù)。在多機(jī)通信中,用作區(qū)別地址幀/數(shù)據(jù)幀的標(biāo)志。(奇偶校驗(yàn))

SM0SM1

SM2RENTB8RB8

TIR1?

REN:串行口接收允許控制位

=1表示允許接收;=0禁止接收。SCONSMOD———GF1GF0PD

1DL特殊功能寄存器PCON不能按位尋址?

SMOD:在串行口工作方式1、2、3中,

是波特率加倍位

=1時(shí),波特率加倍

=0時(shí),波特率不加倍。

(在PCON中只有這一個(gè)位與串口有關(guān))

?

GF1,GF0:用戶可自行定義使用的通用標(biāo)志位PCON(2)電源控制寄存器PCON(97H)

?

PD:掉電控制位

=0:常規(guī)方式。

=1:掉電方式:振蕩器停振片內(nèi)RAM和SRF不變P0—P3口維持原狀程序停止只有復(fù)位能退出掉電

?

IDL:待機(jī)控制位

=0:常規(guī)方式。

=1:待機(jī)方式:振蕩器繼續(xù)振蕩中斷,定時(shí)器,串口有效片內(nèi)RAM和SRF不變CPU狀態(tài),P0—P3維持原狀程序停頓。中斷和復(fù)位能退出待機(jī),繼續(xù)后面的程序。SMOD———GF1GF0

PD1DLPCON(3)SBUF(97H)

?兩個(gè)同名的接收/發(fā)送緩沖寄存器SBUF

指令MOVSBUF,A

啟動(dòng)一次數(shù)據(jù)發(fā)送,可向SBUF

再發(fā)送下一個(gè)數(shù)指令MOVA,SBUF

完成一次數(shù)據(jù)接收,SBUF可再接收下一個(gè)數(shù)3、串行口工作方式工作方式0:8位移位寄存器I/O方式?發(fā)送:SBUF中的串行數(shù)據(jù)由RxD(P3.0)逐位移出;

TxD(P3.1)輸出移位時(shí)鐘,頻率=fosc1/12;

每送出8位數(shù)據(jù)TI就自動(dòng)置1;

需要用軟件清零

TI。?接收:串行數(shù)據(jù)由RxD(P3.0)逐位移入SBUF中;

TxD(P3.1)輸出移位時(shí)鐘,頻率=fosc1/12;

每接收8位數(shù)據(jù)RI就自動(dòng)置1;

需要用軟件清零RI。?經(jīng)常配合“串入并出”“并入串出”移位寄存器一起使用擴(kuò)展接口

?方式0工作時(shí),多用查詢方式編程:

發(fā)送:MOVSBUF,A接收:JNBRI,$JNBTI,$CLRRI

CLRTIMOVA,SBUF工作方式0:8位移位寄存器I/O方式(續(xù))?復(fù)位時(shí),SCON

已經(jīng)被清零,缺省值:方式0。?接收前,務(wù)必先置位

REN=1允許接收數(shù)據(jù)。串行口方式0的擴(kuò)展應(yīng)用——經(jīng)常用到串行口常用工作方式0擴(kuò)展出并行I/O口,工作方式1、2、3則常用于串行通信ABCLKhgfedcbaCLRABCLKCLRABCLKCLR+5V74LS16474LS16474LS16474LS164是串入并出芯片;74LS165是并入串出芯片hgfedcbahgfedcba+5V共陽(yáng)LED數(shù)碼管VCCTxDRxD51單片機(jī)共陽(yáng)極hgfedcbaabcdgefh共陽(yáng)LED數(shù)碼管公共端(字位)

接高電平,筆劃(字段)

置為低電平就被點(diǎn)亮了hgfedcba累加器A110000000C0H=“0”?比如要顯示“0”

須令abcdef為“0”

電平,gh為“1”電平。?再比如要顯示“3”

須令abcdg為“0”

電平,efh為“1”電平。101100000B0H=“3”8只LED顯示片內(nèi)RAM58H-5FH8個(gè)單元內(nèi)的非壓縮BCD數(shù):

MOVSCON,#0MOVDPTR,#SEGPTMOVR7,#8MOVR0,#5FHLOOP:MOVA,@R0MOVCA,@A+DPTRMOVSBUF,AJNBTI,$CLRTIDECR0DJNZR7,LOOPLJMP$SEGPT:DB0C0H,0F9H,0A4H,0B0H,99HDB92H,82H,0F8H,80H,90Hhgfedcba累加器A110000000C0H=“0”101100000B0H=“3”共陽(yáng)極hgfedcbaabcdgefh串行口方式0—總結(jié)硬件連接:數(shù)據(jù)線RX,時(shí)鐘線TX數(shù)據(jù)傳輸波特率固定:fosc/12方式設(shè)置0編程:串口移位送數(shù):MOVSUBF,A完成后TI=1串口移位接收:必須在REN=1,RI=0的條件下進(jìn)行,收到新數(shù)據(jù)的標(biāo)志為RI=1,數(shù)據(jù)保存在SUBF中MOVA,SUBF?常用于串行通訊。除發(fā)/收8位數(shù)據(jù)外,還在D0位前有一個(gè)起始位“0”;在D7位后有一個(gè)停止位“1”。?方式1工作時(shí):發(fā)送端自動(dòng)添加一個(gè)起始位0和一個(gè)停止位1;接收端自動(dòng)去掉一個(gè)起始位和一個(gè)停止位。工作方式1:8位UART(1+8+1位)波特率可變

?波特率可變

——用定時(shí)器T1作波特率發(fā)生器:公式:波特率=(2SMOD/32)T1的溢出率串行口的波特率發(fā)生器波特率=(2SMOD/32)T1的溢出率?

溢出率:T1溢出的頻繁程度即:T1溢出一次所需時(shí)間的倒數(shù)。通常選用自動(dòng)裝載的工作方式2來(lái)產(chǎn)生波特率?

初值X=2n-

2SMOD

fosc32

波特率

12?

波特率

=2SMOD

fosc32

12(2n-X)其中:X是定時(shí)器初值?

初值X=2n-

2SMOD

fosc32波特率

12?

計(jì)算波特率的部分:題目要求用T1工作于方式2來(lái)產(chǎn)生波特率1200,已知晶振頻率=6MHz。要求出T1的初值:初值X=28

-

20

610632

1200

12=256-

=256-13.026106460800

243=0F3H

?表格有多種,晶振也不止一種常用波特率和T1初值查表(部分)?RxD引腳為接收端,TxD引腳為發(fā)送端,由波特率發(fā)生器T1控制發(fā)送速度,不同于方式0:收/發(fā)都需要由TxD送出移位時(shí)鐘。

?T1作波特率發(fā)生器時(shí)初始化包括:

選定時(shí)器工作方式2(TMOD選8位自動(dòng)重裝);

將計(jì)算(或查表)出的初值X賦給TH1,TL1;

啟動(dòng)T1(SETBTR1);

對(duì)T1不要開中斷

!!工作方式1的接收/發(fā)送?串行口的初始化包括:

對(duì)SCON選工作方式對(duì)PCON設(shè)波特率加倍位“SMOD”(缺省值=0)

如果是接收數(shù)據(jù),仍要先置“1”REN位

SM0SM1

SM2RENTB8RB8

TIR1SCON?

SM0,SM1:串行口工作方式選擇位。

01:方式1,8位UART(1+8+1位)?

REN:串行口接收允許位。REN=1允許接收串行口控制寄存器SCON

01

0

10000?

TB8,RB8,TI,RI等位由運(yùn)行中間的情況決定,可先寫成“0”?

SM2:串行口多機(jī)通信控制位,作為方式2、3

的附加控制位,此處不用,可寫成“0”定時(shí)和波特率發(fā)生器例題

例欲用80C51產(chǎn)生兩個(gè)方波,其一周期為200μs,另一周期為400μs,而且該80C51使用串行口,并希望用定時(shí)器/計(jì)數(shù)器為波特率發(fā)生器。試問定時(shí)器/計(jì)數(shù)器該如何設(shè)置?解:這時(shí)宜用定時(shí)器/計(jì)數(shù)器T0的方式3工作,其中:TL0產(chǎn)生200μs方波,由P1.0輸出;TH0產(chǎn)生400μs方波,由P1.1輸出;定時(shí)器/計(jì)數(shù)器T1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論