Vous êtes sur la page 1sur 9

Microcontroladores y Microprocesadores

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

ESCUELA DE CIENCIAS BSICAS TECNOLOGA E INGENIERA

COMPONENTE PRCTICO

309696 MICROPROCESADORES Y MICROCONTROLADORES

INTEGRANTES
JOHN ALEXANDER RUBIO CHAVEZ
74185810
YAMID URIEL BARRERA
74085337

JUAN AMAYA (TUTOR DE PRACTICA)


DIRECTOR
HECCTOR URIEL VILLAMIL GONZALEZ
GRUPO 309696_6

NOVIEMBRE DE 2014

Ejercicio 1.2.2: Control de un teclado matricial mnimo 4x3 (comercialmente como teclado
telefnico) o 4x4 y control de acceso por clave de seguridad de cuatro (4) dgitos, ver
apartado de acciones que debe ejecutarse en la prctica, el teclado en el caso del 4x3 debe
contener:
Los diez (10) dgitos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9).
Una tecla # (en teclados comerciales) se tomara como accin de ingreso de clave para ser
evaluada por el sistema microcontrolado.
Una tecla * (en teclados comerciales) se tomara como accin de borrado de clave y
regreso a estado inicial, para recibir un nuevo intento de clave.
Los indicadores que deben tenerse son del tipo LED, solo uno de ellos debe encender a la vez
y su funcin se describe como:
LED Amarillo o Azul, indica que el sistema y teclado est listo para recibir una nueva clave.
LED Verde, indica que el usuario a digitado una clave correcta.
LED Rojo, indica que el usuario a digitado una clave incorrecta.
Las acciones que debe cumplir la prctica son:
Grabar una clave de 4 dgitos en la memoria no voltil del micro o EEPROM, para el ejercicio
la clave debe ser semestre/ao, por ejemplo para el segundo semestre de 2014 seria (0214).
Codigo
LIST P=16F84a
INCLUDE "P16F84a.INC"
__config _CP_OFF &_PWRTE_OFF& _WDT_OFF & _XT_OSC
RADIX HEX
errorlevel -302
pc
equ 2h
status equ 3h
ptoa equ 5h
ptob equ 6h
trisa equ 85h
trisb equ 86h
opt_reg equ 81h
cta1 equ 20h
cta2 equ 21h
Tecla equ 22h
digi1 equ 23h
digi2 equ 24h
digi3 equ 25h
digi4 equ 26h
Paso equ 27h
z
equ 02h

;rige Numeracion hexadecimal


;Suprime error de bancos
;contador de programa
;registro de estados y bits de control
;puertos
;configuracion puerto a
;configuracion puerto b

;flag de cero

;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>


ORG
00h
GOTO INICIO

;Direccion del Vector de RESET


;Comienza el programa

ORG

;detras del Vector Interrupcion

05h

T_Conv ADDWF PCL,1


RETLW '0'
RETLW '1'

;Tecla n0 = 0
;Tecla n1 = 1

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW

'4'
'7'
'*'
'2'
'5'
'8'
'0'
'3'
'6'
'9'
'#'

;Tecla n2 = 4
;Tecla n3 = 7
;Tecla n4 = A
;Tecla n5 = 2
;Tecla n6 = 5
;Tecla n7 = 8
;Tecla n8 = 0
;Tecla n9 = 3
;Tecla n10 = 6
;Tecla n11 = 9
;Tecla n12 = B

retardo movlw .255


movwf cta2
decre decfsz cta2,1
goto decre
decrex decfsz cta1,1
goto retardo
retlw 0
EscDato bsf STATUS,RP0
bsf EECON1,WREN
movlw 55h
movwf EECON2
movlw 0AAh
movwf EECON2
bsf EECON1,WR
nop
BuEscDa btfsc EECON1,WR
goto BuEscDa
bcf STATUS,RP0
return
LeeDato movwf EEADR
bsf
STATUS,5
bsf
EECON1,RD
nop
bcf
STATUS,RP0
movfw EEDATA
Movwf Tecla
return

