打印
[MCU]

P2.1端口按键中断进不了

[复制链接]
466|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llljh|  楼主 | 2020-8-27 19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用msp430f5529做一个按键中断程序,就是通过按键P2.1取控制两个ledP1.0和P4.7轮流点亮,但运行进入不了中断

/*
* dcomain.c
*
*  Created on: 2015-7-25
*      Author: fengtianxu
*/

#include "MSP430f5529.h"
void P2_IODect();
void P21_Onclick();
void GPIO_Init();
void main(void)
{

使用特权

评论回复

相关帖子

沙发
xxmmi| | 2020-8-27 19:29 | 只看该作者
你好,我现在也在学习这个开发板,请问我怎么不能让LED P1.0亮呢?

使用特权

评论回复
板凳
xxmmi| | 2020-8-27 19:32 | 只看该作者
跳线帽我也接了,是不是程序有问题?

使用特权

评论回复
地板
bqyj| | 2020-8-27 19:35 | 只看该作者
void  main() {
        WDTCTL = WDTPW | WDTHOLD;                // Stop watchdog timer
        P1DIR |= 0x01;                                        // Set P1.0 to output direction

        for(;;) {
                volatile unsigned int i;        // volatile to prevent optimization

                P1OUT^ = 0x01;                                // Toggle P1.0 using exclusive-OR

                i = 10000;                                        // SW Delay
                do i--;
                while(i != 0);
        }
        
        
}
这样有错么?

使用特权

评论回复
5
llljh|  楼主 | 2020-8-27 19:38 | 只看该作者
P1.0初始状态都没   你取反有什么用

使用特权

评论回复
6
liuzaiy| | 2020-8-27 19:41 | 只看该作者

从2553那拷贝过来的    改了下IO口   可以直接用
/*
* Interrupt_Key_LED.c
* 硬件描述:Launchpad G2553开发板上P1.3接了一个按键,P1.0和P1.6各接了1个LED(用跳线帽连接)。
* 功能描述:按键按下的瞬间,两个LED切换亮灭状态
*  Author: Administrator
*/

#include "MSP430f5529.h"

//-----在main函数前提前申明函数-----
void P2_IODect()        ;
void P21_Onclick();
void GPIO_init();

void main(void) {
        WDTCTL = WDTPW + WDTHOLD;        //关狗
        GPIO_init();                                                                                        //IO初始化
        _enable_interrupts();                                                        //使能总中断
        _bis_SR_register(LPM3_bits);                                //休眠
}
/******************************************************************************************************
* 名       称:GPIO_Init()
* 功       能:设定按键和LED控制IO的方向,启用按键IO的上拉电阻
* 入口参数:无
* 出口参数:无
* 说       明:无
* 范       例:无
******************************************************************************************************/
void GPIO_init()
{
        //-----设定P1.0和P1.6的输出初始值-----
        P1DIR |= BIT0;                                //设定P1.0和P4.7为输出
        P4DIR |= BIT7;
        P1OUT |= BIT0;                                                //设定P1.0初值
        P4OUT &= ~BIT7;                                        //设定4.7初值
        //-----配合机械按键,启用内部上拉电阻-----
        P2REN |= BIT1;                                        //启用P2.1内部上下拉电阻
        P2OUT |= BIT1;                                    //将电阻设置为上拉
        //-----配置P1.3中断参数-----
        P2DIR &= ~BIT1;                    // P2.1设为输入(可省略)
        P2IES |= BIT1;                          // P2.1设为下降沿中断
        P2IE  |= BIT1 ;                          // 允许P2.1中断
}
/******************************************************************************************************
* 名       称:PORT1_ISR()
* 功       能:响应P1口的外部中断服务
* 入口参数:无
* 出口参数:无
* 说       明:P1.0~P1.8共用了PORT1中断,所以在PORT1_ISR()中必须查询标志位P1IFG才能知道
*                                          具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。
* 范       例:无
******************************************************************************************************/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
        //-----启用Port1事件检测函数-----
        P2_IODect();                                                                //检测通过,则会调用事件处理函数
           P2IFG=0;                                                    //退出中断前必须手动清除IO口中断标志
}

/******************************************************************************************************
* 名       称:P2_IODect()
* 功       能:判断具体引发中断的IO,并调用相应IO的中断事件处理函数
* 入口参数:无
* 出口参数:无
* 说       明:该函数兼容所有8个IO的检测,请根据实际输入IO激活“检测代码”。
*                                          本例中,仅有P2.1被用作输入IO,所以其他7个IO的“检测代码”没有被“激活”。
* 范       例:无
******************************************************************************************************/
void P2_IODect()
{
        unsigned int Push_Key=0;
        //-----排除输出IO的干扰后,锁定唯一被触发的中断标志位-----
        Push_Key=P2IFG&(~P2DIR);
        //-----延时一段时间,避开机械抖动区域-----
        __delay_cycles(10000);                                                        //消抖延时
        //----判断按键状态是否与延时前一致-----
        if((P2IN&Push_Key)==0)                                 //如果该次按键确实有效
   {
         //----判断具体哪个IO被按下,调用该IO的事件处理函数-----
          switch(Push_Key){
//         case BIT0:        P10_Onclick();                break;
         case BIT1:         P21_Onclick();                break;
//         case BIT2:         P12_Onclick();                break;
//         case BIT3:         P13_Onclick();                break;
//         case BIT4:         P14_Onclick();                break;
//         case BIT5:         P15_Onclick();                break;
//         case BIT6:         P16_Onclick();                break;
//         case BIT7:         P17_Onclick();                break;
         default:                                                                        break;                //任何情况下均加上default
         }
   }
}
/******************************************************************************************************
* 名       称:P13_Onclick()
* 功       能:P1.3的中断事件处理函数,即当P1.3键被按下后,下一步干什么
* 入口参数:无
* 出口参数:无
* 说       明:使用事件处理函数的形式,可以增强代码的移植性和可读性
* 范       例:无
******************************************************************************************************/
void P21_Onclick()
{
        //-----翻转IO电平-----
        P1OUT ^= BIT0;
        P4OUT ^= BIT7;
        }

使用特权

评论回复
7
guoyt| | 2020-8-27 19:48 | 只看该作者
P1OUT |= BIT0;

使用特权

评论回复
8
bqyj| | 2020-8-27 19:52 | 只看该作者
楼上这样的做法是不是对中断有影响的?

使用特权

评论回复
9
chuxh| | 2020-8-27 19:55 | 只看该作者
中断函数的要不能被其他函数打断的,这里涉及到优先级的问题的

使用特权

评论回复
10
liuzaiy| | 2020-8-27 19:58 | 只看该作者
这的首先看下该中断的设计做法的

使用特权

评论回复
11
llljh|  楼主 | 2020-8-27 20:04 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

855

主题

11301

帖子

6

粉丝