1574|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430F5529的IO口管脚的中断学习笔记 [复制链接]

非常简单的一个程序,在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中断弄懂了。吸取位运算优先级的教训。
 

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表