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

2024-11-22 20:22:06
推荐回答(4个)
回答1:

定时器的初始化要放前面,为什么你打开外部中断的使能,却没打开定时器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中断函数,打开了中断就必须有
{....................
}

回答2:

头文件你添加进去了没有啊!如:reg51.h,具体我不知道你用的是哪家公司的单片机,没法给你测试一下!

回答3:

定时器中断没打开, 在定时器初始化中加上下面这句
ET0 =1;

回答4:

IT0=0,说明没有启动定时器0