硬件:Arduino的烏諾與ATMEGA328P生成1秒延時定時器使用Arduino的上野與ATMEGA328P(C語言)
軟件:愛特梅爾Studio的1153年6月2日,Arduino的1.0.6
計算需要1秒
- ATMEGA328P的時鐘頻率= 16M赫茲01循環
- 預分頻器CLK時鐘頻率/ 1024 = 16M/1024 = 15625赫茲
- 時鐘週期預分頻器CLK/1024 =(15625)^ - 1 = 6.4 * 10^-5S
- 週期1S = 1/6.4 * 10^-5 = 15625個週期
- 所需1S = 15625循環 - 1 = 15624個週期= 0x3D08
我的代碼
OCR1AH = 0x3D; //Load higher byte of 15624 into output compare register
OCR1AL = 0x08; //Load lower byte of 15624 into output compare register
TCCR1A = 0b00000000;
TCCR1B = 0b00001101; //Turn on CTC mode and prescaler of CLK/1024
while((TIFR1 & (1<<OCF1A)) == 0); //If OCF1A is set (TCNT1 = OCR1A), break
TCCR1A = 0;
TCCR1B = 0; //Stop the timer
TIFR1 &= ~(1<<OCF1A); //Clear OCF1A for the next time delay
當我點擊「開始調試和休息」和「步過」上面的代碼爲函數。它總是讓我「不停地奔跑」。爲什麼?如何解決它?
謝謝您的幫助。
https://github.com/dwelch67/avr_samples應該有一些二秒或多秒led指示燈... – 2014-10-27 14:30:59
一個問題是,你沒有清除最後一行的'OCF1A'標誌。它應該是'TIFR1 = 1 << OCF1A;'。 – UncleO 2014-10-27 16:06:11