一.外部中断输入引脚
外部中断0(INT0):P3.2口的附加功能
外部中断1(INT1):P3.3口的附加功能
当引脚上出现有效的中断信号时,就有中断标志置1,向CPU申请中断。
二.外部中断相关寄存器
1.中断允许寄存器(IE)
EA:CPU开启中断总允许位。EA=1时,才能启动中断功能。
EX0:外部中断0允许位。EX0=1时,外部中断1才能启动。下同。
EX1:外部中断1允许位。
2.中断标志寄存器(TCON)
IT0/IT1:控制外部中断的触发条件。0:低电平有效 1:下降沿有效
一般来说,设置成下降沿有效(1)会比较多。
IE0/IE1:外部中断标志位。当外部中断触发时,标志位变成1,向CPU申请中断。申请中断完成后,标志位重新置0.
三.外部中断配置与程序举例
依前,还是要设置基本的三个函数
中断配置函数:以使用外部中断0为例
void Int0Init0(){
EA=1;
EX0=1;
IT0=1;
}
主函数:
void main{
IntInit0();
While(1);
}
中断服务函数:
Void Int0() interrupt 0 //中断号为0
{
所要执行的程序动作
}
举例:使用外部中断,利用独立按键控制LED灯的亮灭(按一下会开,再按就关)
分析:涉及的外部资源有独立按键和LED灯。其中,独立按键K3与P3.2口相连,故可以用K3作为外部中断输入。当按下按键后,led1(P2^1)就会取反,从而有亮-灭-亮的效果。
#include "reg52.h"
#include <stdio.h>
#define u16 unsigned int
sbit k3 = P3^2; //独立按键K3与外部中断引脚P3.2相连
sbit led = P2^1; //定义LED模块的1号灯为led
void dalay()
{
u16 i;
for(i=0;i==1000;i++); //延时函数,用于独立按键消抖
}
void Init_INT0()
{
EA=1;
EX0=1;
IT0=1; //设置外部中断为下降沿有效
}
void main()
{
Init_INT0(); //主程序中需要有中断配置
while(1); //程序在此处停止,等待中断发生
}
void INIT0() interrupt 0
{
void delay();
if(k3==0)
led=~led; //按下按键时,led1取反
}