0

使用汇编和 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

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

4

1 回答 1

2

您可以通过计算触发的中断数来做到这一点。这将取决于定时器的输入频率(我猜这通常与 CPU 频率相同)。

假设输入频率为 16000000 Hz:

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

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

counter++;
if (counter == 6250) {
    // We should end up in here approximately 10 times/second
    counter = 0;
}
于 2013-05-24T08:43:48.887 回答