單片機(jī)課件第6章.ppt_第1頁
單片機(jī)課件第6章.ppt_第2頁
單片機(jī)課件第6章.ppt_第3頁
單片機(jī)課件第6章.ppt_第4頁
單片機(jī)課件第6章.ppt_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章,MCS-51單片機(jī)內(nèi)部資源及編程,主要內(nèi)容: MCS-51單片機(jī)內(nèi)部各功能模塊(并口、定時器/計(jì)數(shù)器、中斷系統(tǒng)、串口)的具體結(jié)構(gòu)、組成原理、工作方式的設(shè)置及典型應(yīng)用,為后續(xù)學(xué)習(xí)單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)、充分利用單片機(jī)內(nèi)部資源解決工程實(shí)際問題奠定基礎(chǔ)。 重點(diǎn):各部件工作方式的設(shè)置及靈活應(yīng)用。 難點(diǎn):中斷系統(tǒng)和定時器/計(jì)數(shù)器的應(yīng)用。,本章將學(xué)習(xí): 6.1 并行輸入/輸出接口 6.2 定時器/計(jì)數(shù)器接口 6.3 串行接口 6.4 中斷系統(tǒng),6.1 并行輸入/輸出接口,6.1.1 MCS-51內(nèi)部并行I/O口 8051有4個8位并行I/O口,分別命名為P0, P1, P2和P3口。 P0P3端口具有

2、雙向I/O功能,各有一個8位數(shù)據(jù)輸出鎖存器(與端口P0P3同名)、一個8位數(shù)據(jù)輸出驅(qū)動器和一個8位數(shù)據(jù)輸入緩沖器,此外還有第二功能。,在訪問外部存儲器時,P0口作地址/數(shù)據(jù)總線復(fù)用口,是一個真正的雙向口,先輸出外部存儲器的低8位地址,同時輸出地址鎖存信號ALE,故應(yīng)在外部加鎖存器將此地址鎖存,然后,P0口才作為數(shù)據(jù)口使用。 作通用I/O口時,P0口只是一個準(zhǔn)雙向口, 由于它是漏極開路輸出,內(nèi)部沒有上拉電阻,因此作I/O口使用時需外部上拉電阻。,1P0口 P0口為雙向三態(tài)輸入/輸出口, P0口既可作為分時復(fù)用地址/數(shù)據(jù)口,又可作為通用I/O口,可驅(qū)動8個TTL輸入。,2P2口,P2口常用做外部存

3、儲器的高8位地址口。當(dāng)不用做地址口時,P2口也可作為通用I/O口,這時它也是一個準(zhǔn)雙向I/O口。不必外接上拉電阻就可以驅(qū)動任何MOS驅(qū)動電路,且只能驅(qū)動4個TTL輸入。,3P1口 P1口常用做通用I/O口,它也是一個標(biāo)準(zhǔn)的準(zhǔn)雙向I/O口,不必外接上拉電阻就可以驅(qū)動任何MOS驅(qū)動電路,且只能驅(qū)動4個TTL輸入。P1口的位結(jié)構(gòu)如右圖所示。,4P3口 P3口是一個準(zhǔn)雙向I/O口,可用做通用I/O口。另外還具有第二功能。,6.1.2 MCS-51內(nèi)部并行I/O口的應(yīng)用,MCS-51的I/O端口有三種數(shù)據(jù)操作方式: (1)輸出數(shù)據(jù)方式:使用一條數(shù)據(jù)傳送指令。 MOV P0, A ANL P0, #dat

4、a ORL P0, A (2)讀端口數(shù)據(jù)方式: CPU讀入并非端口引腳線上的數(shù)據(jù),而是端口鎖存器的內(nèi)容。 MOV A, P1 MOV 20H, P1 MOV R0, P1 MOV R0, P1,(3)讀端口引腳方式:讀端口引腳方式可以從端口引腳上讀入信息。在這種方式下,CPU首先必須使欲讀端口引腳所對應(yīng)的鎖存器置1,使輸出場效應(yīng)管截止,然后才能讀端口引腳。,例:讀P1.0引腳: SETB P1.0 MOV C, P1.0 讀P1引腳上的低4位信號: ORL P1, #0FH MOV A, P1 ANL A, #0FH,在I/O口直接用做輸入/輸出時,CPU既可以把它們看做數(shù)據(jù)口,也可以看做狀態(tài)

5、口,這是由用戶決定的。,1I/O口直接用于輸入/輸出,【例6-1】MCS-51單片機(jī)的P1口接4個發(fā)光二極管,高4位接4個開關(guān),電路如圖,編程實(shí)現(xiàn)用發(fā)光二極管亮和暗反映開關(guān)的閉合狀態(tài)。,Proteus仿真,解:匯編程序: org 0 sjmp main org 30h main:mov p1,#0ffh;P1口輸入,燈滅 mov a,p1 anl a,#0f0h;低4位清零 swap a mov p1,a lcall del;延時100ms sjmp main del:mov r7,#200;延時子程序 del1:mov r6,#250 del2:djnz r6,del2 djnz r7,de

6、l1 ret end,C程序: #include void main() for(;) P1=0 xFF; /*P1口輸入,燈滅*/ P1=P14; /*高四位狀態(tài)送低四位*/ delay(100); /*延時100ms*/ void delay (unsigned int x) /*延時函數(shù)*/ unsigned char j; while(x-) for(j=0;j125;j+; ,【例】要求將兩個BCD撥碼開關(guān)的數(shù)字和,在LED數(shù)碼管上顯示出來。(用CD4511驅(qū)動LED) 解:CD4511是BCD鎖存段碼譯碼共陰LED驅(qū)動集成電路,其引腳如右圖所示,各引腳功能如下: A, B, C,

7、D:BCD碼輸入腳(A為最低位,D為最高位); QaQg:段碼輸出腳(共陰),高電平有效, 最大可輸出25mA電流; BI:熄滅,接低電平則QaQg全部輸出低電平; LT:點(diǎn)亮測試,接低電平則QaQg全部輸出高電平; LE:鎖存允許,接高電平鎖存,則輸出不會隨BCD碼 輸入改變。,硬件電路設(shè)計(jì):BCD撥碼開關(guān)為4位,兩個BCD撥碼開關(guān)分別接至P3口的高四位和低四位,由P1口的高四位和低四位通過兩片CD4511分別擴(kuò)展兩位LED。,十位,個位,ORG 0100H LOOP:MOV P3, #0FFH ; 讀引腳先對其寫1 MOV A, P3; 讀引腳 CPL A ; 取反,取真正的鍵值 MOV

