找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 555|回復(fù): 3
收起左側(cè)

51單片機(jī)仿真-中斷出現(xiàn)問(wèn)題

[復(fù)制鏈接]
ID:1061677 發(fā)表于 2025-4-1 11:09 | 顯示全部樓層 |閱讀模式
實(shí)驗(yàn)?zāi)繕?biāo):燈一亮一滅是1s,然后秒表計(jì)數(shù),采用兩個(gè)定時(shí)器實(shí)現(xiàn)。
問(wèn)題:我覺(jué)得這個(gè)燈一亮一滅是沒(méi)問(wèn)題的。燈閃和計(jì)數(shù)我用的是T0、T1定時(shí)器。但是在實(shí)驗(yàn)過(guò)程中,我發(fā)現(xiàn)這個(gè)數(shù)碼管更新不及時(shí),感覺(jué)很慢。因?yàn)?1的定時(shí)器應(yīng)該是準(zhǔn)的,但是我不知道為啥這個(gè)數(shù)碼管更新就是很慢。
主程序如下:
#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;
        }
}
仿真圖已經(jīng)呈上:主要就是單片機(jī)的P0口控制兩個(gè)74HC573鎖存器分別送段碼和位碼。然后是兩個(gè)中斷程序。
Snipaste_2025-04-01_11-07-11.png

中斷.zip

356.7 KB, 下載次數(shù): 0

回復(fù)

使用道具 舉報(bào)

ID:879809 發(fā)表于 2025-4-1 12:03 | 顯示全部樓層
肉眼觀察到的仿真軟件的時(shí)間并非真實(shí)時(shí)間,跟你的電腦運(yùn)算速度有關(guān),要看仿真軟件進(jìn)度條里面的時(shí)間。
回復(fù)

使用道具 舉報(bào)

ID:1109793 發(fā)表于 2025-4-1 13:00 | 顯示全部樓層
在if(num1==20)里面要加一句num1 = 0;
否則++num1;要一直循環(huán)到下次num1==20才能再次++num;
回復(fù)

使用道具 舉報(bào)

ID:1061677 發(fā)表于 2025-4-1 15:53 | 顯示全部樓層
xiaobendan001 發(fā)表于 2025-4-1 13:00
在if(num1==20)里面要加一句num1 = 0;
否則++num1;要一直循環(huán)到下次num1==20才能再次++num;

對(duì)哦,num1加完之后清0就對(duì)了。我竟然一直沒(méi)發(fā)現(xiàn)原來(lái)問(wèn)題出現(xiàn)在這里,謝謝你了,佬!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表