单片机
返回首页

MSP430F5529的IO口管脚的中断学习笔记

2016-07-12 来源:eefocus

非常简单的一个程序,在F5529的开发板上用按键的IO中断控制LED的亮灭:
#include  
 
int main(void)
{
    WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
 
    P1DIR |= BIT0; //将LED1对应的IO口P1.0设置为输出
    P1OUT &= ~BIT0; //初始化该灯设置为灭
 
    P1DIR &= ~BIT7; //将按键1对应的IO口P1.7设置为输入
    P1IFG &= ~BIT7; //初始化清空中断标志位
    P1IE |= BIT7; //P1.7中断使能
    P1IES |= BIT7; //下降沿产生中断
 
    P1OUT |= BIT7; //P1.7设置为上拉电阻:OUT = 1; REN = 1;
    P1REN |= BIT7;
 
    __enable_interrupt();
 
    while(1);
}
 
#pragma vector = PORT1_VECTOR     //固定格式,声明中断向量地址,不能变
__interrupt void LED(void) //函数名,可以任意定义
{
int i;
switch(__even_in_range(P1IV,18))
{
case 0x10:
for (i = 0; i < 12000; i++);
if ((P1IN & BIT7) == 0) //注意位运算的优先级!!!非常重要
P1OUT ^= BIT0;
break;
default:
break;
}
}
经验总结:

1.  按键需要延时消抖

2.  标志位需要手动清零               (此处不完全正确,还有问题需要考虑)

3.  中断程序格式:

         #pragma vector = PORT2_VECTOR                      //固定格式,声明中断向量地址,不能变

__interrupt void fuck430(void)                  //函数名,可以任意定义

{

         switch(__even_in_range(P2IV,18))

         {

         case 0x06:

                   …

break;

         default:

                   break;

         }

}

4.  主程序中要开总中断,然后有循环

5.  位运算的优先级很低,注意加括号

6.  按键的上拉电阻,OUT、REN、IES

 

一上午终于把IO中断弄懂了。吸取位运算优先级的教训。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 基于IC555的可变PWM振荡器电路

  • 优化电路板布局的简单方法

  • 如何使用LED驱动器LM3915制作振动计

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章