6.0 外部中断控制LED灯

实例4---外部中断控制LED灯-----程序目的:学会如何配置外部中断
硬件与实例3一致,仅KEY1有外部中断能力,单片机的P1与P2口具有第二功能就是外部中断,并且一个端口的所有IO共用一个中断向量,说白了就是一个中断入口,所以我们就需要判断中断源,到底来自于哪个IO口,我们只要判断中断标志位就可以了。需要注意就是在进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断。下面我们直接看程序,程序有计较详细的注释,在这里就不再赘述。同样我们也新建exti.c与exti.h文件:
exti.c:
//外部中断P1口底层驱动文件

#include
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"

//初始化外部中断P1.0
void ExtiP10_Init(void)
{
        P1SEL &= ~BIT0;//设置P1.0IO口为普通I/O模式
        P1DIR &= ~BIT0;//设置P1.0IO口方向为输入
        P1REN |= BIT0;//使能P1.0的内部电阻
        P1OUT |= BIT0;//设置P1.0内部上拉电阻为上拉方式
        P1IES |= BIT0;//触发方式为下降沿
        P1IE |= BIT0;//使能P1.0中断
        P1IFG &= ~BIT0;//清零P1.0中断标记
}

//P1口中断执行
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
        if((P1IFG & BIT0) == BIT0)//P1.0中断源-按键KEY1
        {
                P1IFG &= ~BIT0;//中断标志位清零
                Delay_ms(10);//软件消抖
                if(!KEY1_I) LED_HL;//翻转led灯状态
        }                
}

exti.h:
//外部中断P1口底层驱动头文件

#ifndef __EXTI_H
#define __EXTI_H

#include "msp430type.h"

//初始化外部中断P1.0
void ExtiP10_Init(void);

#endif

主函数:
#include
#include "msp430type.h"
#include "system.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"

//主函数
void main(void)
{
        Wdt_Off();//关闭看门狗
        Clock_Init();//系统时钟初始化
        Led_Init();//led灯初始化
        Key_Init();//按键初始化
        ExtiP10_Init();//初始化外部中断P1.0
        
        _BIS_SR(GIE);//使能总中断
        while(1);
}
整个程序就是这么简单,需要注意的就是要打开总中断。

外部中断控制LED灯课程完结。源程序:  004 exti.rar (257.95 KB, 下载次数: 0)       学习讨论Q群:167390222     2014年7月2日

你可能感兴趣的:(MSP430系列教程)