Documente Academic
Documente Profesional
Documente Cultură
interrupcin
Servicio de Interrupcin
llamada
reto
rno
Por convencin se usan ciertos nombre predefinidos y aceptados El mapeo de esos nombres a direcciones reales de memoria esta en archivos de definicin (*def.inc) Al incluir estos archivos se pueden utilizar en el programa todos los nombres de puertos, los nombres de bits individuales, etc.
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
;***** Bit Definitions .equ INT1 =7 .equ INT0 =6 .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ .equ TOIE1 =7 OCIE1A OCIE1B TICIE =3 TOIE0 =1 TOV1 =7 OCF1A =6 OCF1B =5 ICF1 =3 TOV0 =1 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 ;External Interrupt0 Vector Address ;External Interrupt1 Vector Address ;Input Capture1 Interrupt Vector Address ;Output Compare1A Interrupt Vector Address ;Output Compare1B Interrupt Vector Address ;Overflow1 Interrupt Vector Address ;Output Compare0 Interrupt Vector Address ;Overflow0 Interrupt Vector Address ;SPI Interrupt Vector Address ;UART Receive Complete Interrupt Vector Address ;UART Data Register Empty Interrupt Vector ;UART Transmit Complete Interrupt Vector Address ;Analog Comparator Interrupt Vector Address
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
$0000
Vector
Reset
Comentario
Direccin de la rutina de reset del procesador Direccin de la rutina de manejo de interrupcin externa INT0 Direccin de la rutina de manejo de interrupcin externa INT0 .
$0001 $0002
INT0
INT1
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
7 INT1 6 INT0 R/W 0 5 R 0 4 R 0 3 R 0 2 R 0 1 R 0 0 R 0
R/W 0
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
7 SRE 6 SRW 0 5 SE 0 4 SM 0 3 ISC11 0 2 ISC10 0 1 ISC01 0 0 ISC00 0
Valor inicial
Configuracin de ISCxx
ISCx1 0 0 1 1 ISCx0 0 1 0 1 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
Si se desea que INT1 se active en flanco de subida e INT0 en nivel bajo, los cuatro bits debern ser:
Paso 4
Habilitacin de interrupciones global (SREG) Para este paso es necesario configurar bits particulares del registro SREG (Status register)
SREG
bit
7 I 6 T 0 5 H 0 4 S 0 3 V 0 2 N 0 1 Z 0 0 C 0
Valor inicial
NOTAR QUE en los vectores de interrupcin lo que hay son instrucciones de salto a las direcciones de las rutinas correspondientes
.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
INT0 activa",0
; Inicializa el stack pointer ldi Temp1, low(RAMEND) out SPL, Temp1 ldi Temp1, high(RAMEND) out SPH, Temp1
;Inicializa la Uart ldi Temp1, out UBRRL, ldi Temp1, out UBRRH, ; Formato: 8 Bit ldi Temp1, out UCSRC, sbi UCSRB, sbi UCSRB,
;Inicializa PortD para irq int0 ldi Temp1, 0x00 out DDRD, Temp1 ldi Temp1, 0b00000010 out MCUCR, Temp1 ldi Temp1, 0b01000000 out GIMSK, Temp1 ; Habilitar Interrupciones sei ;********************************** ; Bucle Principal ;********************************** final: rjmp final
Puerto D seteado como input Int 0 se activa en flanco Ascendente de clock Activa INT0 Habilita todas las interrupciones Puesto que todo sucede en las interrupciones aca no se hace nada y Solo se itera
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 Registros de manejo de interrupciones externas Registros de manejo de dispositivos internos Registros de acceso a los puertos externos
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