打印

我做的20分钟定时显示为什么定时不准呢??

[复制链接]
1741|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangpeng59|  楼主 | 2013-6-17 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是一个简单的20分钟定时,20分钟后蜂鸣器响3声。晶振频率11.0592,可是时间过去了20分钟,它只是显示到15分钟左右,请问问题出在哪里?
使用的是T0,方式1,定时50ms产生中断,累计20次为1S

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code seg_data[]={0xC0,0xF9,0xaA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uint count=0;
uint second=0;
uint minute=0;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit BEEP=P3^7;
void Delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
   for(j=115;j>0;j--);
}
void main()
{
uchar k;
TMOD=0x01;
EA=1;
ET0=1;
TH0=0x4c;      //定时50ms初值
TL0=0x00;
TR0=1;
while(1)
{
  if(second>=60)  
  {second=0; minute++;}
  if(minute>=20)
  {
   minute=0;
   TR0=0;
   for(k=0;k<3;k++)
   {
    BEEP=0;                             //蜂鸣器鸣叫
Delay_ms(500);
BEEP=1;
Delay_ms(500);
   }
   }
  P0=seg_data[second%10];            //分钟和秒的显示
  P20=0;
  Delay_ms(1);
  P20=1;
  P0=seg_data[second/10];
  P21=0;
  Delay_ms(1);
  P21=1;
  P0=0xbf;
  P22=0;
  Delay_ms(1);
  P22=1;
  P0=seg_data[minute%10];
  P23=0;
  Delay_ms(1);
  P23=1;
  P0=seg_data[minute/10];
  P24=0;
  Delay_ms(1);
  P24=1;
  
}  
}
void display() interrupt 1       //TO中断函数
{
  count++;
  if(count==20)
  {
   count=0;
   second++;
   }

  }

相关帖子

沙发
ayb_ice| | 2013-6-17 15:42 | 只看该作者
初值都不更新,准才怪了

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
wangpeng59 + 3
板凳
wangpeng59|  楼主 | 2013-6-17 15:57 | 只看该作者
刚才发现了,谢谢!cancel it

使用特权

评论回复
地板
dirtwillfly| | 2013-6-17 20:38 | 只看该作者
能者自答,楼主很赞

使用特权

评论回复
5
ningling_21| | 2013-6-17 21:15 | 只看该作者
除了上面的问题以外,做定时,这个晶振不太合适...

使用特权

评论回复
6
ayb_ice| | 2013-6-18 07:54 | 只看该作者
ningling_21 发表于 2013-6-17 21:15
除了上面的问题以外,做定时,这个晶振不太合适...


定时整数x5MS,这个晶掁比12M要好

使用特权

评论回复
7
wangpeng59|  楼主 | 2013-6-19 21:55 | 只看该作者
dirtwillfly 发表于 2013-6-17 20:38
能者自答,楼主很赞

啥意思啊?我可不是能者,呵呵

使用特权

评论回复
8
wangpeng59|  楼主 | 2013-6-19 21:56 | 只看该作者
ningling_21 发表于 2013-6-17 21:15
除了上面的问题以外,做定时,这个晶振不太合适...

你是说12M要好些吗?对我这个初级的要求,可以了我觉得

使用特权

评论回复
9
ningling_21| | 2013-6-20 08:53 | 只看该作者
wangpeng59 发表于 2013-6-19 21:56
你是说12M要好些吗?对我这个初级的要求,可以了我觉得

是这样的

使用特权

评论回复
10
dirtwillfly| | 2013-6-20 09:01 | 只看该作者
wangpeng59 发表于 2013-6-19 21:55
啥意思啊?我可不是能者,呵呵

只要是肯钻研,能解决自己问题的人,都应该鼓励

使用特权

评论回复
11
wh6ic| | 2013-6-20 09:40 | 只看该作者
11.0592MHz很适合51核的定时,它的大多常用定时参数能被256整除,这样中断处理定时参数恢复时,可以不考虑低字节的补偿,仅恢复高字节就行了。

使用特权

评论回复
12
lqfy| | 2013-6-20 16:43 | 只看该作者
好像学到了点东西

使用特权

评论回复
13
943096020| | 2013-6-20 18:27 | 只看该作者
学习学习

使用特权

评论回复
14
wangpeng59|  楼主 | 2013-6-24 11:16 | 只看该作者
我这么一个简单的问题,都能引出有用的知识,谢谢大家!

使用特权

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

本版积分规则

39

主题

217

帖子

2

粉丝