为什么51单片机定时器中断程序不执行

刚开始学习单片机,在调试的时候程序程序只执行到if(tt==20),然后其他的都不执行了,定时器中断和延时都不执行,程序如下
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint x,y;
uchar num,tt;
uchar code table[]={
0xc0,0xf9,0xa4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x90,0x99,0x83,0xa6,0x41,0x86,0x8e};
void delay(uint);
void main()
{
num=0;
tt=0;
EA=1;
ET0=1;
TR0=1;
P0=0xc0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(tt==20)
{
tt=0;
num++;
if(num==16)
{
num=0;
}
P0=table[num];
delay(100);
}

}

void delay(uint z)
{
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}

void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
求大佬帮帮小白。

1、单片机的中断是一个很高明的办法。没有中断时单片机只会顺序执行主程序中的语句。
2、单片机的定时器有自己的时钟,打开51单片机的定时器后,单片机一边顺序执行主程序的语句时,一边定时器在计时。当计到你设定的值后,他需要产生中断,然后暂停主程序语句,转到中断程序中执行你的命令。执行完命令后返回到主程序的顺序语句中。然后知道下一次中断来临,再次产生中断。
3、要让他能产生中断,你就必须开中断。这就像一个控制开关,你不把开关打开,灯怎么会亮。追问

我用EA=0;
ET0=1;

TR0=1;

开中断
还缺开中断的语句么

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-06-06
delay放到数码管延时一秒之前