单片机c51中断 — 开关状态监测

项目文件

文件

关于项目的内容知识点可以见专栏单片机原理及应用 的第五章,中断

 


图中 P2.0引脚处接有一个发光二极管 D1,P3.2引脚处接有一个按键。要求分别采用一般方式和中断方式编程实现按键压下一次,D1 的发光状态反转一次的功能。

在这里插入图片描述

查询法

先讲查询法:
就是先把那二个端口定义了,然后按键按下的话,D1的电平反转

判断按键:
while(1)
{
if(P3_2==0) 事件;
}

这里为啥是0?
因为电路图:
在这里插入图片描述
你看原来按键没按下,端口处还是高电压水平,但是按下后接地,低电压水平,所以应该是0判断按下

按下后D1灯端口处电压反转,
P1_0=!P1_0;
这样就亮了
然后再按下按键就会又反转了,大致这样循环着

代码如下:

#include <reg51.h>
sbit p2_0=P2^0;
sbit p3_2=P3^2;

main(){
   p2_0=1; //刚开始为1 灭
   while(1){
      if(p3_2==0) {	 
	     p2_0=!p2_0;
		   }
   }
}  

程序运行时,主函数需要不断查询 P3.2引脚的电平状态。若 p3_2为0则将p2_0值取反显然这一过程要占用大量主函数机时。

中断法

先定义sbit p1_0=P1^0端口
这里就要写中断处理函数了,就是灯端口电平反转

int0_srv () interrupt 0{
   p2_0 = !p2_0; 
}  

interrupt 0通常指的是中断向量表中的第0个中断(等级高),也就是系统中断。当系统需要处理一些紧急的事件时,会触发中断,让CPU暂停当前的任务,转而去处理中断事件。中断向量表中的每个中断都对应着一个中断处理程序,当中断发生时,CPU会跳转到对应的中断处理程序中去执行。

再来主函数:

main(){
   IT0=1; //中断初始化 高优先级中断
   EX0=1; //外部中断0被使能,可以响应外部中断信号(按键传感器之类的)
   EA=1;  //中断使能位EA  所有中断都被使能
   while(1); //无限循环
} 

这一程序由主函数和中断函数组成,中断函数int0_srv()完成p2_0电平翻转作用,主函数中的 while(1)语句则模拟任意任务的语句。

代码整体:

#include <reg51.h>
sbit p2_0=P2^0;

int0_srv () interrupt 0{
   p2_0 = !p2_0; 
}  

main(){
   IT0=1; //中断初始化 高优先级中断
   EX0=1; //外部中断0被使能,可以响应外部中断信号(按键传感器之类的)
   EA=1;  //中断使能位EA  所有中断都被使能
   while(1); //无限循环
} 

可见,该程序也可以实现按键压下一次、D1的发光状态翻转一次的功能。该主函数中没有按键检测语句,故不会占用主函数机时。

运行结果

在这里插入图片描述

单片机c51-开关状态检测中断

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值