Assembly 汇编-如何设置中断频率

Assembly 汇编-如何设置中断频率,assembly,avr,Assembly,Avr,使用汇编和AVR微控制器,我想写的程序,使中断处理与一定的频率,如10赫兹。 首先,我设置堆栈和计时器: .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<<

使用汇编和AVR微控制器,我想写的程序,使中断处理与一定的频率,如10赫兹。 首先,我设置堆栈和计时器:

.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
.cseg
.org jmp重启;
.org 0x002E tjmp计时器
重新启动:
cli
本地设计院R16,高(拉芒)
我们的SPH,R16
本地设计院R16,低(拉芒)
输出SPL,R16
软件工程研究所

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

假设输入频率为16000000 Hz:


从计数0开始(
TCNT0
设置为0),预分频器为256(
TCCR0
设置为
1@EgorSkriptunoff-是的-首先,阅读芯片的用户手册,然后是xtal freq的硬件规格,然后计算出来。我从代码中猜到了8位控制器。@MartinJames-不同的AVR MCU对定时器相关寄存器有不同的含义。甚至寄存器名也可能不同:
TCCR0
vs
TCCR0A,TCCR0B。这非常有用!谢谢!
counter++;
if (counter == 6250) {
    // We should end up in here approximately 10 times/second
    counter = 0;
}