对51单片机外部中断的学习
外部中断的配置步骤:
- 打开总中断 EA=1;、
- 打开外部中断0或外部中断1 EX0=1;或EX1=1;
- 配置外部中断的触发方式
例如 :外部中断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的状态按位取反
}
中断这里还有就是要注意中断优先级
关键字和入口号不要对应错