在学AVR,写定时器中断的程序时遇到问题,程序在计数溢出后没有跳进中断服务程序中。
我用的是AVR STUDIO6 编程,选的是ATMEGA88PA芯片,用STUDIO6自带的软件仿真。单步运行时,发现计数溢出后程序没有进入中断。
求大神解惑,附上程序。
#include < avr/io.h >
#include < avr/interrupt.h >
unsigned int CNT = 0;
void timer0_init()
{
TCCR0A = 0x00; //普通模式
TCCR0B = 0x00; //停止计数
TCNT0 = 0xFA; //计数初值,为了单步时能快点计数溢出,就用0xFA作初值了
TIMSK0 = 0x01; //计数溢出使能
}
int main(void)
{
timer0_init();
TCCR0B = 0x01; //计数频率=系统时钟频率
sei(); //开启全局中断
while(1)
{
;//TODO:: Please write your application code
}
}
ISR(TIMER0_OVF_vect) //中断服务程序
{
cli();
TCNT0 = 0xFA;
if(++CNT == 10) CNT = 0;
sei();
}
此帖出自
小平头技术问答
1.定时器的相关设置对吗?
2.定时器的时钟源选择有问题吗?
3.定的时间是不是太长了,所以等了很长时间都没来中断
4.ISR(TIMER0_OVF_vect) //中断服务程序 这种方式写中断服务子程序可以吗?
我没用过AVR STUDIO6 ,写法不知道。
5.在单步调试时,注意断点应该设置到中断ISR中,不要设置在while(1);这里
6.其他相关的中断开关设置了没
一周热门 更多>