找到输入方波信号的频率时出错

时间:2018-07-10 08:11:40

标签: timer arduino interrupt

有什么方法可以计算数字引脚上输入方波信号的频率?还是应该完全依靠pulseIn()函数??

我已经这样写了代码的ISR

ISR(TIMER1_OVF_vect){
  count++;
}
ISR(TIMER1_CAPT_vect){
  value = TCNT1;
  TCNT1 = load;
  }

并尝试在串行监视器上打印值(变量:valueloadvolatile变量),但仅显示零。我不知道其中出了什么问题。

程序的声明如下

const uint16_t freqPin = PD5;
const uint16_t load = 0;
volatile unsigned long int count=0;
volatile unsigned int value=0;

void setup()
{
Serial.begin(9600);
DDRD &= ~(1<<freqPin);
TCCR1A = 0;
TCCR1B &= B11111000 | B00000111;
TCNT1 = load;
TIMSK1 |= (1<<ICIE1);
TIMSK1 |= (1<<TOIE1);
TIFR1 |= (1<<TOV1);
sei();
}  

请帮助。预先感谢

1 个答案:

答案 0 :(得分:0)

TCCR1B &= B11111000 | B00000111;行中,您没有正确配置寄存器。似乎您想配置为B11111111,但由于您不知道其中的值,因此它可以是任何值,包括0,这会使计时器停止计时。

将此行更改为TCCR1B = B11111000 | B00000111;,但请注意,因为使用此配置,您将需要一个外部时钟源作为计时器,因此我建议您在后三个字节中使用另一个值