Está en la página 1de 5

Sistemas microprocesados

1 INTERRUPCIONES
Nombre : Edwin Cabrera
/*
* iNTERRUPCIONES_DEBER.asm
*
* Created: 10/07/2016 10:52:12
*
Author: EDWIN CABRERA
*/
.include"m164pdef.inc"
.def
tempo=r16
.def
anterior=r17
.def
aux=r18
.def
j1=r19
.def
j2=r20
.def
hab=r23
.def
cont=r24
.dseg
/**RESERVO ESPACIO EN LA SRAM**/
DECI_0:.BYTE 2
DISPLAY:.BYTE 2
.cseg
.org
RJMP
.org
RJMP
.org
RJMP
.org
RJMP

0x0
INICIO
0x2
INICIO_JUEGO
0x4
PAUSA
0x0C
SENSORES

INICIO:
SER
TEMPO
OUT
DDRA,TEMPO
CLR
TEMPO
OUT
DDRB,TEMPO
OUT
DDRD,TEMPO
SER
TEMPO
OUT
PORTB,TEMPO
OUT
PORTD,TEMPO
LDI
TEMPO,0B11110000
OUT
DDRC,TEMPO
LDI
TEMPO,0B00001111
OUT
PORTC,TEMPO
/*CONFIGURO EL PULL UP*/

IN
TEMPO,MCUCR
ANDI
TEMPO,0B11101111
OUT
MCUCR,TEMPO
/*CONFIGURO EL USER-STACK*/
LDI
OUT
LDI
OUT

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

/*CONFIGURO INTERRUPCIONES*/
LDI
TEMPO,0B00101010
STS
EICRA,TEMPO
LDI
TEMPO,0B00000111
OUT
EIMSK,TEMPO
LDI
TEMPO,0B00000100
STS
PCICR,TEMPO
LDI
TEMPO,0B00001111
STS
PCMSK2,TEMPO
SEI

OTRA_VEZ:
CLR
CLR
CLR
SER

J1
J2
HAB
AUX

PROGRAMA:
IN
ANTERIOR,PINC
STS
DECI_0,J4
STS
DECI_0+1,J3
STS
DECI_0+2,J2
STS
DECI_0+3,J1
CALL
DECIMAL_A_DISPLAY
CALL
BARRIDO_DISPLAYS
CPI
J1,9
BREQ
GANA_1
CPI
J2,9
BREQ
GANA_2
RJMP
PROGRAMA
GANA_1:
LDI
R16,0B11101111
OUT
PORTC,R16
CPI
AUX,0
BREQ
OTRA_VEZ
RJMP
GANA_1
GANA_2:
LDI
R16,0B11011111
OUT
PORTC,R16
CPI
AUX,0
BREQ
OTRA_VEZ
RJMP
GANA_2

CONT,82
LAZO1:
DEC
CONT
BRNE
LAZO1
IN
R16,PINA
COM
R16
ANDI
R16,0B11111011
ORI
R16,0B11111010
OUT
PORTA,R16
RET
INICIO_JUEGO:
PUSH
R16
IN
PUSH
R16
CLR
CLR
SER
SER
POP
OUT
POP
RETI
PAUSA:
PUSH
R16
IN
PuSH
R16
COM
POP
OUT
POP
RETI

R16,SREG
J1
J2
HAB
AUX
R16
SREG,R16
R16

R16,SREG
HAB
R16
SREG,R16
R16

PULSADORES:
PUSH
R16
IN
R16,SREG
PUSH
R16
PUSH
R23
TST
R23
BREQ
SALIR_PULSADORES
IN
R16,PINC
EOR
R16,ANTERIOR
SBRC
R16,3
RJMP
JUG_1
DOS:
SBRC
R16,2
RJMP
JUG_2
RJMP
SALIR_PULSADORES
JUG_1:
SBIS
PINC,3
INC
J1
RJMP
DOS
JUG_2:
SBIS
PINC,2

INC
RJMP

J2
UNO

SALIR_PULSADORE:
POP
R23
POP
R16
OUT
SREG,R16
POP
R16
RETI
.INCLUDE"BARR_DISPLAY.ASM"
.INCLUDE"BCD_7_SEG.ASM"

;BCD_7_SEG
;PARA EL USO DE ESTA SUBRUTINA SE DEBERA RESERVAR EN LA SRAM ESPACIO DE 2 BYTES PARA DECI
;Y 2BYTES MS PARA DISPLAY
DECIMAL_A_DISPLAY:
PUSH
R16
PUSH
R17
PUSH
XL
PUSH
XH
PUSH
YL
PUSH
YH
PUSH
ZL
PUSH
ZH
LDI
XH,HIGH(DECI_0)
LDI
XL,LOW(DECI_0)
LDI
YH,HIGH(DISPLAY)
LDI
YL,LOW(DISPLAY)
LDI
R17,4
SACAR_A_DISPLAYS:
LDI
ZH,HIGH(TABLA_BCD_7_SEG<<1)
LDI
ZL,LOW(TABLA_BCD_7_SEG<<1)
LD
R16,X+
ADD
ZL,R16
CLR
R16
ADC
ZH,R16
LPM
R16,Z
ST
Y+,R16
DEC
R17
BRNE
SACAR_A_DISPLAYS
POP
ZH
POP
ZL
POP
YH
POP
YL
POP
XH
POP
XL
POP
R17
POP
R16
RET
TABLA_BCD_7_SEG:
;gfedcba

gfedcba

.db
.db
.db
.db
.db
.db
.db
.db
.db

0b01111110,0b00001100 ;0,1
0b10110110,0b10011110 ;2,3
0b11001100,0b11011010 ;4,5
0b11111010,0b00001110 ;6,7
0b11111110,0b11011110 ;8,9
0b11101110,0b11111000 ;10 (A),11 (b)
0b01110010,0b10111100 ;12 (C),13 (d)
0b11110010,0b11100010 ;14 (E),15 (F)
0b00000000,0b11111010;NADA,GANADOR(17)

;BARR_DISPLAY
;ESTA SUBRUTINA REALIZA EL BARRIDO DE DISPLAYS DE ANODO COMUN POR EL PORTA
BARRIDO_DISPLAYS:
PUSH
R16
PUSH
R17
PUSH
R18
PUSH
YL
PUSH
YH
LDI
R16,0B00000000
OUT
PORTA,R16
LDI
YH,HIGH(DISPLAY)
LDI
YL,LOW(DISPLAY)
LDI
R17,4
LDI
R18,0B01111111
BARRER_DISPLAYS:
SER
R16
OUT
PORTC,R16
LD
R16,Y+
ANDI
R16,0B11111110
OUT
PORTA,R16
OUT
PORTC,R18
CALL
RETARDO_BARRIDO
SEC
ROR
R18
DEC
R17
BRNE
BARRER_DISPLAYS
SER
R16
OUT
PORTC,R16
POP
YH
POP
YL
POP
R18
POP
R17
POP
R16
RET
RETARDO_BARRIDO:
LDI
R16,255
RETARDAR_BARRIDO:
NOP
DEC
R16
BRNE
RETARDAR_BARRIDO
RET

También podría gustarte