一、根据外部中断执行功能函数
外部中断0(上升沿中断/上升沿下降沿均可中断),中断产生后将L6灯取反操作
#include<stc15.h>
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
IT0=0;//设置外部中断0,上升沿或下降沿后均可产生中断申请
//IT0=1;//设置外部中断0,仅下降沿后可产生中断申请
EX0=1;//允许外部中断0向CPU申请中断
EA=1;//打开CPU总中断
while(1);
}
//外部中断服务程序
void EX_INT0(void) interrupt 0 //INT0中断入口
{
P05=!P05;//将测试口取反
}
二、S5接到P32/INT0,S4接到P33/INT1。定义一个Working()函数,使L1指示灯不断闪烁。将P32引脚定义成外部中断功能,按键S5按键就会产生外部中断触发信号,在中断响应函数中,点亮L8指示灯,延时一段较长时间后熄灭,该功能用两种方式实现:
1、直接在中断服务函数中延时。
2、在中断服务函数中标志变量,在外部执行延时。
方式一:
#include<stc15.h>
sbit L1=P0^0;
sbit L8=P0^7;
sbit S5=P3^2;
sbit S4=P3^3;
void Delay(unsigned int t)
{
while(t--);
while(t--);
while(t--);
}
void SelectHC573()
{
P2=(P2&0X1F)|0X80;
}
void Working()
{
SelectHC573();
L1=0;
Delay(60000);
L1=1;
Delay(60000);
}
void Init_INT0()
{
IT0=1;//下降沿触发
EX0=1;
EA=1;
}
void ServiceINT0() interrupt 0
{
if(S5==0)
{
Delay(100);
if(S5==0)
{
L8=0;
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
L8=1;
}
}
}
void main()
{
Init_INT0();
while(1)
{
Working();
}
}
/*
#include<stc15.h>
sbit L1=P0^0;
sbit L8=P0^7;
void Delay(unsigned int t)
{
while(t--);
while(t--);
while(t--);
}
void SelectHC573()
{
P2=(P2&0X1F)|0X80;
}
void Working()
{
SelectHC573();
L1=0;
Delay(60000);
L1=1;
Delay(60000);
}
void Init_INT0()
{
IT0=1;//下降沿触发
EX0=1;
EA=1;
}
void ServiceINT0() interrupt 0
{
L8=0;
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
L8=1;
}
void main()
{
Init_INT0();
while(1)
{
Working();
}
}
*/
方式二:
#include<stc15.h>
sbit L1=P0^0;
sbit L8=P0^7;
void Delay(unsigned int t)
{
while(t--);
while(t--);
while(t--);
}
void SelectHC573()
{
P2=(P2&0X1F)|0X80;
}
void Working()
{
SelectHC573();
L1=0;
Delay(60000);
L1=1;
Delay(60000);
}
void Init_INT0()
{
IT0=1;//下降沿触发
EX0=1;
EA=1;
}
unsigned char stat_int=0;
void ServiceINT0() interrupt 0
{
stat_int=1;
}
void LEDINT()
{
if(stat_int==1)
{
L8=0;
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
Delay(600000);
L8=1;
}
stat_int=0;
}
void main()
{
Init_INT0();
while(1)
{
Working();
LEDINT();
}
}