You are on page 1of 17

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

LABORATORIO DE SISTEMAS MICROPROCESADOS. GR-12.


TREJO MANOSALVAS ALEJANDRO XAVIER. 2018-01-26.

PRÁCTICA N º 8 “USO DE INTERRUPCIONES”

PREPARATORIO. -

1. HARDWARE.
1.1. Se va a usar el circuito de barrido de display de 4 dígitos que se ha venido usando en
las prácticas anteriores. Es posible que deba reubicar las líneas de control del display,
pues se van a usar las líneas de las interrupciones externas por lo que deberían estar
libres; estas son las siguientes: INT0 (PD2), INT1(PD3), INT2(PB2), adicionalmente de
algún puerto se van a usar 4 líneas que van a ser los sensores y que se configurarán
para generar interrupción por cambio de algún bit en una de esas líneas (PCINTx). Se
adjunta un ANEXO como referencia.

CIRCUITO FÍSICO ARMADO EN PROTOBOARD

1.2. Se va a conectar un LED que simula un parlante que emite un sonido (si se desea se
puede conectar un buzzer o zumbador)

CIRCUITO FÍSICO ARMADO EN PROTOBOARD

1.3. Como referencia al final se da un circuito de muestra; de este circuito solamente las
interrupciones externas INT0, INT1, e INT2 no pueden ser reubicadas, los otros
dispositivos pueden ser reubicados de acuerdo a su conveniencia. Los estudiantes
deben traer todos los elementos necesarios. El zumbador o parlante es opcional y
puede ser reemplazado por un LED.

2. SOFTWARE.
2.1. El circuito controla un juego de basket para 4 jugadores en una sala de juego.
2.2. Hay tres pulsantes de control, que funcionan de la siguiente manera:
2.2.1. INT0.- Al pulsarlo en cualquier momento pone todas las cuentas a cero, y
permite iniciar el juego.
2.2.2. INT1.- Al pulsarlo una vez cuando ya se está jugando pone en modo de pausa,
en este modo se inhabilitan los sensores de los aros y no se contabiliza ninguna
anotación y se mantienen los puntajes de los displays. Al pulsarlo nuevamente
se continúa normalmente con el juego.
2.2.3. INT2.- Solamente está activo cuando suena la alerta sonora (LED), y al pulsarlo
apaga esta alerta.
2.3. Hay 4 aros de basket, uno para cada jugador, y en cada uno de ellos se ha instalado
un sensor en el aro que es un pulsante que se cierra momentáneamente al pasar una
bola por él. Cada vez que se detecta que la bola ha pasado por el sensor se debe
incrementar un punto al jugador correspondiente mientras se baja un punto a los
otros jugadores. Se debe prever que pueden pasar simultáneamente bolas por varios
aros, en cuyo caso se deben incrementar las anotaciones de todos los jugadores que
han acertado y se rebaja un punto a los que no lo han hecho. Ningún jugador puede
bajar de cero puntos.
2.4. Hay un display de 7 segmentos por cada uno de los jugadores, en donde se va
mostrando el número de anotaciones que tiene.
2.5. El primer jugador (o los jugadores) que llegue a hacer 10 anotaciones es el ganador,
y en ese caso se enciende la letra G (Ganador) en su display, mientras que en los otros
debe mostrar la P (Perdedores). En caso de que dos o más jugadores lleguen
simultáneamente a 10 en sus display mostrarán la E (Empate) y en los otros la P. En
cualquiera de los casos que se finalice el juego debe encenderse un led que simula un
zumbador. Las letras se mantienen hasta que se presione INT2; lo que también apaga
el zumbador. No se contabiliza ninguna anotación adicional que pueda hacerse
después, ni hay cambios posteriores en los display. El juego se reinicia con INT0.

CÓDIGO

;
; Preparatorio_9.asm
;
; Created: 25 ene. 2018 17:00:43
; Author : AXTREJO
;

.INCLUDE "M164PDEF.INC"

.DEF TEMPO=R16

.DSEG
TOPE: .BYTE 1
TOPE1: .BYTE 1
TOPE2: .BYTE 1
TOPE3: .BYTE 1
TOPE4: .BYTE 1

SEGMENTO0: .BYTE 1
SEGMENTO1: .BYTE 1
SEGMENTO2: .BYTE 1
SEGMENTO3: .BYTE 1

MARCADOR_J1: .BYTE 1
MARCADOR_J2: .BYTE 1
MARCADOR_J3: .BYTE 1
MARCADOR_J4: .BYTE 1

.CSEG
.ORG 0X00
RJMP INICIO

.ORG 0X02
RJMP CUENTA_A_CERO

.ORG 0X04
RJMP PAUSA

.ORG 0X06
RJMP APAGAR_ALERTA
.ORG 0X0A
RJMP JUGADORES

INICIO:
;PORTA SEGMENTOS
LDI TEMPO,0B01111111
OUT DDRA,TEMPO
COM TEMPO
OUT PORTA,TEMPO

;PORT C TRANSISTORES
LDI TEMPO,0B00001111
OUT DDRC,TEMPO
COM TEMPO
OUT PORTC,TEMPO

;PORT B LED TOPE1


LDI TEMPO,0B00000001
OUT DDRB,TEMPO
COM TEMPO
OUT PORTB,TEMPO

;PORT D ENTRADA
CLR TEMPO
OUT DDRD,TEMPO
COM TEMPO
OUT PORTD,TEMPO

;PULL UP GLOBAL
IN TEMPO,MCUCR
ANDI TEMPO,0B11101111
OUT MCUCR,TEMPO

;INICIALIZAR STACK POINT


LDI TEMPO,HIGH(RAMEND)
OUT SPH,TEMPO
LDI TEMPO,LOW(RAMEND)
OUT SPL,TEMPO

;INT0, INT1, INT2 POR FLACO DE BAJADO


LDI TEMPO,0B00000010
STS EICRA,TEMPO
LDI TEMPO,0B00000001
OUT EIMSK,TEMPO
LDI TEMPO,0B00000111
OUT EIFR,TEMPO

;CONFIGURACIÓN POR CAMBIO DE ESTADO


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000010
OUT PCIFR,TEMPO
LDI TEMPO,0B11110000
STS PCMSK1,TEMPO

;ACTIVACIÓN GLOBAL DE INTERRUPCIONES


SEI
CLR TEMPO
STS TOPE3,TEMPO
STS TOPE,TEMPO
STS TOPE1,TEMPO
STS TOPE2,TEMPO
STS TOPE4,TEMPO
STS MARCADOR_J1,TEMPO
STS MARCADOR_J2,TEMPO
STS MARCADOR_J3,TEMPO
STS MARCADOR_J4,TEMPO

LAZO:
LDS TEMPO,TOPE1
CPI TEMPO,20
BREQ BARR1
CALL CONV_7SEG
BARR1: CALL BARRIDO
CPI TEMPO,20
BREQ LAZO

;COMPROBAR GANADOR:
LDI TEMPO,10
LDS R1,MARCADOR_J1
LDS R2,MARCADOR_J2
LDS R3,MARCADOR_J3
LDS R4,MARCADOR_J4
CP R1,TEMPO
BRSH EMPATE1
CP R2,TEMPO
BRSH EMPATE2
CP R3,TEMPO
BRSH EMPATE3
CP R4,TEMPO
BRSH TERMINA41

;APAGAR TOPE1
LDI R16,0B11111110
OUT PORTB,R16
RJMP LAZO
TERMINA41: RJMP TERMINA4

EMPATE1: CP R1,R2
BREQ COMPROBARJ1J2J3
CP R1,R3
BREQ COMPROBARJ1J3J4
CP R1,R4
BREQ TERMINA1J4
RJMP TERMINA1

COMPROBARJ1J2J3: CP R1,R3
BREQ COMPROBARJ1J2J3J4
RJMP TERMINA1J2

