單片機(jī)定時(shí)器及中斷的使用(含原創(chuàng)完整精講例程)_第1頁
單片機(jī)定時(shí)器及中斷的使用(含原創(chuàng)完整精講例程)_第2頁
單片機(jī)定時(shí)器及中斷的使用(含原創(chuàng)完整精講例程)_第3頁
單片機(jī)定時(shí)器及中斷的使用(含原創(chuàng)完整精講例程)_第4頁
單片機(jī)定時(shí)器及中斷的使用(含原創(chuàng)完整精講例程)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、STC89C52定時(shí)器/計(jì)數(shù)器的使用一、寄存器數(shù)據(jù)寄存器TLx山(8AH,8BH,不可位尋址,復(fù)位清0)8位寄存器,保存計(jì)數(shù)值的低8位。THx(8CH,8DH,不可位尋址,復(fù)位清0)8位寄存器,保存計(jì)數(shù)值的高8位。工作原理:計(jì)數(shù)時(shí),從TL開始加1計(jì)數(shù),計(jì)滿后想TH進(jìn)位,直至TH溢出,置TF標(biāo)志,然后申請中斷,CPU進(jìn)行中斷處理。2.模式選擇寄存器TMOD(89H,不可位尋址,復(fù)位清0)76543210GATEC/TMlMO|GATE|C/T|Ml|MO/定時(shí)器1定時(shí)器0高4位用于控制定時(shí)器1,低4位用于控制定時(shí)器0;GATE門控制位=0,TC的啟停僅由寄存器TCON中的TRx控制;=1.TC的

2、啟停由外部中斷引腳的電平狀態(tài)和TCON中的TRx共同控制。C/T一模式選擇位=0,定時(shí)器,對內(nèi)部機(jī)器周期計(jì)數(shù);=1.計(jì)數(shù)器,對外部輸入計(jì)數(shù)(由Tx引腳輸入);注意:計(jì)數(shù)模式下,從采樣到計(jì)數(shù)值更新需要2個(gè)機(jī)器周期(共24個(gè)時(shí)鐘周期),因此,時(shí)鐘頻率為fMHz時(shí),最高計(jì)數(shù)頻率為V2fMHZoM1M0工作方式選擇位=00,方式0,13位,TH全用,TL低5位;=01,方式1,16位,TH,TL全用;=10,方式2,8位自動(dòng)重裝載定時(shí)器,當(dāng)溢出時(shí)將TH存放的值自動(dòng)重裝入TL:=11,方式3,僅適用于T0。定時(shí)器0此時(shí)作為雙8位TC。TLO作為一個(gè)8位TC,通過標(biāo)準(zhǔn)定時(shí)器0的控制位控制。THO僅作為一個(gè)

3、8位定時(shí)器,由定時(shí)器1的控制位控制。T1停止計(jì)數(shù)。注意:在方式2中,計(jì)數(shù)溢出后,CPU會(huì)自動(dòng)將THx中的值裝入TLx。因此,在定時(shí)器啟動(dòng)前,在THx和TLx中裝入的初值必須是相同的,以保證計(jì)數(shù)的準(zhǔn)確性。3.控制寄存器TCON(88H,可位尋址,復(fù)位清0)位符號TF1TRITFOTROIE1IT1IE0ITO位地址8FH8EH8DH8CH8BH8AH89H88H高位在前。后4位用于外部中斷。TFxTx溢出標(biāo)志位Tx計(jì)數(shù)溢出時(shí),裟件置1,并申請中斷。進(jìn)入中斷服務(wù)子程序后,硬件自動(dòng)清零。如呆不使用定時(shí)器中斷,而采用軟件查詢的方法,則需要軟件清零。TRxTx運(yùn)行控制位置0時(shí),關(guān)閉Tx。當(dāng)GATE=0時(shí)

4、,TRx=l,啟動(dòng)Tx:當(dāng)GATE=1時(shí),TRx=l且INTx時(shí),啟動(dòng)Tx。IEx外部中斷x請求標(biāo)志接收到外部中斷后置1,中斷響應(yīng)后,碩件清零。ITx中斷觸發(fā)方式選擇位ITx=O,引腳INTx上低電平觸發(fā)中斷;ITx=l,引腳INTx上下降沿觸發(fā)中斷。注意:釆用低電平觸發(fā)方式時(shí),低電平必須持續(xù)到該中斷被CPU響應(yīng),同時(shí)在該中斷服務(wù)程序執(zhí)行完之前,外部中斷源必須被清除(INTx要變高電平),否則將產(chǎn)生另一次中斷。4.中斷使能寄存器IE(A8H,可位尋址,復(fù)位清0)STC89C52中斷使能寄存器IE:位符號EAReservedET2ESET1EX1ETOEXO位地址AFHADHACHABHAAHA

