Acabo de recibir un MSP430F5529 Launchpad y he realizado un tutorial donde hago que el LED ubicado en P1.0 parpadee. Estoy utilizando Code Composer Studio como mi IDE
Ahora estoy intentando que el LED en P1.0 (rojo) y el de P4.7 (verde) se alternen dependiendo de si el botón ubicado en P2.1 está presionado.
No importa lo que haga, el botón no parece cambiar nada. Lo que es aún más extraño es que al presionar el botón se cambian varios bits en P2IN en lugar de solo P2.1.
He intentado usar el botón en P1.1 (en realidad lo intenté primero), y obtuve un comportamiento similar en el que el botón cambia varios bits y algunas veces no cambia nada. Pero la peor parte es que incluso si los bits cambian y comparan el bit de entrada con lo que debería ser pulsado, nunca se registra como pulsado.
Tampoco puedo ver mis variables, así que agregué una variable 'blah' y traté de configurarlo en 0x00 para forzarme en el bucle, ¡pero no hace nada! Es como si solo eliminara la variable blah.
Aquí está el código que estoy tratando de hacer funcionar:
#include <msp430f5529.h>
//defines
#define red_LED BIT0 //red LED @ P1.0
#define grn_LED BIT7 //green LED @ P4.7
#define BTN BIT1 //button is located a P2.1
#define BTN_PRESSED 0x00
//prototypes
void delay(int n);
//main
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //disable watchdog timer
unsigned int flash; //variable to store LED flash flag
P1OUT = 0; //set output as low
P1DIR |= red_LED; // set LED pins to outputs
P4OUT = 0; //set output low
P4DIR |= grn_LED; //set green LED as output
/* Setting up Switch */
P2OUT = 0; //set output as low
P2DIR &= ~BTN; // Set the switch pin to input
P2REN |= BTN; // Use an internal resistor
P2OUT |= BTN; // The internal resistor is pullup
for (;;) {//inf loop
for (flash=0; flash<7; flash++) {
P1OUT |= red_LED; // red LED on
delay(60000); // call delay function
P1OUT &= ~red_LED; // red LED off
delay(60000); // delay again
}
while ((P2IN & BTN) == BTN); // wait for button press, loop forever while P1IN is high (button unpressed)
for (flash=0; flash<7; flash++) {
P4OUT |= grn_LED; // green LED on
delay(60000); // call delay function
P4OUT &= ~grn_LED; // green LED off
delay(60000); // delay again
}
while ((P1IN & BTN) == BTN); // wait for button press, loop forever while P1IN is high (button unpressed)
}//end inf loop
} // main
//functions
void delay(int n) {
//delays for a count of 60000 ticks
unsigned int count;
for (count=0; count<n; count++);
} // delay
y aquí está el código de prueba que estoy intentando depurar en vano (el botón funciona si me meto en el bucle de retraso (), ¡pero nunca puedo entrar en él!
#include <msp430f5529.h>
//defines
#define red_LED BIT0
#define grn_LED BIT7
#define BTN BIT1
#define BTN_PRESSED 0x00
//prototypes
void delay(int n);
//main
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //disable watchdog timer
unsigned int flash; //variable to store LED flash flag
P1OUT = 0; //set output as low
P1DIR |= red_LED; // set LED pins to outputs
P4OUT = 0; //set output low
P4DIR |= grn_LED; //set green LED as output
/* Setting up Switch */
P2OUT = 0; //set output as low
P2DIR &= ~BTN; // Set the switch pin to input
P2REN |= BTN; // Use an internal resistor
P2OUT |= BTN; // The internal resistor is pullup
int blah = 0;
for(;;){
if((blah) == BTN_PRESSED){
delay(5); // call delay function
}
}
//functions
void delay(int n) {
//delays for a count of 60000 ticks
unsigned int count;
for (count=0; count<n; count++);
} // delay
¡Debo estar haciendo algo fundamentalmente incorrecto porque bla nunca aparece en la lista de variables de mis depuradores y el retraso (5) nunca se ejecuta!