Вы находитесь на странице: 1из 6

ESCUELA POLITECNICA NACIONAL

LABORATORIO SISTEMAS MICROPROCESADOS

PRACTICA NO 09

Integrante: Fabián Poveda.

Curso: GR 12.

Fecha: 17 – 01 – 2017.

Tema: Uso de Interrupciones.

Objetivos.

 Diseñar un circuito, y el software asociado para manejar un dispositivo que controla un juego de 4
jugadores, en conjunto con 4 display de 7 segmentos e indicadores y sensores adicionales. el
display usará la técnica de barrido, y se trabajará exclusivamente con interrupciones externas
(INT0, INT1, INT2 y de cambio de estado) para manejo de los sensores.

Trabajo Preparatorio.

2 SOFTWARE

2.1 El circuito controla un juego de basket para 4 jugadores en una sala de juego.

2.2 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. Se debe prever que pueden
dos o más bolas pueden pasar simultáneamente por los aros, en cuyo caso se deben incrementar las
anotaciones de todos los jugadores involucrados.

2.3 Hay un display de 7 segmentos por cada uno de los jugadores, en donde se va mostrando el número
de anotaciones que tiene (un máximo de 9 anotaciones).

2.4 Hay tres pulsantes de control, que funcionan de la siguiente manera:

2.4.1 INT0.- Al pulsarlo en cualquier momento pone todas las cuentas a cero, y permite iniciar el juego.

2.4.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 display. Al pulsarlo nuevamente se continúa normalmente con el juego.

2.4.3 INT2.- Solamente está activo cuando suena la alerta sonora, y al pulsarlo apaga esta alerta.

2.5 Hay un parlante que emite un sonido de 2 KHz aproximadamente cuando uno de los jugadores llega al
puntaje máximo. Esta onda cuadrada de la frecuencia indicada debe ser generada por software por medio
de lazos de retardo.

2.6 Luego de pulsado INT0 el juego inicia y conforme los jugadores vayan haciendo anotaciones la cuenta
en su respectivo display se va incrementando en una unidad.

2.7 El primer jugador que llegue a hacer 9 anotaciones es el ganador, y en ese caso suena una señal sonora
que se mantiene hasta que se presione INT2. También en el display correspondiente al ganador aparece
una G mayúscula mientras que los otros tres display se apagan. No se contabiliza ninguna anotación
adicional que pueda hacerse después, ni hay cambios posteriores en los display.

2.8 En el caso fortuito de que dos o más jugadores lleguen simultáneamente a 9 en sus display aparecerá
la letra E mayúscula y los otros display se mantendrán apagados, y se cumplirán las condiciones del
párrafo anterior.

2.9 Para iniciar un nuevo juego se debe presionar INT0, en cuyo caso todo vuelve a cero y se habilita el
conteo de anotaciones. 4.2.10 En cualquier momento si se presiona INT1, se pone el juego en modo de
pausa y para continuar el juego se presiona nuevamente INT1.

