Porte di I/O

Gli ST dispongono di due o tre porte di ingresso uscita per un totale di 12 pin di I/O (ST6210/20) o 20 pin di I/O (ST6215/25).

PORTE DI I/O
I pin delle porte di I/O possono essere configurati via software singolarmente, e possono essere impostati nei modi seguenti:

  • Input digitale (alta impedenza)
  • Input digitale con resistenza di pull-up
  • Input digitale con resistenza di pull-up e interrupt
  • Input analogico (Solo per i pin Ain)
  • Uscita push pull (può fornire e assorbire corrente)
  • Uscita open drain (può solo assorbire corrente)
Attenzione: un solo pin alla volta può essere collegato al convertitore ADC.
I pin A0..A3 non possono essere collegati all'ADC, però quando vengono configurati come uscite open drain possono assorbire una corrente di 20mA ciascuno, gli altri pin possono pilotare un paio di mA. La corrente totale massima che può essere assorbita dalle porte è di 50 mA.

Per la programmazione delle porte sono presenti tre registri per ciascuna. Ad esempio per la porta B abbiamo i registri PORT B DIRECTION REGISTER, PORT B OPTION REGISTER e PORT B DATA REGISTER (vedere la mappa della RAM). Per comodità nel programma possono essere definiti e chiamati: PDIR_B, POPT_B e PORT_B.

Il pin B0 verrà configurato in base al settaggio del bit 0 di questi tre registri, il pin B1 in base al settaggio del bit 1 di questi registri e così via. La seguente tabella mostra come si configura un pin di I/O in base al valore dei bit dei tre registri:
 

PDIR_B POPT_B PORT_B MODO
0 0 0 Input con pull-up (*1)
0 0 1 Input
0 1 0 Input con pull-up e interrupt
0 1 1 Analog input (*2)
1 0 X Output open drain  (*3)
1 1 X Output push-pull

*1) Modalità di default all'accensione o dopo un reset.
*2) Per PA0..PA3 questo modo equivale a Input in alta impedenza.
*3) PA0..PA3 in questo modo possono assorbire 20mA.

A prima vista può sembrare complesso, però è sufficiente ricordare che all'accensione tutti i pin si configurano come ingressi con resistenza di pull-up, e scrivendo un 1 nei bit opportuni del registro di direzione (PDIR_) si trasformano gli ingressi in uscite open drain.
Successivamente, se si vuole, si scrive un 1 nei bit opportuni del registro opzione (POPT_) e le uscite diventano push-pull. Esempio, configurare PB0..PB3 come ingressi e PB4..PB5 come uscite push-pull:

LDI PDIR_B,11110000B
LDI POPT_B,11110000B

Per ritrasformare in  ingressi le uscite si riportano a 0 prima i bit di POPT_ e poi quelli di PDIR_:

LDI POPT_B,00000000B
LDI PDIR_B,00000000B

I pin possono essere riconfigurati in ogni momento, nei cambiamenti occorre però rispettare un "percorso di sicurezza" come mostrato nella tabella seguente (i valori in rosso si riferiscono ai bit dei registri PDIR POPT e PORT). In pratica significa ad esempio che è pericoloso trasformare in un colpo solo un input pull-up in ingresso analogico. Prima lo si trasforma in input senza pull-up, e poi in Ain. Lo stesso discorso vale per tutte le altre trasformazioni, va cambiato un bit alla volta in accordo con i percorsi possibili.




C'è un'ultima avvertenza: se si usano le istruzioni SET, RES, JRS e JRR su porte con i pin configurati in modo misto possono verificarsi delle anomalie. In questo caso è più sicuro lavorare su delle aree RAM e alla fine scrivere il risultato sulla porta con una istruzione LD. Lo stesso discorso vale per la lettura, prima si legge la porta e se ne memorizza il valore in un area in RAM e poi si accede a quest'area come si crede.

Esempio:

SET 5,AREARAM
LD A,AREARAM
LD PORT_B,A


Pagina realizzata da Claudio Fin  -  Ultimo aggiornamento 5-11-1999