#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
led=p0^0
sbit
led1=p0^1
void
delay1ms
(uint
z)
{
uint
x,y
for
(x=zx>0x--)
for
(y=110y>0y--)
}
void
exter()
interrupt
2
{
delay1ms(600)
led=0
delay1ms(200)
led=1
}
void
exter0()
interrupt
0
{
delay1ms(600)
led1=1
delay1ms(200)
led1=0
}
main()
{
ea=1
//开总中断
ex1=1
//开外部中断1
ex0=1
//开外部中断0
it1=0
//外部中断边沿触发,下降沿触发
it0=0
//外部中断0边沿触发,下降沿触发
}
按键一端接地,另一端接P3^2 就是外部中断0 ,,sbit key = P3^2
void main()
{
EX0 = 1
IT0 = 1
EA = 1
while(1)
{
这里写你的功能;
}
}
void int0() interrupt 0
{
unsigned int i = 0
while(1)
{
if(key == 0)
{
i++
if(i >= 1000)
{
i=0
flag = 1
break
}
}
else
{
i=0
break
}
}
}
这个程序包括了消抖部分,flag = 1的时候就表明 按键按下了。 flag的变量定义,还有头文件,自己加上,在主程序你检测flag的状态就可以了
一、方式不同
1、电平触发方式:外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入线的电平变化而变化。
2、跳沿触发方式:外部中断申请触发器能锁存外部中断输入线上的负跳变。即便是CPU暂时不能响应,中断申请标志也不会丢失。
二、特点不同
1、电平触发方式:在中断服务程序返回之前,外部中断请求输入必须无效(即变为高电平),否则CPU返回主程序后会再次响应中断。
2、跳沿触发方式:相继连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置“1”中断申请触发器,直到CPU响应此中断时才清’0’。
三、适用性不同
1、电平触发方式:适合于外部中断以低电平输入而且中断服务程序能清除外部中断请求源(即外部中断输入电平又变为高电平)的情况。
2、跳沿触发方式:适合于以负脉冲形式输入的外部中断请求。
参考资料来源:百度百科-外部中断
参考资料来源:百度百科-中断处理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)