微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么用一下程序写的时钟每10秒就会比正常的时钟慢1秒

为什么用一下程序写的时钟每10秒就会比正常的时钟慢1秒

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
sbit P3_5=P3^5;
sbit du=P2^6;
sbit we=P2^7;
unsigned char i=0,j=0,z=0;
unsigned code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code wei[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void init_Timer(void)
{
        TMOD |=0x61;
        TH0=0x3c;
        TL0=0xb0;
        TH1=0xf6;
        TL1=0xf6;
        EA=1;
        ET0=1;ET1=1;
        TR0=1;TR1=1;//定时器0计数器1初始化       
}
void delay(unsigned int t)
{
        unsigned int n;
        unsigned char j;
        for(n=t;n>0;n--)
            for(j=110;j>0;j--);
}
void display()
{       
        unsigned int scon1,scon2,min1,min2,hou1,hou2;
        scon1=i%10;                        du=1;P0=table[scon1];du=0;                 we=1;P0=0xdf;we=0;        delay(4);
        scon2=i/10;                        du=1;P0=table[scon2];du=0;                 we=1;P0=0xef;we=0;        delay(4);
        min1=j%10;                        du=1;P0=table[min1]|0x80;du=0;   we=1;P0=0xf7;we=0;        delay(4);
        min2=j/10;                        du=1;P0=table[min2];du=0;            we=1;P0=0xfb;we=0;        delay(4);
        hou1=z%10;                        du=1;P0=table[hou1]|0x80;du=0;   we=1;P0=0xfd;we=0;        delay(4);
        hou2=z/10;                        du=1;P0=table[hou2];du=0;            we=1;P0=0xfe;we=0;        delay(4);       
}
void main()
{       
        init_Timer();
        while(1)
        {
                display();               
        }
}
void Timer0_isr(void) interrupt 1
{
        TH0=0x3c;
        TL0=0xb0;
        P3_5=!P3_5;
}
void Timer1_isr(void) interrupt 3
{
        i++;
        if(i>59){i=0;j++;}
        if(j>59){j=0;z++;}
        if(z>23)z=0;

把他修正一下就好了嘛,理论上行,实际中不一定就行

你的程序内部定时器是八位重装的嘛?不像啊,如果不是八位重装的那就是interrupt 3中没重装,貌似是这样

是八位重装的,在单片机上运行时刚开始十秒很准后来就开始慢了

那你这个重装的值是自己根据电路上晶振的值计算出来的还是直接参照别的程序呢?不同的晶振大小这个值是不一样的

执行指令也是需要时间的        

很明显,用数码管显示,你不考虑数码管动态显示的时间吗?这个问题应该避免不了,只能减少误差

自己算的,算了好多次的应该没错

这个有道理,有什么解决的方法么?

执行指令所用的时间导致误差会有这么大吗,有什么方法能减少误差,请指点哦!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top