首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

程序死在中断里面出不来

程序死在中断里面出不来

程序吐下如下:
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;
}

我单步执行的时候,程序进入中断以后就一直在中断服务程序里面,回不到主程序。不知道问题出在哪儿?哪位高手帮我看一下
没有人知道吗?
是不是中断标志位没清零
3# flexraybeginer

清零了啊,
TFLG1_C0F=1;这句话就是把标志位清零的
看是否有干扰
你的中断用的是边沿触发还是电平触发,如果是电平触发的话会有问题,建议用边沿触发
在你单步执行时中断时间早到了,当然会进中断。
如果是BDM的话,连接时选择disable ISR when step ……
这样在调试的时候就不会进可屏蔽中断了。
楼上正解,多谢!
TFLG1_C0F=1;
是不是按Bit清的?看看书吧,应该按byte清除响应位,否则会有清掉其它中断。
Bootloader,TCP/IP, 数字化电源控制 MCU应用专家 QQ:524673287
返回列表