MSP430-中断的使用
因为MSP430的操作是在寄存器上进行直接操作的,所以学习起来有一点繁琐,不像32,他有自己分装好的库可以提供大家使用,介绍中断,那就要了解下中断有关的寄存器:
这里写按键中断作为测试程序:
#ifndef  __CLOCK_H#define  __CLOCK_H#define uchar unsigned char #define uint unsigned intvoid Int_Clk(void);#endif
#include#include "clock.h"/****************************************************************************                初始化时钟******************************************************************************/void Int_Clk(void){  uchar i;  BCSCTL1&=~XT2OFF;     //开启XT2振荡器  BCSCTL2|=SELM_2+SELS;    //选择MCLK时钟源为XT2CLK;选择SMCLK时钟源为XT2CLK    do  {    IFG1&=~OFIFG;    for(i=0;i<100;i++)      _NOP();  }   while((IFG1&OFIFG)!=0);  IFG1&=~OFIFG;  }
#include #include "clock.h" #define keyin    (P1IN & 0x03)uchar KeyVal = 0;   // 按键的键值uchar i=0;void delay(void);int main( void ){  // Stop watchdog timer to prevent time out reset  WDTCTL = 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)    //转换键值                  {               case 1:P2OUT&=~BIT0;KeyVal=0;break;               case 2:P2OUT&=~BIT1;KeyVal=0;break;               case 3:P2OUT&=~BIT2;KeyVal=0;break;                default:break;               }              delay();              delay();              delay();              delay();              delay();              delay();            P2OUT = 0xff;  }  return 0;}/*******************************************函数名称:delay功    能:用于消抖的延时参    数:无返回值  :无********************************************/void delay(void){    uint tmp;        for(tmp = 12000;tmp > 0;tmp--);}/*******************************************函数名称:PORT1_ISR 功    能:P1端口的中断服务函数参    数:无返回值  :无********************************************/#pragma vector=PORT1_VECTOR__interrupt void  PORT1_ISR(void){           switch(P1IFG)            {        case 0x01:                    if(keyin == 0x02)  //è?1?ê?μúò???°′?ü±?°′??                    {                        delay();                        if(keyin == 0x02)                        {                            while(keyin != 0x03);       //μè′y°′?ü·??a                            KeyVal = 1;                            P1IFG = 0;                            break;                           }                    }        case 0x02:                    if(keyin == 0x01)   //è?1?ê?μú?t??°′?ü±?°′??                    {                        delay();                        if(keyin == 0x01)                        {                            while(keyin != 0x03);       //μè′y°′?ü·??a                            KeyVal = 2;                            P1IFG = 0;                            break;                        }                    }        default:P1IFG = 0;break;                         }    }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。