打印

新手发帖:如何能产生1S的精确延时?

[复制链接]
1375|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#define uchar unsigned char
#define uint  unsigned int
#include <reg52.h>
uchar num=0,i=0;
unsigned char code Tab[]=
{
0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,
0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E
};
void main(void)
{
TH0=0x3c;
TL0=0xb0;
TMOD=0x01;//设置定时器0为工作方式0(0000 0000)
EA=1;  //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1)
{
  if(num==20)
  {P1=Tab;
  i++;
  num=0;}
  if(i>15)
  i=0;
}
}
void T0_time() interrupt 1
{   
TH0=0x3c;
TL0=0xb0;
num++;  
}
[url=]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[/url]我是华丽的分割线[url=]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[/url]
这是我写的一段程序,目的是为了让数码管每个1S显示一个数字,使用keil仿真的时候,可以看到第一次显示时间是1.000619S,十次后时间是10.001736S,时间略有偏差,那么究竟每次耗费的0.0006S时间是用到了哪里呢?有无办法实现1.000000000000……S的精确定时?

相关帖子

沙发
macrostar|  楼主 | 2009-8-11 08:47 | 只看该作者
keil软件仿真截图

1.jpg (47.08 KB )

1.jpg

2.jpg (54.23 KB )

2.jpg

使用特权

评论回复
板凳
auzxj| | 2009-8-11 08:57 | 只看该作者
耗在这三句话上了:
TH0=0x3c;
TL0=0xb0;
num++;

使用特权

评论回复
地板
auzxj| | 2009-8-11 08:58 | 只看该作者
准确的说是前两句

使用特权

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

本版积分规则

3

主题

7

帖子

1

粉丝