0
我是微控制器新手。以下代码测量方波的周期。我标出了一些我不明白的内容。代码如下:使用微控制器测量方波的周期
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(TIMER1_CAPT_vect)
{
int counter_value = ICR1; //16 bit value
PORTB = (counter_value >> 7); // What has been done here?
TCNT1 = 0; // why this line?
}
int main(void)
{
DDRB = 0xFF;
TCCR1A = 0x00;
TCCR1B = 0b11000010;
TIMSK = 0b00100000;
sei();
while(1);
cli();
}
实际上在这些行中做了什么?
您找到的答案很容易在网上的文档和其他网站上找到。如果你不知道这些代码是什么意思,那很明显你没有编写代码,在这种情况下,如果你没有正确地研究,你不能指望Stackoverflow的人帮忙。 SO不是教室。这是一个人们自愿帮助其他人陷入困境的地方。请阅读关于什么。有关于它的信息页面。 –
我同意Blurry Sterk。我建议你阅读中断的文档。然后从简单的例子开始,使用定时器中断产生你自己的信号,如[在此描述](http://www.protostack.com/blog/2010/09/timer-interrupts-on-an-atmega168/)。此外,此代码使用计时器中断来测量信号的周期。计时器中断对于创建一个有用。对于测量GPIO中断更合适。当引脚电压变高时,进入中断程序,启动定时器并退出中断。下次读取计时器值并重新启动计时器。 – ursusd8
我的首选方法是读取自由运行计时器计数器并减去以前的值。这消除了进行任何调整的需要。 –