Vous êtes sur la page 1sur 2

;teclado_metodo_dos

.def tempo=r16
.def columna=r17
.def tecla=r18
.def ante=r19
.def fila=r20
.def aux=r21
.cseg
.org 0x00

ldi tempo,0b11111111
out ddrb,tempo
out portb,tempo
ldi tempo,0b00000000
out ddrc,tempo
out ddrd,tempo
ldi tempo,0b11111111
out portc,tempo
out portd,tempo
in tempo,mcucr
andi tempo,0b11101111
out mcucr,tempo
ldi tempo,high(ramend)
out sph,tempo
ldi tempo,low(ramend)
out spl,tempo

ldi ante,16 ;tecla no presionada


otrobarrido:
ldi tempo,0b00001111
out ddra,tempo
ldi tempo,0b11111111
out porta,tempo

ldi tecla,16
ldi tempo,0b11110000;(poner todas las filas a 0L)
out porta,tempo
leer:
sbis pina,5
ldi columna,1
sbis pina,6
ldi columna,2
sbis pina,7
ldi columna,3
sbis pina,4
ldi columna,0
in aux,pina
andi aux,0b11110000
cpi aux,0b11110000
breq leer

ldi tempo,0b11110000 ;(cambiar filas como entrada y columnas como salida)


out ddra,tempo
ldi tempo,0b11111111
out porta,tempo
ldi tempo,0b00001111;(cargo todas las columnas en 0L)
out porta,tempo
sbis pina,0
ldi fila,0
sbis pina,1
ldi fila,1
sbis pina,2
ldi fila,2
sbis pina,3
ldi fila,3
clc
rol fila
rol fila
mov tecla,fila
add tecla,columna

cp tecla,ante
breq otrobarrido
mov ante,tecla
cpi tecla,16
breq otrobarrido
out portb,tecla
rjmp otrobarrido