Departament de Microelectrònica i Sistemes Electrònics

AVR i FONAMENTS DE COMPUTADORS
Enginyeria en Informàtica (ETSE)

Entrada / sortida

Els microcontroladors AVR realitzen la seva entrada/sortida majoritàriament a través de ports d'E/S. Els pins de cada port poden ser adreçats de forma conjunta o per separat.

Cada pin té una implementació bidireccional amb pull-up's interns que, opcionalment, poden ser activats.

El control de cada pin es porta a través de tres registres:

· El registre de control de direcció, Data Direction Register - DDRxn (x representa el port i n el pin; p.e., DDRB3).
· El registre de dades del port, Port Data Register - PORTxn.
· I el registre d'entrada del port, Input Pin Address - PINxn.

Aleshores, la configuració de cada port ve donada per:

DDRxn
PORTxn
I/O
0
0
Entrada en tri-state (sense pull-up)
0
1
Entrada amb pull-up, a menys que explícitament es deshabiliti aquesta funcionalitat (bit PUD)
1
0
Pin de sortida, amb sortida a baixa
1
1
Pin de sortida, amb sortida a alta

El funcionament general del port és simple:

- Mitjançant DDRxn s'especifica si el pin és d'entrada o sortida

- Si el pin és d'entrada, aquesta pot estar en tri-state o es poden emprar pull-up's. En aquest cas cal escriure un 1 en el regsitre PORTxn

- Si el pin és de sortida, el valor que s'escriu en el port és el de sortida

- El valor del port d'entrada sempre es pot llegir del registre PINxn

Cada pin d'entrada/sortida té associada una doble funcionalitat: la de pin d'entrada/sortida (configuració per defecte) o com a entrada/sortida d'algun perifèric intern del microcontrolador.

Per exemple, l'entrada/sortida del microcontrolador ATmega8 és:

 
Pin
Configuració per defecte
Doble funcionalitat

PortB

14
15
16
17
18
19
9
10
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
ICP1
OC1A
nSS/OC1B
MOSI/OC2
MISO
SCK
XTAL2/TOSC2
XTAL1/TOSC1
PortC
23
24
25
26
27
28
1
PC0
PC1
PC2
PC3
PC4
PC5
PC6
ADC0
ADC1
ADC2
ADC3
ADC4/SDA
ADC5/SCL
nRESET
PortD
2
3
4
5
6
11
12
13
PD0
PD1
PD2
PD3
PD4
PD5
PD6
PD7
RXD
TXT
INT0
INT1
XCK/T0
T1
AIN0
AIN1

 

Exemples d'ús dels registres dels ports d'E/S

Es configura el PORTB com a sortida:

ser r16
out DDRB, r16
out PORTB, r16
nop
in r16, PINB
; posar el registre r16 a 1
; posar el PORTB com a sortida
; posar 1's a la sortida del PORTB
; sincronisme per poder llegir immediatament
; es llegeix el valor del PORTB

Es configura el PORTB com a entrada amb pull-ups:

clr r16
out DDRB, r16
ser r16
out PORTB, r16
nop
in r16, PINB
; posar el registre r16 a 0
; posar el PORTB com a entrada
; posar el registre r16 a 1
; activar els pull-up's a les entrades
; sincronisme per poder llegir immediatament
; es llegeix el valor del PORTB

Es configuren els pins 7 a 4 del PORTB com a entrada i els 3 a 0 com a sortida:

ldi r16, 0x0F
out DDRB, r16
ldi r16, (1<<PB7)|(1<<PB6)
out PORTB, r16
nop
in r16, PINB
;
; pins 7 a 4 del PORTB com entrades i 3 a 0 com sortides
; posar pull-up's als pins d'entrada 7 i 6, i 0's als pins de sortida
; activar els pull-up's a les entrades
; sincronisme per poder llegir immediatament
; es llegeix el valor del PORTB

WcN - AVR i Fonaments de computadors -> Ports d'entrada / sortida