第4章定時與中斷系統(tǒng)_第1頁
第4章定時與中斷系統(tǒng)_第2頁
第4章定時與中斷系統(tǒng)_第3頁
第4章定時與中斷系統(tǒng)_第4頁
第4章定時與中斷系統(tǒng)_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 本章內(nèi)容本章內(nèi)容p定時定時/計數(shù)器計數(shù)器 pC語言的函數(shù)語言的函數(shù) p中斷系統(tǒng)中斷系統(tǒng)第第4 4章章 定時與中斷系統(tǒng)定時與中斷系統(tǒng)一、定時器和計數(shù)器一、定時器和計數(shù)器 重點掌握重點掌握C51C51單片機片內(nèi)定時器單片機片內(nèi)定時器/ /計數(shù)器的計數(shù)器的結(jié)構(gòu)、結(jié)構(gòu)、功能功能,有關(guān)的,有關(guān)的特殊功能寄存器,狀態(tài)字、控制字特殊功能寄存器,狀態(tài)字、控制字的含義、工作模式和工作方式的選擇以及定時器的含義、工作模式和工作方式的選擇以及定時器/ /計數(shù)器的應(yīng)用舉例。計數(shù)器的應(yīng)用舉例。 /功能:間隔顯示時間為功能:間隔顯示時間為1秒的流水燈程序秒的流水燈程序/函數(shù)名:函數(shù)名:delay1s/函數(shù)功能:用函數(shù)功

2、能:用T1工作在方式工作在方式1下的下的1秒延時函數(shù),采用查詢方式實現(xiàn)秒延時函數(shù),采用查詢方式實現(xiàn)void delay1s() unsigned char i; for(i=0;i0 x14;i+)/設(shè)置設(shè)置20次循環(huán)次數(shù)次循環(huán)次數(shù) TH1=0 x3c;/設(shè)置定時器初值為設(shè)置定時器初值為3CB0H TL1=0 xb0; TR1=1;/啟動啟動T1 while(!TF1); /查詢計數(shù)是否溢出,即定時查詢計數(shù)是否溢出,即定時50ms時間到,時間到,TF1=1 TF1=0; /50ms定時時間到,將定時時間到,將T1溢出標志位溢出標志位TF1清零清零 void main()/主函數(shù)主函數(shù)unsig

3、ned char i,w; TMOD=0 x10;/設(shè)置設(shè)置T1為工作方式為工作方式1 while(1) w=0 x01; /顯示碼初值為顯示碼初值為01H for(i=0;i8;i+) P1=w;/w取反后送取反后送P1口,點亮相應(yīng)口,點亮相應(yīng)LED燈燈 w=1;/點亮燈的位置移動點亮燈的位置移動 delay1s();/調(diào)用調(diào)用1秒延時函數(shù)秒延時函數(shù) TMODTMOD:選擇定時器選擇定時器/ /計數(shù)器計數(shù)器T0T0、T1T1的工作模式和工作的工作模式和工作方式。方式。 TCONTCON:控制控制T0T0、T1T1的啟動和停止計數(shù),同時包含了的啟動和停止計數(shù),同時包含了T0T0、T1T1的狀態(tài)

4、。的狀態(tài)。 2、 計數(shù)方式計數(shù)方式 T/C計數(shù)來自引腳計數(shù)來自引腳T0(P3.4)和和T1(P3.5)的外部脈沖信號的的外部脈沖信號的個數(shù)。個數(shù)。 輸入脈沖由輸入脈沖由1變變0的下降沿的下降沿時,計數(shù)器的值增加時,計數(shù)器的值增加1直到回直到回零產(chǎn)生溢出中斷零產(chǎn)生溢出中斷,表示計數(shù)已達表示計數(shù)已達預期個數(shù)。預期個數(shù)。 定時定時/ /計數(shù)器計數(shù)器 8051定時器/計數(shù)器邏輯結(jié)構(gòu)方式方式0 0方式方式1 1方式方式2 2方式方式3 3TH0TH0TL0TL0TH1TH1TL1TL1定時器計數(shù)器啟動方式定時器計數(shù)器啟動方式 軟件啟動軟件啟動(通過寫程序來控制)(通過寫程序來控制) 硬軟共同啟動硬軟共同

5、啟動(通過程序和硬件電路共(通過程序和硬件電路共同來控制)同來控制)定時定時/ /計數(shù)器計數(shù)器 設(shè)置計數(shù)初值設(shè)置計數(shù)初值pT0T0、T1T1是是1616位加法計數(shù)器,分別由兩個位加法計數(shù)器,分別由兩個8 8位專用寄存器組成,位專用寄存器組成,T0T0由由TH0TH0和和TL0TL0組成,組成,T1T1由由TH1TH1和和TL1TL1組成組成。TL0TL0、TL1TL1、TH0TH0、TH1TH1的訪問的訪問地址依次為地址依次為8AH8AH 8DH8DH,每個寄存器均可被單獨訪問,因此可以被設(shè),每個寄存器均可被單獨訪問,因此可以被設(shè)置為置為8 8位、位、1313位或位或1616位位計數(shù)器使用。計