.def temp=r16
.def tablero1=r20
.def tablero2=r21
.def tablero3=r22
.def tablero4=r23
.def cont=r24
.def ante=r25
.dseg
BCD0: .byte 1
BCD1: .byte 1
BCD2: .byte 1
BCD3: .byte 1
DIG0: .byte 1
DIG1: .byte 1
DIG2: .byte 1
DIG3: .byte 1
.cseg
.org 0x00
rjmp inicio
.org 0x02
rjmp inicio
.org 0x04
rjmp pausa
.org 0x06
rjmp apagar_parlante
.org 0x0A
rjmp jugar
inicio: ldi temp, 0b00001111
out ddra, temp
ldi temp, 0b11110000
out porta, temp
ldi temp, 0b01111111
out ddrc, temp
ldi temp, 0b10000000
out portc, temp
ldi temp, 0
out ddrb, temp
ldi temp, 0b10000000
out ddrd, temp
ldi temp, 0b01111111
out portd, temp
ldi temp, 0b11111111
out portb, temp
in temp, mcucr
andi temp, 0b11101111
out mcucr, temp
ldi temp, high(ramend)
out sph, temp
ldi temp, low(ramend)
out spl, temp
ldi temp, 0b00101010
sts eicra, temp
ldi temp, 0b00000111
out eimsk, temp
out eifr, temp
ldi temp, 0b00000010
sts pcicr, temp
ldi temp, 0b11110000
sts pcmsk1, temp
in ante, pinb
clr tablero1
clr tablero2
clr tablero3
clr tablero4
sei
principal: rcall mostrar
cpi tablero1, 9
breq gana1
cpi tablero2, 9
breq gana2
cpi tablero3, 9
breq gana3
cpi tablero4, 9
breq gana4
rjmp principal
gana1: ldi temp, 0b11111111
out portd, temp
rcall retardo_pwm
ldi temp, 0b01111111
out portd, temp
rcall retardo_pwm
ldi temp, 11
mov tablero2, temp
mov tablero3, temp
mov tablero4, temp
ldi temp, 0
sts pcicr, temp
rjmp principal
gana2: ldi temp, 0b11111111
out portd, temp
rcall retardo_pwm
ldi temp, 0b01111111
out portd, temp
rcall retardo_pwm
ldi temp, 11
mov tablero1, temp
mov tablero3, temp
mov tablero4, temp
ldi temp, 0
sts pcicr, temp
rjmp principal
gana3: ldi temp, 0b11111111
out portd, temp
rcall retardo_pwm
ldi temp, 0b01111111
out portd, temp
rcall retardo_pwm
ldi temp, 11
mov tablero1, temp
mov tablero2, temp
mov tablero4, temp
ldi temp, 0
sts pcicr, temp
rjmp principal
gana4: ldi temp, 0b11111111
out portd, temp
rcall retardo_pwm
ldi temp, 0b01111111
out portd, temp
rcall retardo_pwm
ldi temp, 11
mov tablero1, temp
mov tablero2, temp
mov tablero3, temp
ldi temp, 0
sts pcicr, temp
rjmp principal
jugar: in temp, pinb
sbrs temp, 7
rcall aro1
sbrs temp, 6
rcall aro2
sbrs temp, 5
rcall aro3
sbrs temp, 4
rcall aro4
reti
aro1: inc tablero1
reti
aro2: inc tablero2
reti
aro3: inc tablero3
reti
aro4: inc tablero4
reti
pausa: cpi cont, 1
breq continuar
brne pausar
pausar: inc cont
ldi temp, 0
sts pcicr, temp
reti
continuar: clr cont
ldi temp, 0b00000010
sts pcicr, temp
reti
retardo_pwm: push r25
push r24
ldi r25, 3
ldi r24, 152
L1: dec r24
brne L1
dec r25
brne L1
nop
pop r24
pop r25
reti
apagar_parlante: ldi temp, 10
cpi tablero1, 9
breq cambiar1
cpi tablero2, 9
breq cambiar2
cpi tablero3, 9
breq cambiar3
cpi tablero4, 9
breq cambiar4
rjmp principal
cambiar1: ldi temp, 10
mov tablero1, temp
rjmp continua
cambiar2: ldi temp, 10
mov tablero2, temp
rjmp continua
cambiar3: ldi temp, 10
mov tablero3, temp
rjmp continua
cambiar4: ldi temp, 10
mov tablero4, temp
rjmp continua
continua: ldi temp, 0b01111111
out portd, temp
reti
mostrar: ldi xh, high(BCD0)
ldi xl, low(BCD0)
st x+, tablero1
st x+, tablero2
st x+, tablero3
st x, tablero4
rcall BCD_7seg4
rcall Barrido_4
reti
BCD_7seg4: ldi xh, high(BCD0)
ldi xl, low(BCD0)
ldi yh, high(Dig0)
ldi yl, low(Dig0)
ldi r17, 4
rjmp BCD_7seg_otro
BCD_7seg_otro: ld r16, x+
ldi zh, high(Tabla_7seg<<1)
ldi zl, low(Tabla_7seg<<1)
add zl, r16
clr r16
adc zh, r16
lpm r16, z
st y+, r16
dec r17
brne BCD_7seg_otro
reti
Barrido_4: ldi xh, high(Dig0)
ldi xl, low(Dig0)
ldi r17, 4
ldi r19, 0b11111110
ser r16
out portc, r16
barrido_4_otro: ld r16, x+
out portc, r16
out porta, r19
rcall barrido_4_retardo
ser r16
out porta, r16
sec
rol r19
dec r17
brne barrido_4_otro
reti
barrido_4_retardo: ldi r18, 255
barrido_4_retardo1: dec r18
brne barrido_4_retardo1
reti
Tabla_7seg: .db 0b10111111, 0b10000110
.db 0b11011011, 0b11001111
.db 0b11100110, 0b11101101
.db 0b11111100, 0b10000111
.db 0b11111111, 0b11111101
.db 0b11111101, 0b10000000

Вам также может понравиться