标题: 51单片机仿真-中断出现问题 [打印本页]

作者: 百二秦关终属我    时间: 2025-4-1 11:09
标题: 51单片机仿真-中断出现问题
实验目标:灯一亮一灭是1s,然后秒表计数,采用两个定时器实现。
问题:我觉得这个灯一亮一灭是没问题的。灯闪和计数我用的是T0、T1定时器。但是在实验过程中,我发现这个数码管更新不及时,感觉很慢。因为51的定时器应该是准的,但是我不知道为啥这个数码管更新就是很慢。
主程序如下:
#include <reg51.h>
#include "Delay.h"
#include "Display.h"
#define uint unsigned int
#define uchar unsigned char
sbit led1 = P1^0;

uchar num0 = 0, num1 = 0, num = 55, shi, ge;
void main(void)
{
        shi = num / 10;
        ge = num % 10;
        display(shi, ge)
        TMOD = 0x11;
        TH1 = (65536 - 50000) / 256;
        TL1 = (65536 - 50000) % 256;
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;
        EA = 1;
        ET1 = 1;
        TR1 = 1;
        ET0 = 1;
        TR0 = 1;
        while (1) {
                shi = num / 10;
                ge = num % 10;
        display(shi, ge);
        }
}
void T0_time() interrupt 1 {
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;
        ++num0;
        if (num0 == 10) { //0.5s
                num0 = 0;
                led1 = ~led1;
        }
}
void T1_time() interrupt 3 {
        TH1 = (65536 - 50000) / 256;
        TL1 = (65536 - 50000) % 256; //50ms
        ++num1;
        if (num1 == 20) { //1s
                ++num;
                if (num == 60)
                        num = 0;
        }
}
仿真图已经呈上:主要就是单片机的P0口控制两个74HC573锁存器分别送段码和位码。然后是两个中断程序。

Snipaste_2025-04-01_11-07-11.png (54.74 KB, 下载次数: 0)

Snipaste_2025-04-01_11-07-11.png

中断.zip

356.7 KB, 下载次数: 0


作者: rundstedt    时间: 2025-4-1 12:03
肉眼观察到的仿真软件的时间并非真实时间,跟你的电脑运算速度有关,要看仿真软件进度条里面的时间。
作者: xiaobendan001    时间: 2025-4-1 13:00
在if(num1==20)里面要加一句num1 = 0;
否则++num1;要一直循环到下次num1==20才能再次++num;
作者: 百二秦关终属我    时间: 2025-4-1 15:53
xiaobendan001 发表于 2025-4-1 13:00
在if(num1==20)里面要加一句num1 = 0;
否则++num1;要一直循环到下次num1==20才能再次++num;

对哦,num1加完之后清0就对了。我竟然一直没发现原来问题出现在这里,谢谢你了,佬!!!




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