8、20H, A; A中的數(shù)據(jù)送20H單元保存 SWAP A ; A中的內(nèi)容半字節(jié)交換 ANL A, #0FH ; A中得到原高4位的反碼 ANL 20H, #0FH ; 20H單元中得到原低4位的反碼 ADD A, 20H ; A中為原高低4位反碼之和 DA A ; BCD碼調(diào)整 MOV P1, A; 輸出到P1口 SJMP LOOP END,Proteus仿真(bcd),軟件設(shè)計(jì)思想:讀P3口引腳,得到輸入數(shù)據(jù),將數(shù)據(jù)分成2個4位BCD碼,求BCD碼和,調(diào)整后輸出到P1口,通過CD4511驅(qū)動LED顯示。程序如下:,C51編程: #include void main( ) unsigned c

9、har sum; for(;) P3=0 xFF; sum=P3 ,2I/O口擴(kuò)展,輸入緩沖:為了提高數(shù)據(jù)傳輸速率,MCS-51單片機(jī)常常需要使I/O口通過外部鎖存器和輸入設(shè)備相連。如下圖所示為8051通過74LS373與輸入設(shè)備連接的接口圖。通過中斷方式讀取數(shù)據(jù),8051響應(yīng)該中斷請求后在中斷服務(wù)程序中通過下面的指令讀取輸入數(shù)據(jù): MOV DPTR, #07FFFH ; DPTR指向74LS373端口,地址為7FFFH MOVX A, DPTR ; 讀入數(shù)據(jù)到A中,輸出鎖存:每個I/O端口帶有8位鎖存器,只有擴(kuò)展I/O端口時才需要采用外部鎖存器來鎖存數(shù)據(jù)。,6.2 定時器/計(jì)數(shù)器,計(jì)數(shù):計(jì)數(shù)

10、是指對外部事件的個數(shù)進(jìn)行計(jì)量。其實(shí)質(zhì)就是對外部輸入脈沖的個數(shù)進(jìn)行計(jì)量。 定時:8051單片機(jī)中的定時器和計(jì)數(shù)器是一個部件,只不過計(jì)數(shù)器記錄的是外界發(fā)生的事件,而定時器則是由單片機(jī)內(nèi)部提供一個非常穩(wěn)定的計(jì)數(shù)源進(jìn)行定時的。這個計(jì)數(shù)源是由單片機(jī)的晶振經(jīng)過12分頻后獲得的一個脈沖源。所以定時器計(jì)數(shù)脈沖的時間間隔與晶振有關(guān)。,定時的實(shí)現(xiàn)方法 軟件定時:利用執(zhí)行一個循環(huán)程序進(jìn)行時間延遲。其特點(diǎn)是定時時間精確,不需外加硬件電路,但占用CPU時間。因此軟件定時的時間不宜過長。 硬件定時:利用硬件電路實(shí)現(xiàn)定時。其特點(diǎn)是不占用CPU時間,通過改變電路元器件參數(shù)來調(diào)節(jié)定時,但使用不夠靈活方便。對于時間較長的定時,常

11、用硬件電路來實(shí)現(xiàn)。 可編程定時器:通過專用的定時器/計(jì)數(shù)器芯片實(shí)現(xiàn)。其特點(diǎn)是通過對系統(tǒng)時鐘脈沖進(jìn)行計(jì)數(shù)實(shí)現(xiàn)定時,定時時間可通過程序設(shè)定的方法改變,使用靈活方便。也可實(shí)現(xiàn)對外部脈沖的計(jì)數(shù)功能。 8051單片機(jī)內(nèi)部集成了2個16位可編程加1定時器/計(jì)數(shù)器。,1MCS-51系列中51子系列有2個16位的可編程定時/計(jì)數(shù)器T0和T1,52子系列有3個,還有一個定時/計(jì)數(shù)器T2。 2T0和T1均有定時器和計(jì)數(shù)器2種工作模式。每個定時/計(jì)數(shù)器既可以對系統(tǒng)時鐘計(jì)數(shù)實(shí)現(xiàn)定時,也可以對外部信號計(jì)數(shù)實(shí)現(xiàn)計(jì)數(shù)功能,通過編程設(shè)定來實(shí)現(xiàn)。 3每個定時/計(jì)數(shù)器都有多種工作方式,其中T0有四種工作方式;T1有三種工作方式,

12、T2有三種工作方式。 4它們均是二進(jìn)制加法計(jì)數(shù)器,當(dāng)計(jì)數(shù)器計(jì)滿回零時能自動產(chǎn)生溢出中斷請求,使相應(yīng)的溢出中斷標(biāo)志置位,表示定時時間已到或計(jì)數(shù)已終止,溢出可通過查詢或中斷方式處理。適用于定時控制、延時、外部計(jì)數(shù)和檢測等。 計(jì)數(shù)器:對引腳T0(P3.4)和T1(P3.5)輸入的外部脈沖信號計(jì)數(shù),當(dāng)輸入脈沖信號從1到0的負(fù)跳變時,計(jì)數(shù)器就自動加1。計(jì)數(shù)的最高頻率一般為振蕩頻率的1/24。 定時器:對系統(tǒng)晶振振蕩脈沖的12分頻輸出進(jìn)行計(jì)數(shù)。,6.2.1 定時/計(jì)數(shù)器的主要特性,定時器/計(jì)數(shù)器的結(jié)構(gòu) 組成:16位加法計(jì)數(shù)器、定時器工作方式控制寄存器TMOD和定時器控制寄存器TCON。 T0: TL0(低

13、8位)和TH0(高8位) T1: TL1(低8位)和TH1(高8位),6.2.2 定時/計(jì)數(shù)器T0、T1的結(jié)構(gòu)和工作原理,注意: 1)由于它是加法計(jì)數(shù)器,每來一個計(jì)數(shù)脈沖,加法器中的內(nèi)容加1個單位,當(dāng)由全1加到全0時計(jì)滿溢出,因而,如果要計(jì)N個單位,則首先應(yīng)向計(jì)數(shù)器置初值為X,且有: 初值X=最大計(jì)數(shù)值(滿值)M計(jì)數(shù)值N 2)當(dāng)定時/計(jì)數(shù)器工作于計(jì)數(shù)方式時,對芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖計(jì)數(shù),計(jì)數(shù)過程如下:在每一個機(jī)器周期的S5P2時刻對T0(P3.4)或T1(P3.5)上信號采樣一次,如果上一個機(jī)器周期采樣到高電平,下一個機(jī)器周期采樣到低電平,則計(jì)數(shù)器在下一個機(jī)器周

