51单片机。程序写在主函数有用,写到中断系统中就没用了?为啥啊?

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar x,t;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

void main()
{
x=0;
t=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;//启动定时器0

P1=0xff;
P2=0xc0;
while(1)
{
if(t==20)
{
t=0;
x++;
if(x==16)
x=0;
P2=table[x];
}
}
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;

}
上面的有效,可以使得四位数码管从0-Fl亮。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar x,t;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

void main()
{
x=0;
t=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;//启动定时器0

}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
P1=0xff;
P2=0xc0;
while(1)
{
if(t==20)
{
t=0;
x++;
if(x==16)
x=0;
P2=table[x];
}
}

}
这样数码管就不能亮了。求高手啊!!!

第二个程序有点乱,还得改一下,在主程序里加一条死循环,把中断程序里的死循环程序段拿掉。如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar x,t;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

void main()
{
x=0;
t=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
P1=0xff;//这两句也从中断程序里拿出来
P2=0xc0;

TR0=1;//启动定时器0
while(1);//加上这一条这样程序就不乱了,不会跑飞了。
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
x++;
if(x==16)
x=0;
P2=table[x];
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-21
中断中怎么能有死循环呢,。。。。中断时条件执行语句,万万不能加死循环的。。。
相似回答
大家正在搜