Accendere Led in sequenza
12 Anni 7 Mesi fa #1
da Lello Guidi
Accendere Led in sequenza è stato creato da Lello Guidi
Salve, volevo accendere i led in sequenza sulla Freedom II con questo programma, ma mi rimane acceso solo il led0.
Non da nessun errore di compilazione.
Come micro uso il 16F877A e il listato e' questo:
#define _LEGACY_HEADERS
#include <htc.h>
#define XTAL_FREQ 20MHZ // questo è utilizzato dalle routine di ritardo contenute in Delay.C
#include "delay.c" // routine per ritardi
// Fuses di configurazione
__CONFIG (HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);
//#define LED(a) PORTD=1<<(a) //in alternativa al define seguente
#define LED(a) PORTD=2^(a)
// funzione principale
void main(void)
{
CMCON=0b00000111; // Disabilito i comparatori e i convertitori
PORTD=0b00000000; // Setto porte D a livello basso
TRISD=0b00000000; // Imposto i registri tristato come uscite
char a=0;
while(1) // eseguo un ciclo finito
{
PORTD=1;
DelayMs(100);
for (a=0; a>7; a++)
{
LED(a); // shift a sinistra di una posizione
DelayMs(250);
}
}
} // Fine main
Non da nessun errore di compilazione.
Come micro uso il 16F877A e il listato e' questo:
#define _LEGACY_HEADERS
#include <htc.h>
#define XTAL_FREQ 20MHZ // questo è utilizzato dalle routine di ritardo contenute in Delay.C
#include "delay.c" // routine per ritardi
// Fuses di configurazione
__CONFIG (HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);
//#define LED(a) PORTD=1<<(a) //in alternativa al define seguente
#define LED(a) PORTD=2^(a)
// funzione principale
void main(void)
{
CMCON=0b00000111; // Disabilito i comparatori e i convertitori
PORTD=0b00000000; // Setto porte D a livello basso
TRISD=0b00000000; // Imposto i registri tristato come uscite
char a=0;
while(1) // eseguo un ciclo finito
{
PORTD=1;
DelayMs(100);
for (a=0; a>7; a++)
{
LED(a); // shift a sinistra di una posizione
DelayMs(250);
}
}
} // Fine main
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Lello Guidi
- Autore della discussione
- Platinum Member
Riduci
Di più
12 Anni 7 Mesi fa #2
da Lello Guidi
Risposta da Lello Guidi al topic Re: Accendere Led in sequenza
E' bastato cambiare il ciclo del "for", su consiglio di un "Amico", in questo modo e il tutto funziona:
for(a=0;a<8;a++)
for(a=0;a<8;a++)
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 7 Mesi fa #3
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Accendere Led in sequenza
...mi ero perso il Thread,
In questi giorni ero fuori e ho letto alcuni messaggi con il cellulare dimenticando di mettere il Tag...
In effetti il ciclo for che avevi fatto e' errato.
Guarda il testo C18 Step by Step in particolare il capitolo dedicato al ciclo if.
in particolare e' eseguito solo la prima volta poi il test interno e' FALSE ed esce.
Saluti,
Mauro
In questi giorni ero fuori e ho letto alcuni messaggi con il cellulare dimenticando di mettere il Tag...
In effetti il ciclo for che avevi fatto e' errato.
Guarda il testo C18 Step by Step in particolare il capitolo dedicato al ciclo if.
in particolare e' eseguito solo la prima volta poi il test interno e' FALSE ed esce.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
12 Anni 7 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Accendere Led in sequenza
...smentita...
avevo messo il Tag...!
E' meglio se vado a letto!
Saluti,
Mauro
avevo messo il Tag...!
E' meglio se vado a letto!
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.