Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC - Ottava puntata - 2

Corso di programmazione per microcontrollori PIC

Segue una parte di inizializzazione, nella quale vengono dichiarate le label (etichette) che consentono di associare ad un valore una parola in modo da risultare facilmente memorizzabili dal programmatore stesso. Così, ad esempio, abbiamo utilizzato la label PORT_B per identificare il registro di indirizzo 06 che rappresenta appunto la porta b del PIC.

Nel programma definiamo poi il registro STATUS, il cui indirizzo è 03, e il CARRY, che rappresenta il bit di carry di questo registro (infatti il bit di CARRY occupa il bit D0 del registro STATUS). Vi sono poi COUNT_1 e COUNT_2 che utilizzeremo nella routine di ritardo, e USCITA che servirà per controllare l’accensione dei vari LED.

L’etichetta PIC84 serve invece per dare l’indirizzo di partenza del PIC 16C84; infatti, quando si dà alimentazione al micro, questo parte dall’ultima locazione di memoria. Nel PIC 16C84, l’ultima locazione corrisponde alla cella di indirizzo esadecimale 03FF, avendo il micro 1Kbyte di memoria, ciò significa che all’ultima locazione dobbiamo posizionare una istruzione che rimandi il Program Counter all’inizio del programma, ed è questo il motivo per cui troviamo in fondo al listato l’istruzione GOTO INIT (cioè salta alla label INIT), assemblate alla locazione 03FF (infatti l’istruzione ORG dice all’assemblatore di scrivere il programma da una certa locazione di memoria, nel nostro caso identificata dalla label PIC84, il cui valore è appunto 03FF).

Alla label INTI inizia quindi il programma vero e proprio, costituito per la prima parte da una serie di inizializzazioni: viene configurata la porta B come uscita, ponendo nel registro TRIS B il valore 00. Vengono poi inizializzati i due registri COUNT_1 e COUNT_2 col valore esadecimale FF, e viene inizializzato il registro USCITA a 1.

Occorre notare come, non essendo possibile scrivere direttamente un numero in un registro, occorre trasferire prima tale numero nel registro W, attraverso l’istruzione MOVLW (che carica nel registro W un numero), e quindi copiare il contenuto di W nel registro desiderato, attraverso l’istruzione MOVWF (muovi da W in un registro).

Arriviamo quindi al programma principale, che inizia alla label MAIN dove viene trasferito prima il contenuto del registro USCITA in W (istruzione MOVF USCITA, 0 che trasferisce appunto da un file nel registro W) e poi il contenuto di W viene posto sul registro della porta b, cioè PORT_B. Poiché avevamo caricato in USCITA il valore 1, tale valore verrà posto sulla porta b, accendendo conseguentemente il primo led.

A questo punto viene chiamata la routine di ritardo (istruzione CALL DELAY) per rallentare la sequenza di accensione dei led; omettendo questa routine si vedrebbero i led tutti accesi, in quanto la sequenza di scorrimento risulterebbe talmente veloce da non essere percepita dal nostro occhio. Vedremo in dettaglio questa routine in seguito. Viene ora azzerato il bit di carry e, a tale proposito, ricordiamo che questo bit rappresenta l’eventuale riporto di una operazione. L’istruzione BCF (Bit clear) permette di azzerare (clear) il bit di un registro.

La sintassi di questa istruzione è infatti: BCF f, b e permette di azzerare il bit di posizione b nel registro “f”. Nel nostro caso: “BCF STATUS,CARRY” azzera il bit specificato da CARRY, che valeva zero e che corrispondeva proprio al bit di carry, del registro STATUS. L’istruzione successiva, “RLF USCITA” fa ruotare il contenuto del registro USCITA di una posizione a sinistra (Rotate Left); se andiamo ad analizzare questa istruzione possiamo constatare che utilizza anche il bit di carry.

 

 

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 0 utenti e 45 visitatori collegati.

Ultimi Commenti