Deber 9 Sistemas Microprocesados

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 3

Deber 9

Interrupciones internas

Nombre: Ricardo Ramos Fecha: 25 de agosto de 2020.

-CODIGO.
; DeberInterrupcionesExternas.asm
;
; Created: 24/08/2020 15:42:24
; Author : Ricardo Ramos
.def tempo=r16
.def conta=r17
.def pulsadas=r18;//Guarda numero de de entradas interrupcion INT1
.def pulsadas1=r19;//Guarda numero de entradas a interrupcion INT2
.def pulsadas2=r20;//Guarda numero de entradas a interrupcion INT3
.cseg
.org 0x00
rjmp INICIO
.org 0x02
rjmp LED_1
.org 0x04
rjmp LED_2
.org 0x06
rjmp LED_3
INICIO:
// configuro puertos
ldi tempo,0b0000_0000
out ddrb,tempo ;PB2 es INT2, otros pines no usados
out ddrc,tempo ;puertos no usados, entrada con pullup
out ddrd,tempo ;PD2 es INTo,PD3 es INT1 otros pines no usados
ldi tempo,0b0000_0111 ;leds de salida PA0,PA1,PA2
out ddra,tempo
ldi tempo,0b1111_1111
out portb,tempo
out portc,tempo
out portd,tempo
ldi tempo,0b1111_1000; leds inicia apagados
out porta,tempo
// pull-up
in tempo,mcucr
andi tempo,0b1110_1111
out mcucr,tempo
// inicializo stack
ldi tempo,high(ramend)
out sph,tempo
ldi tempo,low(ramend)
out spl,tempo
//Configuracion de interrupciones externas
ldi tempo,0b0_11_11_11; para que al pulsar
sts EICRA,tempo; y despues de soltar el LED se prenda (flanco de subida)
ldi tempo,0b0000_0_111 ;habilito INT0,INT1 e INT2
out EIMSK,tempo
// variables a ocupar iniciando en 0
clr conta
clr pulsadas
clr pulsadas1
clr pulsadas2
sei ;Habilitacion global de insterrupciones

LAZO:
out porta,conta
rjmp lazo

//subrutina de interrupcion led 1


LED_1:
push tempo ; salvar
in tempo,SREG ;estados
push tempo
cpi pulsadas,0; se compara si fue la primera pulsada
brne LED1_OFF;
inc pulsadas
ori conta,0b0000_0001 ;enciendo led1
rjmp salir1
LED1_OFF:
clr pulsadas
andi conta,0b0000_0110;apago led1

salir1: ;devuelvo recursos usados


pop tempo
out SREG,tempo
pop tempo
reti
// subrutina de interrupcion 2
LED_2:
push tempo ; salvar
in tempo,SREG ;estados
push tempo
cpi pulsadas1,0; se compara si fue la primera pulsada
brne LED2_OFF;
ori conta,0b0000_0010 ;enciendo led2
inc pulsadas1
rjmp salir2
LED2_OFF:
clr pulsadas1
andi conta,0b0000_0101;apago led2

salir2: ;devuelvo recursos usados


pop tempo
out SREG,tempo
pop tempo
reti

LED_3:
push tempo ; salvar
in tempo,SREG ;estados
push tempo
cpi pulsadas2,0; se compara si fue la primera pulsada
brne LED3_OFF;
ori conta,0b0000_0100 ;enciendo led3
inc pulsadas2
rjmp salir3
LED3_OFF:
clr pulsadas2
andi conta,0b0000_0011;apago led1

salir3: ;devuelvo recursos usados


pop tempo
out SREG,tempo
pop tempo
reti

-Simulación.

1) Se presiona el pulsador 3, (Interrupción 3). No se enciende el led3 ya que esta interrupción se activa con flanco de
subida.
2) El led3 se enciende al soltar el pulsador 3 (Interrupción 3).

3) Al volver a pulsar el pulsador 3 (Interrupción 3), El led3 continúa encendido ya que la interrupción se activa por flanco
de subida.

2) El led3 se apaga al soltar el pulsador 3 (Interrupción 3), luego de ser presionado por segunda vez.

También podría gustarte