Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC - Ottava puntata - 7

Corso di programmazione per microcontrollori PIC

La routine di interrupt termina con l’istruzione RETFIE per permettere al programma di tornare a “girare” normalmente. Il programma vero e proprio comincia all’etichetta INIT, con la configurazione di tutti i registri; analizziamo in dettaglio queste istruzioni.

L’istruzione BSF STATUS,5 pone a 1 il quinto bit del registro STATUS che permette, nel nostro caso, di puntare al secondo banco di memoria del file register. Una volta settato a 1 questo bit, è possibile, con la successiva istruzione BCF OPT,5, portare a valore logico 0 il quinto bit del registro OPTION.

Quest’ultimo bit (denominato TOCS) ci permette di selezionare la sorgente del clock: esterna (se questo bit è a 1) o interna (se a 0). Nel nostro caso, vogliamo ricavare il segnale di controllo del timer dal clock del microcontrollore, e per questo motivo impostiamo TOCS a 0. Viene poi posto a 0 anche il terzo bit di questo registro (BCF OPT,3) per permettere di assegnare il prescaler al timer e non al Watch dog.

Le tre istruzioni successive consentono di configurare il prescaler; nel nostro caso selezioniamo la configurazione dei bit 0, 1 e 2 posti a 011 per far funzionare il prescaler come divisore per 16.

A questo punto abbiamo terminato l’inizializzazione della periferica timer; riassumendo, il timer utilizza come sorgente il clock interno del micro e tale clock viene diviso dal prescaler per 16. Occorre a questo punto predisporre il microcontrollore in modo che sia in grado di accettare e gestire le interrupt generate dal timer.

Si torna quindi al primo banco di registri (con l’istruzione BCF STATUS,5) per andare a settare, con l’istruzione BSF INTCON, 5 il quinto bit del registro INTCON; questo bit (denominato T0IE) ci permette, se posto a 1, di abilitare l’interrupt generata dal timer TMR0. Viene successivamente caricato nel registro TMR0 il valore definito dall’etichetta SUONO (istruzioni MOVLW SUONO che pone il valore di suono, cioè 0B9 in W e successiva MOVWF che trasferisce il contenuto di W in TMR0). Non rimane ora che configurare le porte A e B del micro e abilitare le interrupt settando il bit 7 del registro INTCON (istruzione BSF INTCON,7).

A questo punto il micro è pronto per lavorare: entra infatti nel ciclo compreso fra l’etichetta MAIN e l’istruzione GOTO MAIN. In realtà, in questo ciclo il micro non esegue nessuna operazione (istruzioni NOP) se non quella di aspettare l’arrivo della interruzione, quando il timer ha terminato il conteggio. Arrivata una interrupt, il micro salta alla locazione 04, dove trova il programma che parte dall’etichetta INT. Questa routine provvede ad invertire il bit 0 della porta a attraverso l’istruzione MOVF PORT_A, a ricaricare il timer attraverso le due istruzioni MOVLW SUONO e MOVWF TMR0, e a ripredisporre il micro per accettare le prossime interrupt ponendo a zero il bit 2 di INTCON (quello che identifica l’interrupt del timer, che viene posto a 1 quando l’interrupt viene richiesta) e riabilitando le interrupt settando il bit 7 dello stesso registro.

Ovviamente a questo punto ci si chiede quale sarà la frequenza del suono generato dal buzzer; per ricavarla occorre fare una semplice operazione matematica partendo dalla frequenza che alimenta il timer che coincide con quella del micro divisa per 4. Quindi se il quarzo è da 4 MHz la frequenza interna sarà di 1 MHz. Tale frequenza viene poi divisa dal prescaler per 16, scendendo in questo modo fino a 1.000.000 / 16 = 62500 Hz. Il contatore viene caricato con l’esadecimale 0B9 che corrisponde al decimale 185 e da questo numero conta fino a 256 (FF) prima di generare l’interrupt; quindi l’interrupt viene generato ogni 256 - 185 = 71 cicli.

Se la frequenza in ingresso era di 62500 Hz, viene generato un interrupt alla frequenza di 62500 / 71 = 880 Hz. Ma questa non è ancora la frequenza del segnale generato, perchè a ogni interrupt cambia il livello logico in uscita e ciò significa che la frequenza del segnale generato sarà effettivamente di 880 / 2 = 440 Hz. Chi si diletta con la musica, avrà probabilmente associato subito questa frequenza alla nota LA. In pratica, abbiamo realizzato molto semplicemente un preciso diapason elettronico! Bene, appuntamento alla prossima puntata in cui proporremo i listati software relativi alle altre risorse disponibili sulla demoboard.

 

 

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 14 utenti e 78 visitatori collegati.

Ultimi Commenti