有什么方法可以计算数字引脚上输入方波信号的频率?还是应该完全依靠pulseIn()函数??
我已经这样写了代码的ISR
ISR(TIMER1_OVF_vect){
count++;
}
ISR(TIMER1_CAPT_vect){
value = TCNT1;
TCNT1 = load;
}
并尝试在串行监视器上打印值(变量:value
和load
是volatile
变量),但仅显示零。我不知道其中出了什么问题。
程序的声明如下
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();
}
请帮助。预先感谢
答案 0 :(得分:0)
在TCCR1B &= B11111000 | B00000111;
行中,您没有正确配置寄存器。似乎您想配置为B11111111,但由于您不知道其中的值,因此它可以是任何值,包括0,这会使计时器停止计时。
将此行更改为TCCR1B = B11111000 | B00000111;
,但请注意,因为使用此配置,您将需要一个外部时钟源作为计时器,因此我建议您在后三个字节中使用另一个值