Publicado el 1 de Abril del 2019
966 visualizaciones desde el 1 de Abril del 2019
291,1 KB
10 paginas
Creado hace 18a (09/03/2007)
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
SISTEMAS ELECTRÓNICOS Y AUTOMÁTICOS
PRACTICAS DE MICROCONTROLADORES PIC
PRÁCTICA 2:
Programas básicos.
Tipos de
direccionamiento.
• Tipos de direccionamiento
• Ejemplos y ejercicios
- 1 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
1. Objetivos
Introducir al alumno en la programación en ensamblador
-
- Conocer los tipos de direccionamiento en los PICs
- Simular el funcionamiento de programas-ejemplo.
2. Tipos de direccionamiento de la memoria de datos
Para direccionar
direccionamiento: Inmediato, Directo e Indirecto.
2.1. Direccionamiento Inmediato
Es aquel en el que el dato manipulado por la instrucción se codifica junto con
ella. En este caso el dato se denomina literal. Por ejemplo, la instrucción:
la memoria de datos se emplean 3 modos de
coloca el literal K en el registro de trabajo W. El literal utilizado puede ser
cualquier valor de 8 bits y la base en la que se exprese es opcional1.
2.2. Direccionamiento Directo
Es el modo más utilizado (acceso a la memoria de datos). Consiste en codificar
el nombre del o los registros en cuestión directamente en la instrucción. Por
ejemplo, la instrucción:
MOVLW K
MOVWF f
desplaza el contenido de W al registro f. El registro f se referencia mediante su
número codificado en 5 o 7 bits. Este “número” es en realidad la dirección del
byte de la RAM correspondiente. Antes hay que colocarse en el banco
adecuado. En el direccionamiento Directo los 7 bits de menos peso del código
OP de la instrucción proporcionan la dirección en la posición o dirección dentro
del banco, mientras que los bits RP1 y RP0 del registro de estado (STATUS)
seleccionan el banco.
1 La especificación de la base en la que se expresan los datos u operandos es
opcional: d’65’, b’01000001’,0x41, o’101’ y ‘A’ son el mismo dato. El sufijo d o D
se emplea para expresar un valor en decimal. El sufijo b o B expresa un valor
en binario. Para expresar un valor en hexadecimal se emplea el sufijo 0x ó 0X.
Un número en base octal se representa mediante el sufijo o ó O. Finalmente,
un valor se puede expresar mediante un caracter ASCII si se encierra entre
comillas simples como ‘A’.
- 2 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
2.3. Direccionamiento Indirecto
El direccionamiento Indirecto es el más potente. Emplea los registros INDF
(posición 00h de la memoria de datos) y el registro FSR (File Select Register,
posición 04h de la memoria de datos) o registro de selección de registro, en el
que se introduce el número de registro seleccionado.
La idea del direccionamiento Indirecto es que la dirección de memoria del
registro al que se quiere acceder se introduce en el registro FSR. Los 7 bits de
menos peso de FSR seleccionan la posición y el bit de más peso, junto con el
bit IRP del registro STATUS, selecciona el banco. En el PIC16F84 el IRP debe
mantenerse a 0.
Cuando se quiera operar sobre el registro cuya dirección de memoria está
almacenada en FSR, se usará en registro INDF. Por ejemplo:
MOVWF INDF
INDF no está implementado físicamente, por lo que no se accederá realmente
a él. Si en cualquier instrucción se opera con este registro, en realidad se
estará operando con la dirección a la que apunte el contenido de FSR.
El direccionamiento indirecto nos permite crear rutinas generales que no usen
registros específicos. Las direcciones de dichos registros se asignarán antes de
entrar en la rutina.
Lo único extraño es el modo de notación MOVWF INDF. Esta instrucción
desplaza el contenido del registro de trabajo W al registro apuntado por FSR.
Ya se ha indicado que ha de introducirse en FSR el número del registro
direccionado, que será empleado como puntero. Este modo de direccioamento
permite acceder a 256 direcciones.
- 3 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
Figura 1. Direccionamiento directo.
Figura 2. Direccionamiento indirecto.
- 4 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
Figura 3. Direccionamiento indirecto en el PIC16F84A.
- 5 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
;Tipo de procesador
"P16F84.INC"
;Definiciones de registros
;EJEMPLO 1
;Vector de Reset
org
0x00
goto Inicio
org
0x05
List p=16F84
include
;Variable para el resultado
equ 0x10
equ 0x11
0x12
;Salva el vector de interrupción
;Variable del dato A
;Variable del dato B
3. Ejercicios
3.1. Ejercicio:
Cread un proyecto y simulad el funcionamiento del siguiente programa que
compara dos números A y B. Si A=B, el resultado es 0. Si A > B, el resultado es
A-B. Si A < B el resultado es A+B. Hay que destacar que, al no haber
instrucciones de comparación, ésta se realiza mediante restas.
;internos
Dato_A
Dato_B
Resultado equ
Inicio
A_menor_B movf Dato_A,W
addwf Dato_B,W
movwf Resultado ;Guarda el resultado
goto Stop
A_mayor_B movwf Resultado ;
A_igual_B clrf Resultado ;Pone a 0 el resultado
Stop
movf Dato_B,W
subwf Dato_A,W
btfsc STATUS,Z
goto A_igual_B ;Si
btfsc STATUS,C
goto A_mayor_B ;Si
;Carga el dato B
;Resta/compara con dato A
;Son iguales (Z=1)??
;No, A es menor que B
;Suma a más B
;Fin del programa fuente
;Poner breakpoint de parada
;No. A mayor que B (C=0)??
nop
nop
end
goto Stop
- 6 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
;EJEMPLO 2
List p=16F84
include
3.2. Ejercicio:
Diseñad un programa que realice la suma del contenido de las posiciones de
memoria 0x10, 0x12 y 0x14 y compare el resultado de la suma con el contenido
de la posición de memoria 0x16. Si el resultado de la comparación es 0 que
guarde el resultado de la suma en la posición de memoria 0x20, si es mayor
que 0 (suma>[0x16]), que decremente los contenidos de las posiciones de
memoria 0x10, 0x12 y 0x14 en una unidad y repita el proceso de la
comparación; y si la comparación es menor que 0 (suma<[0x16]), que aumente
los contenidos de las posiciones de memoria 0x10, 0x12 y 0x14 en una unidad
y repita el proceso de la comparación.
3.3. Ejercicio: Direccionamiento Indirecto.
Cread un proyecto y simulad el funcionamiento del siguiente programa que
almacena el patrón 33 en 15 posiciones contiguas de la memoria de datos,
empezando desde la dirección 0x10.
Contador
Primera
Inicio
Bucle
Stop
;Inicia puntero con dirección inicial
;Carga patrón a almacenar
movlw .15
movwf Contador
movlw Primera
movwf FSR
movlw 0x33
movwf INDF
incf FSR,F
decfsz Contador,F ;Decrementa contador hasta llegar a 0
goto Bucle
;Almacena patrón en pos. indicada por FSR
;Incrementa el puntero FSR
;Contador no es 0
;Carga el contador con 15 (en decimal)
;Contador interno
;Posición inicial
;Salva el vector de interrupción
;Poner breakpoint de parada
org
0x00
goto Inicio
;Fin del programa fuente
equ
equ
0x0c
0x10
;Tipo de procesador
nop
nop
end
"P16F84.INC"
;Definiciones de registros internos
;Vector de Reset
org
0x05
- 7 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
3.4. Ejercicio:
Modificad el programa anterior para que almacena el patrón AA, 10 veces
seguidas en la memoria de datos, empezando desde la dirección 0x30.
3.5. Ejercicio:
Modificad el programa anterior para que almacena el patrón 012345, 10 veces
seguidas en la memoria de datos, empezando desde la dirección 0x10.
- 8 -
Ingeniería de Sistemas y Automática Prácticas de Microcontroladores PIC
;Vector de Reset
"P16F84.INC"
cblock
0x10
endc
;Fin de definiciones
org
0x00
goto Inicio
;Tipo de procesador
;Reg. de estado temporal
List p=16F84
include
;Definiciones de registros internos
;Inicio de definición de variables
Multiplicando
Multiplicador
Resultado_H
Resultado_L
Estatus_Temp
Contador
;Variable para el multiplicando
;Variable para el multiplicador
;Parte alta del resultado
;Parte baja del resultado
;Variable con número de veces a operar
3.6. Ejercicio:
Cread un proyecto y simulad el funcionamiento del siguiente programa que
realiza el producto de dos números de 8 bits generando un resultado de 16 bits.
El programa emplea la misma mecánica que al hacer un producto
Comentarios de: Práctica 2: Programas básicos. Tipos de direccionamiento. (0)
No hay comentarios