基本思想:用Timer0做定时器,用来定时1s时间,用Timer1做计数器,捕捉下降沿。T1的计数器每1S清零一次。
该功能最好用T2的捕捉功能实现,但昨天未调试出来,原因是无法进入中断,可能是实际使用的IAP15芯片配置与所查的52资料不同。调试出后更新
频率输入端为P35
对T1/T0的配置如下:
void t0_init()
{
TMOD = 0x01;
TH0 = (65536-46080)/256; //50ms
TL0 =(65536-46080)%256;
ET0 = 1; //允许T0中断
EA = 1; //总中断
TR0 = 1; //开计时器
}
void t1_init()
{
TMOD = 0x50;
IT1 = 1; //下降沿触发
TH1 = 0;
TL1 = 0;
// EX1 = 1; //用查询计数器的方式计算频率,不需要开中断
// ET1 = 1;
// EA = 1;
TR1 = 1 ;
}
读计数器的程序:
void read()
{
char tl1,th1;
tl1 = TL1;
th1 = TH1;
thenum = th1*256+tl1;
}
主程序如下: