示意
51单片机最多二级中断嵌套。
外部中断,触发器
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效),可由软件置1或清0。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
IT0=1; //对寄存器中某一位进行操作
TCON=0X01;//直接对寄存器操作
中断允许,由5个中断源组成
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位,没开时为普通IO口,开时为总中断控制位。
优先级
中断不止一个时,存在优先权排队问题,此时优先权高的中断先发生,高级中断处理完成后返回低级中断继续处理。最多允许两级嵌套。
中断号
表示中断优先级
中断响应条件**
中断源有中断请求;
此中断源的中断允许位为1;
CPU开中断(即EA=1)。
EA=1;//打开总中断开关
EX0=1;//开外部中断0
IT0=0/1;//设置外部中断的触发方式
以上三条同时满足时,CPU才有可能响应中断
使用中断之前,应先对自己提问:
你想使用的中断是哪个?选择相应的中断号;
你所希望的触发条件是什么?
你希望在中断之后干什么?
C51的中断函数格式如下:
void 函数名()interrupt 中断号 using 工作组
{
中断服务程序内容
}
中断函数不能返回任何值,所以最前面用void;后面紧跟函数名,名字可以随便起,但不要与C语言中的关键字相同;中断函数不带任何参数,所以函数名后面的小括号内为空;中断号是指单片机中几个中断源的序号,可查询上表。最后面的”using工作组”是指这个中断函数使用单片机内存中4组工作寄存器中的哪一组,C51编译器在编译程序时会自动分配工作组,因此最后这句话我们通常省略不写。
代码实现
void Int1Init() //触发函数
{
IT1=1;
EX0=1; //打开允许位
EA=1; //打开总中断
}
void main()
{
Int1Init(); //外部中断1
while(1);
}
void Int0() interrupt 2//中断号
{你想干什么}