COMPROBARJ1J3J4: CP R1,R4
BREQ TERMINA1J3J41
RJMP TERMINA1J3
TERMINA1J3J41: RJMP
TERMINA1J3J4

COMPROBARJ1J2J3J4: CP R1,R4
BREQ TERMINA1J2J3J41
RJMP TERMINA1J2J3
TERMINA1J2J3J41: RJMP
TERMINA1J2J3J4
EMPATE2: CP R2,R3
BREQ COMPROBARJ2J3J4
CP R2,R4
BREQ TERMINA2J41
RJMP TERMINA2
TERMINA2J41: RJMP TERMINA2J4
COMPROBARJ2J3J4: CP R2,R4
BREQ TERMINA2J3J41
RJMP TERMINA2J3
TERMINA2J3J41: RJMP
TERMINA2J3J4
EMPATE3: CP R3,R4
BREQ TERMINA3J41
RJMP TERMINA3
TERMINA3J41: RJMP TERMINA3J4

TERMINA1: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA G
LDI TEMPO,0B11111101
STS SEGMENTO0,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA1J4: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO0,TEMPO
STS SEGMENTO3,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA1J2: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA1J3J4: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO0,TEMPO
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO1,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA1J3: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO0,TEMPO
STS SEGMENTO2,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO1,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA1J2J3J4: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO
;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA1J2J3: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA2J4: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO1,TEMPO
STS SEGMENTO3,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO
STS SEGMENTO2,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA2: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA G
LDI TEMPO,0B11111101
STS SEGMENTO1,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA2J3J4: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO
;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA2J3: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA3J4: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA E
LDI TEMPO,0B11111001
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

TERMINA3: ;DESACTIVAR JUGADORES


LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA G
LDI TEMPO,0B11111101
STS SEGMENTO2,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO
STS SEGMENTO3,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO
TERMINA4: ;DESACTIVAR JUGADORES
LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

;ACTIVAR INT2
LDI TEMPO,0B00100010
STS EICRA,TEMPO
LDI TEMPO,0B00000101
OUT EIMSK,TEMPO

;LETRA G
LDI TEMPO,0B11111101
STS SEGMENTO3,TEMPO

;LETRA P
LDI TEMPO,0B11110011
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO

;PRENDER LED
SER TEMPO
OUT PORTB,TEMPO
LDI TEMPO,20
STS TOPE1,TEMPO
CALL BARRIDO
RJMP LAZO

;RUTINAS DE INTERRUPCIONES:
CUENTA_A_CERO:
PUSH R16
IN R16,SREG
PUSH R16

CLR TEMPO
STS TOPE1,TEMPO
STS TOPE,TEMPO
STS TOPE3,TEMPO
STS TOPE4,TEMPO
STS TOPE2,TEMPO
STS SEGMENTO0,TEMPO
STS SEGMENTO1,TEMPO
STS SEGMENTO2,TEMPO
STS SEGMENTO3,TEMPO
STS MARCADOR_J1,TEMPO
STS MARCADOR_J2,TEMPO
STS MARCADOR_J3,TEMPO
STS MARCADOR_J4,TEMPO

;ACTIVACION DE JUGADORES
LDI TEMPO,0B00000010
STS PCICR,TEMPO

;OUT PCIFR,TEMPO
LDI TEMPO,0B11110000
STS PCMSK1,TEMPO
;ACTIVACION PULSADOR PAUSA
LDI TEMPO,0B00001010
STS EICRA,TEMPO
LDI TEMPO,0B00000011
OUT EIMSK,TEMPO
LDI TEMPO,0B00000011

;OUT EIFR,TEMPO
POP R16
OUT SREG,R16
POP R16
RETI

;RUTINA PAUSA
PAUSA:
PUSH R16
IN R16,SREG
PUSH R16

LDS R16,TOPE3
INC R16
STS TOPE3,R16
SBRC R16,0
RJMP TOPE31
NO_TOPE31:
LDI TEMPO,0B00000010
STS PCICR,TEMPO
LDI TEMPO,0B11110000
STS PCMSK1,TEMPO
RJMP SALIR_PAUSA
TOPE31:
LDI TEMPO,0B00000000
STS PCICR,TEMPO
LDI TEMPO,0B00000000
STS PCMSK1,TEMPO

