标题:
程序死在中断里面出不来
[打印本页]
作者:
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