14、期的S3P2時刻加1計(jì)數(shù)一次。因而需要兩個機(jī)器周期才能識別一個計(jì)數(shù)脈沖,所以外部計(jì)數(shù)脈沖的頻率應(yīng)小于振蕩頻率的1/24。,6.2.3 定時/計(jì)數(shù)器的方式和控制寄存器,1. 工作方式寄存器TMOD(89H),定時器/計(jì)數(shù)器T0方式控制邏輯結(jié)構(gòu)圖,2. 控制寄存器TCON (88H),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TF0/TF1:T0/T1計(jì)數(shù)溢出標(biāo)志位。硬件自動復(fù)位。 =1 :計(jì)數(shù)溢出; =0 :計(jì)數(shù)未滿。 TR0/TR1:T0/T1啟??刂莆弧?=1 :啟動計(jì)數(shù); =0: 停止計(jì)數(shù)。 IE0/IE1和IT0/IT1:用于管理外部中斷(后面將會介紹)。,6.2.

15、4 定時/計(jì)數(shù)器的工作方式,1工作方式0( M1M0=00 ,13位加1定時器/計(jì)數(shù)器) 由TH0的全部8位和TL0的低5位( TL0的高3位未用)構(gòu)成13位加1計(jì)數(shù)器。,定時/計(jì)數(shù)器T1工作方式0 等效框圖(T0類同),2工作方式1 ( M1M0=01 ,16位加1定時器/計(jì)數(shù)器),定時/計(jì)數(shù)器T1工作方式1(T0類同),3工作方式2( M1M0=10,自動重裝計(jì)數(shù)初值的8位加1定時器/計(jì)數(shù)器) 16位定時器/計(jì)數(shù)器被拆成兩個8位寄存器TH0和TL0,初始化時必須裝入相同的定時器/計(jì)數(shù)器初值。以TL0作計(jì)數(shù)器,而TH0作為預(yù)置寄存器。當(dāng)計(jì)數(shù)滿溢出時,TF0置“1”,同時TH0將計(jì)數(shù)初值自動裝

16、入TL0。這種工作方式很適合于那些重復(fù)計(jì)數(shù)的應(yīng)用場合(如串行數(shù)據(jù)通信的波特率發(fā)生器)。,定時/計(jì)數(shù)器T1工作方式2 (T0類同),4工作方式3( M1M0=11 ) T0工作于方式3時分為2個獨(dú)立的8位計(jì)數(shù)器: TL0:8位定時器/計(jì)數(shù)器,使用T0原有控制資源TR0和TF0,其功能和操作與方式0或方式1完全相同。 TH0:只能作為8位定時器,借用T1的控制位TR1和TF1,只能對片內(nèi)機(jī)器周期脈沖計(jì)數(shù)。,T1在方式3下停止計(jì)數(shù) 當(dāng)T0工作于方式3時,T1只能按不需要中斷的方式2工作(自動重裝初值的8位加1計(jì)數(shù)器),一般用作串口可變波特率發(fā)生器。,TL0做8位加1定時器/計(jì)數(shù)器,6.2.5 定時/

17、計(jì)數(shù)器的初始化編程及應(yīng)用,1. 定時/計(jì)數(shù)器的編程 在使用定時器/計(jì)數(shù)器之前必須先通過程序?qū)Χ〞r/計(jì)數(shù)器的工作方式及工作過程進(jìn)行設(shè)定。 定時器/計(jì)數(shù)器初始化的步驟如下:,寫TMOD,設(shè)定工作方式,計(jì)數(shù)初值送TH、TL,寫IP、IE,設(shè)定中斷優(yōu)先級,開中斷,寫TCON ,啟動計(jì)數(shù),計(jì)數(shù)器初值的計(jì)算,方法:用最大計(jì)數(shù)量減去需要的計(jì)數(shù)次數(shù)。即: TC=MC 其中:TC計(jì)數(shù)器需要預(yù)置的初值; M計(jì)數(shù)器的模值(最大計(jì)數(shù)值); 方式0時,M=213;方式1時,M=216;方式2, 3時,M=28; C計(jì)數(shù)器計(jì)滿回0所需的計(jì)數(shù)值,即設(shè)計(jì)任務(wù)要求的計(jì)數(shù)值。 例如:流水線上一個包裝是12盒,要求每到12盒就產(chǎn)生

18、一個動作,用單片機(jī)的工作方式0來控制,則應(yīng)當(dāng)預(yù)置的初值為:,TC = M C = 213 12=8180=1FF4H,思考:TH、TL分別送什么?,定時器初值的計(jì)算,定時時間的計(jì)算公式為: T=(MTC)T0 (或TC=MT/T0 ) 其中:T定時器的定時時間,即設(shè)計(jì)任務(wù)要求的定時時間; T0計(jì)數(shù)器計(jì)數(shù)脈沖的周期,即單片機(jī)系統(tǒng)主頻周期的12倍; M計(jì)數(shù)器的模值; TC定時器需要預(yù)置的初值。,若設(shè)初值TC=0,則定時器定時時間為最大。若設(shè)單片機(jī)系統(tǒng)主頻為12MHz,則各種工作方式定時器的最大定時時間為: 工作方式0: Tmax=2131s=8.192ms 工作方式1: Tmax=2161s=65

19、.536ms 工作方式2和3:Tmax=281s=0.256ms,2. 定時/計(jì)數(shù)器的應(yīng)用,【例6-2】 設(shè)系統(tǒng)時鐘頻率為12MHZ,用定時/計(jì)數(shù)器T0編程實(shí)現(xiàn)從P1.0輸出周期為500s的方波。,分析:從P1.0輸出周期為500s的方波,只須P1.0每250s取反一次則可。當(dāng)系統(tǒng)時鐘為12MHZ,定時/計(jì)數(shù)器T0工作于方式2(自動重裝初值8位定時/計(jì)數(shù)器方式)時,最大的定時時間為256s,滿足250s的定時要求,方式控制字TMOD應(yīng)設(shè)定為00000010B(02H)。 計(jì)算初值:TC=MT/T0 =28-250s/1s=06H,則TH0=TL0=06H。,匯編程序: ORG 0000H LJ

20、MP MAIN ORG 000BH ;中斷處理程序 CPL P1.0 RETI ORG 0100H ;主程序MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB EA SETB ET0 SETB TR0 SJMP $ END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; void main() TMOD=0 x02; TH0=0 x06;TL0=0 x06; EA=1;ET0=1; TR0=1; while(1); void time0_int(void) interrupt 1 /中斷服務(wù)程序 P1_0=

21、!P1_0; ,(1)采用中斷處理方式的程序,(2)采用查詢方式處理的程序,匯編程序: ORG 0000H LJMP MAIN ORG 0100H ;主程序MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0 LOOP:JBC TF0,NEXT ;查詢計(jì)數(shù)溢出 SJMP LOOP NEXT:CPL P1.0 SJMP LOOP SJMP $ END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; void main() char i; TMOD=0 x02; TH0=0 x06;TL0=0 x06;

