Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC - Ottava puntata - 6

Corso di programmazione per microcontrollori PIC

Cioè, se ad esempio il relè 1 era spento, il secondo bit di RLSTATUS si trovava a livello logico 0; quando viene eseguita l’operazione di or esclusivo con 00000010, il bit in questione viene complementato, cioè posto a 1, mentre gli altri bit non verranno modificati.

In questo modo, quando il registro RLSTATUS viene caricato nel registro che rappresenta la porta a, il corrispondente relè viene acceso. La routine relè2 lavora allo stesso modo, solo che l’operazione di or esclusivo viene effettuata con il bit relativo al secondo relè (istruzione XORLW 00000100).

PROGRAMMA PER GENERARE UN SUONO CON IL BUZZER
Nella demoboard, al piedino corrispondente alla linea RA0 è stato connesso un piccolo buzzer, cioè un dispositivo in grado di generare un suono se pilotato con una opportuna onda quadra. Abbiamo quindi pensato di realizzare un primo programma dimostrativo relativo al buzzer che consenta di generare delle onde quadre utilizzando il timer integrato nel micro.

In questo modo, possiamo apprendere il funzionamento e il sistema di gestione del timer e saremo così in grado di utilizzare le cognizioni acquisite anche in situazioni diverse dal controllo di un semplice buzzer. Vediamo ora di riassumere brevemente il principio di funzionamento della periferica timer che risulta costituita da un temporizzatore (timer) vero e proprio che coincide con il registro TMR0 e da un prescaler ad 8 bit.

Quest’ultimo permette di dividere la frequenza del segnale che pilota il timer per una numero a potenza di due. Il clock di controllo del timer può essere ricavato internamente (la frequenza sarà pari alla frequenza del quarzo divisa per quattro) od esternamente applicando un segnale al piedino RA4. Come funziona questo timer è presto detto: a ogni ciclo di clock in ingresso (ricavato dal quarzo o dal pin RA4), il valore di TMR0 viene incrementato di una unità; quando TMR0 arriva a FF esadecimale, al successivo incremento passa da FF a 00 generando però una interruzione. Quest’ultima provoca un salto del programma alla locazione di indirizzo 0004.

Nel nostro programma, ogni volta che viene generata una interrupt, si provvede a invertire il livello logico sull’uscita che controlla il buzzer, generando così un segnale ad onda quadra. Analizzando in dettaglio il programma notiamo che la prima parte provvede a definire le etichette. In questa sezione del programma, troviamo anche la definizione dei registri INTCON, TMR0 e OPT che corrispondono ai registri necessari al controllo delle interruzioni e del funzionamento del timer TMR0.

Vi è poi una direttiva che ancora non conosciamo, la #define che permette di associare all’etichetta SUONO il valore numerico 0B9 esadecimale. Vedremo poi che questo valore servirà per determinare la frequenza del suono emesso dal buzzer. La prima parte del programma viene allocata a partire dalla locazione 04 (questo è infatti il significato di ORG 04); questa è quindi la routine che viene eseguita ogni volta che avviene l’interrupt generata dal timer TMR0 e che non fa altro che ricaricare il registro TMR0 con il valore definito dalla label SUONO, e ripristinare le condizioni iniziali affinché si possa verificare la successiva interrupt.

 

 

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 20 utenti e 70 visitatori collegati.

Ultimi Commenti