单片机 定时器/计数器
單片機(jī) 定時(shí)器/計(jì)數(shù)器
一、簡(jiǎn)述
????MCS—51系列單片機(jī)內(nèi)部有兩個(gè)16位定時(shí)器/計(jì)數(shù)器,即定時(shí)器T0和定時(shí)器T1。它們都具有定時(shí)和計(jì)數(shù)功能,可用于定時(shí)或延時(shí)控制,對(duì)外部事件進(jìn)行檢測(cè)、計(jì)數(shù)等。
????定時(shí)器/計(jì)數(shù)器是一個(gè)加“1”計(jì)數(shù)器,來(lái)一脈沖即做加1計(jì)數(shù),直至寄存器各位全為1,再來(lái)一脈沖,計(jì)數(shù)器回0且使TF0(定時(shí)器T0)TF1(定時(shí)器T1)置1表示定時(shí)時(shí)間到,計(jì)數(shù)值乘以單片機(jī)的機(jī)器周期就是定時(shí)時(shí)間。
? ? ?計(jì)數(shù)器:工作在方式1,可以從0數(shù)到65536(2的16次方),超過(guò)65535產(chǎn)生中斷;如果想要數(shù)10000個(gè)數(shù),可以設(shè)置計(jì)數(shù)器的初值為55536,這樣從初值55535數(shù)到65535就是10000個(gè)數(shù)。
? ? ?計(jì)數(shù)器又叫定時(shí)器:晶振產(chǎn)生脈沖信號(hào),一個(gè)脈沖信號(hào)過(guò)來(lái),計(jì)數(shù)器就數(shù)1,頻率高,產(chǎn)生脈沖信號(hào)就快,計(jì)數(shù)器數(shù)數(shù)就快,計(jì)數(shù)器每數(shù)了一個(gè)數(shù)說(shuō)明過(guò)去了xx秒,那么讓計(jì)數(shù)器數(shù)10000個(gè)數(shù),對(duì)應(yīng)過(guò)去了10000乘以xx秒。這樣我們想要在10秒之后做某件事情,設(shè)置好計(jì)數(shù)器初值(設(shè)定計(jì)數(shù)器要數(shù)多少個(gè)數(shù))、設(shè)置好頻率(確定產(chǎn)生一個(gè)脈沖的時(shí)間),計(jì)數(shù)器數(shù)到65535之后,產(chǎn)生溢出信號(hào)、引起中斷,然后執(zhí)行中斷服務(wù)(可以是我們自己編寫的中斷函數(shù))。
? ? ? 如:頻率是12MHZ,也就是1秒可以產(chǎn)生12000000個(gè)脈沖,也就是1秒可以數(shù)12000000個(gè)數(shù)。如果設(shè)置計(jì)數(shù)器的初值為65524(65535-12),也就是數(shù)12個(gè)數(shù)。數(shù)12000000個(gè)數(shù)用時(shí)1秒,那么數(shù)12個(gè)數(shù)用時(shí)12/12000000=0.000000.1秒=1微秒。(1秒=1000000微秒),想要定時(shí)1ms,那么可以讓計(jì)數(shù)器數(shù)12000個(gè)數(shù),設(shè)置計(jì)數(shù)器的初值為65535-12000=53535。
二、TMOD控制寄存器
????GATE=1時(shí),“與門”的輸出信號(hào)K由INTx輸入電平和TRx位的狀態(tài)一起決定(即此時(shí)K=TRx·INTx),當(dāng)且僅當(dāng)TRx=1,INTx=1(高電平)時(shí),計(jì)數(shù)啟動(dòng);否則,計(jì)數(shù)停止。
????當(dāng)INT0引腳為高電平時(shí)且TR0置位,TR0=1;啟動(dòng)定時(shí)器T0;
????當(dāng)INT1引腳為高電平時(shí)且TR1置位,TR1=1;啟動(dòng)定時(shí)器T1。
????GATE=0時(shí),“或門”輸出恒為1,“與門”的輸出信號(hào)K由TRx決定(即此時(shí)K=TRx),定時(shí)器不受INTx輸入電平的影響,由TRx直接控制定時(shí)器的啟動(dòng)和停止。
三、TCON控制寄存器
?
| 設(shè)定好了定時(shí)器/計(jì)數(shù)器的工作方式后,它還不能進(jìn)入工作狀態(tài),必須通過(guò)設(shè)置控制寄存器TCON中的某些位來(lái)啟動(dòng)它工。要使定時(shí)器/計(jì)數(shù)器停止運(yùn)行,也必須通過(guò)設(shè)置TCON中的某些位來(lái)實(shí)現(xiàn)。當(dāng)定時(shí)器/計(jì)數(shù)器計(jì)滿溢出,或有外部中斷請(qǐng)求時(shí),TCON能標(biāo)明溢出和中斷情況。 設(shè)定好了定時(shí)器計(jì)數(shù)器/的工作方式后,它還不能進(jìn)入工作狀態(tài),必須通過(guò)設(shè)置控制寄存器TCON中的某些位來(lái)啟動(dòng)它工。要使定時(shí)器/計(jì)數(shù)器停止運(yùn)行,也必須通過(guò)設(shè)置TCON中的某些位來(lái)實(shí)現(xiàn)。當(dāng)定時(shí)器/計(jì)數(shù)器計(jì)滿溢出,或有外部中斷請(qǐng)求時(shí),TCON能標(biāo)明溢出和中斷情況。控制寄存器TCON每位的含義:? ? TF1:定時(shí)器T1溢出標(biāo)志位。當(dāng)定時(shí)器T1溢出時(shí),由硬件自動(dòng)使TF1置1,并向CPU申請(qǐng)中斷。CPU響應(yīng)中斷后,自動(dòng)對(duì)TF1清零。TF1也可以用軟件清零。? |
四、初值計(jì)算
?
機(jī)器周期:
? ? 時(shí)鐘周期(振蕩周期) = 1秒/晶振頻率? ? ? ? ?(T = 1/f)
????機(jī)器周期 = 12*振蕩周期
????機(jī)器周期?= 12秒/晶振頻率?
????如果系統(tǒng)晶振頻率為12M,那么機(jī)器周期=1us
?
五、例子
?
定時(shí)函數(shù)
void Delay1ms(unsigned int count) {unsigned int i;TMOD=0x01; //選用定時(shí)器0且工作在方式1TH0=0x3c; //設(shè)置初值0x3cb0TL0=0xb0;TR0=1; //開啟定時(shí)器for(i=0;i<count;i++) //循環(huán)count次,每次定時(shí)50ms,總共count*50ms{ while(TF0!=1);// 每次定時(shí)50ms (溢出時(shí)才會(huì)跳出循環(huán))TH0=0x3c; //重置初值0x3cb0TL0=0xb0;TF0=0; //軟置溢出位} TR0=0; //關(guān)閉定時(shí)器 }定時(shí)1s:Delay1ms(20);
?
?
總結(jié)
以上是生活随笔為你收集整理的单片机 定时器/计数器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 拦截windows弹窗广告
- 下一篇: 交换机千兆和百兆对网速影响_千兆网线和百