22、TR0=1; for(;) if (TF0) TF0=0;P1_0=! P1_0; /查詢計(jì)數(shù)溢出 ,思考:若要輸出60ms的方波程序該如何修改?,若輸出60ms方波,則定時時間為30ms,工作方式選擇方式1(16位加1定時器/計(jì)數(shù)器方式)。 TC=M-T/ T計(jì)數(shù)=216-30ms/1s=65536-30000=8AD0H,匯編程序如下: ORG 0 AJMP START ORG 0BH LJMP TIMER0 ORG 30H START: MOV P1, #0FFH MOV TMOD, #01H MOV TH0, #8AH MOV TL0, #0D0H SETB ET0 SETB EA S

23、ETB TR0 LOOP: AJMP LOOP,TIMER0: PUSH ACC PUSH PSW CPL P1.0 MOV TH0, #8AH MOV TL0, #0D0H POP PSW POP ACC RETI END,重裝計(jì)數(shù)初值,啟動下一次定時,C51程序如下: #include sbit flash_led=P10; void main(void) TMOD=0 x01; TH0=0 x8A; TL0=0 xD0; IE=0 x82; TR0=1; while(1); ,void timer0(void) interrupt 1 TH0=0 x8A; TL0=0 xD0; flas

24、h_led= !flash_led; ,【例6-3】 設(shè)系統(tǒng)時鐘頻率為12MHZ,用定時/計(jì)數(shù)器T0編程實(shí)現(xiàn)從P1.0輸出周期為1s的方波。,分析:系統(tǒng)時鐘頻率為12MHz時,定時器/計(jì)數(shù)器的最長的定時是方式2(16位加1定時器/計(jì)數(shù)器)下的65.536ms,500ms的定時無法直接實(shí)現(xiàn),可以結(jié)合軟件計(jì)數(shù)器來進(jìn)行設(shè)計(jì)。 如:用定時/可計(jì)數(shù)器T0產(chǎn)生周期性為10ms的定時,然后用一個寄存器R2對10ms計(jì)數(shù)50次或用定時/計(jì)數(shù)器T1對10ms計(jì)數(shù)50次實(shí)現(xiàn)。 初值計(jì)算: TC=MT/T0 =216-10ms/1s=65536-10000=D8F0H,(1)用寄存器R2作計(jì)數(shù)器軟件計(jì)數(shù),中斷處理方

25、式。 匯編程序: ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 ORG 0100H MAIN:MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H MOV R2,#00H SETB EA SETB ET0 SETB TR0 SJMP $ INTT0:MOV TH0,#0D8H,MOV TL0,#0F0H INC R2 CJNE R2,#32H,NEXT CPL P1.1 MOV R2,#00H NEXT:RETI END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_1=P11; char i; vo

26、id main() TMOD=0 x01; TH0=0 xD8;TL0=0 xf0; EA=1;ET0=1; i=0; TR0=1; while(1); void time0_int(void) interrupt 1 /中斷服務(wù)程序 TH0=0 xD8;TL0=0 xf0; i+; if (i=50) P1_1=! P1_1; i=0; ,(2) 用定時/計(jì)數(shù)器T1計(jì)數(shù)實(shí)現(xiàn),定時/計(jì)數(shù)器T1工作于計(jì)數(shù)方式時,計(jì)數(shù)脈沖通過T1(P3.5)輸入,設(shè)定時/計(jì)數(shù)器T0定時時間到對T1(P3.5)取反一次,則T1(P3.5)每20ms產(chǎn)生一個計(jì)數(shù)脈沖,那么定時500ms只須計(jì)數(shù)25次,設(shè)定時/計(jì)數(shù)器T

27、1工作于方式2,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。因?yàn)槎〞r/計(jì)數(shù)器T0工作于方式1,定時,則這時方式控制字為01100001B(61H)。定時/計(jì)數(shù)器T0和T1都采用中斷方式工作。,匯編程序如下: ORG 0000H LJMP MAIN ORG 000BH MOV TH0,#0D8H MOV TL0,#0F0H CPL P3.5 RETI ORG 001BH CPL P1.1 RETI,ORG 0100H MAIN:MOV TMOD,#61H MOV TH0,#0D8H MOV TL0,#0F0H MOV R2,#00H MOV TH1,#0E

28、7H MOV TL1,#0E7H SETB EA SETB ET0 SETB ET1 SETB TR0 SETB TR1 SJMP $ END,C語言程序如下: # include /包含特殊功能寄存器庫 sbit P1_1=P11; sbit P3_5=P35; void main() TMOD=0 x61; TH0=0 xD8;TL0=0 xf0; TH1=0 xE7; TL1=0 xE7; EA=1; ET0=1;ET1=1; TR0=1;TR1=1; while(1); void time0_int(void) interrupt 1 /T0中斷服務(wù)程序 TH0=0 xD8;TL0=0

29、 xf0; P3_5=!P3_5; void time1_int(void) interrupt 3 /T1中斷服務(wù)程序 P1_1=! P1_1; ,【例】(計(jì)數(shù)器模式應(yīng)用):設(shè)外部有一個計(jì)數(shù)源。編制程序,對外部計(jì)數(shù)源進(jìn)行計(jì)數(shù)并顯示。,解:將外部計(jì)數(shù)源連到定時器/計(jì)數(shù)器1的外部引腳T1上,可用LED將計(jì)數(shù)的值顯示出來,我們用P1口連接的8個LED來顯示計(jì)到的數(shù)據(jù)。,proteus仿真 (counter),匯編程序: ORG 0000H AJMP START; 轉(zhuǎn)入主程序 ORG 0030H START: MOV SP, #60H; 設(shè)置堆棧指針 MOV TMOD, #60H; T1作計(jì)數(shù)器,工

30、作方式2;自動重裝初值的8位加1計(jì)數(shù)器 SETB TR1 ; 啟動T1開始運(yùn)行 LOOP: MOV A, TL1 ; 讀T1的計(jì)數(shù)值送A CPL A MOV P1, A ; 輸出到P1口,驅(qū)動LED顯示 AJMP LOOP ; 轉(zhuǎn)回LOOP END,C51程序: #include void main(void) TMOD=0 x60; TR1=1; while(1) P1= TL1; ,解:P3.4(T0)作為外部中斷的輸入引腳,設(shè)定T0工作方式2(自動重裝初值的8位計(jì)數(shù)方式),同時計(jì)數(shù)初值設(shè)為0FFH,這樣,只要P3.4輸入一個負(fù)脈沖,計(jì)數(shù)器加1,產(chǎn)生溢出中斷請求。 初始化程序: MOV T