;Direccion en EEADR,dato en EEDATA.

; Se la paso al registro de direcciones de la EEPROM


;EEADR posee la direccin a leer

KB_Scan ;Escanea el teclado


CLRF Tecla
;Borra Tecla y
INCF Tecla,1
;prepara Tecla para primer cdigo.
MOVLW .127
;Saca 0 a la primera fila
MOVWF PORTB
;de la Puerta B
NOP
;Nada para estabilizacin de seal.
Cheq_Col
Nop
Nop
Nop
BTFSS PORTB,4
GOTO antirebotes
INCF Tecla,1
BTFSS PORTB,3

;Primera columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa tecla.
;Segunda columna = 0

GOTO
INCF
BTFSS
GOTO
INCF
BTFSS
GOTO
INCF

antirebotes
Tecla,1
PORTB,2
antirebotes
Tecla,1
PORTB,1
antirebotes
Tecla,1

Ultima_Tecla
MOVLW d'13'
SUBWF Tecla,0
BTFSC STATUS,2
GOTO NTeclas
BSF STATUS,0
RRF PORTB,1
GOTO Cheq_Col
NTeclas
Movlw 'Z'
MOVWF Tecla
RETURN

;Sale si se ha pulsado tecla.


;Si no tecla pulsada, incrementa tecla.
;Tercera columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa tecla.
;Cuarta columna = 0
;Sale si se ha pulsado tecla.
;Si no tecla pulsada, incrementa Tecla.
;comprueba si se a escaneado todo el teclado
;Carga W con el nmero de Teclas + 1.
;y lo compara con el valor actual de Tecla.
;Si Tecla + 1 = valor actual.
;No ha sido pulsada ninguna tecla.
;Pone a 1 Bit C.
;as la Fila 1 pasa a 1 con la rotacin a derecha.
;Coloca variable Tecla a 0
;y regresa.

antirebotes

;ahora se espera a que la tecla sea soltada para evitar rebotes


;y reactivaciones de tecla
;esta parte puede ser eliminada si para nuestro proyecto no es necesaria
;o es un inconveniente.
Espera1
BTFSS PORTB,4
;Si no se suelta la tecla FILA 1
GOTO Espera1
;vuelve a esperar.
Espera2
BTFSS PORTB,3
;Si no se suelta la tecla FILA 2
GOTO Espera2
;vuelve a esperar.
Espera3 BTFSS PORTB,2
;Si no se suelta la tecla FILA 3
GOTO Espera3
;vuelve a esperar.
Espera4
BTFSS PORTB,1
;Si no se suelta la tecla FILA 4
GOTO Espera4
;vuelve a esperar.
MOVfw Tecla
CALL T_Conv
MOVWF Tecla

;pone en w el numero contenido en la variable


;llama a la tabla de conversion y retorna
;con el valor en hexadecimal y lo pone en la variable.

RETURN
INICIO
bsf
status, 5
;selecciona el banco de memoria 1
movlw 00h
;ra3 intrada ,configura el puerto a
movwf trisa
;bit 3 entrada, demas bits salidas.
movlw 1eh
;configura el puerto b
movwf trisb
;como salidas
bcf
opt_reg,7
;activamos resistencias PULL UP
bcf
status, 5
;selecciona el banco de memoria 0
clrf ptoa
clrf ptob
;------------------------Senal de buen inicio
bsf
ptoa,0
movlw .150
movwf cta1
call retardo
bcf
ptoa,0

movlw .50
movwf cta1
call retardo
bsf
ptoa,0
movlw .150
movwf cta1
call retardo
;---------movlw 00h
movwf EEADR
movlw '0'
movwf EEDATA
Call EscDato
movlw 01h
movwf EEADR
movlw '2'
movwf EEDATA
Call EscDato
movlw 02h
movwf EEADR
movlw '1'
movwf EEDATA
Call EscDato
movlw 03h
movwf EEADR
movlw '3'
movwf EEDATA
Call EscDato
;---------ciclo clrf digi1
clrf digi2
clrf digi3
clrf digi4
clrf Paso
bsf
ptoa,0
ciclox1 call KB_Scan
movlw 'Z'
xorwf Tecla,0
btfsc status, z
Goto ciclox1

