MSP430-中断的使用

简介: MSP430-中断的使用

因为MSP430的操作是在寄存器上进行直接操作的,所以学习起来有一点繁琐,不像32,他有自己分装好的库可以提供大家使用,介绍中断,那就要了解下中断有关的寄存器:

image.png

image.png

这里写按键中断作为测试程序:

#ifndef  __CLOCK_H#define  __CLOCK_H#define uchar unsigned char #define uint unsigned intvoidInt_Clk(void);
#endif
#include<msp430f149.h>#include "clock.h"/****************************************************************************初始化时钟******************************************************************************/voidInt_Clk(void)
{
uchari;
BCSCTL1&=~XT2OFF;     //开启XT2振荡器BCSCTL2|=SELM_2+SELS;    //选择MCLK时钟源为XT2CLK;选择SMCLK时钟源为XT2CLKdo  {
IFG1&=~OFIFG;
for(i=0;i<100;i++)
_NOP();
  } 
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;  
}
#include <msp430x14x.h>#include "clock.h"#define keyin    (P1IN & 0x03)ucharKeyVal=0;   //按键的键值uchari=0;
voiddelay(void);
intmain( void )
{
//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;
Int_Clk();
P1IES=0x03;               //P1.0~P1.3选择下降沿中断P1IE=0x03;               //打开中断使能P1DIR&=~ (BIT0+BIT1);               //设置P1.0~P1.3为输入状态P2DIR=0xff;    
P2OUT=0xff;
_EINT();                    //打开全局中断控制位while(1)
  {
switch(KeyVal)    //转换键值              {
case1:P2OUT&=~BIT0;KeyVal=0;break;
case2:P2OUT&=~BIT1;KeyVal=0;break;
case3:P2OUT&=~BIT2;KeyVal=0;break; 
default:break;
               }
delay();
delay();
delay();
delay();
delay();
delay();
P2OUT=0xff;
  }
return0;
}
/*******************************************函数名称:delay能:用于消抖的延时数:无返回值:无********************************************/voiddelay(void)
{
uinttmp;
for(tmp=12000;tmp>0;tmp--);
}
/*******************************************函数名称:PORT1_ISR能:P1端口的中断服务函数数:无返回值:无********************************************/#pragma vector=PORT1_VECTOR__interruptvoidPORT1_ISR(void)
{
switch(P1IFG)    
        {
case0x01:
if(keyin==0x02)  //è?1?ê?μúò???°′?ü±?°′??                    {
delay();
if(keyin==0x02)
                        {
while(keyin!=0x03);       //μè′y°′?ü·??aKeyVal=1;
P1IFG=0;
break;   
                        }
                    }
case0x02:
if(keyin==0x01)   //è?1?ê?μú?t??°′?ü±?°′??                    {
delay();
if(keyin==0x01)
                        {
while(keyin!=0x03);       //μè′y°′?ü·??aKeyVal=2;
P1IFG=0;
break;
                        }
                    }
default:P1IFG=0;break;
        }
    }
目录
相关文章
|
7月前
【FreeRTOS】中断管理(三)
【FreeRTOS】中断管理
|
7月前
|
API C语言
【FreeRTOS】中断管理(一)
【FreeRTOS】中断管理
127 0
MSP430F5529——中断理解
MSP430F5529——中断理解
135 0
MSP430F5529库函数定时器A——定时中断
MSP430F5529库函数定时器A——定时中断
225 0
|
开发工具 git
MSP430F5529库函数定时器A——硬件PWM
MSP430F5529库函数定时器A——硬件PWM
221 0
|
存储 芯片
MSP430F5529库函数——模数转换模块(ADC12)软件触发
MSP430F5529库函数——模数转换模块(ADC12)软件触发
261 0
MSP430F5529库函数定时器B
MSP430F5529库函数定时器B
150 0
msp430 I/O端口中断实验
单片机的P1.0引脚连接一个LED灯, P1.1引脚连接一个开关。要求 编写程序,利用中断方法检测P1.1引脚处的开关是否被按下。每按一下开关,P1.0连接的LED 亮灭状态就变换一次。
147 0
msp430 I/O端口中断实验
MSP430-定时器的寄存器介绍以及测试应用
MSP430-定时器的寄存器介绍以及测试应用
152 0
MSP430-定时器的寄存器介绍以及测试应用
MSP430-时钟系统和GPIO
MSP430-时钟系统和GPIO
246 0
MSP430-时钟系统和GPIO