LEZIONE 34

PORTE


Per prelevare i valori dalle porte in ingresso è sufficiente utilizzare un istruzione di assegnazione lo stesso vale per inviare un valore alla porta di uscita, vediamo l’esempio successivo per capire meglio.
Supponiamo di aver bisogno di un programma che legga lo stato delle 5 porte A e le invii ai led e quindi alla porta B, il programma è il seguente:


#CHIP 16F84, 4				'Tipo di PIC e frequenza
Dir PORTA IN 				'Istruzioni viste più avanti
Dir PORTB OUT 				'Istruzioni viste più avanti
DIM Valore as BYTE 			'Variabile di tipo generico
Label:                                 	'Etichetta
	Valore = PortA			'Prendo lo stato dei pulsanti
	PortB = Valore			'Visualizza lo stato sui led
GOTO Label				'Salta all'etichetta
END					'Fine del programma

Analizziamo il programma:
Le istruzioni Dir PORTA IN e Dir PORTB OUT settano rispettivamente tutte le porte A come ingressi e tutte le porte B come uscite.
Successivamente è stata dichiara una variabile, in questa variabile andremo a memorizzare i valori dei pulsanti, usando l’istruzione Valore = PortA.
Il contenuto di questa variabile a sua volta è spostato nella porta B per visualizzare i valori con i diodi led, l’istruzione usata è Portb = Valore.
Tutto è racchiuso in un ciclo perchè il controllo dei pulsanti deve essere ripetuto all’infinito e non solo all’inizio del programma.

Il programma precedente poteva essere scritto anche in questo modo:


#CHIP 16F84, 4				'Tipo di PIC e frequenza
Dir PORTA IN   				'Istruzioni viste più avanti
Dir PORTB OUT  				'Istruzioni viste più avanti
Label:    				'Etichetta
	PortB = PortA			'Prendo lo stato dei pulsanti e lo visualizzo
GOTO Label 				'Salta all'etichetta
END      				'Fine del programma

Come vedete non è più presente la variabile VALORE e la porta A è associata direttamente alla porta B.
Nel primo esercizio ho usato la variabile solo per capire meglio come spostare i valori in ingresso od in entrata.
Nel secondo caso si risparmia spazio di memoria e si accorcia il codice sorgente.

LEZIONE 35
LEZIONE 33