Timer Arduino nano Atmega328P上的切换led存在问题,计时器/计数器0中断

Timer Arduino nano Atmega328P上的切换led存在问题,计时器/计数器0中断,timer,arduino,interrupt,atmega,microchip,Timer,Arduino,Interrupt,Atmega,Microchip,我尝试在Arduino nano ATmega328P上切换LED,但没有成功。 (计时器0为8bitTimer) 我设法用计时器1执行它 用密码 #定义LED引脚13 无效设置(){ 引脚模式(LED引脚,输出); cli();//禁用中断 TCCR0A=0; TCCR0B=0; TCCR0B |=(1您的第一个代码块具有: ISR(TIM0_OVF_vect) { digitalWrite(ledPin, digitalRead(ledPin) ^ 1); } 具有错误的ISR名称

我尝试在Arduino nano ATmega328P上切换LED,但没有成功。 (计时器0为
8bit
Timer)

我设法用
计时器1执行它
用密码

#定义LED引脚13
无效设置(){
引脚模式(LED引脚,输出);
cli();//禁用中断
TCCR0A=0;
TCCR0B=0;

TCCR0B |=(1您的第一个代码块具有:

ISR(TIM0_OVF_vect) {
    digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
}
具有错误的ISR名称。
TIM0\u OVF\u vect
仅对某些ATtiny微控制器有效。您可以找到中断的完整列表以及它们与哪些控制器一起使用

然后您尝试将其更改为使用对ATMEGA328P有效的
TIMER0\u OVF\u vect
,但您不能将其用于Arduino,因为Arduino ATMEGA328P构建使用
TIMER0
用于
millis()
和相关计时。这就是为什么您会得到一个
错误的多重定义-链接器告诉您有两个
TIMER0\u OVF\u vect
ISR由您的程序定义(一个由草图定义,一个在wiring.c中定义)


Timer2
在默认情况下不使用,因此您应该可以使用它。使用
Timer2
的唯一默认Arduino库是
音调
库。

LED看起来应该每秒切换16000000/1024/256=61次。您确定它的闪烁速度没有那么快,并且您不能这样做吗看不到吗?我尝试在ISR中添加另一个延迟,但仍然没有闪烁。我还尝试串行。打印(“hi”);在它内部,中断从未发生无论如何在ISR中进行串行。打印是不安全的。还尝试将中断向量更改为:TIMER0_OVF_vect遇到了这个问题:Arduino:1.8.9(Windows 10),电路板:“Arduino Nano,ATmega328P(旧引导加载程序)“wiring.c.o(来自插件的符号):在函数
\uuuu vector\u16':(.text+0x0):多个定义
\uuuu vector\u16'sketch\tests.ino.cpp.o(来自插件的符号):(.text+0x0):首先在此处定义collect2.exe:错误:ld返回1退出状态退出状态1编译板Arduino Nano时出错。此报告将包含更多信息,其中“文件->首选项”中启用了“编译期间显示详细输出”选项。
ISR(TIM0_OVF_vect) {
    digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
}