31、MOD,#62H MOV TH0,#0FFH MOV TL0,#0FFH MOV IE,#82H SETB TR0,【例】利用定時器T0擴(kuò)展一個外部中斷。,6.3 串行接口,1. 并行通信和串行通信 通信:單片機(jī)與外界進(jìn)行信息交換。 8051單片機(jī)的通信方式有兩種: 并行通信:數(shù)據(jù)的各位同時發(fā)送或接收。特點(diǎn)是傳送速度快、效率高,但成本高。適用于短距離傳送數(shù)據(jù)。計(jì)算機(jī)內(nèi)部的數(shù)據(jù)傳送一般均采用并行方式。 串行通信:數(shù)據(jù)一位一位順序發(fā)送或接收。特點(diǎn)是傳送速度慢,但成本低。適用于較長距離傳送數(shù)據(jù)。計(jì)算機(jī)與外界的數(shù)據(jù)傳送一般均采用串行方式。,6.3.1 通信的基本概念,根據(jù)信息傳送的方向,串行通信有如下

32、3種制式: 單工方式(simplex):數(shù)據(jù)僅按一個固定方向傳送; 半雙工方式(half duplex) :數(shù)據(jù)可實(shí)現(xiàn)雙向傳送,但不能同時進(jìn)行; 全雙工方式(full duplex) :允許雙方同時進(jìn)行數(shù)據(jù)雙向傳送,2. 同步通信和異步通信 串行通信按數(shù)據(jù)傳送方式分為: 異步通信方式(asynchronous communication):以字符(或字節(jié))為傳送單位,用起始位和停止位標(biāo)識每個字符的開始和結(jié)束字符,間隔不固定,只需字符傳送時同步。優(yōu)點(diǎn)是不需要傳送同步脈沖,可靠性高,所需設(shè)備簡單;缺點(diǎn)是字符幀中因包含有起始位和停止位而降低了有效數(shù)據(jù)的傳輸速率。 同步通信方式(synchronous

33、 communication):以一串字符為一個傳送單位,包括同步字符、數(shù)據(jù)塊和校驗(yàn)字符CRC,字符間不加標(biāo)識位,在一串字符開始用同步字符標(biāo)識,優(yōu)點(diǎn)是數(shù)據(jù)傳輸速率較高,缺點(diǎn)是硬件要求高,通信雙方須嚴(yán)格同步。,3. 波特率 波特率:每秒鐘傳送信號的數(shù)量,單位為波特(Baud)。 比特率:每秒鐘傳送二進(jìn)制數(shù)的信號數(shù)(即二進(jìn)制數(shù)的位數(shù)),單位是bps(bit per second)或?qū)懗蒪/s(位/秒)。 在單片機(jī)串行通信中,傳送的信號是二進(jìn)制信號,波特率與比特率數(shù)值上相等。單位采用bps。 波特率(bps)=字符的位數(shù)字符/秒(Bps) 例如,異步串行通信的數(shù)據(jù)傳送的速率是120字符/秒,而每個字

34、符規(guī)定包含10位數(shù)字,則傳輸波特率為: 120字符/秒 10位/字符=1200位/秒= 1200bps,1. 功能 MCS-51內(nèi)部有一個功能強(qiáng)大的可編程全雙工異步串行通信接口SIO(P3.0RxD、P3.1TxD),具有UART(Universal Asynchronous Receiver/Transmitter)的全部功能。 主要功能:既可作UART(通用異步接收/發(fā)送器)用,也可作同步移位寄存器使用,還可用于網(wǎng)絡(luò)通信,其幀格式可有8位、10位和11位,并能設(shè)置各種波特率。 有四種工作方式分別是方式0、方式1、方式2和方式3。,6.3.2 MCS-51單片機(jī)串行口功能與結(jié)構(gòu),2. 結(jié)構(gòu)

35、MCS-51單片機(jī)串行口主要由發(fā)送SBUF、發(fā)送控制器、輸出控制門、接收SBUF、接收控制器、輸入移位寄存器等組成。,SBUF(發(fā)),SBUF(收),發(fā)送控制器 TI,接收控制器 RI,移位寄存器,T1 溢出率,1,A累加器,(門)移位寄存器,RxD (P3.0),TxD (P3.1),去CPU申請中斷,引腳,引腳,CPU內(nèi)部,2,16,SMOD,“0”,“1”,1到0跳 變檢測,從用戶使用的角度,它由三個特殊功能寄存器組成:特殊功能寄存器SBUF(串行口數(shù)據(jù)寄存器),串行口控制寄存器SCON和電源控制寄存器PCON。,3. 串行口控制寄存器SCON ( 98H),工作方式選擇,多機(jī)通信 接收

36、 發(fā)送數(shù)據(jù) 接收數(shù) 發(fā)送中 接收中 控制位 控制 第9位 據(jù)第9位 斷標(biāo)志 斷標(biāo)志,4. 電源控制寄存器PCON(87H),SMOD - - - GF1 GF0 PD IDL,SMOD:串行口波特率倍增位 =1:串行口波特率加倍。 =0:串行口波特率不變,系統(tǒng)復(fù)位時默認(rèn)為SMOD=0。,6.3.3 串行口的工作方式,1. 工作方式0( 8位移位寄存器I/O方式) 發(fā)送過程: 當(dāng)TI=0,執(zhí)行指令MOV SBUF,A,即啟動發(fā)送。 SBUF中的串行數(shù)據(jù)由RxD逐位移出(低位在先,高位在后); TxD輸出移位時鐘,頻率=fosc/12; 每送出8位數(shù)據(jù)TI自動置1;需要用軟件清零 TI。,接收過程

37、: 當(dāng)REN=1,且RI=0,SBUF中的串行數(shù)據(jù)由RxD逐位移入(低位在先,高位在后); TxD輸出移位時鐘,頻率=fosc/12; 每接收8位數(shù)據(jù)RI自動置1,這時可執(zhí)行MOV A,SBUF讀取數(shù)據(jù),需要用軟件清零RI。,接收條件:RI=0,且 REN=1 (允許接收數(shù)據(jù))。 發(fā)送條件:TI=0。,注意:串行口在方式0下的工作并非是一種同步通信方式,經(jīng)常配合“串入并出”“并入串出”移位寄存器一起使用,以達(dá)到擴(kuò)展一個并行口的目的。 擴(kuò)展電路如下圖所示。,2. 方式1 (波特率可變的10位異步通信方式 ) 發(fā)送/接收數(shù)據(jù)的格式:一幀信息包括1個起始位0,8個數(shù)據(jù)位(低位在前)和1個停止位1。

