11758|31

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

51定时器是否可以重复使用 [复制链接]

请教大家,我在做一个51单片机 定时关闭直流电机,定时开启直流电机的实验,我用了分别用了T0,T1两个定时器,这两个功能互相独立,是共用同一个电机,一次只能实现

 

一个功能,没问题,现在请问大家。那是否可以压缩成一个定时器来使用,就是无论定时开启还是定时关闭,都是只用其中一个定时器,感觉用2个定时器太浪费了?我曾经试过,没成功,谢谢~~~

此帖出自51单片机论坛

最新回复

唯一的心得就是,遇到问题,找出原因。 在这个过程里,你唯一需要知道的是:到底上哪去找这个答案,并且,要怎样做,才能把相应的一系列问题一并解决了。 这个时侯你就知道那些基础是你真正需要的了。  详情 回复 发表于 2011-11-12 14:47
点赞 关注
 

回复
举报

315

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

if(type==0)

{

if(cnt==cnt_max1) 

{

  type=!type;

 /*执行程序*/

}

}

else

{

if(cnt==cnt_max2) 

 type=!type;

/*执行程序*/

}

}

此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 

回复 沙发 孤獨の快樂 的帖子

我来解释一下把。就是一个时标的功能吧。。。。就是比如你要在第2秒的时候开第5秒的时候关,那么我可以用一个定时器产生一个1s的单位时间并设置一个变量比如temp,每一次到了1s就让temp自己加1,然后在主函数里面判断如果到了temp>2秒执行开电机,到了temp>5s关电机。。。 不知道理解不。。。
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

4
 
谢谢以上两位!!
其实我的功能是这样的,比如说打开实验板电源,T0,T1,都是为0,电机不转,先是设定时间,现在键盘设定时间5S后关闭,确定后,T0工作,电机马上转动,5,4,3,2,1,到0的时候电机关闭,只要不去操作,是一直关闭的。可以在运行的过程中重新设定定时关机和定时开机

定时开机也是一样,设定定时开机时间,比如说5S后开机,确定后,T1工作,5,4,3,2,1,0的时候电机马上开启,只要不去操作它,电机一直转动下去。可以在运行的过程中重新设定定时关机和定时开机。

这样就用了2个定时器,两位提供的参考,不太懂。。。
此帖出自51单片机论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

5
 
在定时中断里设置一个 计数器,也就是一个变量,静态变量,持续计时,然后,这个计数器不同数值对应不同时间。
在不同的时间启动不同的功能,就行了。
这个能懂吧?

再理解不了,把你的程序贴上来,我给你示范一下怎么用
此帖出自51单片机论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

4005

帖子

0

TA的资源

版主

6
 
用全局变量 delay1 delay2 。。。
在中断服务中:
if (delay1) delay1--;
if (delay2) delay2--;
。。。
主程序中如果delayX==0 则延时已过执行再复初值。
初值视频率和延时时间来决定。如果中断频率高则计时精确开销也大。
此帖出自51单片机论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

7
 
一个定时器完全可以滴
此帖出自51单片机论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

8
 
如P10控制电机,每次定时时间到,就~P10即可!
此帖出自51单片机论坛
 
 
 

回复

160

帖子

0

TA的资源

一粒金砂(中级)

9
 
学习了
此帖出自51单片机论坛
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

10
 
:rose: :rose: :rose: :carnation: :carnation:
此帖出自51单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

11
 
学习了……
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 5楼 辛昕 的帖子


以上就是中断的程序,今天又试了好久,依旧没有成功,请指点,谢谢~~~~

/****************************定时器0初始化***************************************************/
void Timer0_init()

{
TMOD=0x01;
IE=0x82;
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
TR0=1;
}


/*****************************定时器0中断******定时关机***********************************************/
void Time0_Init() interrupt 1