SALIR_PAUSA:
POP R16
OUT SREG,R16
POP R16

RETI

;RUTINA APAGAR TOPE1


APAGAR_ALERTA:
PUSH R16
IN R16,SREG
PUSH R16

LDI R16,0B11111110
OUT PORTB,R16
LDI R16,0B10000000
STS SEGMENTO0,R16
STS SEGMENTO1,R16
STS SEGMENTO2,R16
STS SEGMENTO3,R16
POP R16
OUT SREG,R16
POP R16
RETI

;INTERRUPCIONES POR CAMBIO DE ESTADO


JUGADORES:
PUSH R16
IN R16,SREG
PUSH R16
PUSH R17

LDS R16,TOPE4
INC R16
STS TOPE4,R16

SBIS PINB,4
CALL JUGADOR1
SBIS PINB,5
CALL JUGADOR2
SBIS PINB,6
CALL JUGADOR3
SBIS PINB,7
CALL JUGADOR4
LDS R16,TOPE4
SBRS R16,0
RJMP SALIRJUG

LDS R16,TOPE
SBRS R16,0
CALL DECREMENTARJ1
SBRS R16,1
CALL DECREMENTARJ2
SBRS R16,2
CALL DECREMENTARJ3
SBRS R16,3
CALL DECREMENTARJ4
CLR R16
STS TOPE,R16
RJMP SALIRJUG

JUGADOR1:
LDS R16,MARCADOR_J1
INC R16
STS MARCADOR_J1,R16
LDS R16,TOPE
ORI R16,0B00000001
STS TOPE,R16
RET

JUGADOR2:
LDS R16,MARCADOR_J2
INC R16
STS MARCADOR_J2,R16
LDS R16,TOPE
ORI R16,0B00000010
STS TOPE,R16
RET
JUGADOR3:
LDS R16,MARCADOR_J3
INC R16
STS MARCADOR_J3,R16
LDS R16,TOPE
ORI R16,0B00000100
STS TOPE,R16
RET

JUGADOR4:
LDS R16,MARCADOR_J4
INC R16
STS MARCADOR_J4,R16
LDS R16,TOPE
ORI R16,0B00001000
STS TOPE,R16
RET

DECREMENTARJ1:
LDS R17,MARCADOR_J1
CPI R17,0
BREQ SALIRJ1
DEC R17
STS MARCADOR_J1,R17
SALIRJ1: RET

DECREMENTARJ2:
LDS R17,MARCADOR_J2
CPI R17,0
BREQ SALIRJ2
DEC R17
STS MARCADOR_J2,R17
SALIRJ2: RET

DECREMENTARJ3:
LDS R17,MARCADOR_J3
CPI R17,0
BREQ SALIRJ3
DEC R17
STS MARCADOR_J3,R17
SALIRJ3: RET

DECREMENTARJ4:
LDS R17,MARCADOR_J4
CPI R17,0
BREQ SALIRJ4
DEC R17
STS MARCADOR_J4,R17
SALIRJ4: RET

SALIRJUG:
POP R17
POP R16
OUT SREG,R16
POP R16
RETI
;RUTINA CONERTIR A 7 SEGMENTOS
CONV_7SEG:
PUSH R16
IN R16,SREG
PUSH R16
PUSH R17

LDS R16,TOPE4
CPI R16,0XA
BREQ SALIRCONV

LDI XL,LOW(MARCADOR_J1)
LDI XH,HIGH(MARCADOR_J1)

LDI YL,LOW(SEGMENTO0)
LDI YH,HIGH(SEGMENTO0)

LDI R17,4

CONVER:
LDI ZL,LOW(TABLA<<1)
LDI ZH,HIGH(TABLA<<1)
LD R16,X+
ADD ZL,R16
CLR R16
ADC ZH,R16
LPM R16,Z
ST Y+,R16
DEC R17
BRNE CONVER

