PDF de programación - Práctica 2: Programas básicos. Tipos de direccionamiento.

Imágen de pdf Práctica 2: Programas básicos. Tipos de direccionamiento.

Práctica 2: Programas básicos. Tipos de direccionamiento.gráfica de visualizaciones

Publicado el 1 de Abril del 2019
871 visualizaciones desde el 1 de Abril del 2019
291,1 KB
10 paginas
Creado hace 17a (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
  • Links de descarga
http://lwp-l.com/pdf15627

Comentarios de: Práctica 2: Programas básicos. Tipos de direccionamiento. (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad