SIGNAL (SIG_OVERFLOW0)的几个问题?

zpfst   2009-11-10 12:33 楼主
volatile MyLong32T  counter = 0;         

SIGNAL (SIG_OVERFLOW0)
{

    counter =  counter + 1;
    PollApplication(counter);//输出counter的数值

    TCNT0 = 0; /* reload timer with initial value */
}
int        main(int ac, char *av[])
{

            TCCR0B |= 0x01; //start timer 1分频的
        TCNT0 = 0; //set count
        TIMSK0 = (1 << TOIE0);        //溢出中断使能       
        sei();
        int i;
         for(i=0; i<1000; i++)
        {
            _delay_ms(3);       
        }
}


我这个counter的输出为什么会每次增加256,而不是增加1?

TCNT0超过0xFF就会中断,然后就会转到SIGNAL 函数吗?

每中断一次就会调用一次SIGNAL 函数吗?还是SIGNAL 函数一直在运行?

回复评论 (12)

SIGNAL 是中断服务程序么?中断服务程序地址设置了么?
点赞  2009-11-10 12:39
SIGNAL (SIG_OVERFLOW0)  这个就是一个中断服务程序的  我确定  
点赞  2009-11-10 12:41
如果是中断服务程序,每中断一次就会调用一次SIGNAL 函数
点赞  2009-11-10 12:51
在主函数 应该一直等待中断  while(1); 如果有中断 就会进入中断服务程序后运行
点赞  2009-11-10 12:54
那我的counter为什么会256递增呢?  而不是1递增?
点赞  2009-11-10 13:01
PollApplication????什么函数?能把代码贴出来不?
点赞  2009-11-10 13:05
void        PollApplication(MyLong32T data)
{
        int i;
        MyByte8T buf[4];
        for(i=0; i<4; i++)
        {
                buf = ((char *)(&data));
        }
        Myputchars(buf,4);
}

一个输出char型数组的函数,这个是对的  ,已经验证过了 。
点赞  2009-11-10 13:08
单步调试,看看到  counter =  counter + 1; 这 ,counter 是多少
点赞  2009-11-10 13:10
buf = ((char *)(&data)); ???这句话对吗?
点赞  2009-11-10 13:14
就是我用的软件他调试不了  才来问的啊  悲剧啊。。。。
点赞  2009-11-10 13:15
PollApplication 感觉这个函数乖乖的,你这样测序一下,就单独调用这个函数 入口参数给1 看输出出来的对不?
点赞  2009-11-10 13:19
对的  呵  无语了 。。。
点赞  2009-11-10 13:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复