外部中断0和1

  • 外部中断原理
  • 编程原理(外部中断0)
  • 代码实现


外部中断原理

cubemx 外部 IO中断_cubemx 外部 IO中断

外部中断0:(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
外部中断1:(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。

编程原理(外部中断0)

  1. 首先我们对中断允许控制寄存器IE赋值,打开中断总开关,令EA=1.
  2. 然后我们还需要打开外部中断0的开关,令EX0=1

    EX0(IE.0),外部中断0允许位;
    ET0(IE.1),定时/计数器T0中断允许位;
    EX1(IE.2),外部中断1允许位;
    ET1(IE.3),定时/计数器T1中断允许位;
    ES(IE.4),串行口中断允许位;
    EA (IE.7), CPU中断允许(总允许)位。
  3. 最后再对中断请求标志TCON寄存器赋值,我们可以选择的外部中断0的触发方式有两种,一种是低电平触发方式,一种是下降沿的触发方式。如果选择低电平触发,则令IT0=0,如果选择下降沿触发,则令IT0=1。

IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为低电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。

4.完成以上过程就完成了对中断系统的初始化 ,然后需要编程中断服务函数。格式如下:

void init0() interrupt 0 using m
{
	函数体
}

函数名(自定):init0

0:外部中断0的中断标号

m:寄存器组

在实际编程中using m 可省去

cubemx 外部 IO中断_单片机_02

代码实现

通过独立按键来控制第一个led灯的亮灭

#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit led1=P2^0;
sbit K3=P3^2;//通过独立按键触发外部中断0

void intint0()//外部中断初始化
{
    EA=1;
	EX0=1;																		  
	IT0=1;
}

void delay(u16 i)//延时函数
{
   while(i--);
}

void main()
{
   intint0();//在主函数中调用初始化外部中断0
   while(1);
}
void int0() interrupt 0	 //中断服务函数
{
   delay(1000);//延时消抖
   if(K3==0)
   {
   led1=~led1;//是第一个led灯状态反转
   }
}