MSP430FF529实现跑马灯(中断方法)

版权声明:未注明版权或“请勿转载”的文章可转载,但请注明出处,谢谢! https://blog.csdn.net/weixin_43848634/article/details/89284853

功能:

使用端口的中断功能实现以下功能:按下按键S1,跑马灯正向运行;按下按键S2,跑马灯反向运行。

原理:

MSP430F5529单片机内端口模块共有11个端口P11~P11。其中只有P1、P2端口具有中断功能。跟中断功能相关寄存器有:PxIFG, PxIE, PxIES。
PxIE为中断使能寄存器
0:禁止中断 1:允许中断
eg:P1IE = 0x10 //P1.4引脚中断使能

PxIES 为中断触发沿选择寄存器
0:上升沿中断标志置位 1:下降沿中断标志置位
eg:P1IEs = 0x10 //P1.4引脚中断使能
【改变PxIES可能使相应的中断标志置位】

PxIFG中断标志寄存器
相应的引脚有中断请求,会使相应的中断标志位置位。
【外部中断事件的时间必须保持不低于1.5倍的MCLK的时间,以保证中断请求被接受,且使相应中断标志位置位】

【中断标志PxIFG.0- PxIFG.7共用一个中断向量,属于多源中断。任一事件引起的中断进行服务时,PxIFG.0- PxIFG.7不会自动复位。必须用软件来判定是对哪一个事件服务,并将相应的中断标志复位】

代码

以下是实现代码:

#include<msp430F5529.h>
void main(void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
P4DIR = 0xff;
P1IE |= BIT1;
P1IES |= BIT1;
P1IFG &= ~BIT1;//清除中断标志
P2IE |= BIT1;
P2IES |= BIT1;
P2IFG &= ~BIT1;//清除中断标志
  _BIS_SR(LPM4_bits+GIE);//CPU置LPM4模式
}

#pragma vector = PORT1_VECTOR//中断向量 服务程序
__interrupt void Port1(void)
{
    int i;
    unsigned char LED[] = {0x02,0x04,0x08,0x80,0x02,0x04,0x08,0x80};
    for(i=0;i<=7;i++)//循环点亮8只LED灯
    {
     P4OUT = LED[i];
     delay_cycles(500000);//延时500毫秒
    }
    P1IFG &= ~BIT1;//多源不会自动清零,需手动 
}

 #pragma vector = PORT2_VECTOR//中断向量 服务程序
__interrupt void Port2(void)
{
    int j=7;
    unsigned char LED[] = {0x02,0x04,0x08,0x80,0x02,0x04,0x08,0x80};
    for(j=7;j>=0;j--)//循环点亮8只LED灯
    {
     P4OUT = LED[j];
     _delay_cycles(500000);//延时500毫秒
    }
    P2IFG &= ~BIT1;//多源不会自动清零,需手动
}

欢迎指正、优化!

猜你喜欢

转载自blog.csdn.net/weixin_43848634/article/details/89284853
今日推荐