外部中断

一.外部中断输入引脚

在这里插入图片描述
外部中断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取反
   
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值