AVR ATmega328p 定时器中断不工作

问题描述 投票:0回答:1

我正在尝试在我的 ATmega328p 上组装一个闪烁的 LED。我正在使用 8 位定时器来尝试实现这一点。现在计时器设置为超快移动,以便我可以在 Atmel Studio 中对其进行测试。当程序继续运行时,我观察了字节,并注意到中断标志已设置,但我的中断函数没有执行。帮忙吗?

LDI r16, (1 << DDB0)
OUT DDRB, r16

LDI r16, (1 << WGM01) ;set CTC mode
OUT TCCR0A, r16 ;set data to the TCCR0A register

LDI r16, 0x10
OUT OCR0A, r16 ;set tick amount

SEI ;global interrupt enable, CLI to disable

LDI r16, (1 << OCIE0A)
STS TIMSK0, r16

LDI r16, (1 << CS00); | (1 << CS02) ;select prescaler
OUT TCCR0B, r16; set data to TCCR0B register and start timer

rjmp MAIN

.org  0x001C
    rjmp TIMER_INTERRUPT

MAIN:
    rjmp MAIN

TIMER_INTERRUPT:
    IN r16, PORTB
    LDI r17, (1 << PORTB0)
    EOR r16, r17
    OUT PORTB, r16
reti

我尝试在每条指令后检查所有位,以确保我的设置正确,这似乎没有带来明显的错误。

interrupt avr atmelstudio
1个回答
0
投票

您可能在模拟器中使用单步测试代码,然后在单步模式下禁用了 ISR 的执行。

需要更改 AVR studio 中的设置,标记为步进时屏蔽中断。您应该将该标志设置为 false。您可以在“工具”菜单、“选项...”项、然后“工具”中找到此标志

Enable ISR in single step

© www.soinside.com 2019 - 2024. All rights reserved.