5、9HA8H高位在前。所有位均是置1開中斷,置0關(guān)中斷。EA全局中斷(總中斷)使能位ETxTCx中斷使能位ES串行口中斷使能位EXx外部中斷x使能位注意:使能某一中斷時(shí),必須將EA置loET2為52系列所有,51系列沒有TC2。5.中斷優(yōu)先級寄存器IP(B8H,可位尋址,服務(wù)清0)STC89C52中斷優(yōu)先級寄存器IP:位符號ReservedReservedReservedPSPT1PX1PTOPXO位地址BCHBBHBAHB9HB8H所有位均是置1為高優(yōu)先級,置0為低優(yōu)先級。PS串行口中斷優(yōu)先級控制位PT1TC1中斷優(yōu)先級控制位PX1外部中斷1優(yōu)先級控制位PTOTCO中斷優(yōu)先級控制位PXO外部中

6、斷0優(yōu)先級控制位同優(yōu)先級的中斷請求,按默認(rèn)順序響應(yīng)?!菊f明】本文里類似的x均可取值為0或1。TC指Timer/Counter,即定時(shí)器/計(jì)數(shù)器。機(jī)器周期是單片機(jī)的基本操作周期,一個(gè)機(jī)器周期內(nèi)單片機(jī)完成一項(xiàng)基本操作,如取指等。一個(gè)機(jī)器周期包含12個(gè)時(shí)鐘周期。時(shí)鐘周期是時(shí)鐘頻率的倒數(shù)。T0對應(yīng)引腳P3.4,T1對應(yīng)P3.5。INTO對應(yīng)P3.2引腳,INT1對應(yīng)P3.3引腳。二、定時(shí)器的使用由于定時(shí)器都是由初值計(jì)數(shù)直至溢出,因此最重要的就是設(shè)置計(jì)數(shù)器的初值。假設(shè)需要定時(shí)器產(chǎn)生一次中斷的事件為t,計(jì)算初值的步驟如下:計(jì)算機(jī)器周期:Tm=12XTT為時(shí)鐘周期,是時(shí)鐘頻率的倒數(shù)。計(jì)算需要計(jì)數(shù)的個(gè)數(shù):需要

7、計(jì)數(shù)的個(gè)數(shù)為:N=t/Tm裝填數(shù)據(jù)寄存器:方式0(13位):THx=(213-N)/25,TLx=(213-N)%25方式1(16位):THx=(216-N)/28,TLx=(216-N)%28實(shí)際的初值即為2n-N(n為定時(shí)器位數(shù)),只需將其放入TH和TL中即可。對TL計(jì)數(shù)范圍取模即為TL的初值;對其取整,則為TH的初值。編程時(shí)的步驟:寫定時(shí)器程序時(shí),需要對定時(shí)器及中斷寄存器進(jìn)行初始化,過程如下:設(shè)置TMOD,以確定Tx的工作方式;計(jì)算初值,并將初值寫入TH和TL;允許中斷,如果使用中斷方式,需要對寄存器IE中的位進(jìn)行賦值;置位TRx,啟動(dòng)定時(shí)或計(jì)數(shù)。三、中斷服務(wù)子程序STC89C52單片機(jī)

