【蓝桥杯—单片机】中断系统与外部中断应用 | 备赛 | 笔记

前言

学习资料参考

课程资料
【【小蜜蜂笔记】蓝桥杯大赛-单片机设计与开发基础技能与进阶强化教程】https://www.bilibili.com/video/BV1Bt41187hw?p=8&vd_source=e2191f89c557f5ac44bb6c7aa3967c7c

LED基本控制可以参考以下笔记
https://blog.csdn.net/zicheng_G/article/details/142025188?fromshare=blogdetail&sharetype=blogdetail&sharerId=142025188&sharerefer=PC&sharesource=zicheng_G&sharefrom=from_link

本节训练重点

  1. 外部中断的基本操作

中断系统与外部中断

中断相关的基础概念

内核与外设之间的主要交互方式有两种:轮询和中断。相较于轮询,中断应对突发事件的能力更好。

在程序执行的过程中由于外界的原因而被中间打断的情况,称为中断。

中断服务函数:内核响应中断后执行的相对应处理程序。

中断向量:中断服务程序的入口地址。


每个中断源都对应一个固定的入口地址

中断号

中断号中断源
0INT0
1TF0
2INT1
3TF1
4RI/TI

中断相关的寄存器

在这里插入图片描述
两个寄存器都可以按位寻址。

中断请求标志

中断请求标志有TCON寄存器SCON寄存器
在这里插入图片描述

编程思路

外部中断的基本操作

定义一个Working()函数,使L1指示灯不断闪烁。将P32引脚定义成外部中断函数,按下S5按键就会产生外部中断触发信号,在中断响应函数中,点亮L8指示灯,演唱一段时间后熄灭。

/*头文件声明区域*/
#include <REGX52.H>

/*变量声明区域*/
sbit  L1=P0^0;//定义L1指示灯
sbit  L8=P0^7;//定义L8指示灯

/*延时函数*/
void Delay(unsigned int t)
{
	while(t--);
}

/*HC573选择函数,选中LED对应的HC573*/
void HC573()
{
	P2 = (P2 & 0x1f)|0x80;
}

/*Working函数实现L1指示灯闪烁*/
void Working()
{
	L1=0;
	Delay(500000);
	L1=1;
	Delay(500000);
}

//======中断函数======
/*中断初始化函数*/
void INT0_Init()
{
	IT0=1;//下降沿触发
	EX0=1;//打开中断使能
	EA=1;//打开总开关
}

/*中断服务函数*/
void ServiceINT0() interrupt 0
{
	L8=0;
	Delay(500000);
	Delay(500000);
	Delay(500000);
	Delay(500000);
	L8=1;
}
//====================
/*主函数*/
void main()
{
	HC573();
	INT0_Init();
	while(1)
	{
		Working();
	}
}

没有写按键相关的代码,为什么按下S5可以实现中断?
答:原理图上INT0的位置与S5复位,即S5会对INT0产生作用。由于在中断初始化函数中写的是下降沿触发,所以当S5按下时,产生下降沿,触发中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值