38、發(fā)送過程:當(dāng)TI=0,執(zhí)行MOV SBUF,A,啟動發(fā)送,發(fā)送電路自動給8位待發(fā)送數(shù)據(jù)添加一個起始位和一個停止位,數(shù)據(jù)從TxD引腳送出,每送出8位數(shù)據(jù) TI自動置1;需要用軟件清零 TI。 接收過程:當(dāng)REN=0,接收電路自動采樣RxD上信號,檢測到1到0的跳變時,開始接收數(shù)據(jù),接收端自動去掉一個起始位和一個停止位,當(dāng)RI=0時接收到的數(shù)據(jù)才裝入SBUF 。每接收8位數(shù)據(jù) RI自動置1;這時可執(zhí)行指令MOV A,SBUF,需要用軟件清零 RI 。 發(fā)送/接收數(shù)據(jù)頻率波特率= T1溢出率 2SMOD/32 發(fā)送/接收條件:同方式0。,3. 方式2(固定波特率的11位異步接收/發(fā)送方式)和方式3(

39、可變波特率的11位異步接收/發(fā)送方式),發(fā)送/接收過程:類似于方式1,所不同的是它比方式1增加了一位“第9位”數(shù)據(jù)(TB8/RB8),通常用于奇偶校驗(yàn)或多機(jī)通信。 發(fā)送/接收條件:同方式0。 通信波特率:方式3和方式2唯一的區(qū)別是波特率機(jī)制不同, 方式2的波特率 = fosc 2SMOD/64 方式3的波特率=T1的溢出率 2SMOD/32,奇偶校驗(yàn):奇偶校驗(yàn)是檢驗(yàn)串行通信雙方傳輸?shù)臄?shù)據(jù)正確與否的一個措施,并不能保證通信數(shù)據(jù)的傳輸一定正確。即如果奇偶校驗(yàn)發(fā)生錯誤,表明數(shù)據(jù)傳輸一定出錯了;如果奇偶校驗(yàn)沒有出錯,絕不等于數(shù)據(jù)傳輸完全正確。 奇校驗(yàn)規(guī)定:8位有效數(shù)據(jù)連同1位附加位中,二進(jìn)制“1”的個

40、數(shù)為奇數(shù)。 偶校驗(yàn)規(guī)定:8位有效數(shù)據(jù)連同1位附加位中,二進(jìn)制“1”的個數(shù)為偶數(shù)。 若約定采用奇校驗(yàn),則 發(fā)送:若發(fā)送的8位有效數(shù)據(jù)中“1”的個數(shù)為偶數(shù),則要人為在附加位中添加一個“1”一起發(fā)送;若發(fā)送的8位有效數(shù)據(jù)中“1”的個數(shù)為奇數(shù),則要人為在附加位中添加一個“0”一起發(fā)送。 接收:若接收到的9位數(shù)據(jù)中“1”的個數(shù)為奇數(shù),則表明接收正確,取出8位有效數(shù)據(jù)即可;若接收到的9位數(shù)據(jù)中“1”的個數(shù)為偶數(shù),則表明接收出錯!應(yīng)當(dāng)進(jìn)行出錯處理。采用偶校驗(yàn)時,處理方法與奇校驗(yàn)類似。,1. 初始化編程 寫SCON。根據(jù)工作方式確定SM0、SM1位;對于方式2和方式3還要確定SM2位;如果是接收端,則置允許接

41、收位REN為1;如果方式2和方式3發(fā)送數(shù)據(jù),則應(yīng)將發(fā)送數(shù)據(jù)的第9位寫入TB8中。 設(shè)置波特率。寫PCON,若波特率可變,則通過對T1編程設(shè)置波特率。 寫IP、IE。設(shè)置中斷優(yōu)先級,開中斷。,6.3.4 串行口的編程及應(yīng)用,波特率的計(jì)算: 方式0:B=fosc/12。 方式2:波特率由PCON中的選擇位SMOD來決定,可由下式表示: B= fosc 2SMOD/64 方式1和方式3:波特率是可變的,由定時器T1的溢出率控制。波特率為: B=(2SMOD/32)定時器T1溢出率 T1溢出率=T1計(jì)數(shù)率/產(chǎn)生溢出所需的周期 = (fosc/12)/(2KTC) 其中:K定時器T1的位數(shù),定時器T1用

42、作波特率發(fā)生器時,通常工作在方式2, 所以T1的溢出所需的周期數(shù)= 28TC。 TC定時器T1的預(yù)置初值。 波特率B=(2SMOD /32)fosc/12(28-TC),定時器T1的初值:TC=256-2SMOD fosc/(384 B),下表列出了定時器T1工作于方式2的常用波特率及初值。,TC=256-2SMOD*fosc/(384*B),2. 串行口的應(yīng)用,通常用于三種情況:利用方式0擴(kuò)展并行I/O口;利用方式1實(shí)現(xiàn)點(diǎn)對點(diǎn)的雙機(jī)通信;利用方式2或方式3實(shí)現(xiàn)多機(jī)通信。,1)利用方式0擴(kuò)展并行I/O口,【例5-4】用8051單片機(jī)的串行口外接串入并出的芯片CD4094擴(kuò)展并行輸出口控制一組發(fā)

43、光二極管,使發(fā)光二極管從左至右延時輪流顯示。,Proteus仿真(3.8),CD4094是一塊8位的串入并出的芯片,帶有一個控制端STB,當(dāng)STB=0時,打開串行輸入控制門,在時鐘信號CLK的控制下,數(shù)據(jù)從串行輸入端DATA一個時鐘周期一位依次輸入;當(dāng)STB=1,打開并行輸出控制門,CD4094中的8位數(shù)據(jù)并行輸出。,查詢方式:通過查詢TI的狀態(tài),來決定是否發(fā)送下一幀數(shù)據(jù)。在串行接收時,通過對RI查詢來確定何時接收下一幀數(shù)據(jù)。程序如下: STB BIT P1.0 ORG 0100H START: MOV SCON, #00H; 置串行口工作方式0 MOV A, #01H ; 最低位燈先亮 CL

44、R STB ; 關(guān)閉并行輸出 OUT: MOV SBUF, A ; 開始串行輸出 WATI: JNB TI, WAIT; 輸出完否?未完,等待;完了,繼續(xù)執(zhí)行 CLR TI ; 完了,清TI標(biāo)志,以備下次發(fā)送 SETB STB; 打開并行口輸出 ACALL DELAY; 延時一段時間 RL A ; 循環(huán)左移 CLR STB; 關(guān)閉并行輸出 SJMP OUT ; 循環(huán) DELAY: . ; 延時子程序 END,C51編程: #include /*包含特殊功能寄存器庫*/ #include sbit STB=P10; void main( ) unsigned char j=0 x01; /*最低