;Comparar si hubo tecla pulsada


;comparo, si son iguales status,z =1 si no, z=0
;si es cero, no es igual, z =1 si no, z=0
;nueva clave

movlw '*'
xorwf Tecla,0
btfsc status, z
Goto NueCla

;preguntar si es nueva clave


;comparo, si son iguales status,z =1 si no, z=0
;si es cero, no es igual, z =1 si no, z=0
;nueva clave

movlw '#'

;verificar clave

xorwf Tecla,0
btfsc status, z
Goto Confir1

;comparo, si son iguales status,z =1 si no, z=0


;si es cero, no es igual, z =1 si no, z=0
;va a comparar

;almacenar la tecla digitada.


movlw 00h
xorwf Paso,0
btfss status, z
Goto verel2

;ver para almacenar el digito 1


;comparo, si son iguales status,z =1 si no, z=0
;si es cero, no es igual, z =1 si no, z=0
;va a comparar

movfw Tecla
movwf digi1
incf Paso,1
goto ciclox1
verel2 movlw 01h
xorwf Paso,0
btfss status, z
Goto verel3

;ver para almacenar el digito 2


;comparo, si son iguales status,z =1 si no, z=0
;si es cero, no es igual, z =1 si no, z=0
;va a comparar

movfw Tecla
movwf digi2
incf Paso,1
goto ciclox1
verel3 movlw 02h
xorwf Paso,0
btfss status, z
Goto verel4

;ver para almacenar el digito 3


;comparo, si son iguales status,z =1 si no, z=0
;si es cero, no es igual, z =1 si no, z=0
;va a comparar

movfw Tecla
movwf digi3
incf Paso,1
goto ciclox1
verel4 movlw 03h
xorwf Paso,0
btfss status, z
Goto verel4

;ver para almacenar el digito 3


;comparo, si son iguales status,z =1 si no, z=0
;si es cero, no es igual, z =1 si no, z=0
;va a comparar

movfw Tecla
movwf digi4
goto ciclox1
Confir1 movlw 00h
Call LeeDato
Movfw Tecla
xorwf digi1,0
btfss status, z
goto ledrojo

;comparo, si son iguales status,z =1 si no, z=0


;si es cero, no es igual, z =1 si no, z=0

movlw 01h
Call LeeDato
Movfw Tecla
xorwf digi2,0
btfss status, z
goto ledrojo

;comparo, si son iguales status,z =1 si no, z=0


;si es cero, no es igual, z =1 si no, z=0

movlw 02h
Call LeeDato
Movfw Tecla
xorwf digi3,0
btfss status, z
goto ledrojo
movlw 03h
Call LeeDato
xorwf digi4,0
btfss status, z
goto ledrojo
goto ledverde
NueCla
movlw 00h
movwf EEADR
movfw digi1
movwf EEDATA
Call EscDato
movlw 01h
movwf EEADR
movfw digi2
movwf EEDATA
Call EscDato
movlw 02h
movwf EEADR
movfw digi3
movwf EEDATA
Call EscDato
movlw 03h
movwf EEADR
movfw digi4
movwf EEDATA
Call EscDato
goto ledverde
ledrojo bcf
ptoa,0
bsf
ptoa,2
movlw .250

;comparo, si son iguales status,z =1 si no, z=0


;si es cero, no es igual, z =1 si no, z=0

;comparo, si son iguales status,z =1 si no, z=0


;si es cero, no es igual, z =1 si no, z=0

movwf cta1
call retardo
movlw .250
movwf cta1
call retardo
bsf
bcf

ptoa,0
ptoa,2

Goto

ciclo

ledverde
bcf
bsf

ptoa,0
ptoa,1

movlw .250
movwf cta1
call retardo
movlw .250
movwf cta1
call retardo
bsf
bcf

ptoa,0
ptoa,1

Goto

ciclo

end

Vous aimerez peut-être aussi