8051外部中断0解析

程序实现功能:

在实验板上左下方有一个黑色的独立按键(K3), 当我们按下它时, D1(LED灯)的状态就会取反.

思路分析:

我们令IT0 = 1, 即选择了"边沿触发", 所以每当独立按键按下时, 中断处理函数EX_INT0()就会执行. 

当进入中断处理函数执行时, 若P32引脚的电平为低电平, 则说明K3按键已按下; 若P32引脚的电平为高电平, 说明K3按键已抬起.

"低电平触发"和"边沿触发"的区别:

①"低电平触发"是指在电平处于低电平态的时间内触发.

②"边沿触发"是指在电平由高 -> 低或由低 -> 高的一瞬间触发.

独立按键电路原理图:

 

抖动的处理:

为什么我们要在中断处理函数开始执行时先加入1ms延时模块, 是因为按键在按下或抬起时电平不是一下子稳定到低或高状态的, 而是在经历一小段时间的电平抖动后才到达稳定态: 为了对P32引脚电平判断的准确性, 先加入1ms的延时模块, 当电平稳定之后 再行判断.

 

程序源代码:

#include <STC89C5xRC.H>

void delay()//获得1ms延时
{
	TH0 = 0xFC;
	TL0 = 0x18;//65536 - 1000 = 64536 = FC18H
	TR0 = 1;//开启定时器0
	while(TF0 == 0);//等待定时器0计数溢出
	TF0 = 0;
	TR0 = 0;//暂停定时器0
}

void EX_INT0() interrupt 0//外部中断0处理函数
{
	delay();//1ms延时消抖
	if(P32 == 0)
	{
		P20 = ~ P20;//D1电平翻转
	}
}

int main()
{
	TMOD = 0x01;//设置定时器0的工作模式
	TR0 = 0;
	TF0 = 0;
	P20 = 0;//开发板上D1亮

	EA = 1;//中断总开关打开
	EX0 = 1;//外部中断0开关打开
	IT0 = 1;//边沿触发
	//IT0 = 0 -> 低电平触发中断,  IT0 = 1 -> 边沿触发中断
	while(1)
	{
		;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值