新手——关于中断服务的问题

2019-03-24 20:42发布

在学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();
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
tiankai001
1楼-- · 2019-03-25 15:52
TCCR0B = 0x00;    //停止计数
让他开始计数啊
俺是做电源的
2楼-- · 2019-03-25 17:16
 精彩回答 2  元偷偷看……
俺是做电源的
3楼-- · 2019-03-25 18:14
中断服务用ISR没问题,我打开STUDIO6自带的一些例子里,都是这么写的。应该是断点的问题了,我没设断点,在中断服务中设置了断点后再运行,就可以跳进去了。
lr2131
4楼-- · 2019-03-25 19:10
原帖由 俺是做电源的 于 2013-3-12 15:33 发表
中断服务用ISR没问题,我打开STUDIO6自带的一些例子里,都是这么写的。应该是断点的问题了,我没设断点,在中断服务中设置了断点后再运行,就可以跳进去了。

还真是被我猜中了,是仿真调试时操作不对,不是代码、编译器、调试器的问题。

一周热门 更多>