|
我用STC单片机测量频率(0-26HZ).频率信号由外部中断1—INT1引进,采用下降沿触发方式,由TIMER1测量两个下降沿之间的时间。我写的程序只能测量1—3HZ的,频率再高一点就乱跳
下面是我的代码。主程序应该没什么问题,已经调好久了,就是找不出原因,哪位能帮我看看,不胜感激!!
/*********************************************************************************************
定时器一中断程序
********************************************************************************************/
void init_TIMER1()
{
TMOD=0x11;//TMOD=#00010001,定时器,工作方式1(16位定时器/计数器)
TH1=0x00;
TL1=0x00;
ET1=1;//定时器1开中断
TR1=1;//定时器启动计数
}
TIMER1_serv() interrupt 3
{
if(flg==1)
{TF1=0;
t1_cut++; } //TF1=1时,计数溢出
}
/*************************************************************************************************************
外部中断1
*************************************************************************************************************/
void init_INT1()
{
dely(100);
EA=1;//CPU所有中断开
dely(100);
EX1=1; //INT1中断开
dely(100);
IT1=1; //INT1下降沿触发
}
void INT1_sevr() interrupt 2 using 1
{
if(flg==0)
{ puls_1=TH1*256+TL1;
flg=1;
IE1=0;}
else if(flg==1)
{ puls_2=TH1*256+TL1;
//TR1=0;//停止计数
//ET1=0;//关定时器一
period = 65536*t1_cut + puls_2 + 0x01 - puls_1;
t1_cut=0;
flg=0;
freq =500000/period;
IE1=0;//外部中断一请求标志位清零
}
}
|
|