外部中断实验

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "exit.h"

unsigned char LED_sta=0;

int main(void)
{		
  Stm32_Clock_Init(9);//系统时钟设置
	delay_init(72);			//延时初始化
	LED_Init();         //LED初始化	
	Exit_Init();        //外部中断初始化
 
	while(1)
	{
		
	} 
}

//外部中断0复服务程序
void EXTI0_IRQHandler(void)
{	
//简单的防抖处理
	delay_ms(5);
	if(KEY!=0)
	{
		EXTI->PR=1<<0;  //清除LINE0上的中断标志位
		return;
	}
	LED0=~LED0;

	EXTI->PR=1<<0;  //清除LINE0上的中断标志位
}

外部中断实验:
通过中断来控制LED灯的亮灭
主函数中将所有要用的东西初始化,
然后进入while(1)中的“待机”状态

int main(void)
{		
  Stm32_Clock_Init(9);//系统时钟设置
	delay_init(72);			//延时初始化
	LED_Init();         //LED初始化	
	Exit_Init();   
	
	while(1)
	{
		
	} 
}

看到外部中断0复服务程序(什么是复服务程序没懂)

//外部中断0复服务程序
void EXTI0_IRQHandler(void)
{	
//简单的防抖处理
	delay_ms(5);
	if(KEY!=0)
	{
		EXTI->PR=1<<0;  //清除LINE0上的中断标志位
		return;
	}
	LED0=~LED0;

	EXTI->PR=1<<0;  //清除LINE0上的中断标志位
}

进入程序时先知道,按钮一旦按下,相当于把LINE0上的中断标志位置1,(这个东西应该是决定了中断程序是否进行下去的)让程序从while(1)中脱离,进入中断服务程序

进入程序后先进行简单的消除抖动(按键的物理特性按下时会有不规则的抖动),消除抖动后再判断按键是否按下(是否为低电平),如果是低电平说明按键并没有按下,则清除中断标志位,return到主函数中;
如果是高电平的话,就会滤过上面的 if 判断,将LED 状态取反,然后再清除 LINE0 的中断标志位,退出中断回到主函数中

#ifndef __EXIT_H
#define __EXIT_H	 
#include "sys.h"

#define KEY PCin(0)

void Exit_Init(void);

#endif

EXIT 头文件中定义了 KEY 是 PCin(0), 而中断程序就是要监测到 KEY 的电平状态来判断是否进入中断。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值