基于51单片机的频率计设计
软件设计原理:利用单片机内部资源,定时器0定时一秒,计数器1在1s内计数,从而计算得频率。
这样能测得1hz~450khz。
我想设定当频率小于10hz时,定时器0定时10s,计数器1在10s内计数,结果测得的数据除以10就得到频率,从而获得0.1hz~10hz更精确的频率。
现在代码测试的情况是:被测频率大于10hz没有问题,如果被测频率小于10hz,结果显示为10倍的频率,意思就是程序中没有除以10,怎么改都有问题,应该是跳过那几条备注的语句了,不知道问题出在哪,求大神解答。(问题部分用*标注)
void main()
{
CT_init();
LCD_init();
while(1)
{
/gbo();
if(num==numm)//如果1s到了,就计算出区间的脉冲数目,算出频率b
{
num=0;
b=((TH1*256+TL1)*1.0043);
if(b<10)//如果频率小于10hz,闸门时间变为10s,以便测量低频更准确********************************************************************
{
numm=200;
// LCD_Write_String(0,1,table2);
b=((TH1*256+TL1)*1.0043)/10;//为什么这条语句不执行??/**********************************************************************/
display();//为什么这条语句也不执行???/**********************************************************************************/
TH1=0;
TL1=0;
TR1=1;
TR0=1;
}
else//如果频率大于10hz,则正常1s定时计数
{
display();
TH1=0;
TL1=0;
TR1=1;
TR0=1;
}
}
}
}