程序功能如下:
一个1KHz的方波触发D2引脚的外部中断0,设置上升沿触发,此时开启定时器1(16MHz)开始计数,直到下一次中断,完成一次周期的计数。将定时器值赋给变量count,利用f=16000000/count得到频率。
float count = 1;//定时器值赋给count
void TimerNumber()
{
count = TCNT1;//定时器值赋给count
TCNT1=0;//定时器清零
attachInterrupt(digitalPinToInterrupt(2), TimerNumber,RISING);//开启外部中断,TimerNumber为中断处理函数,RISING上升沿触发
}
void setup()
{
TCNT1 = 0;
pinMode( 2 , INPUT);//D2设置位输入模式
Serial.begin(57600); //波特率57600
TCCR1A = 0x00;
TCCR1B = ;//不分频
attachInterrupt(digitalPinToInterrupt(2), TimerNumber, RISING);//开启外部中断
}
float Get_AD()
{
float Frequence = 16000000.0 / count;
return Frequence;
}
void loop()
{
float number=Get_AD();
Serial.println(number);//打印频率值
delay(1000);
}
频率测不对,外部中断可以肯定触发了,是不是我定时器没有开启呢?感谢各位指教一下。
|