6、數(shù)器使用。p在計數(shù)器允許的計數(shù)范圍內(nèi),計數(shù)器可以從在計數(shù)器允許的計數(shù)范圍內(nèi),計數(shù)器可以從任何值開始計數(shù)任何值開始計數(shù),對,對于加于加1 1計數(shù)器,計數(shù)器,當計到最大值時當計到最大值時(對于(對于8 8位計數(shù)器,當計數(shù)值從位計數(shù)器,當計數(shù)值從255255再加再加1 1時,計數(shù)值變?yōu)闀r,計數(shù)值變?yōu)? 0),),產(chǎn)生溢出產(chǎn)生溢出。p定時定時/ /計數(shù)器允許用戶編程設(shè)定開始計數(shù)的數(shù)值,稱為賦初值計數(shù)器允許用戶編程設(shè)定開始計數(shù)的數(shù)值,稱為賦初值。初值不同,則計數(shù)器產(chǎn)生溢出時,計數(shù)個數(shù)也不同。例如:對于初值不同,則計數(shù)器產(chǎn)生溢出時,計數(shù)個數(shù)也不同。例如:對于8 8位計數(shù)器,當初值設(shè)為位計數(shù)器,當初值設(shè)為1

7、00100時,再加時,再加1 1計數(shù)計數(shù)156156個,計數(shù)器就產(chǎn)生溢個,計數(shù)器就產(chǎn)生溢出;當初值設(shè)為出;當初值設(shè)為200200時,再加時,再加1 1計數(shù)計數(shù)5656個,計數(shù)器產(chǎn)生溢出。個,計數(shù)器產(chǎn)生溢出。 定時定時/ /計數(shù)器計數(shù)器 啟動定時/計數(shù)器根據(jù)設(shè)置的定時/計數(shù)器啟動方式,啟動定時/計數(shù)器。如果采用軟件啟動,則需要把控制寄存器中的TR0或TR1置1;如果采用硬軟共同啟動方式,不僅需要把控制寄存器中的TR0或TR1置1,還需要相應(yīng)外部啟動信號為高電平。l工作方式控制寄存器工作方式控制寄存器IMOD用于選擇定時器用于選擇定時器/計數(shù)器的計數(shù)器的工作模式和工作方式工作模式和工作方式,字節(jié)地

8、址為,字節(jié)地址為89H,不能位尋址不能位尋址。GATEGATE:門控位。門控位。0:只要軟件控制位:只要軟件控制位TR0或或TR1置置1即可啟動定時器開始工作;即可啟動定時器開始工作;1:只有只有INT0或或INT1引腳為高電平,且引腳為高電平,且TR0或或TR1置置1時時,才能啟動相應(yīng)的定時器開始工作。才能啟動相應(yīng)的定時器開始工作。例如:設(shè)定時器例如:設(shè)定時器T0為定時工作方式,要求用軟件啟動為定時工作方式,要求用軟件啟動 定時器定時器T0工作,按方式工作,按方式1工作;定時器工作;定時器T1為計數(shù)為計數(shù) 工作方式,要求軟件啟動,工作方式為方式工作方式,要求軟件啟動,工作方式為方式2。 則根

9、據(jù)則根據(jù)TMOD各位的定義可知,其控制字為:各位的定義可知,其控制字為: 即控制字為61H,其指令形式為: TMOD=0 x61H;格式: D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 0 1 1 0 0 0 0 1lTCON的字節(jié)地址的字節(jié)地址88H,可位尋址可位尋址,位地址為,位地址為88H8FH。定時器的四種工作方式定時器的四種工作方式方式的選擇:根據(jù)方式的選擇:根據(jù)M1,M0來選擇。來選擇。 00:方式:方式0 01:方式:方式1 10: 方式方式2 11: 方式方式31 1 方式方式0 0 M1M1、M0M0為為00 00

10、 ,定時器,定時器/ /計數(shù)器的框圖:計數(shù)器的框圖: 圖圖6-46-4為為1313位的計數(shù)器位的計數(shù)器 ,C/TC/T* * 位位決定工作模式:決定工作模式: 0 0:開關(guān)打在上面,為開關(guān)打在上面,為定時器定時器工作模式;工作模式; 1 1:開關(guān)打在下面,為開關(guān)打在下面,為計數(shù)器計數(shù)器工作模式,計數(shù)脈沖為工作模式,計數(shù)脈沖為P3.4P3.4、P3.5P3.5引引腳上的腳上的外外部輸入脈沖,當引腳上發(fā)生部輸入脈沖,當引腳上發(fā)生負跳變負跳變時,計數(shù)器加時,計數(shù)器加1 1。GATEGATE位:位:決定定時器決定定時器/ /計數(shù)器的計數(shù)器的運行取決于運行取決于TRxTRx一個條件還是一個條件還是TRx

11、TRx和和INTxINTx* *引腳兩個條件引腳兩個條件。 (1 1)0 0:A A點是否計數(shù)點是否計數(shù), ,僅取決于僅取決于TRxTRx的狀態(tài)。的狀態(tài)。(2 2)1 1:B B點電位由點電位由INTXINTX* *的輸入電平和的輸入電平和TRXTRX的狀態(tài)這兩個條件來確定。的狀態(tài)這兩個條件來確定。是否計數(shù)是由是否計數(shù)是由TRxTRx和和INTxINTx* *二個條件來控制的。二個條件來控制的。 試一試試一試l用用T1、工作方式、工作方式0實現(xiàn)任務(wù)實現(xiàn)任務(wù)7中中1s延時函數(shù),晶振頻延時函數(shù),晶振頻率為率為12MHz. l方式方式0采用采用13位計數(shù)器,其最大定時時間為:位計數(shù)器,其最大定時時間

12、為:81291us=8.192ms,可選擇定時可選擇定時5ms,循環(huán)循環(huán)200次。次。l定時時間為定時時間為5ms,則計數(shù)值為,則計數(shù)值為5ms/1us=5000,T1的的初值為:初值為:lX=M-計數(shù)值計數(shù)值=8192-5000=3192=C78H=0110001111000Bl13位計數(shù)器中位計數(shù)器中TL1的高的高3位未用,填位未用,填0,TH1占高占高8位,所以,實位,所以,實際上際上x的值為:的值為:X=01100011 00011000B=6318H 用用T0的工作方式的工作方式0實現(xiàn)任務(wù)實現(xiàn)任務(wù)7中中1s延時函數(shù)延時函數(shù)如下:如下:void delay1s() unsigned c

13、har i;TOMD=0 x00; for(i=0;i0 xc8;i+) TH1=0 x63; TL1=0 x18; TR1=1; while(!TF1); TF1=0; 定時器的方式定時器的方式0 0、1 1示意圖示意圖返回TF0 TH0 TL0 12分頻OSC中斷高8位8位或低5位控制+T0(P3.4)TR0GATEINT0(P3.2)C/T=0C/T=1l初始化程序:TMOD=0 x01H; TH0=0 x3CH; TL0= 0 xB0H; TR0=1;l方式方式0和方式和方式1的最大特點是計數(shù)溢出后,計數(shù)器為全的最大特點是計數(shù)溢出后,計數(shù)器為全0.因此在循環(huán)定時或循環(huán)計數(shù)應(yīng)用時就存在用

14、指令反因此在循環(huán)定時或循環(huán)計數(shù)應(yīng)用時就存在用指令反復裝入計數(shù)初值的問題。復裝入計數(shù)初值的問題。試一試試一試用用T1、工作方式、工作方式2實現(xiàn)任務(wù)實現(xiàn)任務(wù)7中中1s延時函數(shù),晶延時函數(shù),晶振頻率為振頻率為12MHz。分析:因工作方式分析:因工作方式2是是8位計數(shù)器,其最大定時位計數(shù)器,其最大定時時間為:時間為:2561us=256us,為實現(xiàn),為實現(xiàn)1s延時,延時,可選擇定時時間為可選擇定時時間為250us,再循環(huán),再循環(huán)4000次。定次。定時時間選定后,可確定計數(shù)值為時時間選定后,可確定計數(shù)值為250,則,則T1的的初值為:初值為:X=M-計數(shù)值計數(shù)值=256-250=6=6H。采用。采用T1

15、的工作方式的工作方式2,因此,因此,TMOD=0 x20,void delay1s()unsigned int i; TMOD=0 x20; TH1=6; TL1=6; for(i=0;i4000;i+) TR1=1; while(!TF1); TF1=0; 定時器的初始值的計算定時器的初始值的計算對于不同的工作方式,計數(shù)器位數(shù)不同,故最大計數(shù)值對于不同的工作方式,計數(shù)器位數(shù)不同,故最大計數(shù)值M也不同:也不同: 方式方式0:M=213=8192 方式方式1:M=216=65536 方式方式2:M=28=256 方式方式3:定時器定時器0分為分為2個個8位計數(shù)器,每個位計數(shù)器,每個M均為均為25

16、6。因為定時因為定時/計數(shù)器是作加計數(shù)器是作加1計數(shù),并在計滿溢出時產(chǎn)生中斷,因此初計數(shù),并在計滿溢出時產(chǎn)生中斷,因此初值值X的計算如下:的計算如下: X = M 計數(shù)值計數(shù)值 計算出來的結(jié)果計算出來的結(jié)果X轉(zhuǎn)換為轉(zhuǎn)換為16進制數(shù)進制數(shù)后分別寫入后分別寫入TL0(TL1)、)、TH0(TH1)。)。注意!注意!方式方式0時初始值寫入時,對于時初始值寫入時,對于TL不用的高不用的高3位應(yīng)填入位應(yīng)填入0!任務(wù)任務(wù)8:簡易秒表控制:簡易秒表控制l/功能:采用功能:采用BCD碼格式顯示的碼格式顯示的059簡易秒表程序簡易秒表程序l#include lvoid delay1s() /1秒延時函數(shù)秒延時函

17、數(shù)l l unsigned char i;l for(i=0;i0 x14;i+) /設(shè)置設(shè)置20次循環(huán)次數(shù)次循環(huán)次數(shù)l l TH1=0 x3c; /設(shè)置定時器初值為設(shè)置定時器初值為3CB0Hl TL1=0 xb0;l TR1=1; /啟動啟動T1l while(!TF1); /查詢計數(shù)是否溢出,即定時查詢計數(shù)是否溢出,即定時50ms時間到,時間到,TF1=1l TF1=0; /50ms定時時間到,將定時時間到,將T1溢出標志位溢出標志位TF1清零清零l llvoid main()ll unsigned char i, t;l TMOD=0 x10; / 置置T1為工作方式為工作方式1l wh

18、ile(1) l for(i=0;i60;i+)l l t=(i/10)4)|(i%10);/ 將將i轉(zhuǎn)換為轉(zhuǎn)換為BCD碼碼l P1=t; / 計數(shù)值取反后送計數(shù)值取反后送P1口顯示口顯示l delay1s(); / 調(diào)用調(diào)用1秒延時函數(shù)秒延時函數(shù)l l l小知識小知識lBCD碼是用二進制數(shù)形式表示十進制數(shù),例碼是用二進制數(shù)形式表示十進制數(shù),例如十進制如十進制45,其,其BCD碼形式為碼形式為45H。BCD碼碼知識一種表示形式,與其數(shù)值沒有關(guān)系。知識一種表示形式,與其數(shù)值沒有關(guān)系。lBCD碼用碼用4位二進制數(shù)位二進制數(shù)表示表示1一位十進制數(shù)一位十進制數(shù),這這4位二進制數(shù)的權(quán)為位二進制數(shù)的權(quán)為8

