Pagina 1 di 1

Definire uscite mnemoniche per PIC

MessaggioInviato: 8 nov 2014, 19:51
da kf00115
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

Re: Definire uscite mnemoniche per PIC

MessaggioInviato: 8 nov 2014, 21:09
da DarwinNE
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à.

Re: Definire uscite mnemoniche per PIC

MessaggioInviato: 9 nov 2014, 1:52
da TardoFreak
Confermo. Il ; è di troppo.

Re: Definire uscite mnemoniche per PIC

MessaggioInviato: 9 nov 2014, 9:01
da Paolino
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.

Re: Definire uscite mnemoniche per PIC

MessaggioInviato: 9 nov 2014, 12:16
da kf00115
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 ? :?:

Re: Definire uscite mnemoniche per PIC

MessaggioInviato: 15 nov 2014, 8:38
da Paolino
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.