Programma di Esempio - L C D 2

BASIC BASCOM 8051

BASIC BASCOM AVR

Compilatore C - µC/51


Il programma DemoLCD e' un completo Emulatore di Terminale realizzato in BASCOM 8051, BASCOM AVR e µC/51 per la scheda K51-AVR collegata ad un display LCD 20x2 e ad un dispositivo di I/O sulla porta seriale.
Come ogni terminale, il programma mostra sullo schermo (LCD in questo caso) tutto cio' che riceve dalla porta seriale ed invia sulla porta seriale tutto cio' che riceve dalla tastiera (i tasti della K51-AVR).
A differenza dei comuni terminali, il programma e' in grado di eseguire dei comandi di emulazione terminale, ed in questo ha il vantaggio di essere totalmente programmabile.

L'etichetta Main: indica il ciclo principale del programma che, come detto, sceglie prima la porta seriale come input e il display LCD come output, verifica la presenza di un carattere e se presente lo invia al display attraverso il filtro, fatto questo ribalta la situazione, ovvero sceglie i tasti della K51-AVR come input e la porta seriale come output e ripete il procedimento appena descritto, con la differenza che i caratteri verso la seriale non vengono filtrati.

Presso l'etichetta Scan: inizia la procedura di risposta all'interrupt periodico scandito dal Timer 0, con un periodo di 20 msec. La prima cosa da fare e' sempre ricaricare subito il timer e farlo ripartire, in modo da non perdere la cadenza.
Il programma poi scandisce una per una le fonti di input (seriale ed i tasti della K51-AVR), salvando nel buffer in memoria gli eventuali caratteri ricevuti. In questo modo la probabilita' di perdere caratteri in arrivo mentre il programma esegue, ad esempio, operazioni di output o altre operazioni diminuisce drasticamente. Per avere una descrizione dettagliata si puo' fare riferimento ai commenti nel sorgente.

Per selezionare i dispositivi di input e output e poter utilizzare le funzioni descritte in seguito bisogna scrivere nelle variabili Indev e Outdev gli opportuni valori che si possono trovare alla fine della sezione costanti nel sorgente.

Le procedure svolgono i seguenti compiti:

La Init inizializza tutte le variabili usate dal programma ed avvia il Timer 0.

La Constatus determina se il dispositivo selezionato come Input ha ricevuto un carattere e lo ha memorizzato nel buffer.
In nessun caso un carattere puo' andare perduto perche' l'Interrupt lo intercetta sempre e lo salva nel buffer, tuttavia se non si legge il buffer prima di eccederne la capienza possono verificarsi dei problemi.

La Conin preleva un carattere dal buffer del dispositivo scelto come Input e lo restituisce nella variabile In, se non c'era alcun carattere disponibile restituisce 0. Tuttavia restituisce 0 anche se il carattere ricevuto era 0, per distinguere i due eventi bisogna prima utilizzare la Constatus.

La Conout invia al dispositivo selezionato come Output il carattere passato come parametro. Nel caso di invio verso il display LCD il carattere viene filtrato, come descritto piu' avanti, tramite la Elaboralcd.

Le seguenti sono procedure di servizio e non sono pensate per essere chiamate direttamente ma solo da altre procedure:

La Bip genera un suono acuto della durata di un decimo di secondo usando il buzzer della K51-AVR. Durante la sua esecuzione l'interrupt continua a ricevere l'input quindi non si perdono caratteri.

La Bell genera un suono acuto della durata di mezzo secondo usando il buzzer della K51-AVR. Durante la sua esecuzione l'interrupt continua a ricevere l'input quindi non si perdono caratteri.

La Aggiustaxy serve a garantire che le variabili Riga e Colonna mantengano valori entro i limiti del display 20x2.
Questo si rende necessario perche' le istruzioni ad alto livello del BASCOM e del µC/51 non gestiscono il ritorno a capo del cursore del display quando giunge a fine riga, quindi se ne deve incaricare il programma intercettando opportunamente tutte le situazioni che spostano il cursore.

La Elaboralcd si occupa di filtrare i caratteri inviati al display LCD decidendo se sono stampabili o devono essere interpretati come un tipo di comando. Per modificare il set di caratteri stampabili e' sufficiente agire sul costrutto Select Case all'inizio del codice della Elaboralcd (indicato dal commento "COMANDI IMMEDIATI" allo stesso modo per associare l'esecuzione di istruzioni a determinati caratteri si deve agire sullo stesso Select Case.
Un carattere in particolare viene considerato come un prefisso che annuncia l'arrivo di un comando, questo carattere non esegue codice e puo' essere configurato cambiando il valore della costante Prefix.
Un comando e' composto da un codice (cioe' un altro carattere) ed un numero di parametri (cioe' caratteri inviati successivamente) variabile da zero a quanto la memoria rimasta lo consente.
I comandi con zero parametri vengono riconoscitui ed eseguono immediatamente il codice a loro associato. Un esempio di tale comando si trova sotto il commento "COMANDO CON ZERO PARAMETRI".
I comandi con uno o piu' parametri attivano il meccanismo di raccolta dei parametri (memorizza ogni carattere ricevuto fino all'esaurimento del numero fissato, presso il commento "RACCOLTA PARAMETRI", alcuni di questi comandi si possono vedere sotto il commento "COMANDI CON PARAMETRI". L'esecuzione del codice a loro associato inizia non appena e' stato raccolto l'ultimo parametro, questa avviene sotto il commento "ESECUZIONE COMANDI CON PARAMETRI".


Pagina Aggiornata al 10 Settembre 2003


homeHome Scheda Schede Indice Categorico Tabelle CPU Data. S Prog. Esempio