51單片機(jī)-定時(shí)器
定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位和低8位兩個(gè)寄存器組成。80C51單片機(jī)定時(shí)/計(jì)數(shù)器的工作是由兩個(gè)特殊功能寄存器控制的。TMOD是定時(shí)/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能,低四位用于T0,高四位用于T1。TCON是控制寄存器,控制T0和T1的啟動(dòng)和停止及溢出標(biāo)志,高四位與定時(shí)器有關(guān),低四位與外部中斷有關(guān)。如果定時(shí)/計(jì)數(shù)器工作于定時(shí)模式,則表示定時(shí)時(shí)間已到;如果工作于計(jì)數(shù)模式,則表示計(jì)數(shù)值已滿(mǎn)。加1計(jì)數(shù)器輸入的計(jì)數(shù)脈沖有兩個(gè)來(lái)源,一個(gè)是由系統(tǒng)的時(shí)鐘振蕩脈沖經(jīng)12分頻后送來(lái);一個(gè)是T0或T1引腳輸入的外部脈沖源。
中斷允許控制。CPU對(duì)中斷系統(tǒng)所有中斷以及某個(gè)中斷源的開(kāi)放和屏蔽是由中斷允許寄存器
IE控制的。
#include <reg52.h>
unsigned int t;
sbit p3_4 = P3^4;
void init_timer(){
TH0 = (65535 - 50000) / 256; //求取高8位
TL0 = (65535 - 50000) % 256; //求取低8位
EA = 1; //CPU總中斷允許位
ET0 = 1; //定時(shí)/計(jì)數(shù)器中斷允許位
IT0 = 1; //下降沿有效
TR0 = 1; //定時(shí)器啟動(dòng)
TMOD = 0x01; //使用定時(shí)器T0,16位計(jì)數(shù)器
p3_4 = 1;
}
void main(){
init_timer();
t = 0;
while(1){
if(t == 20){
p3_4 = "p3_4; //響一秒,停一秒
t = 0;
}
}
}
void bell() interrupt 1{
TH0 = (65535 - 50000) / 256; //從15535開(kāi)始計(jì)時(shí),共50000us,50ms
TL0 = (65535 - 50000) % 256; //20*50 = 1000ms = 1s 即1s響停一次
t++;
}
評(píng)論