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
我的首選方法是讀取自由運行計時器計數器並減去以前的值。這消除了進行任何調整的需要。 –