19、421,所以,所以BCD碼又稱碼又稱為為8421碼碼.p在在C C語言程序中,子程序的作用是由函數(shù)來實現(xiàn)的,函數(shù)是語言程序中,子程序的作用是由函數(shù)來實現(xiàn)的,函數(shù)是C C語言的語言的基本組成模塊,一個基本組成模塊,一個C C語言程序就是由若干個模塊化的函數(shù)組成的。語言程序就是由若干個模塊化的函數(shù)組成的。pC C程序都是由一個主函數(shù)程序都是由一個主函數(shù)main( )main( )和若干個子函數(shù)構(gòu)成,有且只有一和若干個子函數(shù)構(gòu)成,有且只有一個主函數(shù),程序由主函數(shù)開始執(zhí)行,主函數(shù)根據(jù)需要來調(diào)用其他函數(shù),個主函數(shù),程序由主函數(shù)開始執(zhí)行,主函數(shù)根據(jù)需要來調(diào)用其他函數(shù),其它函數(shù)可以有多個。其它函數(shù)可以有多個

20、。4.2 C語言的函數(shù) 1.1.標準庫函數(shù)標準庫函數(shù) 標準庫函數(shù)是由標準庫函數(shù)是由C51C51的編譯器提供的,用戶不必定義這的編譯器提供的,用戶不必定義這些函數(shù),可以直接調(diào)用。些函數(shù),可以直接調(diào)用。KEIL C51KEIL C51編譯器提供了編譯器提供了100100多個多個庫函數(shù)供我們使用。常用的庫函數(shù)供我們使用。常用的C51C51庫函數(shù)包括一般庫函數(shù)包括一般I/OI/O口函數(shù)、口函數(shù)、訪問訪問SFRSFR地址函數(shù)等,在地址函數(shù)等,在C51C51編譯環(huán)境中,以頭文件的形式編譯環(huán)境中,以頭文件的形式給出。給出。2.2.用戶自定義函數(shù)用戶自定義函數(shù) 用戶自定義函數(shù)是用戶根據(jù)需要自行編寫的函數(shù),它必

21、用戶自定義函數(shù)是用戶根據(jù)需要自行編寫的函數(shù),它必須先定義之后才能被調(diào)用。須先定義之后才能被調(diào)用。函數(shù)分類和定義 程序:程序:ex4_6功能:調(diào)用循環(huán)左移標準函數(shù)實現(xiàn)的流水燈控制程序功能:調(diào)用循環(huán)左移標準函數(shù)實現(xiàn)的流水燈控制程序#include #include /此頭文件中定義了循環(huán)左移函數(shù)此頭文件中定義了循環(huán)左移函數(shù)_crol_()void delay(unsigned int i)unsigned int k; for (k=0;ki;k+);void main()unsigned char aa; aa=0 x01; while(1) P1=aa; delay(5000); aa=_cr

22、ol_(aa,1); / _crol_()為循環(huán)左移函數(shù),把變量為循環(huán)左移函數(shù),把變量aa的值循環(huán)左移一位的值循環(huán)左移一位 函數(shù)定義的一般形式是:函數(shù)定義的一般形式是:函數(shù)類型函數(shù)類型 函數(shù)名(形式參數(shù)表)函數(shù)名(形式參數(shù)表) 局部變量定義局部變量定義函數(shù)體語句函數(shù)體語句 其中,其中,“函數(shù)類型函數(shù)類型”說明了自定義函數(shù)返回值的類型。說明了自定義函數(shù)返回值的類型。 “ “函數(shù)名函數(shù)名”是自定義函數(shù)的名字。是自定義函數(shù)的名字。 “ “形式參數(shù)表形式參數(shù)表”給出函數(shù)被調(diào)用時傳遞數(shù)據(jù)的形式參數(shù),形式參數(shù)給出函數(shù)被調(diào)用時傳遞數(shù)據(jù)的形式參數(shù),形式參數(shù)的類型必須要加以說明。的類型必須要加以說明。ANSI

23、CANSI C標準允許在形式參數(shù)表中對形式參數(shù)標準允許在形式參數(shù)表中對形式參數(shù)的類型進行說明。的類型進行說明。如果定義的是無參數(shù)函數(shù),可以沒有形式參數(shù)表,如果定義的是無參數(shù)函數(shù),可以沒有形式參數(shù)表,但是圓括號不能省略。但是圓括號不能省略。 “ “局部變量定義局部變量定義”是對在函數(shù)內(nèi)部使用的局部變量進行定義。是對在函數(shù)內(nèi)部使用的局部變量進行定義。 “ “函數(shù)體語句函數(shù)體語句”是為完成函數(shù)的特定功能而設(shè)置的語句。是為完成函數(shù)的特定功能而設(shè)置的語句。2.用戶自定義函數(shù)void delay(unsigned char i) unsigned char j,k; for(k=0;ki;k+) for(

24、j=0;j255;j+);形式參數(shù)形式參數(shù)函數(shù)定義函數(shù)定義局部變量局部變量 函數(shù)調(diào)用就是在一個函數(shù)體中引用另外一個已經(jīng)定義函數(shù)調(diào)用就是在一個函數(shù)體中引用另外一個已經(jīng)定義的函數(shù),前者稱為的函數(shù),前者稱為主調(diào)用函數(shù)主調(diào)用函數(shù),后者稱為被,后者稱為被調(diào)用函數(shù)調(diào)用函數(shù),函,函數(shù)調(diào)用的一般格式為:數(shù)調(diào)用的一般格式為:函數(shù)名(實際參數(shù)列表);函數(shù)名(實際參數(shù)列表); 對于有參數(shù)類型的函數(shù),若實際參數(shù)列表中有多個實對于有參數(shù)類型的函數(shù),若實際參數(shù)列表中有多個實參,則各參數(shù)之間用逗號隔開。實參與形參順序?qū)?yīng),個參,則各參數(shù)之間用逗號隔開。實參與形參順序?qū)?yīng),個數(shù)應(yīng)相等,類型應(yīng)一致。數(shù)應(yīng)相等,類型應(yīng)一致。4.2