45、位燈先點(diǎn)亮*/ SCON=0 x00; /*串口工作方式0*/ for(;) STB=0; /*關(guān)并行輸出,開串行輸入*/ SBUF=j;/*串口輸出*/ while(!TI); /*等待串口輸出完成*/ TI=0;/*清發(fā)送標(biāo)志*/ j=_crol_(j,1); /*循環(huán)左移1位*/ STB=1; /*開并行輸出,關(guān)串行輸入*/ delay( ); void delay( );/*延時函數(shù)*/ ,中斷方式: ORG 0 SJMP MAIN ORG 0023H;串口中斷入口地址 AJMP SBY ORG 30H MAIN: MOV SCON, #00H;方式0 MOV IE, #90H CLR

46、 P1.0;禁止CD4094并行輸出 MOV A, #01H;第一盞燈亮 MOV SBUF, A;串口輸出 LOOP: SJMP LOOP;等待串口輸出完 SBY:SETB P1.0;點(diǎn)亮發(fā)光二極管 ACALL DELAY;點(diǎn)亮一段時間 CLR TI;清發(fā)送中斷標(biāo)志 RL A;下一盞燈 CLR P1.0;關(guān)并行輸出,燈滅,開串行輸入 NEXT: MOV SBUF, A;串行口輸出 RETI;中斷返回 DELAY: ;延時子程序 END,C51編程: #include /*包含特殊功能寄存器庫*/ #include sbit STB=P10; unsigned char j=0 x01; /*最

47、低位燈先點(diǎn)亮*/ void main( ) SCON=0 x00; /*串口工作方式0*/ IE=0 x90; /*開串口中斷*/ STB=0; /*關(guān)并行輸出*/ SBUF=j;/*串口輸出*/ while(1); void sioint(void) interrupt 4/*串口中斷函數(shù)*/ j=_crol_(j,1); /*循環(huán)左移1位*/ STB=1; /*開并行輸出*/ TI=0; /*清發(fā)送標(biāo)志*/ delay( ); STB=0; SBUF=j; void delay( );/*延時函數(shù)*/ ,CD4014是一塊8位的并入串出的芯片,帶有一個控制端P/S,當(dāng)P/S=1時,8位并行

48、數(shù)據(jù)置入到內(nèi)部的寄存器;當(dāng)P/S=0時,在時鐘信號CLK的控制下,內(nèi)部寄存器的內(nèi)容按低位在前從QB串行輸出端依次輸出;使用時,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制,另外,用P1.1控制8并行數(shù)據(jù)的置入。,【例6-5】 用8051單片機(jī)的串行口外接并入串出的芯片CD4014擴(kuò)展并行輸入口,輸入一組開關(guān)的信息。,串行口方式0數(shù)據(jù)的接收,用SCON寄存器中的REN位來控制,采用查詢RI的方式來判斷數(shù)據(jù)是否輸入。程序如下: 匯編程序: ORG 0000H LJMP MAIN ORG 0100H MAIN:SETB P1.1 START:

49、JB P1.1,START SETB P1.0 MOV SCON,#10H CLR P1.0 LOOP:JNB RI,LOOP CLR RI MOV A,SBUF ,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; sbit P1_1=P11; void main() unsigned char i; P1_1=1; while (P1_1= =1) ; P1_0=1; P1_0=0; SCON=0 x10; while (!RI) ; RI=0; i=SBUF; ,2)利用方式1實(shí)現(xiàn)點(diǎn)對點(diǎn)的雙機(jī)通信,【例6-6】 用匯編語言編程通過串行實(shí)現(xiàn)將甲機(jī)的片內(nèi)R

50、AM中30H3FH單元的內(nèi)容傳送到乙機(jī)的片內(nèi)RAM的40H4FH單元中。,甲、乙兩機(jī)都選擇方式1:8位異步通信方式,波特率為1200bps,甲機(jī)發(fā)送,乙機(jī)接收,因此甲機(jī)的串口控制字為40H,乙機(jī)的串口控制字為50H。,設(shè)SMOD=0,甲、乙兩機(jī)的振蕩頻率為12MHZ,由于波特率為1200。定時/計(jì)數(shù)器T1選擇為方式2,則初值為: TC=256-2SMOD*fosc/(384*B)=256-12000000/(3841200)230=E6H,甲機(jī)發(fā)送子程序: TSTART:MOV TMOD, #20H;設(shè)定定時器T1工作方式2 MOV TL1, #0E6H;送初值 MOV TH1, #0E6H

51、MOV PCON, #00H;SMOD=0 MOV SCON, #40H;串口工作方式2,10位異步收發(fā) MOV R0, #30H;R0指向發(fā)送緩沖區(qū)首地址 MOV R7, #10H;共16個待發(fā)送數(shù)據(jù) SETB TR1 LOOP:MOV A, R0;待發(fā)送數(shù)據(jù)送A MOV SBUF, A;啟動發(fā)送 WAIT:JNB TI, WAIT;等待發(fā)送完成 CLR TI;清發(fā)送中斷標(biāo)志 INC R0;R0指向下一個待發(fā)送數(shù)據(jù) DJINZ R7, LOOP;16個數(shù)據(jù)發(fā)送完?未完則轉(zhuǎn) RET,乙機(jī)接收子程序: RSTART:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6

52、H MOV PCON,#00H MOV R0,#40H MOV R7,#10H SETB TR1 LOOP:MOV SCON,#50H WAIT:JNB RI,WAIT MOV A,SBUF MOV R0,A INC R0 DJINZ R7,LOOP RET,3)多機(jī)通信,(1)硬件連接 單片機(jī)構(gòu)成的多機(jī)系統(tǒng)常使串行口工作在方式2和方式3,采用總線型主從式結(jié)構(gòu)(一個是主機(jī),其余的是從機(jī),從機(jī)要服從主機(jī)的調(diào)度、支配)。有時還要對信號進(jìn)行光電隔離、電平轉(zhuǎn)換等。在實(shí)際的多機(jī)應(yīng)用系統(tǒng)中,常采用RS-485串行標(biāo)準(zhǔn)總線進(jìn)行數(shù)據(jù)傳輸。簡單的硬件連接如下圖所示(圖中沒有畫出RS-485接口)。,通信原理:,