SALIRCONV:
POP R17
POP R16
OUT SREG,R16
POP R16
RET

;RUTINA DE BARRIDO
BARRIDO: PUSH R16
IN R16,SREG
PUSH R16
PUSH R17
PUSH R23
PUSH R19
PUSH R22
PUSH XL
PUSH XH

LDI XL,LOW(SEGMENTO0)
LDI XH,HIGH(SEGMENTO0)
LDI R17,0B11111110
LDI R23,4
BARRIDO1:
SER R16
OUT PORTC,R16
LD R16,X+
OUT PORTA,R16
OUT PORTC,R17
CALL RETARDO
SEC
ROL R17
DEC R23
BRNE BARRIDO1

POP XH
POP XL
POP R22
POP R19
POP R23
POP R17
POP R16
OUT SREG,R16
POP R16
RET

RETARDO:
LDI R22,0X43
RETAR0: LDI R19,0XC6
RETAR1: DEC R19
BRNE RETAR1
DEC R22
BRNE RETAR0
NOP
RET

TABLA: .DB 0B10111111, 0B10000110 ; CÓDIGOS 0 Y 1


.DB 0B11011011, 0B11001111 ; CÓDIGOS 2 Y 3
.DB 0B11100110, 0B11101101 ; CÓDIGOS 4 Y 5
.DB 0B11111101, 0B10000111 ; CÓDIGOS 6 Y 7
.DB 0B11111111, 0B11101111 ; CÓDIGOS 8 Y 9

SIMULACIÓN
led

R8 RP1
220 1

2
3
4
D1
REINICIO p1
LED-GREEN
5
6
7
8
9

PAUSAR-CONTINUAR RESPACK-8
c
a
b

d
e
f
g

d4
d3
d2
d1

p2
U2
U1 9
R1
COM
40 37 1 16
led PB0/XCK0/T0/PCINT8 PA0/ADC0/PCINT0 1B 1C R2 a
APAGAR ALARMA p3
tg
p3
41
42
43
PB1/T1/CLKO/PCINT9
PB2/AIN0/INT2/PCINT10
PA1/ADC1/PCINT1
PA2/ADC2/PCINT2
36
35
34
2
3
4
2B
3B
2C
3C
15
14
13
R3
47
R4
47
b
c
tp
44
PB3/AIN1/OC0A/PCINT11 PA3/ADC3/PCINT3
33 5
4B 4C
12
R5
47 d
j1
1
PB4/SS/OC0B/PCINT12 PA4/ADC4/PCINT4
32 6
5B 5C
11
R6
47 e
j2
2
PB5/MOSI/PCINT13 PA5/ADC5/PCINT5
31 7
6B 6C
10
R7
47 f
j3 PB6/MISO/PCINT14 PA6/ADC6/PCINT6 7B 7C 47 g
3 30
j4 PB7/SCK/PCINT15 PA7/ADC7/PCINT7 47
ULN2003A U3
j1
BOLA 1 9
10
11
PD0/RXD0/PCINT24
PD1/TXD0/PCINT25
PC0/SCL/PCINT16
PC1/SDA/PCINT17
19
20
21
d1
p1 PD2/INT0/RXD1/PCINT26 PC2/TCK/PCINT18
BOLA 2 j2 p2
12
13
14
PD3/INT1/TXD1/PCINT27
PD4/OC1B/XCK1/PCINT28
PC3/TMS/PCINT19
PC4/TDO/PCINT20
22
23
24
U4
NOT

PD5/OC1A/PCINT29 PC5/TDI/PCINT21 d2
BOLA 3 j3
15
16
PD6/ICP/OC2B/PCINT30
PD7/OC2A/PCINT31
PC6/TOSC1/PCINT22
PC7/TOSC2/PCINT23
25
26 U5
NOT

BOLA 4 29
27
4
AREF
AVCC
XTAL1
XTAL2
8
7
d3

j4 RESET U6
NOT
ATMEGA164P
d4

NOT

You might also like