8、的中斷級別及中斷向量表中斷源默認(rèn)中斷級別中斷號(C語言用)入口地址(匯編用)INTO外部中斷0最高00003HTOTC0中斷第二1OOOBHINT1外部中斷1第三20013HTlTC1中斷第四3OO1BHTI/RI串行口中斷第五40023HT2定時(shí)器2中斷最低5OO2BHC51的中斷函數(shù)格式如下:voidfunctionName()interruptInterruptNumusinggroupNum黑體為關(guān)鍵字,斜體為可編輯項(xiàng),方括號內(nèi)的為可選項(xiàng)。函數(shù)名(functionName)可以是任何合法的標(biāo)識(shí)符。中斷號(InterruptNum)是編譯器識(shí)別不同中斷的唯一標(biāo)識(shí),一定不能有誤。工作組(g

9、roupNum)指示這個(gè)中斷函數(shù)使用單片機(jī)內(nèi)存中4組工作寄存器中的哪一組,由于編譯器會(huì)自動(dòng)分配,常省略不寫??梢栽谥袛嗪瘮?shù)中為定時(shí)器重裝初值,這樣,就可以實(shí)現(xiàn)間隔一定時(shí)間的中斷。這種方法會(huì)出現(xiàn)累積誤差,減小誤差的有效方法是使用方式2,即初值自動(dòng)重裝的定時(shí)器方式。注意,中斷函數(shù)中一定不要寫過多的處理語句,否則當(dāng)前中斷尚未處理完,下一次中斷又會(huì)到來,這樣就會(huì)丟失中斷。因此,中斷服務(wù)子程序要高效、簡潔。能在主程序中完成的操作不要在中斷函數(shù)中完成。注:定時(shí)器的溢岀率指該定時(shí)器溢出的頻率,是兩次計(jì)數(shù)溢出相差時(shí)間的的倒數(shù)。四、例程可將以下代碼直接復(fù)制到c文件中。#include/STC89C52#defi

10、neuintunsignedint#defineucharunsignedcharuchartemp;需要顯示的數(shù)值,用于分解為百位、十位、個(gè)位數(shù)字的原始數(shù)值;ucharnum;計(jì)時(shí)輔助變量;ucharbai;百位數(shù)字;ucharshi;十位數(shù)字;ucharge;個(gè)位數(shù)字;sbitdula=P2A6;sbitwela=P2A7;段選鎖存器的使能位;位選鎖存器的使能位;ucharcodetable=數(shù)碼管編碼表(三個(gè)數(shù)碼管均接到POII),code型占用程序空間,不會(huì)占用內(nèi)存空間;Ox3f,0 x06,0 x5b,0 x4f,0 x66,0 x6ct0 x7cL0 x07,0 x7f,0 x6f

11、,0 x77z0 x7cz0 x39,0 x5e,0 x79,0 x71;voiddisplay(uchar/uchar/uchar);voiddelay_ms(uint);voidinit();voidmain()init();初始化子程序while(l)if(num=20)/num=20時(shí),已過去了20*50ms=ls時(shí)間(12MHz),即每秒執(zhí)行一次下面的程序;num=0;/num清零,重新計(jì)時(shí);temp+;if(temp=120)temp=0;在000-119輪流顯示;bai=temp/100;shi=temp%100/10;ge=temp%10;將3位整數(shù)分解成3個(gè)單獨(dú)的數(shù)字;dis

12、playfbaihhge);延遲Ims,12MHzfuI*voiddelay_ms(uintxms)/unsignedint為16位整數(shù),因此參數(shù)xms的值最人為65535:uinti,j;tor(i=xms;i0;i-)for(j=250;j0;j-);*4c*4c*數(shù)碼管動(dòng)態(tài)顯示函數(shù)*voiddisplay(ucharbai,ucharshizucharge)/*在第一個(gè)數(shù)碼管上顯示百位數(shù)字*/dula=l;PO=tablebai;dula=0;PO=Oxff;造成亂碼顯示:wela=l;P0=0 xfe;wela=0;delay_ms(l);段選鎖存器直通;送段選數(shù)據(jù),百位數(shù)據(jù);段選鎖存

13、器鎖存;消影”,避免打開位選時(shí),位選數(shù)據(jù)受之前段選數(shù)據(jù)的影響,位選鎖存器直通;送位選數(shù)據(jù):Oxfe表明選中第一個(gè)數(shù)碼管;位選鎖存器鎖存;在第二個(gè)數(shù)碼管上顯示十位數(shù)字*/dula=l;PO=tableshi;dula=0;PO=Oxff;wela=l;PO=Oxfd;wela=0;delay_ms(l);送十位數(shù)據(jù):打開第二個(gè)數(shù)碼管;在第三個(gè)數(shù)碼管上顯示個(gè)位數(shù)字*/dula=l;PO=tablege;dula=0;PO=Oxff;wela=l;PO=Oxfb;wela=0;送個(gè)位數(shù)據(jù):打開第三個(gè)數(shù)碼管;delay_ms(l);*/彳丿丿始彳匕pKljiut*wela=O;dula=O;temp=O;初始化數(shù)碼管;/杠定時(shí)器初始化*/TMOD=0 x01;模式選擇;TO、T1均為定時(shí)器,T1為方式0(13位,實(shí)際本程序未使用Tl),TO為方式1(16位);TH0=(65536-50000)/256;TL0=(65536-50000)%256

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論