标题: 求大神解答调速原理,为什么中断程序有自加?? [打印本页]

作者: 夏日有余晖    时间: 2016-7-30 21:42
标题: 求大神解答调速原理,为什么中断程序有自加??
# 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;//设置定时器工作方式,
  TH0=0XFF;
  TL0=0XFF;
  EA=1;
  TR0=1;                  //打开内部定时器
  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 发表于 2016-8-1 22:06
那样时长才够

请问中断被打开之后,不使用软件关闭的话就会无限循环
作者: PK250    时间: 2016-8-2 17:05
也是蛮6的,为了定时200us愣是让中断响应了200次,cpu啥都没干,一直在响应中断了。。。。。
作者: PK250    时间: 2016-8-2 17:08
cpu一直在响应定时器的中断,并不是进入了死循环
作者: 夏日有余晖    时间: 2016-8-2 17:12
PK250 发表于 2016-8-2 17:08
cpu一直在响应定时器的中断,并不是进入了死循环

那也就是说中断程序只执行一次
作者: PK250    时间: 2016-8-2 17:15
假设你的晶振是12M的,除以12分频等于1M,那么你的机械周期就是1us,也就是说每个机械周期内都有中断标志位溢出,cpu一直在忙着响应中断哪有时间跑代码。。。。
作者: PK250    时间: 2016-8-2 17:16
夏日有余晖 发表于 2016-8-2 17:12
那也就是说中断程序只执行一次

不是,cpu一直在响应中断,没时间处理其它代码
作者: PK250    时间: 2016-8-2 17:22
假设你的晶振是12M的,那么你的机械周期就是1us,每一个机械周期都有中断需要cpu去响应,你应该把定时器的时间定长一点比如定到50或者100,200us都可以,就是不要定到1us
作者: 夏日有余晖    时间: 2016-8-2 17:32
PK250 发表于 2016-8-2 17:22
假设你的晶振是12M的,那么你的机械周期就是1us,每一个机械周期都有中断需要cpu去响应,你应该把定时器的 ...

谢谢  懂了
作者: 土鱼王子    时间: 2016-8-8 09:23
你这个中断处理程序类似于时间片的多时间轴,但是中断间隔太短了,可以把定时器中断的时间改到100us都是可以的。




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