找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2691|回复: 0
打印 上一主题 下一主题
收起左侧

关于MSP430的中断和查询方式

[复制链接]
跳转到指定楼层
楼主
ID:186516 发表于 2017-4-6 00:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSP430F5529的芯片使用按键S2,以查询方式控制LED1:按下S2,LED1开始以1Hz的频率开始闪烁,再次按下S2,LED1熄灭;同时,使用按键S1以中断方式,控制LED1的闪烁或熄灭。这个可以用选择语句吧 但是 我就不知道中断函数下面又有声明 我想用switch语句 但是现在只能写成这个样子了 接下来应该怎么办呢 拜托各位大神了

  1. #include<msp430.h>


  2. #define OSC 1000000


  3. #define u8 unsignedchar


  4. #define u16 unsignedshort


  5. #define S1 (P1IN&BIT7)


  6. #define S2 (P2IN&BIT2)


  7. u8 led_flash;





  8. void GPIO_init(void);


  9. void delay_ms(u16 time);


  10. /*


  11. * main.c


  12. */


  13. void main(void)


  14. {


  15.    WDTCTL = WDTPW | WDTHOLD;    // Stop watchdog timer


  16.    GPIO_init();


  17.    _BIS_SR(GIE);


  18.    P1OUT |= BIT0;


  19.    while(1)


  20.      {


  21.         if(!S2)


  22.         {


  23.         delay_ms(10);


  24.         if(!S2)


  25.         {


  26.             while(!S2);


  27.             delay_ms(10);


  28.             led_flash=1;


  29.           }


  30.         if(!S2)


  31.         {


  32.             led_flash=2;


  33.         }


  34.         switch(led_flash)


  35.                  {case 1:


  36.                      P8OUT|=BIT1;


  37.                      P1OUT|=BIT0;


  38.                      delay_ms(500);


  39.                      P8OUT&=~BIT1;


  40.                      P1OUT&=~BIT0;


  41.                      delay_ms(500);


  42.                      break;


  43.                  case 2:


  44.                      P1OUT^= BIT0;


  45.                      break;


  46.                  case 3:


  47.                      break;


  48.                  default: ;


  49.                  }


  50.      }


  51.      }


  52. }





  53. void GPIO_init(void)


  54. {


  55.     P1DIR|=BIT0;//LED1


  56.     P1DIR&=~ BIT7;


  57.     P1OUT|=BIT7;


  58.     P1REN|=BIT7;





  59.     P1IFG= 0x00;


  60.     P1IES|= BIT7;


  61.     P1IE|= BIT7;





  62.     P1DIR|=BIT0;//LED1


  63.     P2DIR&=~ BIT2;


  64.     P2OUT|=BIT2;


  65.     P2REN|=BIT2;


  66. }





  67. void delay_ms(u16 time)


  68. {


  69.     while(time--)


  70.             __delay_cycles(OSC/1000);


  71. }





  72. #pragma vector=PORT1_VECTOR


  73. __interrupt void Port1_ISR(void)


  74. {


  75.     if(P1IFG & BIT7)


  76.     {


  77.         delay_ms(10);


  78.         while (!S1)


  79.         delay_ms(10);


  80.         P1IFG&=~ BIT7;


  81.         P1OUT^= BIT0;


  82.     }


  83. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表