51单片机外部中断0(INT0)讲解

控制/MCU

1877人已加入

描述

硬件电路:

51单片机

51单片机

由硬件电路可以看出通过P32引脚可以触发外部中断0。当外部为低电平或者负跳变(高电平跳变为低电平)时,即可启动外部中断0。

中断系统结构

51单片机

由中断系统结构可以看出外部中断0需要配置IT0、IE0、EX0、EA、(PX0)位。下面我们来介绍一下要用到的寄存器。(中断允许寄存器IE和中断优先级寄存器IP不再赘述)

TCON-定时/计数器控制寄存器(可位寻址)

51单片机

TF1-定时计数器1溢出标志位

(为1溢出申请中断。中断方式硬件自动清0,查询方式需软件清0)

TR1-定时计数器1运行控制位

(若GATE==1且INT1为高电平,TR1为1运行;若GATE==0,TR1为1运行;TR1需软件清0关闭)

TF0-定时计数器0溢出标志位(与TF1类似)

TR0-定时计数器0运行控制位(与TR1类似)

IE1-外部中断1请求标志

(为1表明正在向CPU申请中断,CPU转向中断服务程序后,硬件清0)

IT1-外部中断1触发方式选择位

(为1为跳变沿触发方式(负跳变),为0为低电平触发方式)

IE0-外部中断0请求标志(与IE1类似)

IT0-外部中断0触发方式选择位(与IT1类似)

所以我们在使用外部中断0的时候需要用到TCON寄存器中IE0、IT0位查询或设置触发方式,需要IE寄存器中EA、EX0位来打开总中断允许位和外部中断0允许位,在中断嵌套时需要IP寄存器来配置优先级。

程序代码:

使用外部中断0,使得在负跳变的触发下申请中断,中断响应使P1口的8位LED全部点亮500ms。

在此开发板上存在独立键盘模块,其中S4一端连接P32/INT0口,一端接地,按下后可以产生负跳变。

51单片机

代码如下:

1/**************************** 2* 使用外部中断0点亮LED * 3****************************/4#include< reg52.h >5#defineuint unsigned int6#defineuchar unsigned char78voiddelay(uintt_ms)//ms级延时9{10uchar y;11while(t_ms--)12for(y =114; y >0; y--);13}1415voidinit()//自定义函数-中断之前的准备16{17IT0 =1;//设置申请中断信号为负跳变有效18EA =1;//开总中断开关19EX0 =1;//开外部中断0开关20}2122voidmain() 23{24init();//中断初始化25while(1)//死循环26P1 =0Xff;//使LED全灭27}2829voidinit0() interrupt 0//外部中断030{31P1 =0;//将数码管全部点亮32delay(500);//延时500ms33}

当P32/INT0还没有负跳变触发时,CPU一直执行while死循环,但是一旦有负跳变触发,CPU会根据interrupt 0进入中断服务程序使P1的8位LED全部点亮并持续500ms。

代码亲测有效,请注意硬件电路与代码的对应关系。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分