Estoy utilizando el MSP-EXP430F5438 placa de evaluación, que tiene pulsadores conectados a P2.6 y P2.7 y LEDs conectados a P1.0 y P1.1.
Quiero hacer que P2.6 encienda los LEDs y P2.7 los reinicie. Para ello, escribí el siguiente código:
#include "msp430x54x.h"
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0 + BIT1; // Set P1.0 and P1.1 to output direction
P2DIR = 0x00; // Set the P2 to input direction
P1OUT = 0x00; // Blank all LEDs
while(1)
{
if(P2IN & 0x40) // When P2.6 is pushed
P1OUT = 0x03;
if(P2IN & 0x80) // When P2.7 is pushed
P1OUT = 0x00;
__delay_cycles(100000);
}
}
Pero no funciona correctamente; a veces funciona de forma errática (los LEDs se encienden cuando se pulsa P2.6 pero no se apagan cuando se pulsa P2.7), a veces no funciona en absoluto.
¿Alguna idea?