对51单片机外部中断的快速上手

对51单片机外部中断的学习

 

 

 

 

外部中断的配置步骤:

  1. 打开总中断 EA=1;、
  2. 打开外部中断0或外部中断1 EX0=1;或EX1=1;
  3. 配置外部中断的触发方式

  例如 :外部中断1 : 外部中断1 的标志位为 P3^3;

配置方式 IT1=0; 低电平信号触发 简单来说就是对P3^3是低电平

IT1=1; 下降沿触发  就是说P3^3 由高电平变为低电平

 

 

以清翔历程进行讲解

用1根杜邦线把P33和P37相接,每按下一次S2按键就会进入一次中断

这个地方要注意,他用一根杜邦线把P37与P33相连,即P37的高低电平决定P33的高低电平

#include <reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit key_s2 = P3^0;//独立按键S2

sbit flag = P3^7; //外部中断信号产生脚

/*====================================

函数 : delay(uint z)

参数 :z 延时毫秒设定,取值范围0-65535

返回值 :无

描述 :12T/Fosc11.0592M毫秒级延时

====================================*/

void delay(uint z)

{

uint x,y;

for(x = z; x > 0; x--)

for(y = 114; y > 0 ; y--);

}

//外部中断1初始化

void int1Init()

{

EA = 1; //开总中断

EX1 = 1;//开外部中断1

IT1 = 1;//外部中断1下降沿触发      IT1=0;//外部中断1低电平触发

}

void main()//main函数自身会循环

{

int1Init();//外部中断1初始化

while(1)

{

if(key_s2 == 0)//判断S2是否被按下

{

delay(20);//按键消抖

if(key_s2 == 0)

{

flag = 1;

flag = 0;//产生下降沿 由高到低触发

/*flag=0;

Flag=0;//低电平触发这个地方产生低电平,CPU会采样2次P3.3的状态,两次都为低才触发

Flog=1://结束低电平  以避免中断服务程序一直被触发

while(!key_s2);//松手检测

}

}

}

}

//外部中断1中断服务程序

void int1() interrupt 2//这个地方不能写错

{

P1 = ~P1;

}  

例如 :外部中断0 : 外部中断0 的标志位为 P3^2;

配置方式 IT2=0; 低电平信号触发 简单来说就是对P3^2是低电平

IT2=1; 下降沿触发  就是说P3^2 由高电平变为低电平

用1根杜邦线把P32和P37相接,每按下一次S2按键就会进入一次中断

同上

#include <reg52.h>

#define uint unsigned int

#define uchar unsigned char

sbit key_s2 = P3^0;//独立按键S2

sbit flag = P3^7; //外部中断信号产生脚

/*====================================

函数 : delay(uint z)

参数 :z 延时毫秒设定,取值范围0-65535

返回值 :无

描述 :12T/Fosc11.0592M毫秒级延时

====================================*/

void delay(uint z)

{

uint x,y;

for(x = z; x > 0; x--)

for(y = 114; y > 0 ; y--);

}

//外部中断0初始化

void int0Init()

{

EA = 1; //开总中断

EX0 = 1;//开外部中断0

IT0 = 0;//外部中断0低电平触发

}

void main()//main函数自身会循环

{

int0Init();//外部中断0初始化

while(1)

{

if(key_s2 == 0)//判断S2是否被按下

{

delay(20);//按键消抖

if(key_s2 == 0)

{

flag = 0;

flag = 0;//产生低电平,CPU会采样2次P3.2的状态,两次都为低才触发

flag = 1;//结束低电平

/*flag=1;

Flag=0;//下降沿触发

while(!key_s2);//松手检测

}

}

}

}

//外部中断0中断服务程序

void int0() interrupt 0//这个地方不能写错

{

P1 = ~P1;//P1的状态按位取反

}  

中断这里还有就是要注意中断优先级

 

 

关键字和入口号不要对应错

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值