You are on page 1of 2

/*

* TecladoMatricial.asm
*
* Created: 18/04/15 20:18:27
* Author: LE
*
Para usar con ATMEL studio
* Teclas:
Simbolos:
* | 1 | 2 | 3 | 4 |
| 1 | 2 | 3 | A |
* | 5 | 6 | 7 | 8 |
| 4 | 5 | 6 | B |
* | 9 |10 |11 |12 |
| 7 | 8 | 9 | C |
* | 13|14 |15 |16 |
| E | 0 | F | D |
*
* Puerto D hacia y desde teclado: Salidas (a filas):
PD0-PD3
*
Entradas(de c
olumnas): PD4-PD7
* Para Display: El puerto B es la salida
--------------------------------------------------------- */
.INCLUDE
"m48def.inc"
;Variables
.def
TECLA=R17
.def
TEMP=R18
.def
COD=R20
.def
FILA=R21
.org
0x00
RJMP INI
; Inicio de programa
INI:
LDI
R16,0x0F
; R16=0b00001111 (mscara)
OUT
DDRD,R16
; PD7-PD4 como entradas (0s), PD
3-PD0 como salidas (1s)
LDI
R16,0xFF
OUT
DDRB,R16
; Puerto B (entero) como salida
CLR
TEMP
; TEMP = 0
INICIO: CLR
TECLA
; Comienza en 0
INC
TECLA
; Incrementa TECLA
LDI
FILA,0x01
; Escribe en ROW un 0b00000001
OUT
PORTD,FILA
; Escribe un 1 a PD0 (ya era sal
ida)
TECLAS: NOP
RCALL DELAY
;SOLO PARA LA SIMULACION********
*******************************************************
SBIC
PIND,4
; Verifica tecla pulsada en columna 1 (S
kip (la siguiente) if Bit in I/0 register cleared)
RJMP
CON2
; Ir a CON2 si se pulsa tecla (se lo sal
ta si no es pulsada)
INC
TECLA
; Incrementar TECLA (si no se pu
lsa tecla)
RCALL DELAY
;SOLO PARA LA SIMULACION********
*******************************************************
SBIC
PIND,5
; Verifica tecla pulsada en columna 2
RJMP
CON2
; Ir a CON2 si se pulsa tecla (se lo sal
ta si no es pulsada)
INC
TECLA
; Incrementar TECLA (si no se pu
lsa tecla)
RCALL DELAY
;SOLO PARA LA SIMULACION********
*******************************************************
SBIC
PIND,6
; Verifica tecla pulsada en columna 3
RJMP
CON2
; Ir a CON2 si se pulsa tecla

INC

TECLA

; Incrementar TECLA si no se pul

sa tecla
RCALL DELAY
;SOLO PARA LA SIMULACION********
*******************************************************
SBIC
PIND,7
; Verifica tecla pulsada en columna 4
RJMP
CON2
; Ir a CON2 si se pulsa tecla
INC
TECLA
; Incrementar TECLA si no se pul
sa tecla
CPI
TECLA,0x11
; Compara TECLA con un 17 (decim
al), si TECLA=0x11, SFlag = 0
BRBS
1,CON1
; Comprueba si llego a la ultima tecla (
ya pas por 16) BranchIfStatusFlagSet
LSL
FILA
; Logical Shift Left a ROW (colu
mnas)
OUT
PORTD,FILA
; Escribe en PORTD a cual columna va a v
erificar.
RJMP
TECLAS
; Brinca a TECLAS para probar cada fila
de la nueva columna.
CON1: CLR
TECLA
; Al final no hubo tecla presionada...
RJMP
SALI
; Brinca a SALI
CON2: MOV
TEMP,TECLA
; Retiene ultima tecla pulsada
SALI: RCALL CONV
; Llama a CONV (donde selecciona el cdigo 7seg de
la tabla, para convertir).
OUT
PORTB,COD
; Enva al puerto B (7segm) el cdig
o de la tabla, correspondiente.
RJMP
INICIO
;Brinca a INICIO
; Conversin a 7segmentos
CONV: LDI
ZH,HIGH(2*TABLE)
LDI
ZL,LOW(2*TABLE)
ADD
ZL,TEMP
LPM
COD, Z
RET
/*Esto se lo agregu para potencia:*/
DELAY: LDI R22, 10
L4: LDI R23, 20
L5: LDI R24, 2
;Cuntos ms? (pueden ser de 0-255 ms)
L6: NOP
;Gasta 1 ciclo
NOP
;Gasta 1 ciclo
DEC R24
;Gasta 1 ciclo
BRNE L6
;Gasta 2 ciclos cuando e
fecta brinco
DEC R23
BRNE L5
DEC R22
BRNE L4
RET
TABLE:
.DB
0x00,0x50,0x9B,0xDA,0x5F,0x56,0xCE,0xCF,0xC7,0x58,0xDF,0xDE,0x8D
,0x8F,0xDD,0x0F,0xD3,0x00 ;El 0x00 final es para eliminar
;El error que me apareca "Warning 1 .cseg .db misalignment - padding zero byte" p
orque agregu un nmero impar, pero ahora es par (18)

You might also like