TECLADO MATRICIAL 4X4

Anuncio
55
Direccionamiento Indirecto y Teclado Matricial
PRÁCTICA 5
DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIAL
OBJETIVO:
‰
Identificar la forma de operar del modo de direccionamiento indirecto.
‰
Analizar el funcionamiento del un teclado matricial y sus algoritmos de
decodificación.
‰
Aplicar el direccionamiento indirecto al programa de decodificación de un teclado
matricial
INTRODUCCION
En la programación de los microcontroladores PIC de la gama media la mayoría de las
instrucciones emplean direccionamiento directo, pero también es posible que operen en
un modo de direccionamiento indirecto.
Para el direccionamiento indirecto se emplean dos registros especiales: el FSR y el INDF
(éste último no es un registro físico). El registro FSR se emplea para “señalar o apuntar” a
una dirección cuyo contenido después puede ser leído ó escrito de forma indirecta
empleando cualquier instrucción que use como operando al registro INDF.
Internamente, a diferencia del direccionamiento directo, la dirección eficaz de 9 bits en un
direccionamiento indirecto se obtiene concatenando los 8 bits del registro FSR con el bit
IRP de registro STATUS (figura 5.1).
Figura 5.1: Direccionamiento directo vs. direccionamiento indirecto.
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
56
Direccionamiento Indirecto y Teclado Matricial
De tal forma, que esta forma de direccionamiento es particularmente útil cuando se
manejan tablas o arreglos de datos.
MATERIAL Y EQUIPO EMPLEADO
Laboratorio equipado con computadoras que tengan instalado el MPLAB versión
v7.40 o superior y el WinPic800 v3.55 g.
Cantidad
1
1
1
8ó1
4
8
1
1
Descripción
Programador compatible con WinPic800.
Microcontrolador PIC16F628
Teclado Matricial 4x4
Leds o barra de leds
Resistencia de 330 Ω
Resistencia de 4.7 kΩ
Tableta experimental
Fuente de alimentación de CD
Pre-reporte:
‰
Leer previamente toda la práctica
‰
Descargar MPLAB v7.40 o superior y el WinPic800 v3.55 g de la página del curso
y llevarlos el día de la sesión.
‰
Llevar implementado en un protoboard el circuito de la figura 5.5
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”.
; Programa que realiza la suma de 10 números almacenados
; a partir de la dirección 23h de la memoria de datos
LIST
RADIX
include
P=16F628A
HEX
"p16F628a.inc"
cblock
20h
SUMAH
SUMAL
LONG
endc
TABLA
org
res
Eduardo Romero A.
23h
.20
Laboratorio de Sistemas Digitales III
57
Direccionamiento Indirecto y Teclado Matricial
org
goto
0
INICIO
org
5
clrf
clrf
movlw
movwf
movlw
movwf
SUMAH
SUMAL
.10
LONG
TABLA
FSR
;
;
;
;
;
movf
addwf
movwf
btfsc
incf
incf
decfsz
goto
goto
SUMAL,w
INDF,w
SUMAL
STATUS,C
SUMAH,f
FSR,f
LONG
OTRO_NUM
$
; w <-- SUMAL
; w <-- SUMAL+(INDF)
INICIO
Suma total parte alta = 00h
Suma total parte baja = 00h
Cantidad de números
a sumar = 10
Coloca apuntador
; al inicio de la tabla
OTRO_NUM:
;
;
;
;
;
;
Hubo acarreo?
SI, SUMAH ++
Apunta al sig. elemento de la tabla
Es el último elemento?
No, continua sumando
Si, termina
END
2. Elabore el diagrama de flujo correspondiente al programa.
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.
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
58
Direccionamiento Indirecto y Teclado Matricial
3. Inserte un punto de ruptura (BREAK-POINT) en la instrucción decfsz LONG (Para
insertar un punto de ruptura, dar doble “click” con el ratón posicionado en la instrucción,
para borrarlo dar doble “click” nuevamente).
4. Active el simulador MPLAB SIM en Debugger>>Select tool>>MPLAB SIM y simule un
RESET al microcontrolador, con el botón
, a continuación ejecute la simulación del
. Escriba el valor que tienen las siguientes variables
programa con el botón RUN
cuando la simulación se detiene al llegar al punto de ruptura.
SUMAH ________
LONG __________ SUMAL _________ FSR ____________
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.
Tabla 5.1: Valor de las variables del programa durante su ejecución.
SUMAH
SUMAL
FSR
LONG
Pasada 1
Pasada 2
Pasada 3
Pasada 4
Pasada 5
Pasada 6
Pasada 7
Pasada 8
Pasada 9
Pasada 10
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).
SUMAH
SUMAL
FSR
LONG
Pasada 1
Pasada 2
Pasada 3
Pasada 4
Pasada 5
Pasada 6
Pasada 7
Pasada 8
Pasada 9
Pasada 10
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
59
Direccionamiento Indirecto y Teclado Matricial
7. Analice el programa y explique ¿De qué forma se puede incrementar la cantidad de
números que se pueden sumar?
________________________________________________________________________
________________________________________________________________________
II. Teclado matricial
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).
Cuando el valor lógico que se rota es un 1 al algoritmo se le denomina walking ones y
walking zeros cuando se trata de un 0.
Figura 5.3: Conexión (parcial) del teclado matricial con el PIC16F628.
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
60
Direccionamiento Indirecto y Teclado Matricial
8. Edite el siguiente programa con MPLAB y cree el proyecto de la forma acostumbrada.
Ensamble y depure hasta que no existan errores o warnings.
; Programa que decodifica un teclado matricial de 16 teclas y entrega el
; resultado en un display de 7 segmentos conectado en puerto A.
LIST
RADIX
p=16F628
HEX
w
f
EQU
EQU
0
1
INDF
TMR_OPT
PCL
ESTADO
FSR
PORTA
PORTB
CMCON
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0x00
0X01
0x02
0x03
0x04
0x05
0x06
0x1F
TEMP1
TEMP2
CONTADOR
EQU
EQU
EQU
30h
31h
32h
; Variables para la tabla
cblock
20h
CERO
UNO
DOS
TRES
CUATRO
CINCO
SEIS
SIETE
OCHO
NUEVE
L_A
L_B
L_C
L_D
L_E
L_F
Endc
ORG
goto
0
INICIO
;Inicio del programa en dirección
; Subrutina que inicializa la tabla con los valores
; que se deben enviar al puerto A, Para desplegar
; el número correspondiente a la tecla presionada
CONF_TABLA
movlw
movwf
20h
FSR
movlw
0xDE
; CERO
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
Direccionamiento Indirecto y Teclado Matricial
movwf
incf
INDF
FSR,f
movlw
movwf
incf
0x50
INDF
FSR,f
movlw
movwf
incf
0xCD
INDF
FSR,f
movlw
movwf
incf
0xD9
INDF
FSR,f
movlw
movwf
incf
0x53
INDF
FSR,f
movlw
movwf
incf
0x9B
INDF
FSR,f
movlw
movwf
incf
0x9F
INDF
FSR,f
movlw
movwf
incf
0xD0
INDF
FSR,f
movlw
movwf
incf
0xDF
INDF
FSR,f
movlw
movwf
incf
0xD3
INDF
FSR,f
movlw
movwf
incf
0xD7
INDF
FSR,f
movlw
movwf
incf
0x1F
INDF
FSR,f
movlw
movwf
incf
0x8E
INDF
FSR,f
movlw
movwf
incf
0x5D
INDF
FSR,f
movlw
movwf
0x8F
INDF
61
; UNO
; DOS
; TRES
; CUATRO
; CINCO
; SEIS
; SIETE
; OCHO
; NUEVE
; L_A
; L_B
; L_C
; L_D
; L_E
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
62
Direccionamiento Indirecto y Teclado Matricial
incf
FSR,f
movlw
movwf
incf
return
0x87
INDF
FSR,f
; L_F
CONF_PUERTOS
movlw
movwf
bsf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
return
b'00000111'
CMCON
ESTADO,5
b'11110000'
PORTB
b'00100000'
PORTA
ESTADO,5
PORTB
PORTA
; Subrutina que rota a la izquierda
ROTA_LED
movf
CONTADOR,w
addwf
PCL,f
goto
F0
goto
F1
goto
F2
goto
F3
F3
movlw
movwf
movlw
movwf
return
01h
PORTB
20h
FSR
F2
movlw
movwf
movlw
movwf
return
02h
PORTB
24h
FSR
F1
movlw
movwf
movlw
movwf
return
04h
PORTB
28h
FSR
F0
movlw
movwf
movlw
movwf
return
08h
PORTB
2Ch
FSR
;
;
;
;
;
;
;
;
;
;
comparadores apagados
hablilita pins de I/O
conmuta a banco 1
Config. nibble_alto de PORTB
y nible bajo como salida
Configura el Puerto A como salida
a excepción de RA5 (salida fija)
conmuta a banco 0
Puerto B = 00h
Puerto A = 00h
la parte baja del Puerto B
; Subrutina que decodifica la tecla presiona y manda a escribir en el
; display de 7 segmentos de cátodo común
; Parámetro de entrada: variable TECLA
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
63
Direccionamiento Indirecto y Teclado Matricial
DECODIFICA
swapf
andlw
movwf
btfss
goto
movlw
goto
PORTB,w
0Fh
TEMP1
TEMP1,0
SIGUE0
00h
APUNTA
SIGUE0
btfss
goto
movlw
goto
TEMP1,1
SIGUE1
01h
APUNTA
SIGUE1
btfss
goto
movlw
goto
TEMP1,2
SIGUE2
02h
APUNTA
SIGUE2
btfss
return
movlw
TEMP1,3
APUNTA
addwf
movf
movwf
return
03h
FSR,f
INDF,w
PORTA
; Rutina de retardo de 1 ms a una frecuencia
; de oscilación de 4 MHZ en el reloj interno
RETARDO
nop
; 1 ciclo
movlw
.249
; 1 ciclo
movwf
TEMP2
; 1 ciclo
CICLO
nop
; K ciclos
decfsz
TEMP2,f
; (K-1)+2 ciclos
goto
CICLO
; 2(K-1) ciclos
return
; 2
; Programa principal
INICIO
call
call
AKI
movlw
movwf
CONF_TABLA
CONF_PUERTOS
0xFF
CONTADOR
OTRA_TECLA
incf
btfsc
goto
call
call
call
goto
CONTADOR,f
CONTADOR,2
AKI
ROTA_LED
RETARDO
DECODIFICA
OTRA_TECLA
END
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
64
Direccionamiento Indirecto y Teclado Matricial
9. Para la programación del microcontrolador verifique los siguientes parámetros como se
muestran en la ventana de la figura 5.4.
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
Eduardo Romero A.
Función
Laboratorio de Sistemas Digitales III
65
Direccionamiento Indirecto y Teclado Matricial
12. Inserte un punto de ruptura (BREAK-POINT) en la instrucción call CONF_FUERTOS
(Para insertar un punto de ruptura, dar doble “click” con el ratón posicionado en la
instrucción, para borrarlo dar doble “click” de nuevo).
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.
15. Simule un RESET al microcontrolador, con el botón
simulación del programa con el botón RUN
.
, a continuación ejecute la
16. Observe que cuando la simulación llega al punto de ruptura se detiene.
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?
________________________________________________________________________
________________________________________________________________________
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
66
Direccionamiento Indirecto y Teclado Matricial
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?
________________________________________________________________________
________________________________________________________________________
23. Descargue su programa al microcontrolador e implemente el circuito. Verifique su
funcionamiento.
24. Analice la conexión del puerto A con el display. ¿Por qué no se utilizó la terminal
RA5/MCLR?
________________________________________________________________________
________________________________________________________________________
25. ¿Por qué la conexión en RA4/TOCK1/CMP2 es diferente a las demás?
________________________________________________________________________
________________________________________________________________________
26. Vuelva comentario la línea de código call RETARDO, ensamble y reprograme el PIC
nuevamente y experimente. ¿Funciona bien el teclado?
________________________________________________________________________
Explique ¿porqué es necesaria esa línea de código?
________________________________________________________________________
________________________________________________________________________
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
67
Direccionamiento Indirecto y Teclado Matricial
Figura 5.5: Circuito principal del teclado matricial.
Eduardo Romero A.
Laboratorio de Sistemas Digitales III
Descargar