标题: 在外部中断停止定时器后,后面单片机代码就没有反应了不运行了,什么问题 [打印本页]

作者: 鬼推磨    时间: 2022-12-16 21:28
标题: 在外部中断停止定时器后,后面单片机代码就没有反应了不运行了,什么问题
在外部中断停止定时器后,后面代码就没有反应了。不运行了,什么问题?
能停止,但在中断代码里再也不能启动定时器了

单片机源程序如下:
void Int4()        interrupt 16                //外部中
{

        TR0=0;//停止定时器
              MS1=0;
              MS2=1;
Delayms(100);
        TR0=1;//启动
              Dir=0;//正转
        Delayms(1000);
           TR0=0;//停止

}


作者: 鬼推磨    时间: 2022-12-16 21:29
下面主程序,我按一下按钮,可以运行有动作的。上面是外部中断和定时器不能在一起使用吗?


void main()
{
        Timer0Init();//        初始化定时器中断0
                Int4Init();  //        初始化外部中断4

        EN=0;
        MS1=1;
        MS2=0;
        MS3=0;

                               
       
        while(1)
        {
  if(KEY1==0)  //判断是否按下键盘
        {
                Delayms(10); //延时,软件去干扰
                if(KEY1==0)   //确认按键按下
                {

                       

                               
                                MS1=1;
              MS2=0;
   
               
Dir=1;//反转
Delayms(3000);
TR0=0;//停止
                               

                       

                }
                while(KEY1==0);//按键锁定,每按一次count只加1.
        }

       
       
       

       
       
        }
}

作者: devcang    时间: 2022-12-17 10:12
不要在中断中,做这种耗时的活  Delayms(1000);
作者: 鬼推磨    时间: 2022-12-17 10:45
devcang 发表于 2022-12-17 10:12
不要在中断中,做这种耗时的活  Delayms(1000);

谢谢回复,。我自己找到办法了,。解决完美
在中断里加上  这两句就可以后面执行了,

        PT0=1;//把定时器中断优先级别提最高
        PX0=0;//把外部中断优先级别降最低






然后再在主程序main
        while(1)循环里。把中断优先级别改回就完美了运行,没有差错了










欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1