標題: 在外部中斷停止定時器后,后面單片機代碼就沒有反應了不運行了,什么問題 [打印本頁]

作者: 鬼推磨    時間: 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 發(fā)表于 2022-12-17 10:12
不要在中斷中,做這種耗時的活  Delayms(1000);

謝謝回復,。我自己找到辦法了,。解決完美
在中斷里加上  這兩句就可以后面執(zhí)行了,

        PT0=1;//把定時器中斷優(yōu)先級別提最高
        PX0=0;//把外部中斷優(yōu)先級別降最低






然后再在主程序main
        while(1)循環(huán)里。把中斷優(yōu)先級別改回就完美了運行,沒有差錯了










歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1