This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

外部信号中断控制LED闪烁的问题

Other Parts Discussed in Thread: MSP430G2553

您好,我现在用着MSP430G2553 launchpad 学习。想通过IO中断,引入外部脉冲信号,使LED灯随着信号脉冲上升延闪烁。1、请问有没有如上述现象的例程参考一下。2、还有我用了如下例程,在用直流电源间歇触碰P1.4口模拟脉冲信号,为什么我触到端口和撤离端口,灯都会变?正常的话应该只能变一次啊。3、是不是加的信号,高电平应该大于零,低电平应该等于0?可以小于零吗?

//******************************************************************************

//  MSP430G2xx3 Demo - P1 Interrupt from LPM4 with Internal Pull-up

//

//  Description: A hi/low transition on P1.4 will trigger P1_ISR which,

//  toggles P1.0. Normal mode is LPM4 ~ 0.1uA.

//  Internal pullup enabled on P1.4.

//  ACLK = n/a, MCLK = SMCLK = default DCO

//

//               MSP430G2xx3

//            -----------------

//        /|\|              XIN|-

//         | |                 |

//         --|RST          XOUT|-

//     /|\   |      R          |

//      --o--| P1.4-o      P1.0|-->LED

//     \|/

//

//  D. Dang

//  Texas Instruments Inc.

//  December 2010

//   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10

//******************************************************************************

#include  <msp430g2553.h>

void main(void)

{

 WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

 P1DIR = 0x01;                             // P1.0 output, else input

 P1OUT =  0x10;                            // P1.4 set, else reset

 P1REN |= 0x10;                            // P1.4 pullup

 P1IE |= 0x10;                             // P1.4 interrupt enabled

 P1IES |= 0x10;                            // P1.4 Hi/lo edge

 P1IFG &= ~0x10;                           // P1.4 IFG cleared

 _BIS_SR( GIE);                 // Enter LPM4 w/interrupt

}

#pragma vector=PORT1_VECTOR

__interrupt void Port_1(void)

{

 P1OUT ^= 0x01;                            // P1.0 = toggle

 P1IFG &= ~0x10;                           // P1.4 IFG cleared

}

  • 你上面的例程就是能够实现LED随脉冲变化,不过例程里是下降沿。你用直流电源碰触端口,这是一种机械式的接触,由于人手抖动等原因,不可能保证每一次都是彻底离开,往往是有一个抖动的过程。

  • 所加信号,在频率和幅度上有什么要求?

  • 我也在做按键检测

    #define keyin    (P1IN & BIT4)

    中断里的检测

       if(P1IFG & BIT4)

       {

    if(keyin == BIT4)   //如果是第一个按键被按下

    {

    delay();         //延时消抖

    if(keyin == BIT4)           //再判断

    {

    while(keyin != BIT4);       //等待按键放开

    P1OUT ^= 0X01;

    P1IFG = 0;

    return;

    }

    }

       }

  • 1.改成上升沿触发中断,P1IES &= ~BIT4;                            // P1.4 Low->High edge

    2.在程序里面加一个简单的去抖动功能,比如进中断后延时1ms再判断,如果维持事件发生的电平再处理,如果不是则直接返回;

    3.翻转到高电平的信号大于0.75VCC是稳当的,翻转到低电平的信号小于0.25VCC是稳当的。

    IO的最高输入电压4.4V,最低输入电压-0.3V,超过这个范围有可能损坏IO口