中断的基本操作

一、定义:

内核与外设之间的主要交互方式有两种:轮询和中断。中断相当于人的电话,当遇到通知的时候,能够停下处理相应的事务。中断使得内核具备了应对突发事件的能力。
概念:CPU处理当前的程序时,由于系统出现了某种急需处理的情况,CPU暂停正在执行的程序,,转而去执行另外一段特殊的程序。处理完紧急事务后,CPU自动返回到原来暂停的程序中继续执行,这个过程叫做中断。
中断服务函数:中断后执行相应的处理程序。
中断向量:中断服务程序入口,固定的入口地址。

二、中断处理函数:

第一类为中断初始化函数,第二类为中断服务函数。初始化函数是一个普通的函数。而终端服务函数却有特殊的格式要求:
(1)中断函数没有返回值,也不带参数。
(2)函数名后跟关键字interrupt,定义该函数为中断服务的。
(3)interrupt后跟上中断号。
函数格式为:
void 函数名()interrupt 中断号
{---函数名---}
主程序中先执行working完再查询状态,用于完成整个功能在执行中断,中断服务函数中少做事情。

代码如下:

#include "reg52.h"

sbit L1 = P0^0;
sbit L8 = P0^7;

void Delay(unsigned int t) //这里我为了能够清晰看到L1的闪亮情况,特定将延时设置长。
{
	while(t--);
	while(t--);
	while(t--);
	while(t--);
	while(t--);
	while(t--); 
}

void SelcetHC573()
{
	P2 = (P2 & 0x1f | 0x80);
}

void Working()
{
		SelcetHC573();
		L1 = 0;
		Delay(60000);
		L1 = 1;
		Delay(60000);
}
//******
void Int_INTO()
{
	IT0 = 1;
	EX0 = 1;
	EA = 1;
}
unsigned char stat_int = 0;
void ServiceINTO() interrupt 0
{
	stat_int = 1;
}
void LEDINT()
{
	if(stat_int == 1)
	{
	L8 =0;
	Delay(60000);
	Delay(60000);
	Delay(60000);
	Delay(60000);
	Delay(60000);
	Delay(60000);
	L8 =1;
	}
	stat_int = 0;
}
//******
void main()
{
	Int_INTO();
	while(1)
	{
		Working();
		LEDINT();
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值