中断系统:外部中断

中断系统:外部中断

实现功能

按下独立按键Key3,LED流水灯向右;按下Key4,LED流水灯向左。

单片机型号:STC89C52

硬件原理

在这里插入图片描述

中断系统就是当系统在进行一项工作时,需要终止这项工作,转而去执行另一项工作,当执行完成后再接着执行第一项工作。

如上图,STC89C52有两个外部中断(INT0INT1)、两个定时器中断(T0T1)、一个串口中断(RX/TX

以外部中断 INT0 讲解,INT1 同理。

外部中断 INT0 中的 IT0 是选择中断触发方式的,如果等于 1 ,则是下降沿触发中断;如果等于 0 ,则是低电平触发中断。EX0INT0 的中断允许,将其赋值为 1 ,则可以开启 INT0 的中断允许。EA 是总中断 ,只有将其打开才能允许中断。IP 是控制中断的优先级的,这里不做介绍,使用默认优先级。INT0 的管脚连在 P3^2INT1 的管脚连接在 P3^3 ,和独立按键 Key3Key4 连在同一个管脚,所以可以用独立按键 Key3Key4 来触发外部中断。

中断标号为:

  • INT0 0
  • T0 1
  • INT1 2
  • T1 3
  • RX/TX 4

软件编写

外部中断配置:

  • 中断源有中断请求。
  • 中断源的中断允许位为1.
  • CPU开中断。(即 EA=1)

题目要求按下两个按键,流水灯需要往不同的方向流动,所以需要两个外部中断。首先将两个外部中断配置好,再写出两个外部中断需要执行的函数。在写外部中断函数时需要用到关键字 interrupt ,再在后面写上中断标号。例如外部中断 INT0 的中断函数这样写 void Int0() interrupt 0 ,千万不要将中断标号写错了。

#include <REGX52.H>
#include <intrins.h>

#define LED  P2

//定义独立按键管脚
sbit Key3=P3^2;  
sbit Key4=P3^3;

unsigned int i;


void delay(unsigned int x)
{
	while(x--);
}

void Int0_Init()   //外部中断 0 配置 
{
	IT0=1;    //跳变沿触发方式(下降沿)
	EX0=1;    //打开 INT0 的中断允许
	EA=1;     //打开总中断
}

void Int1_Init()   //外部中断 1 配置
{
	IT1=1;
	EX1=1;
	EA=1;
}

void Int0() interrupt 0   //外部中断 0 中断函数
{
	delay(1000);
	if(Key3==0)
	{
		for(i=0;i<16;i++)   //流水灯流动点亮16个灯后停止流动
		{
			delay(5000);
			LED=_crol_(LED,1);
			delay(5000);
		}	
	}
}

void Int1() interrupt 2   //外部中断 1 中断函数
{
	delay(1000);
	if(Key4==0)
	{
		for(i=0;i<16;i++)
		{
			delay(5000);
			LED=_cror_(LED,1);
			delay(5000);
		}	
	}
}

void main()
{
	LED=~0x01;    //流水灯初始赋值
	while(1)
	{
		Int1_Init();
		Int0_Init();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值