51单片机同时开启串口中断和定时器0中断的程序这样为什么错了

void Time0_Init() //定时器0
{
TH0=0xfe;
TL0=0x33;
TR0=1;
}

void main() //程序入口
{
TMOD=0x21; //定时器0和定时器1开启
PCON = 0x80;
SCON = 0x50;
TH1 = 0xfA; //设置波特率 9600
TL1 = 0xfA;
TR1 = 1; //启动定时器1

ET1 =0;
ES = 1; //开串口中断
PS=1; //设计串行口中断优先级
EA = 1; //开总中断
IT0=0;
EX0=1;
Time0_Init(); //调用定时0函数
}

定时器的初始化要放前面,为什么你打开外部中断的使能,却没打开定时器0的使能。
void Time0_Init() //定时器0
{
TH0=0xfe;
TL0=0x33;
TR0=1;
}

void main() //程序入口
{
TMOD=0x21; //定时器0和定时器1开启
PCON = 0x80;
SCON = 0x50;
TH1 = 0xfA; //设置波特率 9600
TL1 = 0xfA;
TR1 = 1; //启动定时器1
Time0_Init(); //调用定时0函数

ET1 =0; //这句多余了
ES = 1; //开串口中断
PS=1; //设计串行口中断优先级

ET0=1; //打开定时器中断

EA = 1; //开总中断
//IT0=0; //这句多余了
//EX0=1; //为什么要打开外部中断??

}
void SERIAL_HANDLE(void) interrupt 4 //串口中断函数,打开了中断就必须有
{....................
}
void T0_HANDLE(void) interrupt 1 //定时器0中断函数,打开了中断就必须有
{....................
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-29
头文件你添加进去了没有啊!如:reg51.h,具体我不知道你用的是哪家公司的单片机,没法给你测试一下!
第2个回答  2013-03-29
定时器中断没打开, 在定时器初始化中加上下面这句
ET0 =1;
第3个回答  2013-03-29
IT0=0,说明没有启动定时器0追问

这个不是外部中断触发控制位吗 ?

相似回答