標題: 求大神解答調(diào)速原理,為什么中斷程序有自加?? [打印本頁]

作者: 夏日有余暉    時間: 2016-7-30 21:42
標題: 求大神解答調(diào)速原理,為什么中斷程序有自加??
# include "reg52.h"
# define uint unsigned int;
# define uchar unsigned uchar;
uint timer0,count,value,DIR;
sbit pwm0=P2^0;


void timer_0() interrupt 1
{
  TH0=0XFF;        //1us
  TL0=0XFF;
  timer0++;
  count++;

}


void timer0on()
{
  TMOD|=0X01;//設(shè)置定時器工作方式,
  TH0=0XFF;
  TL0=0XFF;
  EA=1;
  TR0=1;                  //打開內(nèi)部定時器
  ET0=1;                 //打開定時器t0
}


void main()
{

  timer0on();
  while(1)
  {   
                  if(count>200)
                     {
                            count=0;
                              if(DIR==1)
                                     {
                                          value++;
                                  }
                              if(DIR==0)
                                     {
                                          value--;
                                  }
                  
                   }
                   if(value==1000)
                           {
                           DIR=0;
                         }
          
                   if(value==0)
                           {
                           DIR=1;
                         }
          if(timer0>1000)         //定時1000us
              timer0=0;
          if(timer0<value)
                  pwm0=0;
           else
            pwm0=1;
  }
}



作者: PK250    時間: 2016-8-1 22:06
那樣時長才夠
作者: 夏日有余暉    時間: 2016-8-2 16:58
PK250 發(fā)表于 2016-8-1 22:06
那樣時長才夠

請問中斷被打開之后,不使用軟件關(guān)閉的話就會無限循環(huán)
作者: PK250    時間: 2016-8-2 17:05
也是蠻6的,為了定時200us愣是讓中斷響應(yīng)了200次,cpu啥都沒干,一直在響應(yīng)中斷了。。。。。
作者: PK250    時間: 2016-8-2 17:08
cpu一直在響應(yīng)定時器的中斷,并不是進入了死循環(huán)
作者: 夏日有余暉    時間: 2016-8-2 17:12
PK250 發(fā)表于 2016-8-2 17:08
cpu一直在響應(yīng)定時器的中斷,并不是進入了死循環(huán)

那也就是說中斷程序只執(zhí)行一次
作者: PK250    時間: 2016-8-2 17:15
假設(shè)你的晶振是12M的,除以12分頻等于1M,那么你的機械周期就是1us,也就是說每個機械周期內(nèi)都有中斷標志位溢出,cpu一直在忙著響應(yīng)中斷哪有時間跑代碼。。。。
作者: PK250    時間: 2016-8-2 17:16
夏日有余暉 發(fā)表于 2016-8-2 17:12
那也就是說中斷程序只執(zhí)行一次

不是,cpu一直在響應(yīng)中斷,沒時間處理其它代碼
作者: PK250    時間: 2016-8-2 17:22
假設(shè)你的晶振是12M的,那么你的機械周期就是1us,每一個機械周期都有中斷需要cpu去響應(yīng),你應(yīng)該把定時器的時間定長一點比如定到50或者100,200us都可以,就是不要定到1us
作者: 夏日有余暉    時間: 2016-8-2 17:32
PK250 發(fā)表于 2016-8-2 17:22
假設(shè)你的晶振是12M的,那么你的機械周期就是1us,每一個機械周期都有中斷需要cpu去響應(yīng),你應(yīng)該把定時器的 ...

謝謝  懂了
作者: 土魚王子    時間: 2016-8-8 09:23
你這個中斷處理程序類似于時間片的多時間軸,但是中斷間隔太短了,可以把定時器中斷的時間改到100us都是可以的。




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