Professional Documents
Culture Documents
PRCTICA 5
DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIAL
OBJETIVO:
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).
Eduardo Romero A.
56
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:
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
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
Figura 5.2: Ventana que muestra el contenido de las direcciones 23h a 2Ch.
Eduardo Romero A.
58
SUMAH ________
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.
59
Eduardo Romero A.
60
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
0
INICIO
20h
FSR
movlw
0xDE
; CERO
Eduardo Romero A.
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.
62
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
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
63
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
; 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.
64
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
65
, a continuacin ejecute la
18. Ahora simule paso a paso la subrutina CONF_PUERTOS. Explique brevemente que
es lo que hace.
________________________________________________________________________
________________________________________________________________________
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.
66
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?
________________________________________________________________________
________________________________________________________________________
24. Analice la conexin del puerto A con el display. Por qu no se utiliz la terminal
RA5/MCLR?
________________________________________________________________________
________________________________________________________________________
26. Vuelva comentario la lnea de cdigo call RETARDO, ensamble y reprograme el PIC
nuevamente y experimente. Funciona bien el teclado?
________________________________________________________________________
Eduardo Romero A.
67
Eduardo Romero A.