Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC. Nona puntata - 4

Corso di programmazione per microcontrollori PIC

Questa volta però, se viene pigiato un tasto, viene richiamata attraverso l’istruzione CALL una specifica subroutine, una per ogni tasto premuto (sicuramente questa soluzione non è quella ottimale per realizzare la memorizzazione dei tasti ma ben si presta per una spiegazione didattica).

Analizziamo quindi una di queste routine, in quanto le altre sono del tutto simili, salvo per i diversi valori memorizzati.

Se viene, ad esempio, premuto il tasto 1, verrà richiamata la routine TASTO_1 che provvede a visualizzare il numero 1 sul display collegato alla porta a e ad eseguire queste tre istruzioni: MOVWF INDF INCF FSR INCF CONTATASTI

La prima istruzione sposta il contenuto di W (che è il valore corrispondente al tasto premuto, nel nostro caso 1) nel registro INDF utilizzato nei PIC per indirizzare il registro specificato da FSR che, nel nostro caso, contiene il numero 10 esadecimale.

A questo punto, l’istruzio-ne MOVWF INDF trasferisce il contenuto di W, attraverso il registro INDF, nel registro puntato da FSR. Poiché W conteneva 1 e FSR conteneva 10h, il risultato della MOVWF INDF è quello di scrivere 1 nel registro 10h, che appartiene appunto all’area RAM dei registri di uso generale. Poi vengono quindi incrementati sia FSR che CONTATASTI e ciò significa che FSR conterrà non più 10h ma 11h, e che quindi alla prossima pressione del tasto il relativo codice verrà memorizzato nella locazione RAM di indirizzo 11h; in questo modo i tasti via via premuti vengono memorizzati sequenzialmente nell’a-rea RAM partendo dalla cella con indirizzo 10h.

Ora, prima di uscire dalla routine occorre attendere che il pul-sante premuto venga rilasciato. Allo scopo, sono state inserite le seguenti istruzioni: TASTO_1_1 BTFSS PORT_B,6 GOTO TASTO_1_Quando il tasto viene rilasciato, il programma può proseguire ed eseguire l’istruzione RETURN. Vediamo ora cosa succede quando viene premuto il tasto * che come sappiamo consente di visualizzare i tasti fino ad ora premuti e memorizzati in RAM.

Innanzitutto, il tasto asterisco forza il micro a processare la routine DISPLAY. In questa routine, viene dapprima decrementato CONTATASTI per poi verificare che siano stati acquisiti dei tasti; in pratica se nessun tasto è stato digitato prima del tasto asterisco il programma deve ignorare la sezione di visualizzazione e ritornare al main program; in questo caso si provvede anche a ristabilire il valore di CONTATASTI e di FSR.

Se invece erano stati premuti dei tasti, CONTATASTI conterrà il numero dei tasti premuti e il programma “salta” all’etichetta DISP1 dove viene inizializzato il registro FSR per puntare alla prima cella di memoria scritta (indirizzo 10h) con le due istruzioni: MOVF INDF,0 MOVWF PORT_A In questo modo, viene letta la prima cella RAM indirizzata da FSR, “caricata” in W e trasferita quindi alla porta a per essere visualizzata.

Viene ora richiamata due volte la routine DELAY, in caso contrario non riusciremmo a vedere le cifre perché visualizzate troppo velocemente. Le due istruzioni successive: MOVLW 0FF MOVWF PORT_servono per spegnere temporaneamente il display in modo da dare un effetto di lampeggìo tra una cifra e l’altra. La condizione di blanking si ottiene con queste due istruzioni poiché la decodifica 4511, come abbiamo già detto, spegne il display se il codice in ingresso non corrisponde ad una cifra compresa tra 0 e 9.

A questo punto, viene incrementato FSR per poter puntare alla successiva locazione di memoria; viene anche decrementato CONTATASTI e se il suo contenuto non è giunto a zero (cioè in pratica se vi sono ancora cifre memorizzate da visualizzare) si torna alla label DISP; in caso contrario, il programma prosegue ripristinando i corretti valori iniziali di FSR e di CONTATASTI in modo da poter riprendere il normale ciclo di programma.

Bene, appuntamento alla prossima puntata del Corso che sarà dedicata al display LCD; vedremo, come realizzare un semplice programma in grado prima di memorizzare delle frasi e dei numeri in RAM e poi, dopo averli convertiti in carat-teri ASCII, di inviarli al display che provvederà a visualizzarli. Rammentiamo che la nostra demoboard è stata realizzata per funzionare con il dispositivo EEPROM della famiglia PIC, ovvero con il PIC16C84; nella prossima puntata vedremo anche come rendere questi programmi adatti ad altri chip.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 1 utente e 50 visitatori collegati.

Utenti online

Ultimi Commenti