80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。MCS-51系列单片机中断系统的机构如下:
与中断系统相关的特殊寄存器:
1)中断允许控制寄存器(IE)------ 控制各中断的开放和屏蔽
2)中断优先级控制寄存器(IP)------设置各中断的优先级
3)定时器/计数器控制寄存器(TCON)----定时器和外部中断的控制
4)串行口控制寄存器(SCON)------串行中断的控制
中断类型分为三类:
1)T0、T1是2个定时器/计数器中断,由片内定时器提供;
2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供;
3)RX、TX为串行口中断所用,由片内串口提供。
1、(P3.2)/(P3.3)可由IT0(TCON.0)/IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2/P3.3引脚上出现有效的中断信号时,中断标志IE0(TCON.1)/IE1(TCON.3)置1,向CPU申请中断。
2、TF0(TCON.5)/TF1(TCON.7),片内定时/计数器T0/T1溢出中断请求标志。当定时/计数器T0/T1发生溢出时,置位TF0/TF1,并向CPU申请中断。
3、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
上述只是向CPU申请中断,如果要得到CPU的相应,还要设置相应的中断允许IE和优先级IP,中断方能的到响应。
1)定时器中断的使用(以定时器0为例)
……
TMOD |= 0x01 | 0x04; //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响
TH0=0xFF; //给定初值
TL0=245; //从245计数到255
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
void Timer0_isr(void) interrupt 1 using 1 //中断服务程序
{
TH0=0xFF; //重新给定初值
TL0=245;
……
}
2)外部中断的使用(以外部中断0为例)
…………
EA=1; //全局中断开
EX0=1; //外部中断0开
IT0=0; //电平触发
void ISR_Key(void) interrupt 0 using 1 //中断服务程序
{
…………
}
3)串行口中断的使用
……