Board logo

标题: 程序死在中断里面出不来 [打印本页]

作者: zhouweibit    时间: 2010-8-20 11:01     标题: 程序死在中断里面出不来

程序吐下如下:
void IC_Init(void){
    TSCR1=0x80;//时钟允许
    TSCR2=0x04;//div by 16
    TCTL3=0x40;//c-输入捕捉7任何沿有效,            
    TCTL4=0x01;//0表示ICx禁止, 1表示上升沿, 2表示下降沿, 3表示任何沿      
    TIE  =0x81;//每一位对应相应通道中断允许,0表示禁止中断
    TIOS =0x00;//每一位对应通道的: 0输入捕捉,1输出比较
    }
unsigned char Tc0IsrFlag=0;
unsigned char Tc0FirstIsrFlag=1,Input_Num;
int tc0=0,tc0last=0;
int period=0;
void main(void) {
DDRB=0xff;
setbusclock();
PWM_Init();
IC_Init();
EnableInterrupts;
for(;;){
if(Tc0IsrFlag){
tc0=TC0;
if(Tc0FirstIsrFlag==1) Tc0FirstIsrFlag=0;
else period=tc0-tc0last;
tc0last=tc0;
Tc0IsrFlag=0;
}

}

}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 ISR_TimerChan0(void) {
Tc0IsrFlag=1;
TFLG1_C0F=1;
}

我单步执行的时候,程序进入中断以后就一直在中断服务程序里面,回不到主程序。不知道问题出在哪儿?哪位高手帮我看一下
作者: zhouweibit    时间: 2010-8-20 14:31

没有人知道吗?
作者: flexraybeginer    时间: 2010-8-20 15:00

是不是中断标志位没清零
作者: zhouweibit    时间: 2010-8-20 15:07

3# flexraybeginer

清零了啊,
TFLG1_C0F=1;这句话就是把标志位清零的
作者: baishaohua    时间: 2010-8-24 15:57

看是否有干扰
作者: hanqi1236    时间: 2010-8-24 18:50

你的中断用的是边沿触发还是电平触发,如果是电平触发的话会有问题,建议用边沿触发
作者: zephanshaka    时间: 2010-8-26 21:08

在你单步执行时中断时间早到了,当然会进中断。
如果是BDM的话,连接时选择disable ISR when step ……
这样在调试的时候就不会进可屏蔽中断了。
作者: zhouweibit    时间: 2010-8-27 13:49

楼上正解,多谢!
作者: Henry_Yu    时间: 2010-9-3 22:45

TFLG1_C0F=1;
是不是按Bit清的?看看书吧,应该按byte清除响应位,否则会有清掉其它中断。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0