单片机交流
直播中

李明

7年用户 1299经验值
私信 关注
[问答]

如何用独立按键作为外部中断的触发信号来实现LED的亮灭?

如何用独立按键作为外部中断的触发信号来实现LED的亮灭?

回帖(1)

刘军

2021-10-11 15:17:12
51单片机具有5个中断源,其中有两个外部中断,这次我们以下降沿触发Int0为例。
在B站跟个up主中断教程,
传送门 https://space.bilibili.com/483942191/video?tid=0&page=4&keyword=&order=pubdate
实验目的:用独立按键作为外部中断的触发信号,当按键按下发送来信号的时候,再执行中断函数(在函数内定义LED灯的亮灭)





如上图所示51单片机总共有5个中断源,本博文先展示第一种 INT0 中断
先看威廉希尔官方网站 图










按键 P3^2 可以触发中断源 INT0
设置寄存器,打开终端并选择中断的触发方式。
EA为整体中断允许位,首先要将EA置1,打开中断。
EX0为外部中断INT0,置1开启。
IT0寄存器:置0为低电平触发,置1为下降沿触发。

编写中断函数,int0的中断编号为0,这里使用中断控制led的点亮与熄灭。
中断函数格式一般为:
void 函数名称(void) interrupt 中断编号 【using 寄存器组编号】{
语句;
}

贴上代码:
中断函数的定义

#include"pbdata.h"


//外部中断初始化
void EX0_Init(void)
{
  //设置触发方式 外部中断0
        IT0=1;  //设置下降沿触发TCON 硬件可自动清零触发信号
        EX0=1; //IE
        EA=1;
}




/**********************************************************
1、中断服务函数一定是一个没有返回值的函数
2、中断服务函数一定是个没有参数的函数
3、中断服务函数函数名后跟关键字 interrupt
4、interrupt n的取值从0~4 分别代表5个中断源 计算公式为 8*n +0003H
   分别为 0 0003H INT0
          1 000BH T0
                  2 0013H INT1
                  3 001BH T1
                  4 0023H ES
5、中断服务函数不能被主程序或其他程序调用
6、n 后面跟 using m (0-3)工作寄存器组
***********************************************************/


void EX0_ISR(void) interrupt 0
{
        LED_1=~LED_1;
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分