我正在使用带有扩展名 Visual_Micro 的 MS_Visual_Studio 使用 Arduino1.6/1.8 Gemma 板定义对 ATtiny85 进行编程。程序员是 Sparkfun Tiny Programmer。
这是使用的非常简单的代码。(感谢 InsideGadgets YouTube 频道“即时更改 ATtiny85 时钟速度”)。它再简单不过了。
然而,尽管我将 #define F_CPU 1000000 更改为 #define F_CPU 8000000,但对大约 2 秒的 LED 闪烁周期绝对没有影响。
尽管对 F_CPU 进行了任何更改,但 ATtiny85 的时钟频率似乎为 1MHz。
我在 CLKPR = 0 上测试了 CLKPR = 3,这会将预分频器的因子从 1 更改为 8。
这应该会使延迟延长 8 倍,它确实如此。我搜索了有关 F_CPU 定义的一些详细信息,但找不到对此行为的任何解释。
问题:为什么F_CPU从1MHz定义到8MHz后_delay_ms(1000)没有影响?
#define F_CPU 1000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int main(void) {
DDRB |= (1 << PB0);
while (1) {
PORTB |= (1 << PB0); // Toggle LED
_delay_ms(1000); // delay 1 second
PORTB &= ~(1 << PB0);
_delay_ms(1000); // delay 1 second
cli();
CLKPR = (1 << CLKPCE); // set for changing prescaler
// Change clock prescaler to 0000
CLKPR = 0; // divider by 1
// CLKPR = 3; // divider by 8
sei();
} // complete Loop is a 2 seconds period
return 0;
}