Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC - Ottava puntata - 4

Corso di programmazione per microcontrollori PIC

Se facciamo funzionare il micro a 4 MHZ, ogni ciclo macchina richiede un tempo pari ad 1 µs (infatti la frequenza viene divisa per 4, dando 1 Mhz, a cui corrisponde un periodo appunto di 1 µs). Poiché occorrono 256 decrementi di COUNT_1 e 256 decrementi di COUNT_2 per processare l’intera routine, possiamo affermare in prima approssimazione che occorrono in totale 256 * 256 = 65536 cicli per uscire dalla routine.

Poiché ogni ciclo occupa 3 cicli macchina, occorreranno 65536 * 3 = 196608 cicli macchina. Se ogni ciclo macchina impiega 1 µs, possiamo dire che occorreranno circa 200.000 * 1 µs = 200.000 µs = 0.2 s per eseguire la routine (in realtà questo valore è leggermente più alto, poiché non abbiamo considerato il tempo impiegato dalle istruzioni MOVLW 0FF e MOVWF COUNT_1 necessarie per ricaricare COUNT_1).

PROGRAMMA PER ACCENDERE I LED UTILIZZANDO I PULSANTI
Vediamo adesso un programma che ci permette di far scorrere i led da sinistra a destra o viceversa in corrispondenza della pressione dei due pulsanti presenti sulla demoboard. Questi due pulsanti sono collegati alle linee RA3 ed RA4, cioè a due linee della porta a del PIC. In pratica, ad ogni pressione dell’uno o dell’altro pulsante, il programma deve provvedere a spostare a sinistra o a destra di una posizione il led acceso.

Occorre anche però prevedere la situazione in cui il led acceso si trova già all’estrema sinistra o destra, nel qual caso ovviamente non occorrerà eseguire alcuno spostamento. Vediamo quindi come è strutturato il programma osservando il relativo listato riportato in queste pagine. Come si può vedere, alcune sezioni del programma sono già state utilizzate nel software precedente; in particolare la parte di inizializzazione e la routine DELAY sono esattamente uguali, e quindi non ci soffermiamo ulteriormente sulla descrizione.

Diverso è invece il programma principale che, dall’etichetta MAIN, testa prima se è premuto il pulsante P2 (istruzione BTFSS PORT_A,3) e, se ciò è verificato, esegue la subroutine UP (istruzione CALL UP). Testa quindi se è premuto il pulsante P3 (istruzione BTFSS PORT_A,4) ed esegue eventualmente la routine DOWN. Se nessuno dei due tasti risulta premuto, il programma non fa altro che girare continuamente fra l’etichetta MAIN e l’istruzione GOTO MAIN. Vediamo ora più in dettaglio il funzionamento dell’istruzione BTFSS che consente di verificare lo stato logico di un bit di un registro.

Nel nostro caso, l’istruzione BTFSS PORT_A,3 provvede a testare il livello logico del terzo bit del registro PORT_A, cioè in pratica lo stato dell’ingresso RA3. Per come sono collegati i due pulsanti, gli ingressi RA3 ed RA4 si trovano normalmente a livello logico alto, e vanno a zero quando i pulsanti vengono pigiati. L’istruzione BTFSS testa quindi un ingresso e se lo trova alto, salta l’istruzione immediatamente successiva.

Dunque, se l’istruzione BTFSS PORT_A,3 trova RA3 alto, cioè che il pulsante non è premuto, salta l’istruzione CALL UP ed esegue la successiva istruzione, BTFSS PORT_A,4 la quale va a testare lo stato del pulsante P3. Se anche questo non è stato pigiato, salta l’istruzione CALL DOWN e va quindi alla GOTO MAIN. Se invece uno dei due pulsanti è stato pigiato, verrà eseguita una delle due subroutine UP o DOWN, che, come vedremo, provvedono a ruotare di una posizione il led.

 

 

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 8 utenti e 54 visitatori collegati.

Ultimi Commenti