- Messaggi: 4
- Ringraziamenti ricevuti 0
×
MSP430, Microcontrollori 16 bit Ultra Low Power
if then else
1 Anno 1 Mese fa #1
da fabrizio C
if then else è stato creato da fabrizio C
Buongiorno , chiedo un aiuto per imparare, vorrei avere il led verde sempre acceso quando premo il pulsante ma al momento per come è fatto il prog. rimane acceso solo per il tempo definito . Ho fatto molte prove ma non riesco a rimanere nel loop ELSE del controllo relativo al pulsante.
//******************************************************************************
// MSP430F20xx Demo - Software Toggle P1.0
//
// Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430F20xx
//
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.3|--> PULSANTE
// | |
// | P1.0|--> LED rosso
// | P1.6|--> LED verde
/*
* ======== Standard MSP430 includes ========
*/
#include <msp430g2553.h> // Poiché stai utilizzando il chip MSP430G2553,
//dovresti includere tutti i registri standard e
//la definizione di bit per il microcontrollore.
//L'estensione .h indica che questo è il file di intestazione del chip.
/*
* main.c
*/
void main()
{ // apre il ciclo principale
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// Controllo timer watchdog. Questa riga e' necessaria
// ogni volta che programmi il tuo chip se non stai utilizzando
// il timer watchdog per impedire il riavvio del chip.
P1REN = BIT3; // P1REN Abilitazione resistenza porta 1
// P1.3 è collegato al pulsante. Per far funzionare il pulsante,
// dobbiamo aggiungere una resistenza pull-up per renderlo normalmente alto.
// Scrivendo questa riga verrà abilitata la resistenza interna (all'interno del chip),
// collegando P1.3 all'alimentazione (3,6V) o alla massa (0V). Questo è definito nella riga successiva.
P1DIR = BIT0 + BIT6; // P1DIR Direzione porta 1
// Questa riga imposta semplicemente BIT0 e BIT6 come output, tutti gli altri come ingressi
// Poiché in questo caso stai programmando la porta 1, BIT0 e BIT6
// si riferiscono a P1.0 e P1.6 del chip.
// Se non sei ancora sicuro di dove si trovino questi pin, guarda la scheda
// di sviluppo (scheda di colore ROSSO). Tutti i pin sono etichettati.
// Secondo la scheda tecnica, P1.0 e P1.6 sono collegati rispettivamente al LED rosso e verde.
// Pertanto il LED lampeggerà in base alla vostra programmazione.
P1OUT = BIT3; // attenzione bisogna fare in questo modo per avere p1.3 a uno
// P1OUT Uscita porta 1
// Sebbene P1OUT significhi impostare lo stato dell'uscita.
// Ma, se analizziamo attentamente, P1.3 è un pin di ingresso e non è del tutto logico assegnare
// al pin uno stato di uscita. Infatti, questa riga di codice definisce la connettività del
// resistore interno. Se P1OUT = BIT3, la resistenza interna è collegata a 3,6 V.
// In altre parole, il pin ora è normalmente alto e il resistore interno è noto come resistore di pull-up.
// Altrimenti, se P1OUT &= ~BIT3, il resistore interno è collegato a terra ed è noto come resistore pull-down.
// P1OUT Uscita porta 1 P1.6 MA TUTTI GLI ALTRI SONO A 0 Led rosso spento
// Questa linea accende semplicemente P1.6 LED verde e quindi dà istruzioni
// al pin di produrre 3,6 V come uscita. Questo è necessario perche nella istruzione
// successiva avrai il led verde acceso e il led rosso spento
unsigned int i; // Variabile i di ritardo
while(1) // Linguaggio C, while loop viene normalmente utilizzato per eseguire
// il codice all'interno del loop all'infinito finché non si spegne
// l'alimentazione.
{ // APRE IL CICLO DI FUNZIONi
P1OUT = BIT0+BIT3;
for(i=0;i<40000;i++);
P1OUT = BIT3;
for(i=0;i<40000;i++);
{ // ciclo condizione if pulsante
P1OUT = BIT3; // uscita 3 on per alimentare il pull up
if((P1IN & BIT3)!=BIT3) // P1IN e BIT3 vengono confrontati.
{ // ciclo if condizione vera
P1OUT = BIT6+BIT3;
__delay_cycles(700000); // 70 ms
}
else // ciclo if else
{
}
} // chiude il ciclo if pulsante
} // CHIUDE IL CICLO DI FUNZIONI
} // chiude il ciclo principale
Grazie a chi risponde , non tenete conto delle modifiche relative ai led e la posizione delle parentesi..
//******************************************************************************
// MSP430F20xx Demo - Software Toggle P1.0
//
// Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430F20xx
//
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.3|--> PULSANTE
// | |
// | P1.0|--> LED rosso
// | P1.6|--> LED verde
/*
* ======== Standard MSP430 includes ========
*/
#include <msp430g2553.h> // Poiché stai utilizzando il chip MSP430G2553,
//dovresti includere tutti i registri standard e
//la definizione di bit per il microcontrollore.
//L'estensione .h indica che questo è il file di intestazione del chip.
/*
* main.c
*/
void main()
{ // apre il ciclo principale
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
// Controllo timer watchdog. Questa riga e' necessaria
// ogni volta che programmi il tuo chip se non stai utilizzando
// il timer watchdog per impedire il riavvio del chip.
P1REN = BIT3; // P1REN Abilitazione resistenza porta 1
// P1.3 è collegato al pulsante. Per far funzionare il pulsante,
// dobbiamo aggiungere una resistenza pull-up per renderlo normalmente alto.
// Scrivendo questa riga verrà abilitata la resistenza interna (all'interno del chip),
// collegando P1.3 all'alimentazione (3,6V) o alla massa (0V). Questo è definito nella riga successiva.
P1DIR = BIT0 + BIT6; // P1DIR Direzione porta 1
// Questa riga imposta semplicemente BIT0 e BIT6 come output, tutti gli altri come ingressi
// Poiché in questo caso stai programmando la porta 1, BIT0 e BIT6
// si riferiscono a P1.0 e P1.6 del chip.
// Se non sei ancora sicuro di dove si trovino questi pin, guarda la scheda
// di sviluppo (scheda di colore ROSSO). Tutti i pin sono etichettati.
// Secondo la scheda tecnica, P1.0 e P1.6 sono collegati rispettivamente al LED rosso e verde.
// Pertanto il LED lampeggerà in base alla vostra programmazione.
P1OUT = BIT3; // attenzione bisogna fare in questo modo per avere p1.3 a uno
// P1OUT Uscita porta 1
// Sebbene P1OUT significhi impostare lo stato dell'uscita.
// Ma, se analizziamo attentamente, P1.3 è un pin di ingresso e non è del tutto logico assegnare
// al pin uno stato di uscita. Infatti, questa riga di codice definisce la connettività del
// resistore interno. Se P1OUT = BIT3, la resistenza interna è collegata a 3,6 V.
// In altre parole, il pin ora è normalmente alto e il resistore interno è noto come resistore di pull-up.
// Altrimenti, se P1OUT &= ~BIT3, il resistore interno è collegato a terra ed è noto come resistore pull-down.
// P1OUT Uscita porta 1 P1.6 MA TUTTI GLI ALTRI SONO A 0 Led rosso spento
// Questa linea accende semplicemente P1.6 LED verde e quindi dà istruzioni
// al pin di produrre 3,6 V come uscita. Questo è necessario perche nella istruzione
// successiva avrai il led verde acceso e il led rosso spento
unsigned int i; // Variabile i di ritardo
while(1) // Linguaggio C, while loop viene normalmente utilizzato per eseguire
// il codice all'interno del loop all'infinito finché non si spegne
// l'alimentazione.
{ // APRE IL CICLO DI FUNZIONi
P1OUT = BIT0+BIT3;
for(i=0;i<40000;i++);
P1OUT = BIT3;
for(i=0;i<40000;i++);
{ // ciclo condizione if pulsante
P1OUT = BIT3; // uscita 3 on per alimentare il pull up
if((P1IN & BIT3)!=BIT3) // P1IN e BIT3 vengono confrontati.
{ // ciclo if condizione vera
P1OUT = BIT6+BIT3;
__delay_cycles(700000); // 70 ms
}
else // ciclo if else
{
}
} // chiude il ciclo if pulsante
} // CHIUDE IL CICLO DI FUNZIONI
} // chiude il ciclo principale
Grazie a chi risponde , non tenete conto delle modifiche relative ai led e la posizione delle parentesi..
Si prega Accedi o Crea un account a partecipare alla conversazione.
- fabrizio C
- Autore della discussione
- New Member
Riduci
Di più
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.