64

帖子

0

TA的资源

一粒金砂(中级)

21
 
TH0=(65536-5*110592/12)/256;
TL0=(65536-5*110592/12)%256
不好意思。还要除个12。。
此帖出自51单片机论坛
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

22
 

回复 14楼 sj777209 的帖子

我晕!
还没懂。
FFFFFFFF是多少?
16位计数器什么时候溢出?

不过在这里问题还不大,只是多了1,我之前是以为65536等同于0
但是,这里必须是65535,这个事毋庸置疑的,你好好看定时器那一部分的内容

[ 本帖最后由 辛昕 于 2011-8-10 17:10 编辑 ]
此帖出自51单片机论坛
 
个人签名

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

 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

23
 

回复 22楼 辛昕 的帖子

他计数的范围是0到65535,他的最大计数值是65536,所以就应该用65536是对的
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

16

TA的资源

版主

24
 

回复 15楼 sj777209 的帖子

在中断里全局a++,a.=60的话。设个旗标Flagtimeover=1;
然后delay()函数判断这个标志不是1就死等,是1清零后跳出delay().不用把程序给编出吧
此帖出自51单片机论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

210

帖子

0

TA的资源

一粒金砂(中级)

25
 

回复 14楼 sj777209 的帖子

中断函数都没有,你这样只赋初值是无任何意义的。。
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

26
 

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P2^0;
sbit key2=P1^0;
char counter20,a;
void init();
void delay();
void main()

 init();
 while(1)
 {
  if(key1==0)
  {
   key2=0;
   delay();
   key2=!key2;
   delay();
  }
  if(key1==1)
  {
   key2=1;
   init();
  }
 }
}
void init()
{
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
}
void delay()
{
  do{/*等待*/}while(a<60);
  if(a>=60) a=0;
}
void timer50ms(void) interrupt 1
{
  TL0=15536%256;//假设12MHz
  TH0=15536/256;
  counter20++;
  if(counter20==20) //50ms*20=1s
  { 
    counter20=0;
    a++; 
  }
}

楼主虽然是开了中断,但是实际上没用到中断,
所以要加一个中断的了程序,所以二楼说的对,
你所要的延时程序也太长了吧。。。
上面只是我对楼主所写的理解加上了中断程序,
还没验证的。。

此帖出自51单片机论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

27
 
你直接用中断写 不就搞定了!  你这样写需要去判断寄存器 IF  不然你咋知道的 什么时候重新赋初值 进行a0++的?
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

28
 

原帖由 辛昕 于 2011-8-10 17:09 发表 我晕!还没懂。 FFFFFFFF是多少? 16位计数器什么时候溢出? 不过在这里问题还不大,只是多了1,我之前是以为65536等同于0 但是,这里必须是65535,这个事毋庸置疑的,你好好看定时器那一部分的内容

 

额…………如果非要讨论这个的话,也不是FFFFFFFF(4294967265),是FFFF(65535)。。

确实65536(unsigned int)等同于0,65536-50000和0-50000是一样的,在单片机上也是按照0-50000来编译,但是结果一样,是15536(-50000的补码)。

[ 本帖最后由 potatokid4 于 2011-8-12 15:38 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

29
 
楼主这个程序写的很给力啊!用软件延时套硬件延时!既然你都用到定时器了!为什么不直接在定时器的中断里面写!?
此帖出自51单片机论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

30
 

回复 29楼 aifei7320 的帖子

就是忘记了。。。而且定时中断不能反复调用。。。
此帖出自51单片机论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

31
 

回复 20楼 Evil维 的帖子

“T1工作状态下最大定时时间为65ms ”

我觉得那个最大定时时间应该取决于单片机所接的晶振吧

无论是书上还是什么教材上的都默认晶振是12MHZ的
此帖出自51单片机论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

32
 

回复 24楼 ddllxxrr 的帖子

要反复循环的,而且a是放在中断函数里,无法在主程序中像调用delay函数一样反复调用interrupt的。。。
此帖出自51单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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