您的位置 首页 解答

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

非常简单的一个程序,在F5529的开发板上用按键的IO中断控制LED的亮灭:#includeintmain(void){WDTCTL=WDTPW+WDTHOLD;//…

十分简略的一个程序,在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中止弄懂了。汲取位运算优先级的经验。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/276462.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部