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

2019-07-16 01:27发布

#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;


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
漠落
1楼-- · 2019-07-16 02:41
把他修正一下就好了嘛,理论上行,实际中不一定就行
悦雨若晴
2楼-- · 2019-07-16 07:34
你的程序内部定时器是八位重装的嘛?不像啊,如果不是八位重装的那就是interrupt 3中没重装,貌似是这样
飘~~遥
3楼-- · 2019-07-16 09:24
悦雨若晴 发表于 2013-4-13 23:26
你的程序内部定时器是八位重装的嘛?不像啊,如果不是八位重装的那就是interrupt 3中没重装,貌似是这样 ...

是八位重装的,在单片机上运行时刚开始十秒很准后来就开始慢了
悦雨若晴
4楼-- · 2019-07-16 14:46
 精彩回答 2  元偷偷看……
魔杰彬
5楼-- · 2019-07-16 19:23
执行指令也是需要时间的        
幻影战士
6楼-- · 2019-07-16 20:51
很明显,用数码管显示,你不考虑数码管动态显示的时间吗?这个问题应该避免不了,只能减少误差

一周热门 更多>