Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Interrupciones y Puertos AVR
Interrupciones y Puertos AVR
Interrupciones y E/S
Atmel
Taller de Microcontroladores
ao 2012
Optativa de grado y
Curso de Posgrado
interrupcin
Inst 1
Inst 2
Inst 3
Inst 4
Inst 5
Inst n
Servicio de
Interrupcin
llamada
reto
rno
Inst 1
Inst 2
Inst n
banco de registros
puertos de entrada/salida
registros de control y estado
vectores de interrupcin
8515def.inc
;***** I/O Register Definitions
.equ SREG =$3f
.equ SPH =$3e
.equ SPL =$3d
.equ GIMSK =$3b
.equ GIFR =$3a
.equ TIMSK =$39
.equ TIFR =$38
.equ MCUCR =$35
.equ TCCR0 =$33
.equ TCNT0 =$32
.equ TCCR1A
=$2f
.equ TCCR1B
=$2e
.equ TCNT1H
=$2d
.equ TCNT1L
=$2c
.equ OCR1AH
=$2b
.equ OCR1AL
=$2a
.equ OCR1BH
=$29
.equ OCR1BL
=$28
TOIE1 =7
OCIE1A
OCIE1B
TICIE =3
TOIE0 =1
.equ
.equ
.equ
.equ
.equ
TOV1 =7
OCF1A =6
OCF1B =5
ICF1 =3
TOV0 =1
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
SRE =7
SRW =6
SE
=5
SM
=4
ISC11 =3
ISC10 =2
ISC01 =1
ISC00 =0
=6
=5
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
PORTA =$1b
DDRA =$1a
PINA =$19
PORTB =$18
DDRB =$17
PINB =$16
PORTC =$15
DDRC =$14
PINC =$13
PORTD =$12
DDRD =$11
PIND =$10
8515def.inc
Vectores de interrupciones
.equ INT0addr=$001
.equ INT1addr=$002
.equ ICP1addr=$003
.equ OC1Aaddr=$004
.equ OC1Baddr=$005
.equ OVF1addr=$006
.equ OC0addr =$007
.equ OVF0addr=$008
.equ SPIaddr =$009
.equ URXCaddr=$00a
.equ UDREaddr=$00b
Address
.equ UTXCaddr=$00c
.equ ACIaddr =$00d
Volvamos al ejemploPaso 1
Seteo de las direcciones de salto en los vectores de interrupcin
La memoria de programa, desde la direccin $0000, contiene la tabla de
Vectores de interrupcin.
El programa real debe comenzar despus de esa tabla.
La tabla almacena vectores que contienen la direccin de las rutinas de
Interrupcin correspondientes.
Direccin
Vector
Comentario
$0000
Reset
Direccin de la rutina de
reset del procesador
$0001
INT0
Direccin de la rutina de
manejo de interrupcin
externa INT0
INT1
Direccin de la rutina de
manejo de interrupcin
externa INT0
$0002
La directiva .org
Directiva ampliamente usada en ensambladores para reservar y definir
Espacios de memoria
; Interrupt service vectors
; Handles reset and external interrupt vectors INT0 and INT1
.org $0000
rjmp Reset ; Reset vector (when the MCU is reset)
.org INT0addr
rjmp IntV0 ; INT0 vector (ext. interrupt from pin PD2)
.org INT1addr
rjmp IntV1 ; INT1 vector (ext. interrupt from pin PD3)
; - Rutina Reset vector
Reset:
ldi TEMP,low(RAMEND) ; Set initial stack ptr location at ramend
out SPL,TEMP
ldi TEMP, high(RAMEND)
out SPH, TEMP
...
...
Paso 2
Configuracin de las mscaras de interrupcin
necesarias para habilitar la interrupcin deseada
Para este paso es necesario configurar bits particulares del registro
GIMSK (General Interrupt MaSK register)
GIMSK
bit
INT1
INT0
Read/write
R/W
R/W
Valor inicial
Estos dos a 1
Paso 3
Configuracin del registro de control (MCUCR)
Para este paso es necesario configurar bits particulares del registro
MCUCR (General Control register)
NOTA: MCUCR es acrnimo de MCU Control Register
MCUCR
bit
Valor inicial
SRE
SRW
SE
SM
ISC11
ISC10
ISC01
ISC00
Configuracin de ISCxx
ISCx1
ISCx0
Descripcin
Nivel bajo en el pin INTx genera interrupcin
Reservado
Nivel de subida en el pin INTx genera interrupcin
Nivel de bajada en el pin INTx genera interrupcin
Paso 4
Habilitacin de interrupciones global (SREG)
Para este paso es necesario configurar bits particulares del registro
SREG (Status register)
SREG
bit
Valor inicial
.include "m8def.inc"
.def Temp1
.def Temp2
.def Temp3
.def item
.def nivel
.def char
.equ
.equ
.equ
=
=
=
=
=
=
r16
r17
r18
r19
r20
r21
CLOCK = 8000000
BAUD = 9600
UBRRVAL = CLOCK/(BAUD*16)-1
Definicin de smbolos
Parmetros de inicializacin
Del Usart
ZH,high(2*msgINT0)
ZL,low (2*msgINT0)
clearLcd
char,0x03
printAt
loadByte
INT0 activa",0
Servicio de interrupcin
De la Usart
;Inicializa la Uart
ldi
Temp1,
out
UBRRL,
ldi
Temp1,
out
UBRRH,
; Formato: 8 Bit
ldi
Temp1,
out
UCSRC,
sbi
UCSRB,
sbi
UCSRB,
LOW(UBRRVAL)
Temp1
HIGH(UBRRVAL)
Temp1
1<<URSEL)|(3<<UCSZ0)
Temp1
RXCIE
RXEN
Comienzo de la interrupcin
de reset
Carga el SP con el fin de RAM
Puertos de entrada/salida
Los puertos de entrada/salida se mapean en la zona de memoria
a continuacin del banco de registros y antes de la memoria de uso
general
Tamao variable segn el modelo de microcontrolador dependiendo de
la cantidad y tipo de dispositivos internos que posea
Diseo ortogonal:
Registros de control y estado del MCU
Registros de flags del MCU
Puertos
Flags y
pila
.equ
.equ
.equ
SREG
SPH
SPL
=$3f
=$3e
=$3d
63
62
61
; status register
; stack high
; stack low
INTs
.equ
.equ
.equ
.equ
GIMSK
GIFR
TIMSK
TIFR
=$3b
=$3a
=$39
=$38
59
58
57
56
control
.equ
MCUCR
=$35
53
Timer, comparador
y contador
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
TCCR0
TCNT0
TCCR1A
TCCR1B
TCNT1H
TCNT1L
OCR1AH
OCR1AL
OCR1BH
OCR1BL
=$33
=$32
=$2f
=$2e
=$2d
=$2c
=$2b
=$2a
=$29
=$28
51
50
47
46
45
44
43
42
41
40
entrada
.equ
.equ
ICR1H
ICR1L
=$25
=$24
37
36
Watch
dog
.equ
WDTCR
=$21
33
.equ
Manejo .equ
eeprom .equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
.equ
SPI
.equ
.equ
.equ
USART .equ
.equ
.equ
Comp. .equ
EEARH
EEARL
EEDR
EECR
PORTA
DDRA
PINA
PORTB
DDRB
PINB
PORTC
DDRC
PINC
PORTD
DDRD
PIND
SPDR
SPSR
SPCR
UDR
USR
UCR
UBRR
ACSR
=$1f
=$1e
=$1d
=$1c
=$1b
=$1a
=$19
=$18
=$17
=$16
=$15
=$14
=$13
=$12
=$11
=$10
=$0f
=$0e
=$0d
=$0c
=$0b
=$0a
=$09
=$08
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
09
08
Pines de E/S
Accesibles va cuatro puertos de 8 bits (A, B, C, D)
Puertos configurables bit a bit como entrada, salida, pull-up o triestado
Tres registros por cada puerto:
PORT : valor de salida en modo escritura o habilitacin de pull-up
en modo lectura
PIN: valor de entrada en modo lectura
DDR: seleccin de entrada o salida para cada pin
1 salida
0 - entrada