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

控制/MCU

1876人已加入

描述

硬件电路:

INT0

INT0

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

中断系统结构

INT0

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

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

INT0

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口,一端接地,按下后可以产生负跳变。

INT0

代码如下:

1/****************************
 2*        使用外部中断0点亮LED    *
 3****************************/
 4#include< reg52.h >
 5#define uint unsigned int 
 6#define uchar unsigned char
 7
 8void delay(uint t_ms) //ms级延时
 9{
10    uchar y;
11    while(t_ms--)
12        for(y = 114; y > 0; y--);
13}
14
15void init()    //自定义函数-中断之前的准备
16{
17    IT0 = 1;    //设置申请中断信号为负跳变有效
18    EA = 1;     //开总中断开关
19    EX0 = 1;    //开外部中断0开关
20}
21
22void main()
23{
24    init();   //中断初始化
25    while(1)    //死循环
26        P1 = 0Xff;  //使LED全灭
27}
28
29void init0() interrupt 0    //外部中断0
30{
31    P1 = 0;     //将数码管全部点亮
32    delay(500); //延时500ms
33}

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

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

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

全部0条评论

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

×
20
完善资料,
赚取积分