Corso di C per Pic (Parte III)

Proseguiamo il nostro corso con un nuovo programmino di esempio (Esempio3.c)

/* Solito commento

che si estende su piu' righe

perche' vi ricordo che termina con -> */

#include <pic.h>

#include "delay.c"

#define ATTESA 250

main()

{

TRISB=0;

while(1)

{

PORTB=255;

DelayMs(ATTESA);

PORTB=0;

DelayMs(ATTESA);

}

}

Rispetto al programma della lezione 2 cambiano solo poche cose, vediamo quali.

#define ATTESA 250

Compare un nuovo pragma di pre-compilazione: #define.

Questo pragma permette di associare ad un'etichetta un valore, nel nostro caso abbiamo associato all'etichetta ATTESA il valore 250, quindi nelle righe successive possiamo chiamare la funzione DelayMs passando ATTESA anziche' 250.

Vi ricordo che la sostituzione avviene a livello di pre-compilazione... quindi per il compilatore e' come se ci fosse scritto DelayMs(250).

Il primo vantaggio che deriva dall'uso delle define e' che si possono cambiare dei valori in tutto il programma con una sola modifica.

es.

se al posto di

#define ATTESA 250

scriviamo

#define ATTESA 100

tutte e due le righe con il ritardo cambieranno e se in un programma complesso e lungo avessimo usato piu' volte il ritardo avremmo in un solo colpo cambiato il valore.

esempi di define

#define BAUD 9600

#define AREA (lato * lato)

Attenzione: in questo secondo esempio non ho messo un valore fisso, ma una formula. Tuttavia non fatevi ingannare, il pre-compilatore sostituira' in tutto il programma l'etichetta AREA con la sequenza "(lato * lato)" senza effettuare alcun calcolo. Quindi scrivere:

PORTB = AREA;

equivale a

PORTB = (lato * lato);

Normalmente le etichette delle define vengono scritte tutte maiuscole, cosi' nel sorgente sono piu' evidenti.

Ma allora TRISB, PORTB ecc. sono delle define? Esatto... e vengono definite nei file di include.

 

Una define puo' contenere un'altra define ad esempio:

#define LATO 10

#define AREA (LATO * LATO)

se nel codice scrivo :

PORTB = AREA;

il pre-compilatore sostituira' con

PORTB = (10 * 10);

ESERCIZI

1) provare a variare l'esempio in modo che accenda tre sequenze di led con ritardi differenti partendo da un ritardo base.