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 altaEl 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 funcionalitatPortB
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/TOSC1PortC 23
24
25
26
27
28
1 PC0
PC1
PC2
PC3
PC4
PC5
PC6
ADC0
ADC1
ADC2
ADC3
ADC4/SDA
ADC5/SCL
nRESETPortD 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 PORTBEs 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 PORTBEs 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