Está en la página 1de 4

.

def temp=r16
.def auxiliar=r17
.def cont_barrido=r18
.def contador_global=r19

.dseg
Sieteseg:.byte 4

.cseg
.org 0x00
principal:
clr contador_global
ldi temp,0b0000_1111
out ddra,temp
ldi temp,0b1111_1111
out ddrc,temp
ldi temp,0b0000_1111
out ddrd,temp

ldi temp,0b1111_1111
out porta,temp
ldi temp,0b1111_0000
out portd,temp

in temp,MCUCR
andi temp,0b1110_1111
out MCUCR,temp

ldi temp,high(RAMEND)
out sph,temp
ldi temp,low(RAMEND)
out spl,temp

ldi temp, $40


sts Sieteseg, temp
sts Sieteseg+1, temp
sts Sieteseg+2, temp
sts Sieteseg+3, temp

ini:
ldi R16,0b1111_0111
out portA,R16
sbis pina,7
rjmp inicio
rjmp ini

inicio:
call BARRIDO
call Teclado
call retardo
ldi R16,0b1111_1011
out portA,R16
sbis pina,7
rjmp principal
rjmp inicio

BARRIDO:
push cont_barrido
in cont_barrido, SREG
push cont_barrido
push xh
push xl
push auxiliar
push temp

ldi cont_barrido,4
ldi xh,high(Sieteseg)
ldi xl,low(Sieteseg)
ldi auxiliar,0b1111_0111

LAZO3:
ldi temp,0b1111_1111
out portd,temp
ld temp,x+
out portc,temp
out portd,auxiliar
rcall RETARDO

clr temp
out portc,temp

sec
ror auxiliar
dec cont_barrido
brne LAZO3

pop temp
pop auxiliar
pop xl
pop xh
pop cont_barrido
out SREG, cont_barrido
pop cont_barrido
ret

RETARDO:
ldi temp,255
RETARDO01:
nop
dec temp
brne RETARDO01
ret

Teclado:
push r16
in r16, SREG
push R16
ldi R17,255

ldi R16,0b1111_0111
out portA,R16
sbis pina,5
ldi R17,0b0011_1111

ldi R16,0b1111_1110
out portA,R16
sbis pina,6
ldi R17,0b0110_1111
sbis pina,5
ldi R17,0b0111_1111
sbis pina,4
ldi R17,0b0000_0111

ldi R16,0b1111_1101
out portA,R16
sbis pina,7
ldi R17,200
sbis pina,6
ldi R17,0b0111_1101
sbis pina,5
ldi R17,0b0110_1101
sbis pina,4
ldi R17,0b0110_0110

ldi R16,0b1111_1011
out portA,R16
sbis pina,6
ldi R17,0b0100_1111
sbis pina,5
ldi R17,0b0101_1011
sbis pina,4
ldi R17,0b0000_0110

ldi R16,0b1111_1111
out portA, R16

cpi r17, 255


breq FinTeclado

cpi r17, 200


breq BorrarUno

cpi contador_global, 4
breq FinTeclado

ldi Xl, low(Sieteseg)


ldi Xh, high(Sieteseg)
add Xl, contador_global
clr r16
adc xh, r16
st x, r17
inc contador_global

call retardo1

rjmp FinTeclado

BorrarUno:
cpi contador_global, 0
breq FinTeclado
mov r18, contador_global
dec r18
call retardo1
ldi Xl, low(Sieteseg)
ldi Xh, high(Sieteseg)
add Xl, r18
clr r16
adc xh, r16
ldi r17,$40
st x, r17
dec contador_global

FinTeclado:
pop r16
out SREG, r16
pop r16
ret

Retardo1:
push r18
push r19
push r20

ldi r18, 3
ldi r19, 138
ldi r20, 85
L1: dec r20
brne L1
dec r19
brne L1
dec r18
brne L1
pop r20
pop r19
pop r18
ret

También podría gustarte