4403|10

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

中断及定时器问题 [复制链接]

void main(void)
{P2=0X0F;EA=1;IT1=1;ET0=1;
  TMOD=0X01;
TH0=-5000/256;   //计时0.01秒
TL0=-5000/256;
TR0=1;
FOR(;;);
}
//定时计数器0的中断服务程序
void timer0(void) interupt 1  using 1
{TH0=-5000/256;
TL0=-5000/256;

buffer[0]==100   //计数100
{L3=!L3;L2=!L2;L1=!L1;L0=!L0;}
}  //总的定时是10ms
   

1、计时0.01秒用TH0=-5000/256;   TL0=-5000/256;是怎么算得到的,详细步骤是怎么的。2、为什么中断服务程序里还要重写一遍TH0=-5000/256;   TL0=-5000/256;   


  求求各位大哥大姐指教

最新回复

这是跟据这个程序写的; buffer[0]=0; 为buffer数组的第一个元素重新赋值为0。  详情 回复 发表于 2008-7-30 21:49
点赞 关注

回复
举报

54

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1)假定使用12MHz的晶振,那么,定时器的定时脉冲为晶振频率的1/12,即1MHz。例程中,定时器工作于方式1(TMOD=0X01),所以,定时器0以16位方式定时计数。TH0=-5000/256;  TL0=-5000%256(这里一定是写错了,呵呵);主要是为了凑定时器的定时时间。16位定时器在计数到0xFFFF后会产生溢出中断。-5000的16进制值为0xEC78,再加上0x1388就可以使定时器溢出;而0x1388的10进制值就是5000,也就是,为T0置5000(D)的初值,那么1um×5000,即0.5ms后,定时器会产生一次溢出。
之所以用TH0=-5000/256;  TL0=-5000%256;是因为方便单片机赋值的缘故。-5000/256=0xE7;-5000%256=0x78,这样,与TH0 =0XE7,TL0=0X78就一样了。
2)重写是因为:方式1工作下的定时器在溢出后自已不会重载,要软件手动重载,故重写了一遍。
PS:
     这个程序是有问题的,除了那个"%"以外。在最后的{L3=!L3;L2=!L2;L1=!L1;L0=!L0;} 的花括号里要加一句"buffer[0]=0;",否则,无论你如何改动buffer[0]的判断条件,P0口这几个位的翻转时间都不会有明显的变化。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
写错了,是置了-5000(D),也就是0XEC78,少了个负号。。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 

你选择的计数方式是方式1 ,由TMOD=0x01决定

方式1的定时公式是(T=12*(2^16-a)/f)us////////////////
////////////T是定时的周期;f是晶振;a就是计算出来的初值将其化成十六进制就是TH0和TL0;2^16是2的16次方
为了定时的准确性,因为每次当计数满了以后会产生中断;我们要重新定初值!!!所以在中断函数里要重新定初值!!



 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果你选的是方式2 那他是8位的带自动重新装入的计数器;
在中断里面就不用重新赋值了;

方式1没有自动重新装入的功能;每次计数都要重新装入初值;所以在中断里面要重新赋值;

由上面说的T=12*(2^16-a)/f

可得a=2^16-(f*T)/12;T是定时的时间;f是晶振;a就是计算出来的初值将其化成十六进制就是TH0和TL0;2^16是2的16次方
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢  
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
奇怪了,从你之前的帖子到现在的帖子,怎么TH0/TL0中都有-(负号)呢?从哪里参考的程序?虽然结果不一定有问题,可这样写却是很大的问题。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
为什么了?


cauhorse大哥   buffer[0]=0;应该写为buffer[1]={0}把
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

9
 
程序里还有一个问题
for不能用大写
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

10
 
这要多看看51单片机资料就可以了
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
这是跟据这个程序写的;
buffer[0]=0;
为buffer数组的第一个元素重新赋值为0。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表