Acabo de recibir un MSP430F5529 Launchpad y he hecho un tutorial en el que hago parpadear el LED situado en P1.0. Estoy usando code composer studio como mi IDE
Ahora estoy intentando que el LED de P1.0 (rojo) y el de P4.7 (verde) se alternen en función de si se pulsa el botón situado en P2.1.
No importa lo que haga el botón no parece cambiar nada. Lo que es aún más impar es que presionando el botón cambia múltiples bits en P2IN en lugar de sólo P2.1.
He tratado de 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 a veces no cambia ninguno. Pero lo peor es que aunque los bits cambien y se compare el bit de entrada con lo que debería ser para pulsado, nunca se registra como pulsado.
¡¡¡¡También no puedo ver mis variables, así que añadí una variable 'blah' y traté de ponerla a 0x00 para forzarme a entrar en el bucle, pero no hace nada!!!! Es como si simplemente borrara la variable blah.
Este es 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 tratando de depurar en vano (el botón funciona si entro en el bucle delay(), 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 mal porque blah nunca aparece en mi lista de variables del depurador y el delay(5) nunca se ejecuta.