25、.2 函數(shù)調(diào)用 函數(shù)的三種調(diào)用方式函數(shù)的三種調(diào)用方式l函數(shù)語句。函數(shù)語句。把被調(diào)函數(shù)作為主調(diào)函數(shù)的一個語把被調(diào)函數(shù)作為主調(diào)函數(shù)的一個語句。句。 delay1s();l函數(shù)表達式。函數(shù)表達式。被調(diào)函數(shù)以一個運算對象的形式被調(diào)函數(shù)以一個運算對象的形式出現(xiàn)在一個表達式中。出現(xiàn)在一個表達式中。c=2*max(a,b);l函數(shù)參數(shù)。函數(shù)參數(shù)。被調(diào)函數(shù)作為另一個函數(shù)的實參或被調(diào)函數(shù)作為另一個函數(shù)的實參或者本函數(shù)的實參。者本函數(shù)的實參。m=max(a,max(b,c); 在一個函數(shù)中調(diào)用另一個函數(shù)需要具備如下條件:在一個函數(shù)中調(diào)用另一個函數(shù)需要具備如下條件: (1 1)被調(diào)用函數(shù)必須是已經(jīng)存在的函數(shù)被調(diào)用函

26、數(shù)必須是已經(jīng)存在的函數(shù)(庫函數(shù)或(庫函數(shù)或者用戶自己已經(jīng)定義的函數(shù)。者用戶自己已經(jīng)定義的函數(shù)。 如果函數(shù)定義在調(diào)用之后,那么必須在調(diào)用之前如果函數(shù)定義在調(diào)用之后,那么必須在調(diào)用之前(一般在程序頭部)對函數(shù)進行聲明。(一般在程序頭部)對函數(shù)進行聲明。 (2 2)如果程序使用了庫函數(shù),則要在程序的開頭用如果程序使用了庫函數(shù),則要在程序的開頭用includeinclude預處理命令將調(diào)用函數(shù)所需要的信息包含在本預處理命令將調(diào)用函數(shù)所需要的信息包含在本文件中。文件中。如果不是在本文件中定義的函數(shù),那么在程序如果不是在本文件中定義的函數(shù),那么在程序開始要用開始要用externextern修飾符進行函數(shù)原

27、型說明。修飾符進行函數(shù)原型說明。函數(shù)調(diào)用 l/程序:程序:ex4_3.cl/功能:可控信號燈程序功能:可控信號燈程序l#include l/函數(shù)名:函數(shù)名:delay0_5sl/函數(shù)功能:用函數(shù)功能:用T0的方式的方式1編制編制0.5秒延時程序,假定系統(tǒng)采用秒延時程序,假定系統(tǒng)采用12MHz晶晶振,定時器振,定時器1、工作方式、工作方式1定時定時50ms,再循環(huán),再循環(huán)10次即可定時到次即可定時到0.5秒秒l/形式參數(shù):無形式參數(shù):無 l/返回值:無返回值:無lvoid delay0_5s()l l unsigned char i;l for(i=0;i0 x0a;i+)/ 設(shè)置設(shè)置10次循環(huán)

28、次數(shù)次循環(huán)次數(shù)l l TH0=0 x3c;/ 設(shè)置定時器初值設(shè)置定時器初值l TL0=0 xb0;l TR0=1;/ 啟動啟動T0l while(!TF0); / 查詢計數(shù)是否溢出,即定時查詢計數(shù)是否溢出,即定時50ms時間到,時間到,TF0=0l TF0=0; / 50ms定時時間到,將定時器溢出標志位定時時間到,將定時器溢出標志位TF0清零清零l ll/函數(shù)名:函數(shù)名:delay_tl/函數(shù)功能:實現(xiàn)函數(shù)功能:實現(xiàn)0.5秒秒128秒延時秒延時l/形式參數(shù):形式參數(shù):unsigned char t;延時時間為延時時間為0.5秒秒tlvoid delay_t(unsigned char t)l

29、l unsigned char i;l for(i=0;it;i+)delay0_5s();ll/函數(shù)名:函數(shù)名:int_0l/函數(shù)功能:外部中斷函數(shù)功能:外部中斷0中斷函數(shù),當中斷函數(shù),當CPU響應(yīng)外部中斷響應(yīng)外部中斷0的中斷的中斷請求時,自動執(zhí)行該請求時,自動執(zhí)行該l/ 函數(shù),實現(xiàn)八個信號燈閃爍函數(shù),實現(xiàn)八個信號燈閃爍l/形式參數(shù):無形式參數(shù):無lvoid int_0() interrupt 0 /外部中斷外部中斷0的中斷號為的中斷號為0ll P1=0 x00;/熄滅八個信號燈熄滅八個信號燈l delay0_5s();/調(diào)用調(diào)用0.5秒延時函數(shù)秒延時函數(shù)l P1=0 xff;/點亮八個信號

30、燈點亮八個信號燈l delay0_5s();/調(diào)用調(diào)用0.5秒延時函數(shù)秒延時函數(shù)llvoid main()/主函數(shù)主函數(shù)ll unsigned char i,w; l EA=1;/ 打開中斷總允許位打開中斷總允許位l EX0=1;/ 打開外部中斷打開外部中斷0允許位允許位l IT0=1;/ 設(shè)置外部中斷為邊沿(下降沿)觸發(fā)方式設(shè)置外部中斷為邊沿(下降沿)觸發(fā)方式l TMOD=0 x01; / 設(shè)置設(shè)置T0為工作方式為工作方式1l while(1) l w=0 x01; / 顯示碼初值為顯示碼初值為01Hl for(i=0;i8;i+)l l P1=w;/ w取反后送取反后送P1口,點亮相應(yīng)口,

31、點亮相應(yīng)LED燈燈l w=1;/ 點亮燈的位置移動點亮燈的位置移動l delay_t(2); / 調(diào)用延時函數(shù)調(diào)用延時函數(shù)delay_t(),實際參數(shù)為,實際參數(shù)為2,延時,延時1秒秒l l l 1 1、理解、理解89C5189C51單片機片內(nèi)中斷系統(tǒng)的單片機片內(nèi)中斷系統(tǒng)的工作原理及特工作原理及特性。性。 2 2、重點掌握重點掌握與中斷系統(tǒng)有關(guān)的與中斷系統(tǒng)有關(guān)的特殊功能寄存器,特殊功能寄存器,以及如何來對中斷系統(tǒng)進行以及如何來對中斷系統(tǒng)進行初始化編程,中斷響應(yīng)初始化編程,中斷響應(yīng)條件,如何撤銷中斷請求,條件,如何撤銷中斷請求,以及如何進行以及如何進行中斷服務(wù)中斷服務(wù)子程序設(shè)計子程序設(shè)計。 中斷

32、是指通過硬件來改變中斷是指通過硬件來改變CPUCPU的運行方向。計算機在執(zhí)行的運行方向。計算機在執(zhí)行程序的過程中,外部設(shè)備向程序的過程中,外部設(shè)備向CPUCPU發(fā)出中斷請求信號,要求發(fā)出中斷請求信號,要求CPUCPU暫時中斷當前程序的執(zhí)行而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,暫時中斷當前程序的執(zhí)行而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,待處理程序執(zhí)行完畢后,再繼續(xù)執(zhí)行原來被中斷的程序。待處理程序執(zhí)行完畢后,再繼續(xù)執(zhí)行原來被中斷的程序。這種程序在執(zhí)行過程中由于外界的原因而被中間打斷的這種程序在執(zhí)行過程中由于外界的原因而被中間打斷的情況稱為情況稱為“中斷中斷”。 4.3 什么是中斷 小提示小提示 中斷函數(shù)的調(diào)用過程中斷函數(shù)

33、的調(diào)用過程類似于類似于一般函數(shù)調(diào)用一般函數(shù)調(diào)用,區(qū)別在于:區(qū)別在于: 何時調(diào)用一般函數(shù)在程序中是何時調(diào)用一般函數(shù)在程序中是事先安排事先安排好的好的;而何時調(diào)用中斷函數(shù);而何時調(diào)用中斷函數(shù)事先卻無法確定事先卻無法確定,因為中斷的發(fā)生時由外部因素決定的,程序中因為中斷的發(fā)生時由外部因素決定的,程序中無法事先安排調(diào)用語句。無法事先安排調(diào)用語句。 因此,調(diào)用中斷函數(shù)的過程是由因此,調(diào)用中斷函數(shù)的過程是由硬件自硬件自動完成的動完成的。(1 1)中斷服務(wù)程序:中斷服務(wù)程序:CPUCPU響應(yīng)中斷后,轉(zhuǎn)去執(zhí)行相應(yīng)的響應(yīng)中斷后,轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,該處理程序通常稱之為中斷服務(wù)程序。處理程序,該處理程序通常稱

34、之為中斷服務(wù)程序。(2 2)主程序:主程序:原來正常運行的程序稱為主程序。原來正常運行的程序稱為主程序。(3 3)斷點:斷點:主程序被斷開的位置(或地址)稱為斷點。主程序被斷開的位置(或地址)稱為斷點。(4 4)中斷源:中斷源:引起中斷的原因,或能發(fā)出中斷申請的來引起中斷的原因,或能發(fā)出中斷申請的來源,稱為中斷源。源,稱為中斷源。(5 5)中斷請求:中斷請求:中斷源要求服務(wù)的請求稱為中斷請求中斷源要求服務(wù)的請求稱為中斷請求(或中斷申請)。(或中斷申請)。 中斷基本概念 1.同步工作2.異常處理3.實時處理中斷特點 中斷優(yōu)先級中斷優(yōu)先級(5個個中斷請求,中斷請求,2個個中斷優(yōu)先級)中斷優(yōu)先級)

35、當有當有多個中斷源多個中斷源同時同時 向向CPU申請中斷時,申請中斷時,CPU優(yōu)先響應(yīng)優(yōu)先響應(yīng)最需緊急處理最需緊急處理的中斷請求,處理完畢的中斷請求,處理完畢再響應(yīng)優(yōu)先級別較低的再響應(yīng)優(yōu)先級別較低的 ,這種預先安排的響應(yīng)次序。,這種預先安排的響應(yīng)次序。 二級中斷嵌套二級中斷嵌套CPU在執(zhí)行主程序在執(zhí)行主程序低級低級中中斷請求斷請求響應(yīng)低級中斷請求響應(yīng)低級中斷請求CPU執(zhí)行執(zhí)行低級低級中斷服務(wù)程序中斷服務(wù)程序高級高級中中斷請求斷請求響應(yīng)高級中斷請求響應(yīng)高級中斷請求CPU執(zhí)行執(zhí)行高級高級中斷服務(wù)程序中斷服務(wù)程序返回低級中斷程序返回低級中斷程序返回主程序返回主程序符號符號 名名 稱稱 中中 斷斷 引

36、引 起起 原原 因因 中斷服務(wù)中斷服務(wù)程序入口程序入口地址地址INT0INT0 外部中外部中斷斷0 0 P3.2 P3.2引腳的引腳的低電平或下降低電平或下降沿信號沿信號 0003H0003HT0T0定時器定時器0 0中斷中斷定時計數(shù)器定時計數(shù)器0 0計數(shù)回零溢出計數(shù)回零溢出000BH000BHINT1INT1外部中外部中斷斷1 1P3.3P3.3引腳的引腳的低電平或下降沿低電平或下降沿信號信號0013H0013HT1T1定時器定時器1 1中斷中斷 定時計數(shù)器定時計數(shù)器1 1計數(shù)回零溢出計數(shù)回零溢出 001BH001BHTI/RITI/RI 串行口串行口中斷中斷 串行通信完成一幀數(shù)據(jù)發(fā)送串行通

37、信完成一幀數(shù)據(jù)發(fā)送或接收引起中斷或接收引起中斷 0023H0023H 圖圖5-5-2 2INT0INT0INT0INT0INT1INT1T0T0T1T1串行口串行口中斷中斷中斷標志 中斷標志位中斷標志位位名稱位名稱說說 明明TF1T1溢出中斷標志溢出中斷標志TCON.7T1被啟動計數(shù)后,從初值開始加被啟動計數(shù)后,從初值開始加1計數(shù),計滿溢出后由硬計數(shù),計滿溢出后由硬件置位件置位TF1,同時向,同時向CPU發(fā)出中斷請求,此標志一直保持發(fā)出中斷請求,此標志一直保持到到CPU響應(yīng)中斷后才由硬件自動清響應(yīng)中斷后才由硬件自動清0。也可由軟件查詢該。也可由軟件查詢該標志,并由軟件清標志,并由軟件清0。前述

38、的定時器編程都是采用查詢方。前述的定時器編程都是采用查詢方式實現(xiàn)。式實現(xiàn)。TF0T0溢出中斷標志溢出中斷標志TCON.5T0被啟動計數(shù)后,從初值開始加被啟動計數(shù)后,從初值開始加1計數(shù),計滿溢出后由硬計數(shù),計滿溢出后由硬件置位件置位TF0,同時向,同時向CPU發(fā)出中斷請求,此標志一直保持發(fā)出中斷請求,此標志一直保持到到CPU響應(yīng)中斷后才由硬件自動清響應(yīng)中斷后才由硬件自動清0。也可由軟件查詢該。也可由軟件查詢該標志,并由軟件清標志,并由軟件清0。IE1中斷標志中斷標志TCON.3IE1 = 1,外部中斷,外部中斷1向向CPU申請中斷。申請中斷。IT1中斷觸發(fā)方式控中斷觸發(fā)方式控制位制位TCON.2

39、當當IT1 = 0,外部中斷,外部中斷1控制為電平觸發(fā)方式;控制為電平觸發(fā)方式;當當IT1 = 1,外部中斷,外部中斷1控制為邊沿(下降沿)觸發(fā)方式??刂茷檫呇兀ㄏ陆笛兀┯|發(fā)方式。IE0中斷標志中斷標志TCON.1IE0= 1,外部中斷,外部中斷0向向CPU申請中斷。申請中斷。IT0中斷觸發(fā)方式控中斷觸發(fā)方式控制位制位TCON.0當當IT0= 0,外部中斷,外部中斷0控制為電平觸發(fā)方式;控制為電平觸發(fā)方式;當當IT0 = 1,外部中斷,外部中斷0控制為邊沿(下降沿)觸發(fā)方式??刂茷檫呇兀ㄏ陆笛兀┯|發(fā)方式。TI串行發(fā)送中斷標串行發(fā)送中斷標志志SCON.1CPU將數(shù)據(jù)寫入發(fā)送緩沖器將數(shù)據(jù)寫入發(fā)送緩

40、沖器SBUF時,啟動發(fā)送,每發(fā)送時,啟動發(fā)送,每發(fā)送完一個串行幀,硬件都使完一個串行幀,硬件都使TI置位;但置位;但CPU響應(yīng)中斷時并不響應(yīng)中斷時并不自動清除自動清除TI,必須由軟件清除。,必須由軟件清除。RI串行接收中斷標串行接收中斷標志志SCON.0當串行口允許接收時,每接收完一個串行幀,硬件都使當串行口允許接收時,每接收完一個串行幀,硬件都使RI置位;同樣,置位;同樣,CPU在響應(yīng)中斷時不會自動清除在響應(yīng)中斷時不會自動清除RI,必須由,必須由軟件清除。軟件清除。五個中斷請求源五個中斷請求源(1 1)INT0INT0外部中斷請求外部中斷請求0 0,由引腳,由引腳P3.2P3.2輸入,中斷請

41、求標志輸入,中斷請求標志為為IE0IE0。(2 2)INT1INT1外部中斷請求外部中斷請求1 1,由引腳,由引腳P3.3P3.3輸入,中斷請求標志輸入,中斷請求標志為為IE1IE1。(3 3)定時器)定時器/ /計數(shù)器計數(shù)器T0T0溢出溢出中斷請求,中斷請求標志為中斷請求,中斷請求標志為TF0TF0。(4 4)定時器)定時器/ /計數(shù)器計數(shù)器T1T1溢出溢出中斷請求,中斷請求標志為中斷請求,中斷請求標志為TF1TF1。(5 5)串行口中斷請求串行口中斷請求,中斷請求標志為,中斷請求標志為TITI或或RIRI。特殊功能寄存器特殊功能寄存器TCONTCON和和SCONSCON的相應(yīng)位鎖存各中斷請

