Corso di programmazione per microcontrollori PIC. Decima puntata – 3

Corso di programmazione per microcontrollori PIC

Le prime due routine servono per posizionare il cursore all’inizio della prima riga e all’inizio della seconda, mentre la routine CARATT consente di scrivere un carattere prelevato da una tabella che si trova nel punto di programma contraddistinto dall’etichetta TABLE e, come si può facilmente intuire vedendo il programma, è la tabella nella quale si pone la scritta che si vuole visualizzare.

Vediamo ora il funzionamento delle due routine RIGA_1 e RIGA_2 tenendo presente che concettualmente sono del tutto simili fra di loro: abbassano la linea RS per dire al display che si sta inviando un comando, e trasmettono quindi il comando che permette di posizionare il cursore all’inizio della prima o della seconda riga. La routine CARATT richiama la routine TABLE attraverso l’istruzione CALL e pone poi il contenuto del registro W sulla porta B, inviandolo quindi al display per la visualizzazione.

L’istruzione CALL che, come sappiamo, serve per eseguire una subroutine, carica nel Program Counter l’indirizzo dell’etichetta TABLE. Il programma prosegue quindi da questa locazione. Alla TABLE viene sommato il contenuto del Program Counter con il registro W, ed il risultato viene posto nel Program Counter stesso. Come vedremo fra breve, il registro W viene caricato con un numero da 0 a 31; questo vuol dire che, ogni volta che viene richiamata la routine TABLE, dopo l’istruzione ADDWF PCL, il program counter punterà successivamente alle varie istruzioni che si incontrano. Queste sono tutte del tipo RETLW, cioè di ritorno dalla routine, caricando nel registro W di volta in volta una lettera diversa.

Sarà proprio il contenuto del registro W caricato dalla subroutine, che verrà utilizzato per comunicare al display quale carattere visualizzare. Il corpo principale del programma prevede infatti che, finita l’inizializzazione del display, venga posizionato il cursore all’inizio della prima riga. (CALL RIGA_1), mentre viene caricato in W il contenuto del registro COUNT_4, che era stato inizializzato a 0. Viene quindi chiamata la routine CARATT che, come abbiamo appena visto, invia al display il codice del carattere letto dalla tabella.

Poiché W contiene 0, verrà trasmesso il codice della lettera “E”. Viene poi incrementato COUNT_4 mentre si procede a decrementare COUNT_3, che era stato inizializzato a 16. Poiché l’operazione di decremento non dà come risultato zero, viene eseguita l’istruzione GOTO PRIMAR che porta a richiamare ancora la CARATT con W contenente il numero 1. Verrà quindi inviato al display il codice relativo alla lettera “L”. Questa operazione viene ripetuta per 16 volte, fintanto che COUNT_3 si porta a zero.

In questo modo viene scritta tutta la prima riga del display, costituita da 16 caratteri. Terminata questa prima parte, si richiama la routine RIGA_2 che posiziona il cursore all’inizio della seconda riga del display e, dopo aver ricaricato COUNT_3, procede ad inviare i dati seguendo una modalità del tutto simile a quella utilizzata nella prima routine.

STAMPA     Tags:

Leave a Reply