{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
Count1++;

if(Count1==20)
{
Count1=0;
miao1--;
if(miao1==-1)
{
fen1--;
miao1=59;

if(fen1==-1)
{
shi1--;
fen1=59;

if(shi1==0)
{
shi1=0;

}
write_djs(1,shi1);

}

write_djs(3,fen1);
}

write_djs(5,miao1);
}

if(miao1==0&&fen1==0&&shi1==0&&m==1)
{
TR0=0;
RELAY=0; //继电器关闭,电机关闭
}
}
/***************************定时器1初始化**********************************************************/
void Timer1_init()

{
TMOD=0x11;
IE=0x88;
TH1 = (65536-45872)/256;
TL1 = (65536-45872)%256;
TR1=1;
}
/*****************************定时1中断******定时开机***********************************************/
void Time1_Init() interrupt 3

{
TH1 = (65536-45872)/256;
TL1 = (65536-45872)%256;
Count2++;

if(Count2==20)
{
Count2=0;
miao1--;
if(miao1==-1)
{
fen1--;
miao1=59;

if(fen1==-1)
{
shi1--;
fen1=59;

if(shi1==0)
{
shi1=0;

}
write_djs(1,shi1);

}
write_djs(3,fen1);
}

write_djs(5,miao1);
}

if(miao1==0&&fen1==0&&shi1==0)
{
TR1=0;
RELAY=1; //继电器工作,电机开启
}
}

此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

13
 

回复 12楼 mianbaoyjttao 的帖子

你好请问你的所谓的定时是不是一开始输入比如几时几分几秒开机然后几时几分几秒关机,这些时间的设定是通过键盘之类的设置好的吗?然后给单片机上电之后他开始,思路有点像闹钟,类似于可以设置两个时间点得闹钟,不知道我的理解对吗,只有知道你要做什么我们才好给你建议啊。。。。
此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

14
 

回复 13楼 小小白 的帖子

如果不介意的话可以把功能介绍和原理图什么的都发上来啊,然后我们写给你看看,大家集思广益啊。。。。
此帖出自51单片机论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(中级)

15
 
write_djs()不知道是做什么用,建议把在放在外面用,提供精度

if(miao1==0&&fen1==0&&shi1==0)
{
TR1=0;
RELAY=1; //继电器工作,电机开启
}
}
这语句中可以加个变量,用来RELAY的操作
此帖出自51单片机论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

16
 
I                   服了       you

不识庐山真面目
此帖出自51单片机论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

17
 

#include<reg51.h>
#include<INTRINS.H>
unsigned char Count1,fen1,shi1,miao1;
sbit RELAY=P1^0;
void main(void)
{
TMOD=0x01;
IE=0x82;
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
TR0=1;
while(1);//按键或别滴程序
}

void T0_Int() interrupt 1
{
  TH0 = (65536-45872)/256;
  TL0 = (65536-45872)%256;
  Count1++;
  if(Count1==20)
  {
    Count1=0;
    miao1--;
    if(miao1==-1)
    {
      fen1--;
      miao1=59;
      if(fen1==-1)
      {
        //TR0=0;在按键中启动
        shi1--;
        fen1=59;
        if(shi1==0)shi1=0;
        shi1=0;
        miao1=0;
        fen1=0;
        RELAY=~RELAY; //继电器动作
      }
    }
  }
}

[ 本帖最后由 xu__changhua 于 2011-11-8 09:45 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

18
 
继电器这种东西还要精度有意义吗?毫秒级控制足够了
此帖出自51单片机论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

19
 

回复 17楼 xu__changhua 的帖子

呵呵,谢谢啊,请教一下啊,我在给一些人看一些程序的时候,他们告诉我在写程序的时候中断函数要尽可能的短小,说是要养成习惯,因为以后会出现因为一个中断在执行,又出现另一个中断的情况啊,不知道具体怎么解释啊。
此帖出自51单片机论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

20
 

回复 楼主 mianbaoyjttao 的帖子

设置2个不同的全局变量t1和t2即可,定时器定时100ms,每次记满t1和t2加1,t1加到20控制电机启,清零,t2加到50控制电机停,清零。
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表