标题: 关于用Protues仿真51单片机时,定时器时间不准确问题 [打印本页]

作者: 千江水    时间: 2021-3-23 15:12
标题: 关于用Protues仿真51单片机时,定时器时间不准确问题
       用Protues软件仿真51单片机时,定时器的时间和用板子测试时不一样,怎么办?
平时用板子的时候,时间设置为2ms中断一次,中断里面+500次就得到一秒钟,但是在用Protues软件仿真的时候,要10秒才加一次,这是什么问题呢?
      时钟我设置的初始时间是12:30:00,本应该数码管显示的变量会和时钟秒钟一样快才对,可是当时钟跑到12:30:10的时候,定时器里面那个变量才加一显示在数码管上。
有大佬帮忙解答一下吗, 非常感谢了!!

void Timer0_Init(void)
{
        TMOD |= 0x01;//设置为16位计数器
        TH0 = (65535-2000)/256;//时间定为2ms
        TL0 = (65535-2000)%256;
        EA = 1;
        ET0 = 1;
        TR0 = 1;
}

void Interrupt0(void)interrupt 1
{
        static uint tim = 0,time = 0;
        
        TH0 = (65535-2000)/256;
        TL0 = (65535-2000)%256;
        
        tim++;
        if(tim >= 500)
        {
                tim = 0;
                time++;
        }

        Dis[0] = Tab[time/1000%10];
        Dis[1] = Tab[time/100%10];
        Dis[2] = Tab[time/10%10];
        Dis[3] = Tab[time%10];
        
        key2();
        Display();
}


作者: lwh999995    时间: 2021-3-23 17:08
你这个time加到什么时候才到头啊? 65535+ ?
65535-2000  还是 65536-2000  ?
作者: wulin    时间: 2021-3-23 21:13
完成中断函数任务的时间超过中断周期导致部分中断请求丢失。所以计时慢了许多。
作者: 天ノ忆    时间: 2021-3-24 09:31
中断里面不要放那么多东西,除了计数其他操作都放在Main函数里面
作者: 860012525    时间: 2021-3-24 14:37
中断任务里头太繁杂了,中间阻隔了其他中断,就少了
作者: 千江水    时间: 2022-8-10 10:38
860012525 发表于 2021-3-24 14:37
中断任务里头太繁杂了,中间阻隔了其他中断,就少了

程序新手哈,以前习惯了
作者: 千江水    时间: 2022-8-10 10:39
lwh999995 发表于 2021-3-23 17:08
你这个time加到什么时候才到头啊? 65535+ ?
65535-2000  还是 65536-2000  ?

time是全局变量,在main函数中会清除的
作者: 千江水    时间: 2022-8-10 10:39
天ノ忆 发表于 2021-3-24 09:31
中断里面不要放那么多东西,除了计数其他操作都放在Main函数里面

嗯嗯,下次改正
作者: hepen2002    时间: 2022-10-6 17:17
然后呢。问题得到解决了吗

作者: doodigen    时间: 2024-1-26 07:53
wulin 发表于 2021-3-23 21:13
完成中断函数任务的时间超过中断周期导致部分中断请求丢失。所以计时慢了许多。

即便中断函数里只有两行代码,在proteus仿真时也慢十倍,实物中就正常,为什么呢?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1