打印

C51单片机定时器问题请教

[复制链接]
2455|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
银色盒子|  楼主 | 2011-3-11 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Timer0_isr(void) interrupt 1 using 1
{num++;
if(num==10)
{
   num=0;
   TH0=(65536-500)/256;               
  TL0=(65536-500)%256;                                 
   OUT=~OUT;
}
为什么这个定时函数与
Timer0_isr(void) interrupt 1 using 1
{
   TH0=(65536-5000)/256;               
  TL0=(65536-5000)%256; ;                                       
   OUT=~OUT;
}
延时效果大不相同啊
总程序为:
#include<reg52.h>
sbit OUT=P1^2;   
unsigned char num=0;
void Init_Timer0(void)
{
TMOD |= 0x01;                              
//TH0=0x00;            
//TL0=0x00;
EA=1;            
ET0=1;        
TR0=1;        
}
main()
{
Init_Timer0();
while(1);
}

void Timer0_isr(void) interrupt 1 using 1
{num++;
if(num==10){
   num=0;
TH0=(65536-500)/256;                 
TL0=(65536-500)%256;        
OUT=~OUT; }      
}
本人自学,知道这问题很简单。但实在想不出为什么,又苦于身边没人指点,望高手能为我点拨一下,不胜感激!!!

相关帖子

沙发
心静自然凉| | 2011-3-11 12:58 | 只看该作者
Timer0_isr(void) interrupt 1 using 1
{num++;
if(num==10)
{
   num=0;
   TH0=(65536-500)/256;               
  TL0=(65536-500)%256;                                 
   OUT=~OUT;
}

问题出现在这个函数里。
当第一次进入中断时,你没有给定时/计数器重新置数,它会从0开始记,所以
“TH0=(65536-500)/256;               
  TL0=(65536-500)%256;     ”
要放在if函数外。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
银色盒子 + 1
板凳
ayb_ice| | 2011-3-11 13:22 | 只看该作者
一个初值每次重装, 一个是10次才重装一次,另外9次都自由运行的,也就是最大定时时间65536个周期

使用特权

评论回复
地板
wang_2003| | 2011-3-11 15:59 | 只看该作者
我同意楼上所说的~

使用特权

评论回复
5
jesse7022| | 2011-3-11 16:32 | 只看该作者
TH0=(65536-500)/256;               
  TL0=(65536-500)%256;     
在程序开始时算好,不要在中断中作运算,影响精度

使用特权

评论回复
6
银色盒子|  楼主 | 2011-3-11 18:00 | 只看该作者
非常受用,非常感谢大家!

使用特权

评论回复
7
sdpz| | 2011-3-11 19:05 | 只看该作者
5楼在误人子弟。

使用特权

评论回复
8
zjswuyunbo| | 2011-3-11 19:08 | 只看该作者
对5楼无语!

使用特权

评论回复
9
zjswuyunbo| | 2011-3-11 19:09 | 只看该作者
有点搞笑…

使用特权

评论回复
10
bh7kve| | 2011-3-12 00:54 | 只看该作者
Timer0_isr(void) interrupt 1 using 1
{
   num++;
   TH0=(65536-500)/256;               
   TL0=(65536-500)%256;  
   if(num==10)
   {
      num=0;
      OUT=~OUT;
   }
}

使用特权

评论回复
11
sunsheng123| | 2011-3-12 01:23 | 只看该作者
一楼对的~~

使用特权

评论回复
12
angehan| | 2011-3-12 09:18 | 只看该作者
对啊。。没重置初值诶。。。而且进10次中断和进一次中断调用中断用的时间肯定差了不少啦。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

58

帖子

2

粉丝