版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)的中斷系統(tǒng)一、中斷簡(jiǎn)介當(dāng)CPU正在處理某事件的時(shí)候,外部發(fā)生的某一事件請(qǐng)求CPU迅速去處理,于是CPU暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件。中斷服務(wù)處理完該事件后,再返回到原來被中止的地方繼續(xù)原來的工作,這樣的過程稱為中斷。主程序響應(yīng)中斷請(qǐng)求中斷服務(wù)程序返回主程序繼續(xù)執(zhí)行主程序斷點(diǎn)一、中斷簡(jiǎn)介計(jì)算機(jī)引入中斷技術(shù)以后有下列優(yōu)點(diǎn):(1)有效地解決了快速的CPU和慢速的外設(shè)之間的矛盾,可使計(jì)算機(jī)與外設(shè)并行地工作,大大提高了效率。(2)可以及時(shí)處理控制系統(tǒng)中隨機(jī)出現(xiàn)的參數(shù)與信息,即計(jì)算機(jī)具有實(shí)時(shí)處理能力,從而提高了控制系統(tǒng)的實(shí)時(shí)性能。(3)使系統(tǒng)具備了處理故障的能力,提高了系統(tǒng)自身的可靠性。查詢方式的缺點(diǎn):CPU在完成一次數(shù)據(jù)傳送后要等待很長(zhǎng)時(shí)間才能進(jìn)行下一次的傳送。在等待過程中,CPU不能進(jìn)行其他操作,所以效率比較低。
對(duì)事件的整個(gè)處理過程,稱為中斷處理(或中斷服務(wù))。執(zhí)行主程序主程序繼續(xù)執(zhí)行主程序斷點(diǎn)中斷請(qǐng)求中斷響應(yīng)執(zhí)行中斷處理程序中斷返回中斷響應(yīng)的過程能夠?qū)崿F(xiàn)中斷處理功能的部件稱為中斷系統(tǒng);產(chǎn)生中斷的請(qǐng)求源稱為中斷請(qǐng)求源。中斷源向CPU提出的處理請(qǐng)求,稱為中斷請(qǐng)求(或中斷申請(qǐng))。 進(jìn)入中斷→保護(hù)現(xiàn)場(chǎng)→中斷處理恢復(fù)現(xiàn)場(chǎng)→中斷返回中斷方式優(yōu)點(diǎn):大大地提高了CPU的工作效率。
有8個(gè)中斷請(qǐng)求源,6個(gè)中斷矢量,兩個(gè)中斷優(yōu)先級(jí),可兩級(jí)嵌套。中斷系統(tǒng)結(jié)構(gòu)示意圖如下圖所示。中斷系統(tǒng)的結(jié)構(gòu)外部中斷0定時(shí)器/計(jì)數(shù)器0外部中斷1定時(shí)器/計(jì)數(shù)器1串行口中斷定時(shí)器2中斷定時(shí)器是單片機(jī)內(nèi)部的特殊功能模塊。在控制系統(tǒng)中,常常要求有一些實(shí)時(shí)時(shí)鐘以實(shí)現(xiàn)定時(shí)或者延時(shí)控制,如定時(shí)中斷、定時(shí)檢測(cè)、定時(shí)掃描等等,也往往要求有計(jì)數(shù)器,對(duì)外部事件進(jìn)行計(jì)數(shù)。
要實(shí)現(xiàn)定時(shí)或者延時(shí)功能,一般有三種方法:軟件定時(shí),不可編程硬件定時(shí),可編程硬件定時(shí)。軟件定時(shí)——讓軟件循環(huán)執(zhí)行一段程序,程序本身并無執(zhí)行目的,而是通過執(zhí)行程序延時(shí)固定的時(shí)間,也就是以前的程序中經(jīng)常使用的延時(shí)程序。這種方法降低了cpu的利用率。不可編程硬件定時(shí)——如外部芯片555時(shí)基電路,通過外部阻容,達(dá)到一定的延時(shí)功能,改變阻容大小可以改變延時(shí)長(zhǎng)度。這種定時(shí)器取決于硬件,設(shè)定好以后不能通過軟件更改??删幊潭〞r(shí)器——這種定時(shí)器的定時(shí)值可以通過軟件確定和修改。中斷系統(tǒng)的結(jié)構(gòu)PT2
1、INT0*—
(P3.2)。外部中斷請(qǐng)求0,中斷請(qǐng)求標(biāo)志為IE0??捎蒊T0(TCON.0)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.2引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE0(TCON.1)置1,向CPU申請(qǐng)中斷。PT2
2、INT1*—(P3.3)。外部中斷請(qǐng)求1。中斷請(qǐng)求標(biāo)志為IE1??捎蒊T1(TCON.2)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.3引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)志IE1(TCON.3)置1,向CPU申請(qǐng)中斷。PT2
3、定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求TF0(TCON.5),片內(nèi)定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志。中斷請(qǐng)求標(biāo)志為TF0。當(dāng)定時(shí)/計(jì)數(shù)器T0發(fā)生溢出時(shí),置位TF0,并向CPU申請(qǐng)中斷。PT2
4、定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求TF1(TCON.7),片內(nèi)定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志。中斷請(qǐng)求標(biāo)志為TF1。當(dāng)定時(shí)/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,并向CPU申請(qǐng)中斷。PT2
5、串行口中斷請(qǐng)求。RI(SCON.0)或TI(SCON.1),串行口中斷請(qǐng)求標(biāo)志。中斷請(qǐng)求標(biāo)志為TI或RI。當(dāng)串行口接收完一幀串行數(shù)據(jù)時(shí)置位RI或當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時(shí)置位TI,向CPU申請(qǐng)中斷。軟件復(fù)位PT2
6、定時(shí)器/計(jì)數(shù)器T2溢出中斷請(qǐng)求(1)TF2(T2CON.7);(2)EXF2(T2CON.6).定時(shí)/計(jì)數(shù)器T2溢出中斷請(qǐng)求標(biāo)志為TF2或EXF2。當(dāng)定時(shí)/計(jì)數(shù)器T2發(fā)生溢出時(shí),置位TF2,并向CPU申請(qǐng)中斷。或外部輸入端T2EX發(fā)生負(fù)跳沿時(shí),向CPU請(qǐng)求中斷。(軟件復(fù)位)PT2中斷優(yōu)先級(jí)控制8051有2個(gè)中斷優(yōu)先級(jí),每一個(gè)中斷請(qǐng)求源均可編程為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷,從而實(shí)現(xiàn)2級(jí)中斷嵌套。
在同時(shí)收到幾個(gè)同一優(yōu)先級(jí)的中斷請(qǐng)求時(shí),哪一個(gè)中斷請(qǐng)求能優(yōu)先得到響應(yīng),取決于內(nèi)部查詢次序,這相當(dāng)于在同一個(gè)優(yōu)先級(jí)內(nèi),還同時(shí)存在按次序決定的第二優(yōu)先級(jí)結(jié)構(gòu),其查詢次序見下表。中斷優(yōu)先級(jí)控制定時(shí)器2TF2(手動(dòng)清零)(手動(dòng)清零)1、TCON的中斷標(biāo)志TCON為外部中斷、定時(shí)器/計(jì)數(shù)器0、1的控制寄存器,
字節(jié)地址為88H。各標(biāo)志位的功能:(1)IT0—選擇外部中斷請(qǐng)求0為跳沿觸發(fā)方式還是電平觸發(fā)方式:
IT0=0,為低電平觸發(fā)方式。
IT0=1,為下降沿觸發(fā)方式??捎绍浖谩?”或清“0”。(2)IT1—外部中斷請(qǐng)求1為下降沿觸發(fā)方式還是低電平觸發(fā)方式,意義與IT0類似。(3)IE0—外部中斷請(qǐng)求0的中斷請(qǐng)求標(biāo)志位。
IE0=0,無中斷請(qǐng)求。
IE0=1,外部中斷0有中斷請(qǐng)求。當(dāng)CPU響應(yīng)該中斷,轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清“0”IE0。1、TCON的中斷標(biāo)志
TCON為外部中斷、定時(shí)器/計(jì)數(shù)器0、1的控制寄存器,
字節(jié)地址為88H。(4)IE1—外部中斷請(qǐng)求1的中斷請(qǐng)求標(biāo)志位,意義與IE0類似。(5)TF0—T0溢出中斷請(qǐng)求標(biāo)志位。T0計(jì)數(shù)后,溢出時(shí),TF0由硬件置“1”,向CPU申請(qǐng)中斷,CPU響應(yīng)TF0中斷時(shí),硬件自動(dòng)清“0”TF0,TF0也可由軟件清0。1、TCON的中斷標(biāo)志
TCON為外部中斷、定時(shí)器/計(jì)數(shù)器0、1的控制寄存器,
字節(jié)地址為88H。(6)TF1—T1的溢出中斷請(qǐng)求標(biāo)志位,功能和TF0類似。1、TCON的中斷標(biāo)志
TCON為外部中斷、定時(shí)器/計(jì)數(shù)器0、1的控制寄存器,
字節(jié)地址為88H。(7)TR0—T0運(yùn)行控制位。
TR0=1,允許定時(shí)器/計(jì)數(shù)器T0運(yùn)行。
TR0=0,禁止定時(shí)器/計(jì)數(shù)器T0運(yùn)行。此位相當(dāng)于T0的開關(guān)。(8)TR1—T1的運(yùn)行控制位,功能和TR0類似。2、SCON的中斷標(biāo)志
SCON為串行口控制寄存器,字節(jié)地址為98H。各標(biāo)志位的功能:(1)TI—發(fā)送中斷請(qǐng)求標(biāo)志位。串口每發(fā)送完一幀串行數(shù)據(jù)后,硬件自動(dòng)置“1”TI。必須在中斷服務(wù)程序中用軟件對(duì)TI標(biāo)志清“0”。(2)RI—接收中斷請(qǐng)求標(biāo)志位。串口接收完一個(gè)數(shù)據(jù)幀,硬件自動(dòng)置“1”RI標(biāo)志。必須在中斷服務(wù)程序中用軟件對(duì)RI標(biāo)志清“0”。3、T2CON為定時(shí)器/計(jì)數(shù)器2的控制寄存器,字節(jié)地址為C8H。D7D6D5D4D3D2D1D0T2CONTF2EXF2字節(jié)地址:C8H位地址CFHCEHCDHCCHCBHCAHC9HC8H可位尋址TF2(T2CON.7):定時(shí)/計(jì)數(shù)器2溢出中斷請(qǐng)求標(biāo)志位。當(dāng)定時(shí)/計(jì)數(shù)器2計(jì)數(shù)產(chǎn)生溢出時(shí),TF2置1,向CPU請(qǐng)求中斷,必須由軟件復(fù)位。EXF2(T2CON.6):定時(shí)/計(jì)數(shù)器2外部中斷請(qǐng)求標(biāo)志位。外部輸入端T2EX發(fā)生負(fù)跳沿時(shí),向CPU請(qǐng)求中斷,必須由軟件復(fù)位。中斷允許寄存器IECPU對(duì)中斷源的開放或屏蔽,由片內(nèi)的中斷允許寄存器IE控制。字節(jié)地址為A8H,可位尋址。格式如下:D7D6D5D4D3D2D1D0IEEA—ET2ESET1EX1ET0EX0字節(jié)地址:A8H位地址AFH9EHADHACHABHAAHA9HA8H可位尋址IE對(duì)中斷的開放和關(guān)閉為兩級(jí)控制
(1)總的開關(guān)中斷控制位EA(IE.7位):EA=0,所有中斷請(qǐng)求被屏蔽。
EA=1,CPU開放中斷,但8個(gè)中斷源的中斷請(qǐng)求是否允許,還要由IE中的8個(gè)中斷請(qǐng)求允許控制位決定。(2)ET2:定時(shí)器/計(jì)數(shù)器T2的溢出或捕獲中斷允許位
0:禁止T2溢出中斷;1:允許T2溢出中斷。
(3)ES:串行口中斷允許位
0:禁止串行口中斷;1:允許串行口中斷。(4)ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位
0:禁止T1溢出中斷;1:允許T1溢出中斷。(5)EX1:外部中斷1中斷允許位
0:禁止外部中斷1中斷;1:允許外部中斷1中斷。中斷允許寄存器IECPU對(duì)中斷源的開放或屏蔽,由片內(nèi)的中斷允許寄存器IE控制。字節(jié)地址為A8H,可位尋址。格式如下:D7D6D5D4D3D2D1D0IEEA—ET2ESET1EX1ET0EX0字節(jié)地址:A8H位地址AFH9EHADHACHABHAAHA9HA8H可位尋址(6)ET0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位
0:禁止T0溢出中斷;1:允許T0溢出中斷。(7)EX0:外部中斷0中斷允許位。
0:禁止外部中斷0中斷;1:允許外部中斷0中斷。
單片機(jī)復(fù)位后,IE清0,所有中斷請(qǐng)求被禁止。若使某一個(gè)中斷源被允許中斷,除了IE相應(yīng)的位的被置“1”
,還必須使EA位=1。中斷允許寄存器IECPU對(duì)中斷源的開放或屏蔽,由片內(nèi)的中斷允許寄存器IE控制。字節(jié)地址為A8H,可位尋址。格式如下:D7D6D5D4D3D2D1D0IEEA—ET2ESET1EX1ET0EX0字節(jié)地址:A8H位地址AFH9EHADHACHABHAAHA9HA8H可位尋址外部中斷初始化程序及中斷服務(wù)程序main(){P1=0x55;//P1口初始值
EA=1;//全局中斷開
EX0=1;//外部中斷0開
IT0=0;//電平觸發(fā)
while(1){//在此添加其他程序
}}/*------------------------------------------------
外部中斷程序------------------------------------------------*/voidISR_Key(void)interrupt0using1{P1=~P1;//進(jìn)入中斷程序執(zhí)行程序,
//此時(shí)可以通過EA=0指令暫時(shí)關(guān)掉中斷}main(){P1=0x55;//P1口初始值
EA=1;//全局中斷開
EX0=1;//外部中斷0開
IT0=1;//邊沿觸發(fā)
while(1){//在此添加其他程序
}}/*-------------------------------------------
外部中斷程序--------------------------------------------*/voidISR_Key(void)interrupt0using1{P1=~P1;//s3按下觸發(fā)一次,P1取反一次}中斷服務(wù)程序編寫:void函數(shù)名()interruptnusingmn為中斷源編號(hào):外部中斷0——0;定時(shí)器T0——1;外部中斷1——2;定時(shí)器T1——3;串行口TI,RI——4
定時(shí)器T2——5m為中斷服務(wù)程序指定使用的工作寄存器組;m=0-3.using可以省去voidINT_0()interrupt0//外部中斷0函數(shù)void函數(shù)名()interruptnusingmKeilC中程序是根據(jù)interrupt來判斷該函數(shù)是中斷程序,根據(jù)interrupt后面的序號(hào)來判斷該中斷類型。只要有中斷事件發(fā)生,并且CPU允許響應(yīng),程序自動(dòng)跳出主程序,執(zhí)行中斷服務(wù)程序,執(zhí)行完成中斷服務(wù)程序后程序才回到主程序剛才跳出的地方繼續(xù)向下執(zhí)行未完成的主程序。中斷的執(zhí)行取決于兩方面:1、主程序中是否進(jìn)行正確的初始化;2、中斷服務(wù)程序?qū)懙檬欠裾_;外部中斷初始化流程及中斷服務(wù)程序樣式……voidInit_int0(void){EX0=1//外部中斷0中斷允許位。
IT0=1;//選擇觸發(fā)方式下降沿觸發(fā);EA=1;//開總中斷}voidmain(void){
Init_int0();……while(1){……}}voidISR_Int0(void)interrupt0using1{……}外部中斷初始化流程及中斷服務(wù)程序樣式……voidInit_int1(void){EX1=1//外部中斷0中斷允許位。
IT1=1;//選擇觸發(fā)方式下降沿觸發(fā);EA=1;//開總中斷}voidmain(void){
Init_int1();……while(1){……}}voidISR_Int1(void)interrupt2using1{……}定時(shí)器/計(jì)數(shù)器部分用于T0、T1的TMOD寄存器1、GATE門控位
GATE=0只用運(yùn)行控制位TR1/TR0=1即可啟動(dòng)定時(shí)器
GATE=1在外部中斷請(qǐng)求信號(hào)(INT1/INT0=1)且TR1/TR0=1時(shí)才啟動(dòng)定時(shí)器2、C/T定時(shí)方式或計(jì)數(shù)方式選擇位
C/T=0定時(shí)工作方式
C/T=l計(jì)數(shù)工作方式3、M1、M0工作方式選擇位
M1、M0=00方式0M1、M0=01方式1M1、M0=10方式2M1、M0=11方式3M1M0工作方式00方式0:13位定時(shí)器/計(jì)數(shù)器01方式1:16位定時(shí)器/計(jì)數(shù)器10方式2:具有重裝初值8位定時(shí)器/計(jì)數(shù)器11方式3:定時(shí)器/計(jì)數(shù)器0分為兩個(gè)8位定時(shí)器/計(jì)數(shù)器,定時(shí)器/計(jì)數(shù)器1在此方式無意義定時(shí)器/計(jì)數(shù)器的工作方式一、方式0(M1M0=00)
1、電路邏輯結(jié)構(gòu)方式0是13位計(jì)數(shù)結(jié)構(gòu)的工作方式,其計(jì)數(shù)器由TH0全部8位和TL0的低5位構(gòu)成。TL0的高3位棄之不用。下圖是定時(shí)器/計(jì)數(shù)器0在工作方式0的邏樣結(jié)構(gòu)(定時(shí)器/計(jì)數(shù)器1與此完全相同)。定時(shí)器/計(jì)數(shù)器的工作方式
在方式0下當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)值的范圍是:
1~8192(213)當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間的計(jì)算公式為:(213一計(jì)數(shù)初值)×晶振周期×12或(213-計(jì)數(shù)初值)×機(jī)器周期定時(shí)器/計(jì)數(shù)器的工作方式一、方式0(M1M0=00)
1、電路邏輯結(jié)構(gòu)方式0是13位計(jì)數(shù)結(jié)構(gòu)的工作方式,其計(jì)數(shù)器由TH0全部8位和TL0的低5位構(gòu)成。TL0的高3位棄之不用。下圖是定時(shí)器/計(jì)數(shù)器0在工作方式0的邏樣結(jié)構(gòu)(定時(shí)器/計(jì)數(shù)器1與此完全相同)。二、方式1(M1M0=01)16位計(jì)數(shù)結(jié)構(gòu)的工作方式,計(jì)數(shù)器由TH0全部8位和TL0全部8位構(gòu)成。其邏輯電路和工作情況與方式0完全相同。在方式1下,當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)值的范圍是:
1~65536(216)當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間的計(jì)算公式為:(216一計(jì)數(shù)初值)×晶振周期×12或(216-計(jì)數(shù)初值)×機(jī)器周期定時(shí)器/計(jì)數(shù)器的工作方式8位例:已知某單片機(jī)振蕩頻率fosc=12MHz,使用定時(shí)器產(chǎn)生周期為1ms的等寬方波,由P1.0端輸出。(1)使用定時(shí)器1以工作方式0,采用查詢方式;(2)使用定時(shí)器0,以工作方式1,采用中斷方式。1)使用定時(shí)器1,工作方式0,查詢方式①計(jì)算計(jì)數(shù)初值TH1、TL1
要產(chǎn)生1ms的等寬方波,只要使用P1.0端交替輸出各為500us的高、低電平即可。定時(shí)時(shí)間為500us,設(shè)計(jì)數(shù)初值為x由下式可得:(213-x)×1us=500×us
解得
x=7692x=7692,轉(zhuǎn)化為二進(jìn)制為:1111000001100
將其低5位裝入TL1,TL1=0x0C;高8位裝入TH1,TH1=0x0F0。使用定時(shí)器1以工作方式0(13位),采用查詢方式例:已知某單片機(jī)振蕩頻率fosc=12MHz,使用定時(shí)器產(chǎn)生周期為1ms的等寬方波,由P1.0端輸出。(1)使用定時(shí)器1以工作方式0,采用查詢方式;(2)使用定時(shí)器0,以工作方式1,采用中斷方式。②TMOD寄存器初始化因?yàn)橛枚〞r(shí)器1的定時(shí)功能,所以C/T=0;因?yàn)闊o需INT1控制,直接用TR1=1控制,GATE=0;工作方式0,所以M1M0=00,因此,TMOD寄存器的高4位的內(nèi)容為0。使用定時(shí)器1以工作方式0(13位),采用查詢方式例:已知某單片機(jī)振蕩頻率fosc=12MHz,使用定時(shí)器產(chǎn)生周期為1ms的等寬方波,由P1.0端輸出。(1)使用定時(shí)器1以工作方式0,采用查詢方式;(2)使用定時(shí)器0,以工作方式1,采用中斷方式。#include<reg52.h>sbitsquare_wave=P1^0;voidInit_Timer1(void){TMOD&=0x0f; //使用模式0,13位
TH0=0xf0; TL0=0x0c;EA=0;//總中斷打開
ET1=0;//禁止定時(shí)器1中斷
TR1=1;//定時(shí)器1運(yùn)行}voidmain(void){square_wave=0;Init_Timer1(void);while(1){if(TF1==1){square_wave=~square_wave;TH0=0xf0; TL0=0x0c;
TF1=0;//中斷標(biāo)志位手動(dòng)清零
}}}使用定時(shí)器1以工作方式0(13位),采用查詢方式例:已知某單片機(jī)振蕩頻率fosc=12MHz,使用定時(shí)器產(chǎn)生周期為1ms的等寬方波,由P1.0端輸出。(1)使用定時(shí)器1以工作方式0,采用查詢方式;(2)使用定時(shí)器0,以工作方式1,采用中斷方式。使用定時(shí)器0以工作方式1(16位),采用中斷方式(2)使用定時(shí)器0,工作方式1,中斷方式。①計(jì)算計(jì)數(shù)初值由下式得:(216-x)×1us=500usx=216-500=10000H-1F4H=0FE0CH所以TH0=0FEH,TL0=0CH。
②
TMOD寄存器初始化化
TMOD=0x01//即0b00000001③
IE及IR的使用中斷方式,要使EA=1及ET0=1開放中斷。由TR0=1啟動(dòng)定時(shí)。使用定時(shí)器0以工作方式1(16位),采用中斷方式#include<reg52.h>sbitsquare_wave=P1^0;voidInit_Timer0(void){
TMOD|=0x01; //使用模式1,16位定時(shí)器
TH0=0xfe; //給定初值,
TL0=0x0c;EA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TR0=1;//定時(shí)器0運(yùn)行}main(){Init_Timer0();while(1){……}}voidTimer0_isr(void)interrupt1using1{TH0=0xfe; //重新賦值
TL0=0x0c;square_wave=~square_wave;}voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH0=0x00; //給定初值,這里使用定時(shí)器最大值從0開始計(jì)數(shù)一直到65535溢出
TL0=0x00;EA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TR0=1;//定時(shí)器開關(guān)打開}定時(shí)器0初始化流程及中斷服務(wù)程序樣式main(){Init_Timer0();while(1){……}}voidTimer0_isr(void)interrupt1using1{TH0=0x00; //重新賦值
TL0=0x00;……}voidInit_Timer1(void){TMOD|=0x10; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH1=0x00; //給定初值,這里使用定時(shí)器最大值從0開始計(jì)數(shù)一直到65535溢出
TL1=0x00;EA=1;//總中斷打開
ET1=1;//定時(shí)器中斷打開
TR1=1;//定時(shí)器開關(guān)打開}定時(shí)器1初始化流程及中斷服務(wù)程序樣式main(){Init_Timer1();while(1){……}}voidTimer0_isr(void)interrupt3using1{TH1=0x00; //重新賦值
TL1=0x00;……}三、方式2(M1M0=10)
1、電路邏輯結(jié)構(gòu)初始化時(shí),8位計(jì)數(shù)初值同時(shí)裝入TL0和TH0中。當(dāng)TL0計(jì)數(shù)溢出時(shí),置位TF0,同時(shí)把保存在預(yù)置寄存器TH0中的計(jì)數(shù)初值自動(dòng)加載TL0,然后TL0重新計(jì)數(shù)。
四、方式3(M1M0=11)1.工作方式3下的定時(shí)器/計(jì)數(shù)器0
在工作方式3下,定時(shí)器/計(jì)數(shù)器0被拆成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。其中TL0既可以計(jì)數(shù)使用,又可以定時(shí)使用,定時(shí)器/計(jì)數(shù)器0的各控制位和引腳信號(hào)全歸它使用。TH0則只能作為定時(shí)器使用。四、方式3(M1M0=11)2.工作方式3下的定時(shí)器/計(jì)數(shù)器1
如果定時(shí)器/計(jì)數(shù)器0已工作在工作方式3,則定時(shí)器/計(jì)數(shù)器1只能工作在方式0、方式1或方式2下,因?yàn)樗倪\(yùn)行控制位TR1及計(jì)數(shù)溢出標(biāo)志位TF1已被定時(shí)器/計(jì)數(shù)器0借用,如圖所示。在這種情況下,定時(shí)器/計(jì)數(shù)器1通常是作為串行口的波特率發(fā)生器使用,以確定串行通信的速率。定時(shí)器/計(jì)數(shù)器初始化的步驟(1)確定工作方式、工作模式、啟動(dòng)控制方式一寫入TMOD寄存器。(2)設(shè)置定時(shí)器或計(jì)數(shù)器的初值一可直接將初值送入TH0、TL0或TH1、TL1
(3)根據(jù)要求是否采用中斷方式一直接對(duì)IE寄存器賦值。(4)啟動(dòng)定時(shí)器工作—可使用TR0=1、TR1=1。用定時(shí)器0設(shè)計(jì)一個(gè)0.5s定時(shí)器,控制LED每0.5s閃爍一次分析:因?yàn)樽钚〕踔禐?,數(shù)到65535時(shí)溢出產(chǎn)生中斷,數(shù)了65536次,如果晶振是12MHz,機(jī)器周期為1us,定時(shí)器0,定時(shí)器1最長(zhǎng)定時(shí)時(shí)間為65536us=65.536ms.0.5s=500ms>65.536ms思路:我們可以每次定時(shí)50000us=50ms,即每隔50ms中斷一次,中斷10次就是500ms了為此,我們編程時(shí)必須定義一個(gè)全局變量,如:
unsignedchartimes=0;
來計(jì)算中斷的次數(shù)。#include<reg52.h>sbitLED=P1^0;unsignedchartimes=0;voidInit_Timer0(void){
TMOD|=0x01; //使用模式1,16位定
TH0=(65536-50000)/256; //給定初值,
TL0=(65536-50000)%256;//50msEA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TR0=1;//定時(shí)器0運(yùn)行}main(){Init_Timer0();while(1){……}}voidTimer0_isr(void)interrupt1using1{
TH0=(65536-50000)/256; //重賦初值
TL0=(65536-50000)%256;times++;if(times==10)//500ms到了
{LED=~LED;times=0;//下個(gè)10次開始
}}#ifndef__TIMER0_H__#define__TIMER0_H__
voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定
TH0=(65536-50000)/256; //給定初值,
TL0=(65536-50000)%256;//50msEA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TR0=1;//定時(shí)器0運(yùn)行}#endifs另外,有的常用的子程序可以放在頭文件中,下面來舉例:定義一個(gè)名叫timer0.h的文件,保存在當(dāng)前項(xiàng)目文件夾中,內(nèi)容如下:#include<reg52.h>#include"timer0.h“sbitLED=P1^0;unsignedchartimes=0;main(){Init_Timer0();while(1);}voidTimer0_isr(void)interrupt1using1{
TH0=(65536-50000)/256; //重賦初值
TL0=(65536-50000)%256;times++;if(times==10)//500ms到了
{LED=~LED;times=0;//下個(gè)10次開始
}}#include<reg52.h>指定系統(tǒng)默認(rèn)路徑C:\Keil\C51\INC#include"timer0.h“指本地路徑
例定時(shí)器0以工作方式2產(chǎn)生100us定時(shí),在P1.0輸出周期為200us的連續(xù)正方波脈沖。已知晶振頻率fosc=12MHz.
1.計(jì)算計(jì)數(shù)初值
12MHz晶振下:假設(shè)計(jì)數(shù)初值為X,則:(256-X)×1us=100us求解得:X=156=0x9C把0x9C分別裝入TH0和TL0中:TH0=0x9C,TL0=0x9C
2.TMOD寄存器初始化
M1M0=10C/T=0GATE=0
所以:TMOD=02H
例定時(shí)器0以工作方式2產(chǎn)生100us定時(shí),在P1.0輸出周期為200us的連續(xù)正方波脈沖。已知晶振頻率fosc=12MHz.#include<reg52.h>sbitwave=P1^0;unsignedinttimes=0;voidInit_Timer0(void){TMOD|=0x02; //使用模式2,8位定,自動(dòng)裝載
TH0=256-100; //給定初值,裝載一樣的數(shù)值
TL0=256-100;//100usEA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TR0=1;//定時(shí)器0運(yùn)行 }main(){Init_Timer0();while(1);}voidTimer0_isr(void)interrupt1using1{//此處不需要重新裝載
wave=~wave; }voidTimer0_isr(void)interrupt1using1{times++;if(times==5000)//500ms到了
{LED=~LED;times=0;//下個(gè)5000次開始
} }在開發(fā)板上可以用藍(lán)色的部分根據(jù)LED的閃爍情況進(jìn)行測(cè)試。利用T0門控位測(cè)試INT0引腳上出現(xiàn)的正脈沖寬度,已知晶振頻率為12MHz。分析:應(yīng)采用定時(shí)模式,GATE=1;C/T=0M1M0=011、GATE門控位
GATE=0只用運(yùn)行控制位TR1/TR0=1即可啟動(dòng)定時(shí)器
GATE=1在外部中斷請(qǐng)求信號(hào)(INT1/INT0=1)且TR1/TR0=1時(shí)才啟動(dòng)定時(shí)器#include<reg52.h>sbitwave=P3^2;//信號(hào)必須接P3.2main(){unsignedintresult;unsignedinttemp;EA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TMOD|=0x09;//M1M0=01,16位,GATE=1,//INT0和TR0一起控制計(jì)數(shù)器0TH0=0//TL0=0;//TR1=1;//此時(shí)定時(shí)器0并未啟動(dòng),因?yàn)橐菼NT0(P3.2)為高電平;
while(!wave);//等待0變成1,信號(hào)=1后,計(jì)數(shù)器開始工作,同時(shí)退出while語句
while(wave);//信號(hào)為1繼續(xù)等待,計(jì)數(shù)繼續(xù)進(jìn)行,當(dāng)信號(hào)變?yōu)?,計(jì)數(shù)停止,同時(shí)推出while語句
利用T0門控位測(cè)試INT0引腳上出現(xiàn)的正脈沖寬度(0-65.536ms),已知晶振頻率為12MHz。//為了送顯示,對(duì)result的處理
disData[0]=0;disData[1]=0;disData[2]=0;
disData[3]=result/10000;//萬位
disData[4]=low4bit/1000%10;//千位
disData[5]=low4bit/100%10;//百位
disData[6]=low4bit%100/10;//十位
disData[7]=low4bit%10;//個(gè)位單位:ustemp=TH0;temp<<=8;temp+=TL0;
result
=temp;//在0~65535之間}#include<reg52.h>sbitwave=P3^2;//無須接P3.2,任意IOmain(){unsignedintresult;unsignedinttemp;EA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TMOD|=0x01;//M1M0=01,16位,GATE=0,//僅由TR0控制計(jì)數(shù)器0
TH0=0TL0=0;//此時(shí)wave=0while(!wave);//等待wave等于1TR0=1;//wave=1后,定時(shí)器0啟動(dòng)
while(wave);//wave=1期間,計(jì)數(shù)正在進(jìn)行
TR0=0;//wave=0,跳出上面的whlie語句,同時(shí)關(guān)閉定時(shí)器0
temp=TH0;temp<<=8;temp+=TL0;
result
=temp;//在0~65535之間利用T0門控位測(cè)試INT0引腳上出現(xiàn)的正脈沖寬度(0-65.536ms),已知晶振頻率為12MHz。//為了送顯示,對(duì)result的處理
disData[0]=0;disData[1]=0;disData[2]=0;
disData[3]=result/10000;//萬位
disData[4]=low4bit/1000%10;//千位
disData[5]=low4bit/100%10;//百位
disData[6]=low4bit%100/10;//十位
disData[7]=low4bit%10;//個(gè)位單位:us#include<reg52.h>sbitwave=P1^2;unsignedchartimes=0;main(){unsignedlongresult;unsignedinttemp;EA=1;//總中斷打開
ET0=1;//定時(shí)器中斷打開
TMOD|=0x01;//使用模式1,16位,GATE=0TH0=0TL0=0;while(!wave);TR0=1;//定時(shí)器0運(yùn)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 共建協(xié)議合同范例
- 賣地皮出租合同模板
- 國(guó)企就業(yè)合同范例
- 合伙投資合同合同范例
- 掛靠證書協(xié)議
- 2024合伙合同范本32篇
- 2024年《小學(xué)教育學(xué)》教案模板與案例
- 基于2024年技術(shù)的PFC課件開發(fā)策略
- 人教部編版《道德與法治》二年級(jí)上冊(cè)第7課《我是班級(jí)值日生》精美課件(第2課時(shí))
- 法律教學(xué)新方向:《婚姻法》精美課件設(shè)計(jì)理念解析
- 鉆井地質(zhì)設(shè)計(jì)
- (完整版)英語名詞單復(fù)數(shù)練習(xí)題帶答案
- 國(guó)學(xué)情景劇劇本
- 煤礦皮帶智能化集控系統(tǒng)PPT教學(xué)講授課件
- 分?jǐn)?shù)乘除法整理復(fù)習(xí)(課堂PPT)
- 杭州會(huì)展業(yè)發(fā)展與對(duì)策研究文獻(xiàn)綜述
- 完整版方法驗(yàn)證報(bào)告模板最終
- 電力管道資料表格(共30頁)
- 大班科學(xué)活動(dòng)教案《豆豆家族》含PPT課件
- 【精品試卷】部編人教版(統(tǒng)編)一年級(jí)上冊(cè)語文第一單元測(cè)試卷含答案
- 金屬有機(jī)化學(xué)ppt課件
評(píng)論
0/150
提交評(píng)論