You are on page 1of 13

55

Direccionamiento Indirecto y Teclado Matricial

PRCTICA 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


decodificacin.

Aplicar el direccionamiento indirecto al programa de decodificacin de un teclado


matricial

INTRODUCCION
En la programacin de los microcontroladores PIC de la gama media la mayora de las
instrucciones emplean direccionamiento directo, pero tambin 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 fsico). El registro FSR se emplea para sealar o apuntar a
una direccin cuyo contenido despus puede ser ledo escrito de forma indirecta
empleando cualquier instruccin que use como operando al registro INDF.
Internamente, a diferencia del direccionamiento directo, la direccin 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 versin
v7.40 o superior y el WinPic800 v3.55 g.
Cantidad
1
1
1
81
4
8
1
1

Descripcin
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 alimentacin de CD

Pre-reporte:

Leer previamente toda la prctica

Descargar MPLAB v7.40 o superior y el WinPic800 v3.55 g de la pgina del curso


y llevarlos el da de la sesin.

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 nmeros almacenados
; a partir de la direccin 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

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 nmeros
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
GPRs. 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 instruccin decfsz LONG (Para


insertar un punto de ruptura, dar doble click con el ratn posicionado en la instruccin,
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 botn
, a continuacin ejecute la simulacin del
. Escriba el valor que tienen las siguientes variables
programa con el botn RUN
cuando la simulacin se detiene al llegar al punto de ruptura.

SUMAH ________

LONG __________ SUMAL _________ FSR ____________

5. Reanude la simulacin 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 ejecucin.

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


nmeros que se pueden sumar?
________________________________________________________________________
________________________________________________________________________

II. Teclado matricial


Es un dispositivo de 16 teclas configurado con una matriz filas-columnas (figura 5.3) con
la intencin de reducir el nmero de lneas de entradas y salidas necesarias para
controlarlo con el microcontrolador. En un teclado no matricial cada tecla necesita una
lnea de entrada, con lo cual representa una cantidad mayor de lneas 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 lgico (ya sea 1 0) en cada una de las lneas
configuradas como salidas (filas en este caso) e inmediatamente despus leer el estado
lgico de las lneas conectadas como entrada (columnas).
Cuando el valor lgico 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: Conexin (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 direccin

; Subrutina que inicializa la tabla con los valores


; que se deben enviar al puerto A, Para desplegar
; el nmero 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 excepcin 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 ctodo comn
; Parmetro 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 oscilacin 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 programacin del microcontrolador verifique los siguientes parmetros como se


muestran en la ventana de la figura 5.4.

Figura 5.4: Bits de configuracin 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 (apyese en
los comentarios que tiene el programa).

Tabla 5.3. Subrutinas y su respectiva funcin para el manejo del teclado matricial.

Subrutinas

Eduardo Romero A.

Funcin

Laboratorio de Sistemas Digitales III

65

Direccionamiento Indirecto y Teclado Matricial

12. Inserte un punto de ruptura (BREAK-POINT) en la instruccin call CONF_FUERTOS


(Para insertar un punto de ruptura, dar doble click con el ratn posicionado en la
instruccin, para borrarlo dar doble click de nuevo).
13. Ver el contenido de los GPRs 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 travs del men Debugger >> Clear Memory >>
GPRs.
15. Simule un RESET al microcontrolador, con el botn
simulacin del programa con el botn RUN
.

, a continuacin ejecute la

16. Observe que cuando la simulacin llega al punto de ruptura se detiene.


17. En las ventanas que muestran el contenido de los GPRs y SFRs 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 instruccin addwf PCL, f,
Cul es su funcin 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 cdigo cada una rotuladas con las
etiquetas F0, F1, F2, y F3. Cul es la funcin que realizan?
________________________________________________________________________
________________________________________________________________________

22. Analice la subrutina DECODIFICA con la ayuda del simulador. Explique Cmo se
realiza la decodificacin de la tecla pulsada?
________________________________________________________________________
________________________________________________________________________

23. Descargue su programa al microcontrolador e implemente el circuito. Verifique su


funcionamiento.

24. Analice la conexin del puerto A con el display. Por qu no se utiliz la terminal
RA5/MCLR?
________________________________________________________________________
________________________________________________________________________

25. Por qu la conexin en RA4/TOCK1/CMP2 es diferente a las dems?


________________________________________________________________________
________________________________________________________________________

26. Vuelva comentario la lnea de cdigo call RETARDO, ensamble y reprograme el PIC
nuevamente y experimente. Funciona bien el teclado?
________________________________________________________________________

Explique porqu es necesaria esa lnea de cdigo?


________________________________________________________________________
________________________________________________________________________

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

You might also like