外部中断0低电平触发实验代码:
#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;//结束低电平
while(!key_s2);//松手检测
}
}
}
}
//外部中断1中断服务程序
void int0() interrupt 0
{
P1 = ~P1;//P1的状态按位取反
}
**************************************************************************/
外部中断1条边沿实验代码:
#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下降沿触发
}
void main()//main函数自身会循环
{
int1Init();//外部中断1初始化
while(1)
{
if(key_s2 == 0)//判断S2是否被按下
{
delay(20);//按键消抖
if(key_s2 == 0)
{
flag = 1;
flag = 0;//产生下降沿
while(!key_s2);//松手检测
}
}
}
}
//外部中断1中断服务程序
void int1() interrupt 2
{
P1 = ~P1;
}