42、求標志。的相應(yīng)位鎖存各中斷請求標志。CPU將跳去執(zhí)行中斷服務(wù)程序?qū)⑻?zhí)行中斷服務(wù)程序 當中斷源向當中斷源向CPU申請中斷時,相應(yīng)中斷標志申請中斷時,相應(yīng)中斷標志位由硬件自動置位由硬件自動置1,當響應(yīng)中斷請求后,該,當響應(yīng)中斷請求后,該如何如何撤除這些中斷標志位。撤除這些中斷標志位。1. 對于對于T0,T1溢出中斷溢出中斷和和邊沿觸發(fā)的外邊沿觸發(fā)的外部中斷部中斷,CPU在響應(yīng)中斷后即由在響應(yīng)中斷后即由硬件自硬件自動清除其中斷標志位動清除其中斷標志位TF0,TF1或或IE0,IE1,無須采取其他措施。無須采取其他措施。2、對于、對于串行口中斷串行口中斷,CPU在響應(yīng)中斷后,在響應(yīng)中斷后,硬件不能

43、自動清除中斷請求標志位硬件不能自動清除中斷請求標志位TI或或RI,必須,必須在中斷服務(wù)程序中用軟件將其在中斷服務(wù)程序中用軟件將其清除。清除。 3、對于、對于電平觸發(fā)電平觸發(fā)的的外部中斷外部中斷,硬件不會,硬件不會自動清除標志位,同時,也不能用軟件自動清除標志位,同時,也不能用軟件將其清除,所以,當將其清除,所以,當CPU響應(yīng)中斷后,響應(yīng)中斷后,應(yīng)該立即撤除應(yīng)該立即撤除INT0和和INT1外部引腳上的外部引腳上的信號。信號。P0=P0&0 xfe;P0=P0|0 x01;中斷允許寄存器中斷允許寄存器IEIE CPUCPU對中斷源的開放或屏蔽,由片內(nèi)的對中斷源的開放或屏蔽,由片內(nèi)的中斷允許

