




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第六章中斷與定時器
—單片機內(nèi)部資源及應(yīng)用
本章教學(xué)計劃:
理論+實踐教學(xué)16學(xué)時本章教學(xué)重點:掌握中斷及中斷源的概念掌握中斷相關(guān)特殊功能寄存器掌握定時器/計數(shù)器的相關(guān)特殊功能寄存器掌握定時器/計數(shù)器的工作方式掌握中斷與定時器相關(guān)應(yīng)用6.1中斷6.2單片機的定時器/計數(shù)器6.3基于中斷或定時器的控制實例中斷:當(dāng)計算機執(zhí)行正常程序時,系統(tǒng)中出現(xiàn)某些急需處理的異常情況和特殊請求。中斷的執(zhí)行:當(dāng)CPU正在執(zhí)行某一程序時,若有中斷響應(yīng),則CPU轉(zhuǎn)而執(zhí)行中斷服務(wù)程序,當(dāng)中斷服務(wù)程序執(zhí)行完畢后,CPU自動返回原來的程序繼續(xù)執(zhí)行。6.1.1中斷的概念中斷服務(wù)程序的語句寫法與函數(shù)的寫法完全相同,所以,中斷服務(wù)程序也是函數(shù),只在函數(shù)頭部有不同。6.1.1中斷的概念中斷服務(wù)程序的執(zhí)行與函數(shù)的執(zhí)行不同:函數(shù)的執(zhí)行是有固定位置的,是通過函數(shù)的調(diào)用來完成的;而中斷服務(wù)程序的執(zhí)行是不固定位置的,只要有中斷響應(yīng),在一定條件下都會去響應(yīng)中斷,即執(zhí)行中斷服務(wù)程序。6.1.1中斷的概念中斷源:任何引起計算機中斷的事件,一般一臺機器允許有許多個中斷源。8051系列單片機至少有5個可能的中斷(8052有6個,其它系列成員最多可達(dá)15個)。6.1.2中斷源以5個中斷源為例:8051單片機的五個中斷源是:外部中斷請求0,由INT0(P3.2)輸入;外部中斷請求1,由INT1(P3.3)輸入;片內(nèi)定時器/計數(shù)器0溢出中斷請求;片內(nèi)定時器/計數(shù)器1溢出中斷請求;片內(nèi)串行口發(fā)送/接收中斷請求。
6.1.2中斷源1、定時/計數(shù)器控制寄存器TCONTF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0IT0、IT1:外部中斷0、1觸發(fā)方式選擇位,由軟件設(shè)置:1→下降沿觸發(fā)方式,INT0/INT1管腳上高到低的負(fù)跳變可引起中斷;
0→電平觸發(fā)方式,INT0/INT1管腳上低電平可引起中斷。6.1.3中斷控制1、定時/計數(shù)器控制寄存器TCON
IE0、IE1:外部中斷0、1請求標(biāo)志位;當(dāng)外部中斷0、l依據(jù)觸發(fā)方式滿足條件,產(chǎn)生中斷請求時由硬件置位(IE0/IE1=1);當(dāng)CPU響應(yīng)中斷時由硬件清除(IE0/IE1=
0)。TR0、TR1:啟動定時/計數(shù)器0、1。
TF0、TF1:定時器/計數(shù)器0、1(T/C0、T/C1)溢出中斷請求標(biāo)志;當(dāng)T/C0、1計數(shù)溢出時由硬件置位(TF0/TF1=l);當(dāng)CPU響應(yīng)中斷由硬件清除(TF0/TF1=0)。6.1.3中斷控制2、串行口控制寄存器SCON
TIRID7D6D5D4D3D2D1D0RI:串行口接收中斷請求標(biāo)志位
當(dāng)串行口接收完一幀數(shù)據(jù)后請求中斷,由硬件置位(RI=1)RI必須由軟件清“0”。TI:串行口發(fā)送中斷請求標(biāo)志位
當(dāng)串行口發(fā)送完一幀數(shù)據(jù)后請求中斷,由硬件置位(TI=1)TI必須由軟件清“0”。
6.1.3中斷控制3、中斷允許寄存器IEEAET2ESET1EX1ET0EX0D7D6D5D4D3D2D1D0
EX0、EX1:外部中斷0、1的中斷允許位;
l→外部中斷0、1開中斷;0→外部中斷0、1關(guān)中斷。
ET0、ET1:定時器/計數(shù)器0、1(T/C0、T/C1)溢出中斷允許位;
1→T/C0、T/Cl開中斷;0→T/C0、T/Cl關(guān)中斷。6.1.3中斷控制3、中斷允許寄存器IEES:串行口中斷允許位;1→串行口開中斷;0→串行口關(guān)中斷。ET2:定時器/計數(shù)器2(T/C2)溢出中斷允許位;1→T/C2開中斷;0→T/C2關(guān)中斷。EA:CPU開/關(guān)中斷控制位。1→CPU開中斷。0→CPU關(guān)中斷。8051復(fù)位時,IE被清“0”,此時CPU關(guān)中斷,各中斷源的中斷也都屏蔽6.1.3中斷控制4、中斷優(yōu)先級寄存器IP
PSPT1PX1PT0PX0D7D6D5D4D3D2D1D0PX0、PX1:外部中斷0、1中斷優(yōu)先級控制位;
1→高優(yōu)先級;0→低優(yōu)先級。PT0、PT1:定時器/計數(shù)器0、1中斷優(yōu)先級控制位;1→高優(yōu)先級;0→低優(yōu)先級。PS:串行口中斷優(yōu)先級控制位;1→高優(yōu)先級;0→低優(yōu)先級。6.1.3中斷控制4、中斷優(yōu)先級寄存器IP8051復(fù)位時,IP被清“0”,5個中斷源都在同一優(yōu)先級,其內(nèi)部優(yōu)先級的順序從高到低為:外部中斷0(IE0)
定時器/計數(shù)器0(TF0)
外部中斷1(IE1)
定時器/計數(shù)器1(TF1)
串行口中斷(RI+TI)6.1.3中斷控制CPU在中斷響應(yīng)后完成如下的操作:1.硬件清除相應(yīng)的中斷請求標(biāo)志;2.執(zhí)行一條硬件子程序,保護斷點,并轉(zhuǎn)向中斷服務(wù)程序入口;3.結(jié)束中斷時恢復(fù)斷點,返回主程序。8051的CPU在響應(yīng)中斷請求時,由硬件自動形成轉(zhuǎn)向與該中斷源對應(yīng)的服務(wù)程序入口地址,這種方法為硬件向量中斷法。6.1.4中斷響應(yīng)
編號中斷源入口地址
0外部中斷00003H1定時器/計數(shù)器0000BH2外部中斷10013H3定時器/計數(shù)器1001BH4串行口中斷0023H6.1.4中斷響應(yīng)8051的CPU在響應(yīng)中斷請求時,由硬件自動形成轉(zhuǎn)向與該中斷源對應(yīng)的服務(wù)程序入口地址,這種方法為硬件向量中斷法。中斷服務(wù)程序的入口地址:各中斷服務(wù)程序入口地址僅間隔8個字節(jié),編譯器在這些地址放入無條件轉(zhuǎn)移指令跳轉(zhuǎn)到服務(wù)程序的實際地址。
函數(shù)的返回值函數(shù)名([參數(shù)])interruptn[usingm]{
函數(shù)體;}對中斷程序而言,函數(shù)的返回值和參數(shù)一般為void。interruptn中n的取值為0~31的常數(shù),不允許用表達(dá)式,表示中斷向量的編號。usingm中m的取值為0~3的常數(shù),不允許用表達(dá)式,表示內(nèi)部RAM中的工作寄存器。6.1.5中斷的應(yīng)用1、中斷服務(wù)程序的語法規(guī)則應(yīng)用1:單中斷
6.1.5中斷的應(yīng)用應(yīng)用1:6.1.5中斷的應(yīng)用#include<reg52.h>sbitLed=P0^0;voidexchange_led(void)interrupt0{Led=~Led;}voidmain(void){EA=1;IT0=1;EX0=1;Led=1;while(1);}思考:6.1.5中斷的應(yīng)用若中斷從INT1引入,程序應(yīng)如何修改?應(yīng)用2;多中斷#include<reg51.h>unsignedcharstatus;bitflag;voidservice_int()interrupt2using2{flag=1;
status=P1;}
voidmain(void){IP=0x04;
IE=0x84;
for(;;){if(flag){
switch(status){case0:break;case1:break;case2:break;case3:break;default:;}flag=0;}}}6.1.5中斷的應(yīng)用1什么是中斷、中斷源和中斷優(yōu)先級2外部中斷源INT0,INT1分別從單片機的哪個引腳輸入?思考題邏輯運算&&:邏輯與,F(xiàn)=A&&B都為真則是真||:邏輯或,F(xiàn)=A||B任意一個為真則為真!:邏輯非,F(xiàn)=!A
A:0b11001100B:0b11110000&:按位與F=A&B
0b11000000|:按位或F=A|B0b11111100~:按位取反F=~A
0b00110011^:按位異或F=A^B
0b00111100相異為1振蕩周期:單片機時序中的最小單位,具體計算的方法就是時鐘源分之一。(P17)機器周期:單片機完成一個操作的最短時間。(機器周期=12倍振蕩周期)定時器:打開定時器后,定時器"存儲寄存器"的值經(jīng)過一個機器周期自動加1,也就是說,機器周期是定時器的計數(shù)周期。6.2定時器/計數(shù)器8051系列單片機至少有兩個16位內(nèi)部定時器/計數(shù)器,8052有三個定時器/計數(shù)器。其中有兩個是基本定時器/計數(shù)器0和定時器/計數(shù)器1。它們既可以編程為定時器使用,也可以編程為計數(shù)器使用。如何判斷它是定時器還是計數(shù)器?若是計數(shù)內(nèi)部晶振驅(qū)動時鐘,它是定時器若是計數(shù)8051的輸入管腳的脈沖信號,它是計數(shù)器6.2.1與T/C有關(guān)的特殊功能寄存器1、計數(shù)寄存器(定時器存儲寄存器)TH和TL
T/C是16位的,計數(shù)寄存器由TH高8位和TL低8位構(gòu)成。在特殊功能寄存器(SFR)中:對應(yīng)T/C0為TH0和TL0;
對應(yīng)T/C1為TH1和TL1。定時器/計數(shù)器的初始值通過TH1/TH0和TL1/TL0設(shè)置。6.2.1與T/C有關(guān)的特殊功能寄存器TCON(8位)—定時器控制寄存器的位分配(地址0x88、可位尋址)位76543210符號TF1TR1TF0TR0IE1IT1IE0IT0復(fù)位值00000000TCON——定時器控制寄存器的位描述位符號描述7TF1定時器1溢出標(biāo)志。一旦定時器1發(fā)生溢出時硬件置1。清零有兩種方式:軟件清零,或者進入定時器中斷時硬件清零。6TR1定時器1運行控制位。軟件置位/清零來進行啟動/停止定時器。5TF0定時器0溢出標(biāo)志。一旦定時器0發(fā)生溢出時硬件置1。清零有兩種方式:軟件清零,或者進入定時器中斷時硬件清零。4TR0定時器0運行控制位。軟件置位/清零來進行啟動/停止定時器。3IE1外部中斷部分,與定時器無關(guān),暫且不看。2IT11IE00IT02、定時器/計數(shù)器控制寄存器TCON3、T/C的方式控制寄存器TMODC/T:計數(shù)器或定時器選擇位;1→為計數(shù)器;0→為定時器。GATE:門控信號;1→T/C的啟動受到雙重控制,即要求TR0/TR1和INT0/INT1同時為高;0→T/C的啟動僅受TR0或TR1控制。GATE
C/T
M1
M0
GATE
C/T
M1M0D7D6D5D4D3D2D1D0T/C1T/C06.2.1與T/C有關(guān)的特殊功能寄存器M1M0方式功能00013位定時器/計數(shù)器,TL是低5位,TH是高8位01116位定時器/計數(shù)器102常數(shù)自動重裝的8位定時器/計數(shù)器113僅用于T/C0,是兩個8位定時器/計數(shù)器利用定時器編寫時鐘程序。四種工作方式(P106)3、T/C的方式控制寄存器TMOD1)方式0:
當(dāng)TMOD中M1M0=00時,T/C工作在方式0;方式0為13位的T/C,由TH的高8位、TL的低5位的計數(shù)值,滿計數(shù)值213,但啟動前可以預(yù)置計數(shù)初值。
若T/C開中斷(ET=1)且CPU開中斷(EA=1)時,則定時器/計數(shù)器溢出時,CPU轉(zhuǎn)向中斷服務(wù)程序時,且TF自動清0。(設(shè)置IE:中斷允許控制寄存器)3、T/C的方式控制寄存器TMOD2)方式1(用得較多)
當(dāng)TMOD中M1M0=01時,T/C工作在方式1;方式1與方式0基本相同。唯一區(qū)別在于計數(shù)寄存器的位數(shù)是16位的,由TH和TL寄存器各提供8位,滿計數(shù)值為216。3、T/C的方式控制寄存器TMOD3)方式2:當(dāng)TMOD中M1M0=10時,T/C工作在方式2;方式2是8位的可自動重載的T/C,滿計數(shù)值為28;在方式0和方式1中,當(dāng)計數(shù)滿后,若要進行下一次定時/計數(shù),須用軟件向TH和TL重裝預(yù)置計數(shù)初值;方式2中TH和TL被當(dāng)作兩個8位計數(shù)器,計數(shù)過程中,TH寄存8位初值并保持不變,由TL進行8位計數(shù)。計數(shù)溢出時,除產(chǎn)生溢出中斷請求外,還自動將TH中初值重裝到TL,即重裝載。3、T/C的方式控制寄存器TMOD4)方式3:方式3只適合于T/C0。當(dāng)T/C0工作在方式3時,TH0和TL0成為兩個獨立的8位計數(shù)器。3、T/C的方式控制寄存器TMOD若TMOD=A6H,T/C0和T/C1分別在什么方式下工作?在使用8051的定時器/計數(shù)器前,應(yīng)對它進行編程初始化,主要是對TCON和TMOD編程;計算和裝載T/C的計數(shù)初值。一般完成以下幾個步驟:
(1)確定T/C的工作方式——編程TMOD寄存器;(2)計算T/C中的計數(shù)初值,并裝載到TH和TL;(3)T/C在中斷方式工作時,須開CPU中斷和源中斷——編程IE寄存器;(4)啟動定時器/計數(shù)器——編程TCON中TR1或TR0位。6.2.2定時器/計數(shù)器的初始化(P110)在定時器方式下,T/C是對機器周期脈沖計數(shù)的,若fOSC=12MHz,一個機器周期為12/fOSC=1μs,則:
方式013位定時器最大定時間隔=213×
1μs=8.192ms;
方式116位定時器最大定時間隔=216×
1μs=65.536ms;
方式28位定時器最大定時間隔=28×1μs=256μs。
6.2.2定時器/計數(shù)器的初始化(2)、定時器/計數(shù)器的初值計算若使T/C工作在定時器方式1,要求定時1ms,求計數(shù)初值。設(shè)計數(shù)初值為x,則有:
(216-x)×1μs=1000μs或x=216一1000因此:TH、TL置216-1000;即:
TH=(216一1000)/
256;TL=(216一1000)%256。對一般fOSC有下列公式(設(shè)定時時間為timeμs):(216-x)×12/fosc=timeμs6.2.2定時器/計數(shù)器的初始化(2)、定時器/計數(shù)器的初值計算例1、設(shè)單片機的fosc=12MHz,要求在P1.0腳上輸出周期為2ms的方波采用查詢方式。#include<reg51.h>sbitP1_0=P1^0;voidmain(void){TMOD=0x01;
TR0=1;
while(1){TH0=-1000/256;TL0=-1000%256;
while(!TF0);P1_0=!P1_0;
TF0=0;}}采用中斷方式。#include<reg51.h>sbitP1_0=P1^0;voidtimer0(void)interrupt1{P1_0=!P1_0;
TH0=-1000/256;TL0=-1000%256;}voidmain(void){TMOD=0x01;P1_0=0;TH0=-1000/256;TL0=-1000%256;EA=1;ET0=1;TR0=1;while(1);}6.4定時器/計數(shù)器的應(yīng)用例2:設(shè)單片機的fosc=12MHz,要求在P1.0腳上輸出周期為2秒的方波。(采用中斷方式)/*********************************************/#include<reg52.h>
sbitP1_0=P1^0;//定義P1.0端口unsignedcharcount=0;//設(shè)置計數(shù)初值為0voidtimer0(void);//函數(shù)聲明/*********************************************/voidmain(void){TMOD=0x01;//設(shè)置定時器0工作在方式1TH0=(65536-50000)/256;//定時器0初值裝載TL0=(65536-50000)%256;EA=1;//開CPU中斷ET0=1;//開定時器0中斷TR0=1;//啟動定時器0while(1);}/*******************************************************/voidtimer0(void)interrupt1{TH0=(65536-50000)/256;//定時器0初值重載TL0=(65536-50000)%256;if(++count==20)//計數(shù)次數(shù)加1,并判斷是否到達(dá)20次{P1_0=!P1_0;//1s后P1.0反相count=0;//1s后清0}}/******************************************************/問題:18051單片機中,與定時/計數(shù)器(T/C)相關(guān)的特殊功能寄存器(SFR)有哪些?2定時/計數(shù)器(T/C)的初始化步驟包括哪幾個步驟?例3、基于定時器的跑馬燈控制采用定時器中斷延時,晶體振蕩器頻率是11.0592MHz,
每間隔1s,LED從上到下循環(huán)點亮。
#include<reg52.h>//定義特殊功能寄存器庫#include<intrins.h>//定義循環(huán)左移、右移函數(shù)庫#defineucharunsignedchar#defineuintunsignedintvoidTimer0(void);//中斷函數(shù)聲明ucharTimes=0;//全局變量的聲明ucharLedTemp;bitflag=0;voidmain(void){TMOD=0x01;//定時器0工作在方式1TH0=(65536-46080)/256;TL0=(65536-46080)%256;//定時器初值設(shè)置IE=0x82;//打開CPU中斷和定時器0中斷TR0=1;//啟動定時器0LedTemp=0xfe;//初始值方法1:while(1){if(flag){flag=0;//標(biāo)志位清0P0=LedTemp;//送值到端口LedTemp=_crol_(LedTemp,1);//循環(huán)左移}}}voidTimer0(void)interrupt1using0//定時器0中斷體{TH0=(65536-46080)/256;TL0=(65536-46080)%256;//初值重載Times++;//計數(shù)次數(shù)加1if(Times==20){flag=1;//標(biāo)志位置1Times=0;//中斷次數(shù)清0}}#include<reg52.h>//定義特殊功能寄存器庫#include<intrins.h>//定義循環(huán)左移、右移函數(shù)庫#defineucharunsignedchar#defineuintunsignedintvoidTimer0(void);//中斷函數(shù)聲明ucharTimes=0;//全局變量的聲明ucharLedTemp;voidmain(void){TMOD=0x01;//定時器0工作在方式1TH0=(65536-46080)/256;TL0=(65536-46080)%256;//定時器初值設(shè)置IE=0x82;//打開CPU中斷和定時器0中斷TR0=1;//啟動定時器0LedTemp=0xfe;//初始值while(1);}方法2:voidTimer0(void)interrupt1//定時器0中斷體{TH0=(65536-46080)/256;TL0=(65536-46080)%256;
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《第二單元 指揮機器人行動 12 聲波測距避障礙》教學(xué)設(shè)計-2024-2025學(xué)年泰山版信息技術(shù)(2018)第三冊
- 如何提升小班班級凝聚力計劃
- 如何推動財務(wù)制度優(yōu)化計劃
- 會計記賬的技巧與實務(wù)指南計劃
- 推動品德教育與心理輔導(dǎo)融合計劃
- 社區(qū)交通安全的個人倡導(dǎo)計劃
- 慈善基金會年度項目計劃
- 神經(jīng)內(nèi)科護理個案護理模板
- 肥胖患者的護理常規(guī)
- 醫(yī)院道路知識培訓(xùn)課件
- 公開招聘社區(qū)居委專職工作人員考試筆試、面試題集及相關(guān)知識(11套試題含答案)
- 蓄電池在線監(jiān)控方案
- 《豎提》課件
- 中國藥膳理論與實踐-藥膳基本理論和技能
- 南非醉茄產(chǎn)業(yè)發(fā)展規(guī)劃(十四五)
- 復(fù)古簡約中國古典名著導(dǎo)讀三國演義培訓(xùn)PPT模板
- 不銹鋼排煙風(fēng)管施工實施方案
- PMC部門工作流程圖
- IPC-4101剛性多層印制線路板的基材規(guī)范
- Oracle-EBS模塊講解
- 漿砌條石磚項施工方案
評論
0/150
提交評論