Home
Accesso / Registrazione
 di 

Corso di programmazione per microcontrollori PIC - Ottava puntata - 5

Corso di programmazione per microcontrollori PIC

Osserviamo, ad esempio, il funzionamento della routine UP, tenendo conto che la routine DOWN è pressoché simile, salvo il fatto di far ruotare il led in posizione opposta. Le due istruzioni BCF STATUS,CARRY e RLF PORT_B servono, come avevamo già visto nel programma precedente, a far spostare il led. Dopo queste due istruzioni, viene testato se per caso l’uno che accende il led è “uscito” dal registro ed entrato nel carry, il che vuol dire che si era già in pratica nell’ultima posizione.

Se questo non si verifica, viene eseguita l’istruzione RETURN che permette di riprendere il programma principale nel punto in cui era stato interrotto. Se invece effettivamente si era già nella situazione di ultimo led acceso, si ripristina la situazione precedente facendo ruotare a destra di una posizione.

ROUTINE PER ACCENDERE E SPEGNERE DUE RELE’ PREMENDO DUE PULSANTI
Nella demoboard sono stati previsti due relè; questi non sono ovviamente collegati direttamente alle uscite del micro, che non potrebbero fornire sufficiente corrente per farli scattare, ma tramite l’interposizione di transistor utilizzati come interruttori. Un primo programma per imparare a gestire questi due relè consiste nell’utilizzare i due pulsanti per attivare e disattivare i relè.

In pratica, a ciascun pulsante corrisponde un relè: premendo un pulsante la prima volta si attiva il corrispondente relè, agendo sullo stesso pulsante una seconda volta si disattiva il relè. Osserviamo il listato di questo programma e analizziamolo nei dettagli.

Abbiamo utilizzato, oltre alle label precedenti, anche queste nuove etichette: P1, P2, RL1, RL2, che ci servono per rendere ancora più leggibile il programma, e RLSTATUS nella quale memorizziamo lo stato dei due relè (0 se il relè deve essere disattivato, 1 se il relè deve essere attivato). I due relè ed il buzzer sono collegati rispettivamente alle linee RA1, RA2 e RA0 che devono essere configurate come uscite.

Allo scopo, il registro di configurazione della porta a (TRISA) viene caricato con la combinazione 11111000 (ricordiamo che un 1 configura il piedino come ingresso, mentre uno 0 lo configura come uscita). Il corpo principale del programma è del tutto simile a quanto visto nel dimostrativo precedente, salvo il fatto di implementare due routine che non si chiamano più UP e DOWN, ma relè1 e relè2. Inoltre, ad ogni ciclo del programma principale viene posto in uscita il contenuto del registro RLSTATUS.

Le due routine relè1 e relè2 sono assolutamente identiche, salvo il fatto che vanno a modificare il bit del registro RLSTATUS relativo al primo relè nel caso della relè1 e del secondo relè nel caso della relè2. In pratica, viene trasferito il registro RLSTATUS nel registro W (istruzione MOVF RLSTATUS,0) e successivamente si complementa il bit di controllo del relè attraverso l’istruzione XORLW.

Quest’ultima istruzione esegue infatti una operazione di OR esclusivo fra il registro W ed un numero, nel nostro caso il binario 00000010. Ora, la funzione logica di or esclusivo lavora in modo tale che se viene effettuata con uno 0 non cambia il valore logico, mentre se si effettua con un valore 1 ne inverte lo stato.

 

 

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

Ultimi Commenti