.INCLUDE "m168def.inc"
		
.dseg 
.org $120
tabla7seg: .byte 16  //reservo espacio para la tabla de 7 segmentos

.cseg

//inicializo tabla

call inicializa_tabla


		ldi r16,$ff
		out ddrb, r16
		cbi ddrd,4
		sbi portd, 4
		clr r0

wait:	sbic pind,4
		jmp wait
		inc r0

	//	out portb,r0  //para problema 17 y no requiere subrutinas
		call display  // para problema 21
		
libera: sbis pind, 4
		jmp libera
		jmp wait


display:
mov r16,r0
cpi r16,9
brpl poner_U
ldi zl, low(tabla7seg)
ldi zh, high(tabla7seg)
add zl,r0
ld r16,z
out portb,r16
ret

poner_U: ldi r16,0x3d
		 out portb,r16
		 ret

	
inicializa_tabla:

ldi zl, low(2*memtabla7seg)
ldi zh, high(2*memtabla7seg)
ldi xl, low(tabla7seg)
ldi xh, high(tabla7seg)
ldi r16,10

loop: 
	lpm r0,Z+
	st X+,r0
	subi r16,1
	brne loop

ret



memtabla7seg: .db  0x3f, 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67