53、將通信雙方分為主機(jī)(其SM2=0)和從機(jī)(其SM2=1 ); 將通信數(shù)據(jù)分為地址幀(以TB8/RB8=1標(biāo)識)和數(shù)據(jù)幀(以TB8/RB8=0標(biāo)識)。,方式2/3,接收,正常接收數(shù)據(jù),若接收數(shù)據(jù)的RB8=1,若接收數(shù)據(jù)的RB8=0,接收數(shù)據(jù),丟棄,(2)通信協(xié)議 主機(jī)置SM2位0,所有從機(jī)的SM2位置1,處于接收地址幀狀態(tài)。 主機(jī)先發(fā)送一地址幀,其中,8位是地址,第9位TB8為1表示該幀為地址幀,否則為數(shù)據(jù)幀。 所有從機(jī)SM2位置1,只有當(dāng)接收的數(shù)據(jù)RB8=1(地址幀)時才接收,否則丟棄,接收地址幀后,都將接收的地址與本機(jī)的地址比較,對于地址相符的從機(jī),使自己的SM2位置0(以接收主機(jī)隨后發(fā)來的

54、數(shù)據(jù)幀),并把本站地址發(fā)回主機(jī)作為應(yīng)答;對于地址不符的從機(jī),仍保持SM2=1,對主機(jī)隨后發(fā)來的數(shù)據(jù)幀不予理睬。 完成主機(jī)和被尋址從機(jī)之間的數(shù)據(jù)通信,被尋址從機(jī)在通信完成后重新使SM2=1監(jiān)聽地址狀態(tài),并退出中斷服務(wù)程序,等待下次通信。,(3)應(yīng)用程序設(shè)計(jì) 設(shè)主機(jī)發(fā)送的地址聯(lián)絡(luò)信號為:00H,01H,02H,(即從機(jī)設(shè)備地址),地址FFH為命令各從機(jī)復(fù)位,即恢復(fù)SM2=1。 主機(jī)命令編碼為:01H,主機(jī)命令從機(jī)接收數(shù)據(jù);02H,主機(jī)命令從機(jī)發(fā)送數(shù)據(jù)。其他都按02H對待。 程序分為主機(jī)程序和從機(jī)程序。約定一次傳遞數(shù)據(jù)為16個字節(jié)。 程序清單略。,6.4 中斷系統(tǒng),所謂“中斷”,是指CPU執(zhí)行正常程

55、序時,系統(tǒng)中出現(xiàn)特殊請求,CPU暫時中止當(dāng)前的程序,轉(zhuǎn)去處理更緊急的事件(執(zhí)行中斷服務(wù)程序),處理完畢(中斷服務(wù)完成)后,CPU自動返回原程序的過程。,6.4.1 中斷系統(tǒng)的基本概念,中斷處理過程: 某人看書執(zhí)行某程序(日常事務(wù)) 客人拜訪中斷信號INT=0(中斷請求) 暫??磿鴷和?zhí)行當(dāng)前程序(中斷響應(yīng)) 書中作記號當(dāng)前PC入棧(保護(hù)斷點(diǎn)) 接待客人執(zhí)行I/O程序(中斷服務(wù)) 繼續(xù)看書返回原程序(中斷返回),中斷作用: 采用中斷技術(shù)可以提高CPU效率、解決速度矛盾、實(shí)現(xiàn)并行工作、分時操作、實(shí)時處理、故障處理、應(yīng)付突發(fā)事件,可使多項(xiàng)任務(wù)共享一個資源(CPU)。 中斷與子程序的最主要區(qū)別: 子程

56、序是預(yù)先安排好的,中斷是隨機(jī)發(fā)生的。 中斷涉及的幾個環(huán)節(jié): 中斷源、中斷申請、中斷優(yōu)先權(quán)、中斷允許和屏蔽、中斷響應(yīng)、保護(hù)現(xiàn)場、中斷服務(wù)、恢復(fù)現(xiàn)場、中斷返回。,1. 中斷源和中斷請求 中斷源是指引起中斷的設(shè)備或事件,或發(fā)出中斷請求的源頭。 2. 中斷優(yōu)先權(quán)與中斷嵌套 中斷優(yōu)先級(也稱為中斷優(yōu)先權(quán)):給每個中斷源指定中斷響應(yīng)的優(yōu)先級別 當(dāng)同時有多個中斷請求信號。 響應(yīng)某中斷時CPU又收到其它中斷請求。,先響應(yīng)優(yōu)先級別高的中斷請求。,高優(yōu)先級中斷請求信號可中斷低優(yōu)先級中斷服務(wù), 稱為中斷嵌套。,3. 中斷允許與中斷屏蔽,4. 中斷響應(yīng)與中斷返回,6.4.2 MCS-51的中斷系統(tǒng),MCS-51提供了

57、5個中斷源(52子系列提供6個),2級中斷優(yōu)先級控制,可實(shí)現(xiàn)2級中斷服務(wù)嵌套。可通過程序設(shè)置中斷的允許或屏蔽,設(shè)置中斷的優(yōu)先級。 1MCS-51的中斷源 1)2個外部中斷源(中斷標(biāo)志為IE0和IE1 ) 由 ( P3.2 )端口線引入,低電平或下降沿引起。 由 ( P3.3 )端口線引入,低電平或下降沿引起。,CPU識別中斷申請的依據(jù):CPU在每個機(jī)器周期的S5P2期間,會自動查詢各個中斷申請標(biāo)志位,若查到某標(biāo)志位被置位,將啟動中斷機(jī)制。,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TF0/TF1:定時器溢出中斷申請標(biāo)志位。 TR0/TR1:定時器啟/??刂莆?。 =0:定時

58、器停止運(yùn)行;=1:定時器啟動運(yùn)行。,IE0/IE1:外部中斷申請標(biāo)志位。 IT0/IT1:外部中斷請求的觸發(fā)方式控制位。 =0:在INT0/INT1端申請中斷的信號低電平有效; =1:在INT0/INT1端申請中斷的信號負(fù)跳變有效。,定時器控制寄存器TCON (88H)的低4位用于外部中斷控制,外部中斷請求的撤除,外部中斷請求由硬件自動撤除中斷申請。 當(dāng)外部中斷為電平觸發(fā)方式時, / 引腳上的低電平須持續(xù)到中斷發(fā)生。若中斷返回前仍未及時撤除低電平,雖然CPU在響應(yīng)中斷時能由硬件自動復(fù)位IE0或IE1,但引腳上的低電平仍會使已經(jīng)復(fù)位的IE0或IE1再次置位,產(chǎn)生重復(fù)中斷的錯誤。,電平觸發(fā)型外部中斷請求的撤除必須由外部硬件使INT0(或INT1)上的低電平隨著其中斷被響應(yīng)而變?yōu)楦唠娖?。其中斷請求撤除的電路如下圖所示。,外來的低電平反相CP端產(chǎn)生上跳沿 D端的“0”輸出到Q端申請中斷,中斷響應(yīng)后對P1.0送“0”,SD端置“0”令Q端變?yōu)椤?”SD端置“1”,以免下次中斷來時Q端不能變“0”,2)2個定時器中斷(中斷標(biāo)志為TF0、TF1) T0:定時/計(jì)數(shù)器0中斷,由T0回零溢出引起。 T1:定時/計(jì)數(shù)器1中斷,由T

溫馨提示

  • 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

提交評論