|
|
unsigned int cnt = 0,Meter_cnt=0,Meter_f =0;
void EXT0_INIT()
{
INT0 = 1; //外部診斷允許
IT0 = 1; //設(shè)置INT0的中斷類(lèi)型 (1:僅下降沿 0:上升沿和下降沿)
EX0 = 1; //使能INT0中斷
EA = 1;
}
//中斷服務(wù)程序
void exint0() interrupt 0 //INT0中斷入口
{
cnt++;
}
void Timer0Init(void) //10毫秒@12.000MHz
{
AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器為模式16位自動(dòng)重裝載
TL0 = 0xF0; //設(shè)置定時(shí)初值
TH0 = 0xD8; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
ET0 = 1; //使能定時(shí)器0中斷
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
}
void tm0_isr() interrupt 1 //定時(shí)器 10ms 溢出中斷
{
static char t=0;
t++;cnt++;
if(t==200) //每2秒讀取外部中斷的次數(shù)
{
Meter_cnt = cnt;
cnt = 0;
Meter_f = Meter_cnt/2; //計(jì)算1秒的次數(shù),就是頻率
}
}
main()
{
EXT0_INIT();
Timer0Init();
while(1);
}
大概思路就是讀取單位時(shí)間內(nèi)外部中斷的個(gè)數(shù),在求出頻率 |
|