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;//增加这句
            ....
        }
        ....
    }
    
    

    即可

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

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?