Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Definire uscite mnemoniche per PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Definire uscite mnemoniche per PIC

Messaggioda Foto Utentekf00115 » 8 nov 2014, 19:51

Sto passando al C.
In basic scrivevo :

LED= PORTB.0

e poi quando serviva facevo LED=1 o HIGH LED e l'uscita PORT.0 andava alta; viceversa =0 o low andava bassa

E' molto comodo per la comprensibilità di un lungo programma riferirsi a variabili mnemoniche invece di usare sempre PORTB=xx PORC.1=yy etc.

Sto provando ed annaspando perché tutti gli esempi trovati usano sempre PORTA,PORTB ecc.
ho scritto:

#define LED PORTB.B0; oppure anche e a #define LED PORTB.F0;

void main() {

TRISB0_bit = 0;

e qui cominciano i dolori

LED == 1; da errore in compilazione
LED = 1; da errore in compilazione
high LED ; da errore in compilazione

errore é sempre invalid expression


se uso
#define ON 1
#define OFF 0

e poi LED = ON; da errore in compilazione

se invece uso PORTB.B0=1; allora funziona ma così non mi va bene

le prove sono con MiKroC

come si può fare per utilizzare variabile mnemoniche per riferirmi ad una specifica uscita (o anche un ingresso) di una generica porta ? Grazie in anticipo
Avatar utente
Foto Utentekf00115
50 4
New entry
New entry
 
Messaggi: 64
Iscritto il: 17 feb 2007, 18:16
Località: perugia

1
voti

[2] Re: Definire uscite mnemoniche per PIC

Messaggioda Foto UtenteDarwinNE » 8 nov 2014, 21:09

Ciao,
non ho esperienza con il compilatore in questione, ma se non mi ricordo male metti un ";" di troppo alla fine della direttiva #define. Prova con:

Codice: Seleziona tutto
#define LED PORTB.B0


invece di

Codice: Seleziona tutto
#define LED PORTB.B0;


P.S. utilizza il tag code quando necessario, i post guadagnano in leggibilità.
Follow me on Mastodon: @davbucci@mastodon.sdf.org
Avatar utente
Foto UtenteDarwinNE
31,0k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 4420
Iscritto il: 18 apr 2010, 9:32
Località: Grenoble - France

0
voti

[3] Re: Definire uscite mnemoniche per PIC

Messaggioda Foto UtenteTardoFreak » 9 nov 2014, 1:52

Confermo. Il ; è di troppo.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

3
voti

[4] Re: Definire uscite mnemoniche per PIC

Messaggioda Foto UtentePaolino » 9 nov 2014, 9:01

Aggiungo a quanto detto che in C il simbolo di doppio uguale (==) è impiegato solamente nel costrutto if.

Qui di seguito un po' di cose esatte e altre errate:

Codice: Seleziona tutto
#define LED PORTB.RB0 //corretto
#define LED PORTB.RB0; //ERRATO
#define ON 1
#define OFF 0

if (counter==5)  // corretto
{
    LED = ON;
} else {
        LED = OFF;
}


if (counter=5)  // ERRATO
...
...
...



Il secondo costrutto if non produce errore ma la maggior parte dei compilatori segnala con un warning che all'interno di un if c'è un'assegnazione (=) e non un confronto (==). Questo può essere molto pericoloso.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: Definire uscite mnemoniche per PIC

Messaggioda Foto Utentekf00115 » 9 nov 2014, 12:16

Grazie per le spiegazioni. Purtroppo il define non funziona e la variabile LED non viene valorizzata come uscita (da errore su LED=1) ma ho trovato come Mikroelettronica ha impostato la cosa. Non mi piace molto perché penso che non usi una sintassi standard (tipo C18).
Codice: Seleziona tutto
sbit LED at PORTB.B0;

void main()
{
     
     TRISB= 0;           // set pin come out

     while (1)
     {
           Delay_ms(1000);
           LED = 1;         // ora non da errore di compilazione e fisicamente funziona
           Delay_ms(1000);
           LED = 0;        // ora non da errore di compilazione e fisicamente funziona
     }
}

Domanda: come faccio ad usare i tag ? :?:
Ultima modifica di Foto UtentePaolino il 15 nov 2014, 8:38, modificato 1 volta in totale.
Motivazione: Aggiunti tag [code] e [/code]
Avatar utente
Foto Utentekf00115
50 4
New entry
New entry
 
Messaggi: 64
Iscritto il: 17 feb 2007, 18:16
Località: perugia

1
voti

[6] Re: Definire uscite mnemoniche per PIC

Messaggioda Foto UtentePaolino » 15 nov 2014, 8:38

Che versionbe di MikroC stai usando?

Per i tag: quando scrivi un messaggio, proprio sopra la finestra di scrittura, sono presenti una serie di pulsanti; ecco, uno di questi riporta la scritta Code. Se lo premi, ti pone dei tag di tipo "Code" all'interno dei quali viene riportato il codice sorgente (ad es, C).

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti