蓝桥杯STC15单片机复习——外部中断

蓝桥杯STC15单片机复习——外部中断

前言
终于到外部中断了,其实从往届赛题来看,外部中断的使用比较少(也可能是我太菜了),不过咱得秉着宁错勿漏的精神来复习才行。
在这里插入图片描述
如上图所示,STC15的单片机的外部中断分别位于P32、P33(EX0、EX1),其中,外部中断0的中断号为0,外部中断1的中断号为2.
1、通过外部中断0控制LED亮灭

/*
	彭某的蓝桥杯复习——外部中断
	1、外部中断按键控制LED亮灭
*/

#include <STC15F2K60S2.h>
#define uint unsigned int
#define uchar unsigned char

void ALL_Init();
void EX0_Init();

void main()
{
	ALL_Init();
	EX0_Init();
	while(1)
	{
			
	}
}

void EX0_run() interrupt 0
{
		P25 = 0;P26 = 0;P27 = 1;
		P00 = !P00;
}

void EX0_Init()
{
	EX0 = 1;
	EA = 1;
	IT0 = 1;
}

void ALL_Init()
{
	P25 = 0;P26 = 1;P27 = 1;
	P0 = 0x00;
	P25 = 1;P26 = 0;P27 = 1;
	P0 = 0x00;
	P25 = 0;P26 = 0;P27 = 1;
	P0 = 0xff;
}

2、通过外部中断1控制流水灯流水方向
前面做流水灯测试的时候,由于延时函数的干扰,当流水速度不那么快的时,按键存在被延时函数阻塞而无法检测,这次我们通过外部中断进行控制,可以直接打断延时函数,提高按键检测是实时性。

uchar flag = 0;

void main()
{
	ALL_Init();
	EX0_Init();
	EX1_Init();
	P25 = 0;P26 = 0;P27 = 1;
	P00 = 0;
	while(1)
	{
			liushui();
	}
}

void delay_ms(uint ms)
{
	int i;
	for(;ms>0;ms--)
		for(i = 864;i>0;i--);
}

void liushui()
{
	if(flag)
		P0 = _cror_(P0,1);
	else
		P0 = _crol_(P0,1);
	delay_ms(1000);
}

void EX1_run() interrupt 2
{
	flag = !flag;
}

结语
至此,外部中断测试结束。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值