Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Teclado Matricial 5x5
Teclado Matricial 5x5
PRÁCTICA 5
OBJETIVO:
INTRODUCCION
Cantidad Descripción
1 Programador compatible con WinPic800.
1 Microcontrolador PIC16F628
1 Teclado Matricial 4x4
8ó1 Leds o barra de leds
4 Resistencia de 330
8 Resistencia de 4.7 k
1 Tableta experimental
1 Fuente de alimentación de CD
Pre-reporte:
DESARROLLO
I. Direccionamiento indirecto
1.- Edite el siguiente programa con MPLAB y cree el proyecto de la forma acostumbrada.
Ensamble y depure hasta que no existan errores o “warnings”.
LIST P=16F628A
RADIX HEX
include "p16F628a.inc"
cblock 20h
SUMAH
SUMAL
LONG
endc
org 23h
TABLA res .20
org 0
goto INICIO
org 5
INICIO
clrf SUMAH ; Suma total parte alta = 00h
clrf SUMAL ; Suma total parte baja = 00h
movlw .10 ; Cantidad de números
movwf LONG ; a sumar = 10
movlw TABLA ; Coloca apuntador
movwf FSR ; al inicio de la tabla
OTRO_NUM:
movf SUMAL,w ; w <-- SUMAL
addwf INDF,w ; w <-- SUMAL+(INDF)
movwf SUMAL
btfsc STATUS,C ; Hubo acarreo?
incf SUMAH,f ; SI, SUMAH ++
incf FSR,f ; Apunta al sig. elemento de la tabla
decfsz LONG ; Es el último elemento?
goto OTRO_NUM ; No, continua sumando
goto $ ; Si, termina
END
3. Proceda a inicializar la tabla con los valores a sumar, con el menú view>> 4 file
registers, lo cual desplegará una ventana donde se puede modificar el contenido de los
GPR’s. En nuestro caso vamos a introducir FFh en el contenido de las direcciones de
memoria de la 23h a la 2Ch, tal como lo muestra la figura 5.2
Figura 5.2: Ventana que muestra el contenido de las direcciones 23h a 2Ch.
5. Reanude la simulación y vuelva anotar el contenido de los registros. Repita este paso
hasta que el programa finalice. Englobe sus resultados en la tabla 6.1.
6. Modifique el contenido de la tabla para que contenga FFh en todas sus localidades.
Elabore una tabla similar a la anterior.
Tabla 5.2: Valor de las variables del programa (con la tabla llena de FFh).
Es un dispositivo de 16 teclas configurado con una matriz filas-columnas (figura 5.3) con
la intención de reducir el número de líneas de entradas y salidas necesarias para
controlarlo con el microcontrolador. En un teclado no matricial cada tecla necesita una
línea de entrada, con lo cual representa una cantidad mayor de líneas de I/O del MCU.
Para controlar el teclado, los puertos del MCU correspondientes a las filas se programan
como salidas y los conectados a las columnas del teclado se programan como entradas.
De tal forma que el objetivo principal del algoritmo para decodificar el teclado consiste en
determinar la fila y columna que corresponde a la tecla que se presionó.
Lo anterior se logra rotando un valor lógico (ya sea 1 ó 0) en cada una de las líneas
configuradas como salidas (filas en este caso) e inmediatamente después leer el estado
lógico de las líneas conectadas como entrada (columnas).
LIST p=16F628
RADIX HEX
w EQU 0
f EQU 1
CONF_TABLA
movlw 20h
movwf FSR
; CERO
movlw 0xDE
movwf INDF
incf FSR,f
; UNO
movlw 0x50
movwf INDF
incf FSR,f
; DOS
movlw 0xCD
movwf INDF
incf FSR,f
; TRES
movlw 0xD9
movwf INDF
incf FSR,f
; CUATRO
movlw 0x53
movwf INDF
incf FSR,f
; CINCO
movlw 0x9B
movwf INDF
incf FSR,f
; SEIS
movlw 0x9F
movwf INDF
incf FSR,f
; SIETE
movlw 0xD0
movwf INDF
incf FSR,f
; OCHO
movlw 0xDF
movwf INDF
incf FSR,f
; NUEVE
movlw 0xD3
movwf INDF
incf FSR,f
; L_A
movlw 0xD7
movwf INDF
incf FSR,f
; L_B
movlw 0x1F
movwf INDF
incf FSR,f
; L_C
movlw 0x8E
movwf INDF
incf FSR,f
; L_D
movlw 0x5D
movwf INDF
incf FSR,f
; L_E
movlw 0x8F
movwf INDF
incf FSR,f
; L_F
movlw 0x87
movwf INDF
incf FSR,f
return
CONF_PUERTOS
movlw b'00000111' ; comparadores apagados
movwf CMCON ; hablilita pins de I/O
bsf ESTADO,5 ; conmuta a banco 1
movlw b'11110000' ; Config. nibble_alto de PORTB
movwf PORTB ; y nible bajo como salida
movlw b'00100000' ; Configura el Puerto A como salida
movwf PORTA ; a excepción de RA5 (salida fija)
bcf ESTADO,5 ; conmuta a banco 0
clrf PORTB ; Puerto B = 00h
clrf PORTA ; Puerto A = 00h
return
F3 movlw 01h
movwf PORTB
movlw 20h
movwf FSR
return
F2 movlw 02h
movwf PORTB
movlw 24h
movwf FSR
return
F1 movlw 04h
movwf PORTB
movlw 28h
movwf FSR
return
F0 movlw 08h
movwf PORTB
movlw 2Ch
movwf FSR
return
DECODIFICA
swapf PORTB,w
andlw 0Fh
movwf TEMP1
btfss TEMP1,0
goto SIGUE0
movlw 00h
goto APUNTA
; Programa principal
INICIO call CONF_TABLA
call CONF_PUERTOS
AKI movlw 0xFF
movwf CONTADOR
OTRA_TECLA
incf CONTADOR,f
btfsc CONTADOR,2
goto AKI
call ROTA_LED
call RETARDO
call DECODIFICA
goto OTRA_TECLA
END
Figura 5.4: Bits de configuración para programar al PIC para el ejemplo del teclado matricial.
10. Visualice el listado del programa y escriba el nombre de todas las variables que se
emplean en él.
11. Identifique las subrutinas y escriba que es lo que hace cada una de ellas (apóyese en
los comentarios que tiene el programa).
Tabla 5.3. Subrutinas y su respectiva función para el manejo del teclado matricial.
Subrutinas Función
13. Ver el contenido de los GPR’s con el menú View>> 4 file registers. Con View >>
Special Function Register, se abre la ventana que nos permite ver los SFR.
14. Borre el contenido de los GPR a través del menú Debugger >> Clear Memory >>
GPR’s.
17. En las ventanas que muestran el contenido de los GPR’s y SFR’s se puede notar que
el simulador nos indica con color rojo los registros que han cambiado. Anote el valor que
tienen ahora las variables.
18. Ahora simule paso a paso la subrutina CONF_PUERTOS. Explique brevemente que
es lo que hace.
19. Continué ejecutando el programa hasta que llegar a la subrutina ROTA_LED. ¿Qué
valor tiene la variable CONTADOR?
20. Ejecute paso a paso la subrutina ROTA_LED hasta la instrucción addwf PCL, f,
¿Cuál es su función dentro del programa?
21. En la rutina ROTA_LED hay 4 secciones de código cada una rotuladas con las
etiquetas F0, F1, F2, y F3. ¿Cuál es la función que realizan?
22. Analice la subrutina DECODIFICA con la ayuda del simulador. Explique ¿Cómo se
realiza la decodificación de la tecla pulsada?
24. Analice la conexión del puerto A con el display. ¿Por qué no se utilizó la terminal
RA5/MCLR?
26. Vuelva comentario la línea de código call RETARDO, ensamble y reprograme el PIC
nuevamente y experimente. ¿Funciona bien el teclado?