汇编 - 如何设置中断频率

时间:2013-05-24 08:18:28

标签: assembly avr

使用汇编和AVR微控制器我想编写一个程序,它会以一定的频率(例如10 Hz)处理中断。 首先我设置堆栈和计时器:

.cseg

.org jmp restart;

.org 0x002E tjmp timer_fun


restart:
cli
ldi R16, HIGH(RAMEND)
out SPH, R16
ldi R16, LOW(RAMEND)
out SPL, R16
sei

ldi R17, 1<<CSOO
out TCCR0, R17
ldi R16, 1<<TOIE0
out TIMSK, R16

但现在,我不知道如何设定这个频率?

1 个答案:

答案 0 :(得分:2)

您可以通过计算触发的中断次数来完成此操作。这取决于定时器的输入频率(我猜通常与CPU频率相同)。

假设输入频率为16000000 Hz:

从0开始计数(TCNT0设置为0),预分频器为256(TCCR0设置为1<<CS02)会导致定时器溢出16000000/256 == 62500赫兹。

你的定时器中断服务程序可以做这样的事情(我在这里使用C,但你明白了):

counter++;
if (counter == 6250) {
    // We should end up in here approximately 10 times/second
    counter = 0;
}