51单片机外部中断(按键识别)

欢迎入群共同学习交流

时间记录:2024/7/2

一、电路原理图

51单片机包含INT0、INT1两个外部中断接口

二、知识点介绍

1.中断寄存器位介绍

(1)TCON定时控制寄存器,位0(IT0)中断INT0请求信号选择位,1表示下降沿信号、0表示低电平信号,位1(IE0)中断INT0信号标志位,1产生中断信号、0未产生中断信号,位2(IT1),位3(IE1)

(2)IE中断允许控制寄存器,位0(EX0)中断INT0中断允许位,位2(EX1),位7(EA)总中断允许位

(3)IP中断优先级控制寄存器,位0(PX0)中断INT0优先级设定位,默认为0低优先级,位2(PX1)中断INT1优先级设定位

2.中断源编号(编写中断函数时需要)

三、代码示例

c 复制代码
#include <reg51.h>

typedef unsigned int u16; //重定义
sbit led = P1^0;
sbit key1 = P3^2;
sbit key2 = P3^3;

void delay(u16 ms) //延时函数
{
    u16 i=0;
    while(ms--)
    {
        for(i=0;i<110;i++);
    }
}

void exti0Init(void);
void exti1Init(void);

int main()
{
    exti0Init();
    exti1Init();
    
    while(1)
    {
        
    }
}

void exti0Init(void) //外部中断0初始化,3.2端口
{
    IT0=1; //触发方式,下降沿触发/低电平触发
    IE0=0; //中断标志位,有相应电平该位变为1,可不设置
    EX0=1; //中断允许位
    EA=1; //总中断允许位
    PX0=0; //中断优先级,默认为0
}

void exti1Init(void)
{
    IT1=1;
    EX1=1;
    EA=1;
}

void exti0(void) interrupt 0 //中断函数
{
    delay(20);
    if(key1==0)
    {
        led=0;
    }
}

void exti1(void) interrupt 2
{
    delay(20);
    if(key2==0)
    {
        led=1;
    }
}
相关推荐
MounRiver_Studio26 分钟前
RISC-V IDE MRS2使用笔记(四):编译后静态堆栈调用分析
ide·mcu·嵌入式·risc-v
EVERSPIN41 分钟前
国产32位MCU语音识别方案
单片机·嵌入式硬件·语音识别·32位mcu
d111111111d1 小时前
在stm32F103C8T6中,Thumb指令是什么?有什么作用?可以干什么?
笔记·stm32·单片机·嵌入式硬件·学习
DIY机器人工房1 小时前
简单理解:ESP32S3 开发板中通过什么控制舵机
stm32·单片机·嵌入式硬件·mcp·小智ai·diy机器人工房
沐欣工作室_lvyiyi1 小时前
基于单片机的智能宠物监护设备(论文+源码)
stm32·单片机·毕业设计·宠物监护
小李做物联网1 小时前
【物联网毕设】60.1基于单片机物联网嵌入式项目程序开发之智能家庭安防感应报警
stm32·单片机·嵌入式硬件·物联网
沉在嵌入式的鱼1 小时前
STM32--BH1750光敏传感器
stm32·单片机·嵌入式硬件·bh1750·光敏模块
bai5459361 小时前
STM32 单片机 按键控制led灯亮灭
stm32·单片机·嵌入式硬件
三佛科技-187366133972 小时前
FT60F210-URT是什么芯片?FT60F210-URT(系统框图及管脚定义)
单片机·嵌入式硬件
willhuo2 小时前
WIFI版本温湿度传感器
单片机·物联网·智能硬件·iot