找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2688|回复: 10
打印 上一主题 下一主题
收起左侧

求大神解答调速原理,为什么中断程序有自加??

[复制链接]
跳转到指定楼层
楼主
ID:134288 发表于 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;
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:121156 发表于 2016-8-1 22:06 | 只看该作者
那样时长才够
回复

使用道具 举报

板凳
ID:134288 发表于 2016-8-2 16:58 | 只看该作者

请问中断被打开之后,不使用软件关闭的话就会无限循环
回复

使用道具 举报

地板
ID:121156 发表于 2016-8-2 17:05 | 只看该作者
也是蛮6的,为了定时200us愣是让中断响应了200次,cpu啥都没干,一直在响应中断了。。。。。
回复

使用道具 举报

5#
ID:121156 发表于 2016-8-2 17:08 | 只看该作者
cpu一直在响应定时器的中断,并不是进入了死循环
回复

使用道具 举报

6#
ID:134288 发表于 2016-8-2 17:12 | 只看该作者
PK250 发表于 2016-8-2 17:08
cpu一直在响应定时器的中断,并不是进入了死循环

那也就是说中断程序只执行一次
回复

使用道具 举报

7#
ID:121156 发表于 2016-8-2 17:15 | 只看该作者
假设你的晶振是12M的,除以12分频等于1M,那么你的机械周期就是1us,也就是说每个机械周期内都有中断标志位溢出,cpu一直在忙着响应中断哪有时间跑代码。。。。
回复

使用道具 举报

8#
ID:121156 发表于 2016-8-2 17:16 | 只看该作者
夏日有余晖 发表于 2016-8-2 17:12
那也就是说中断程序只执行一次

不是,cpu一直在响应中断,没时间处理其它代码
回复

使用道具 举报

9#
ID:121156 发表于 2016-8-2 17:22 | 只看该作者
假设你的晶振是12M的,那么你的机械周期就是1us,每一个机械周期都有中断需要cpu去响应,你应该把定时器的时间定长一点比如定到50或者100,200us都可以,就是不要定到1us
回复

使用道具 举报

10#
ID:134288 发表于 2016-8-2 17:32 | 只看该作者
PK250 发表于 2016-8-2 17:22
假设你的晶振是12M的,那么你的机械周期就是1us,每一个机械周期都有中断需要cpu去响应,你应该把定时器的 ...

谢谢  懂了
回复

使用道具 举报

11#
ID:136253 发表于 2016-8-8 09:23 | 只看该作者
你这个中断处理程序类似于时间片的多时间轴,但是中断间隔太短了,可以把定时器中断的时间改到100us都是可以的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表