44、寄存器中斷允許寄存器IEIE控制??刂?。字節(jié)地址字節(jié)地址A8HA8H,可位可位尋址。格式如尋址。格式如圖圖。中斷的開放和禁止 中斷允許位中斷允許位位名稱位名稱說明說明EA總中斷允許控制位總中斷允許控制位IE.7EA = 1,開放所有中斷,開放所有中斷,各中斷源的允許和禁,各中斷源的允許和禁止可通過相應(yīng)的中斷允許位單獨加以控制;止可通過相應(yīng)的中斷允許位單獨加以控制;EA = 0,禁止所有中斷。,禁止所有中斷。ES串行口串行口中斷允許位中斷允許位IE.4ES = 1,允許串行口中斷,允許串行口中斷;ES = 0禁止串行口禁止串行口中斷。中斷。ET1T1中斷允許位中斷允許位IE.3ET1 = 1,允

45、許,允許T1中斷;中斷;ET1 = 0,禁止,禁止T1中中斷。斷。EX1(INT1)中斷允許位中斷允許位IE.2EX1 = 1,允許外部中斷,允許外部中斷1中斷中斷;EX1 = 0,禁,禁止外部中斷止外部中斷1中斷。中斷。ET0T0中斷允許位中斷允許位IE.1ET0 = 1,允許,允許T0中斷;中斷;ET0 = 0,禁止,禁止T0中中斷。斷。EX0(INT0)中斷允許位中斷允許位IE.0EX0 = 1,允許外部中斷,允許外部中斷0中斷中斷;EX0 = 0,禁,禁止外部中斷止外部中斷0中斷。中斷。 8051單片機系統(tǒng)復位后,單片機系統(tǒng)復位后,IE寄存器中各中斷寄存器中各中斷允許位均被清零,即禁止

