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;
    }
}
相关推荐
dujunqiu1 小时前
S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪
arm开发·驱动开发·单片机
冲,干,闯4 小时前
基于沁恒微电子CH32V307单片机使用
单片机·嵌入式硬件
机器视觉知识推荐、就业指导5 小时前
STM32 外设驱动模块五:DHT11 温湿度传感器
stm32·单片机·嵌入式硬件
广药门徒9 小时前
电脑芯片其实更偏向MPU不是CPU,GPU CPU NPU MPU MCU的区别
单片机·嵌入式硬件
灬若宸10 小时前
14、外部中断
stm32·单片机·嵌入式硬件·系统架构
逼子格12 小时前
【Protues仿真】基于AT89C52单片机的舵机和直流电机控制
单片机·嵌入式硬件·硬件工程·硬件工程师·电机驱动·l298n·直流电机控制
GodKK老神灭13 小时前
STM32 AFIO模块
stm32·单片机·嵌入式硬件
滴啦嘟啦哒15 小时前
【项目复盘】【四轴飞行器设计】驱动开发部分
单片机·面试准备
狂奔的sherry15 小时前
一会儿能ping通一会ping不通解决方案
运维·网络·单片机·嵌入式硬件
qq_4017004115 小时前
单片机驱动继电器接口
单片机·嵌入式硬件