【发布时间】:2020-01-21 14:16:14
【问题描述】:
我正在使用 AVR ATmega16,我正在尝试实现 一个计数秒数的计数器。我正在使用timer0,以便在重复 16 次的循环中每 1/16 秒产生一次中断。给定微处理器的频率 (f=4Mhz) 和 预分频器 值 (=1024) 我计算出我需要给定时器一个初始值 12。
这是我在自己的教科书中找到的示例代码的开头:
.include "m16def.inc"
.equ start = 12
.equ loops = 16
jmp reset
reti (x16) ;there will be needed a total of 16 reti's in order for the next
;instruction to be at 0x12 = 0d18 where the jmp instruction is placed at the
;overflow interrupt handling routine of timer0
jmp TIM0_OVF
reti ;other Handlers
能否解释一下这两个reti 命令实际上在做什么?它们是如何工作的?代码注释是什么意思?
*让我告诉你,在 ATmega16 上,TIMER0_OVF 向量在 program memory address = 0x12 上
【问题讨论】:
-
如果我们假设
reti (x16)的意思是“输出16条reti指令”,那么它的目的是用一些东西来填充RESET和TIMER0_OVF之间的所有中断向量槽。如果您不关心处理这些中断,那么在每个插槽中放置reti似乎是个好主意,因为它只是意味着“从中断中返回”。 -
哇!这一切都说得通。多谢。如果您愿意,可以将其作为答案发布,以便我接受。谢谢
标签: assembly timer interrupt reset avr