46、所有中斷允許位均被清零,即禁止所有中斷 例如:例如:EA=1; /開放中斷總允許位開放中斷總允許位 EX0=1; /開放外部中斷開放外部中斷0允許位允許位 上面的例題也可以用一條語句來實現(xiàn):上面的例題也可以用一條語句來實現(xiàn): IE=0 x81;/寄存器寄存器IE=1000 0001B同時同時開放中斷總允許位和外部中斷開放中斷總允許位和外部中斷0允許位。允許位。 若若CPUCPU正在執(zhí)行高優(yōu)先級的中斷,則不能被任何中斷源所中斷正在執(zhí)行高優(yōu)先級的中斷,則不能被任何中斷源所中斷。中斷優(yōu)先級寄存器中斷優(yōu)先級寄存器IPIP,其字節(jié)地址為,其字節(jié)地址為B8HB8H,格式如格式如圖圖。IPIP各個位的含義:各個位的含義:(1 1)PSPS串行口中斷優(yōu)先級控制位串行口中斷優(yōu)先級控制位1 1:高優(yōu)先級中斷;:高優(yōu)先級中斷;0 0:低優(yōu)先級中斷。:低優(yōu)先級中斷。4. 中斷的優(yōu)先級別中斷的優(yōu)先級別(2 2)PT1PT1定時器定時器T1T1中斷優(yōu)先級控制位中斷優(yōu)先級控制位1 1:高優(yōu)先級中斷;:高優(yōu)先級中斷;0 0:低優(yōu)先級中斷。:低優(yōu)先級中斷。(3 3)PX1PX1外部中斷外部中斷1 1中斷優(yōu)先級控制位中斷優(yōu)先級控制位1 1:高優(yōu)先級中斷;:高優(yōu)先級中斷;0 0:低優(yōu)先級中斷。:低優(yōu)先級中斷。(4 4)PT0PT0定時器定時器T0T0中斷優(yōu)先級控制位中斷優(yōu)先

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論