syyyyt 2020-02-11 10:24 采纳率: 0%
浏览 524
已采纳

关于51单片机定时器的问题?

我设计了一个时钟,根据定时器的设置初值是1ms,1000次秒正常来说应该是加1,但是在开发板上显示时等了好长时间才加1,我不清楚这是为什么,请求大家帮助,代码如下:
#include
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
typedef unsigned int ui;
typedef unsigned char uc;
ui code shuju[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ui disp[6];
ui num,shi,fen,miao;
void delay(ui i)
{
while(i--);
}
void datapros()
{
disp[0]=shuju[miao%10];
disp[1]=shuju[miao/10];
disp[2]=shuju[fen%10];
disp[3]=shuju[fen/10];
disp[4]=shuju[shi%10];
disp[5]=shuju[shi/10];

}
void display()
{
ui i;
for(i=0;i<6;i++)
{
switch(i)
{
case(0): lsa=0;lsb=0;lsc=0;break;
case(1): lsa=1;lsb=0;lsc=0;break;
case(2): lsa=0;lsb=1;lsc=0;break;
case(3): lsa=1;lsb=1;lsc=0;break;
case(4): lsa=0;lsb=0;lsc=1;break;
case(5): lsa=1;lsb=0;lsc=1;break;
}
P0=disp[i];
delay(100);
P0=0x00;
}
}
void init()
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18; //1ms
EA=1;
TR0=1;
ET0=1;
}
void main()
{
init();
while(1)
{
datapros();
display();
}
}
void init0() interrupt 1
{
TH0=0xfc;
TL0=0x18;
num++;
if(num==1000)
{
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}

}

}

  • 写回答

1条回答 默认 最新

  • Kim_小星兴 2020-02-11 11:53
    关注

    num没有清零

    导致需要出去第一次是计算1ms,其余都是计算了65.535ms,

    void init0() interrupt 1
    {
        ....
        num++;
        if(num==1000)
        {
            num = 0;//增加这句
            ....
        }
        ....
    }
    
    

    即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?