使用汇编和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
但现在,我不知道如何设定这个频率?
答案 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;
}