direccionamiento

June 29, 2017 | Autor: Jeremy Martinez | Categoría: Electrical Engineering
Share Embed


Descripción

FORMAS DE DIRECCIONAMIENTO DE LOS PICS

DIRECCIONAMIENTO DIRECTO 

la memoria interna se direcciona en forma directa por medio de los 8 bits “f” contenidos en las instrucciones que operan sobre registros. De esta manera se puede direccionar cualquier posición desde la 00 a la FF.



En los microcontroladores que tengan más de un banco, antes de acceder a alguna variable que se encuentre en la zona de los bancos de registros, el programador deberá asegurarse de haber programado los bits de selección de banco en el registro FSR.



En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. En una instrucción de tipo ramificación el campo de dirección especifica la dirección de la rama actual.



Si hace referencia a un registro de la máquina, el dato estará almacenado en este registro y hablaremos de direccionamiento directo a registro; si hace referencia a una posición de memoria, el dato estará almacenado en esta dirección de memoria (dirección efectiva) y hablaremos de direccionamiento directo a memoria. Estos modos de direccionamiento tienen una forma muy simple y no hay que hacer cálculos para obtener la dirección efectiva donde está el dato. El tamaño del operando, en el caso del direccionamiento directo a registro, dependerá del número de registros que tenga la máquina; en el direccionamiento directo a memoria, dependerá del tamaño de la memoria.

DIRECCIONAMIENTO INDIRECTO 

Antes de mostrarte los registros de los que hablaremos te traje los bancos de memoria del Micro, en donde los resalté para que puedas notarlo...imagen



Estos 2 registros, y en algunos casos, junto al registro STATUS, pueden trabajar en conjunto para hacer un direccionamiento indirecto de la memoria de Datos (memoria RAM). Bien, que es eso del direccionamiento indirecto...?.



La primera posición (00H) de la memoria RAM, no esta implementada físicamente, y es la llamada dirección indirecta. Si en cualquier instrucción se opera con la dirección 00H, en realidad se estará operando con la dirección a la que apunte el contenido del registro FSRubicado en la posición 04H de la RAM El registro FSR además de servir para seleccionar el banco, sirve como puntero para este tipo de direccionamiento. Para seleccionar el banco, se usa el bit de más peso del registro FSR y el bit IRP del registro de estado. Por ejemplo si el FSR contiene el valor 14, una instrucción que opere sobre la dirección 0, operará en realidad sobre la dirección 14. Se puede decir en este eje

Registro 04h (FSR)

Es el Registro selector de registros, es un puntero en realidad, Recuerdas aquello de las interrupciones, pues bien, es la misma dirección, la 0x04h, cuando se producía una interrupción, el contador de programa apuntaba a esta dirección, y nosotros le decíamos por donde continuar, o escribíamos ahí lo que debía hacer. Ok. Ahora utilizaremos el registro contenido en esta dirección para seleccionar otros registros. Piensa, que si el FSR es un puntero de registros, pues, en un momento, puede apuntar a uno y en otro momento a otro. Ahora, la dirección del registro al que apunta, se copia en un registro llamado INDF, y este último registro, se actualiza en cada cambio del registro FSR



Registro 00h (INDF)



Es el registro para direccionamiento indirecto de datos, a pesar de no ser un registro disponible físicamente (esto lo dice la hoja de datos); utiliza el contenido del registro FSR, para seleccionar indirectamente la memoria de datos o RAM. Si la dirección a la que apunta el FSR se copia en INDF, una instrucción aplicada a INDF, determinará lo que se debe hacer con el registro al que apunta. Veamos un ejemplo, de como trabajan estos dos registros, en colaboración el uno con el otro



Ejemplo de direccionamiento indirectoEl Registro 05 contiene el valor 10h



El Registro 06 contiene el valor 0Ah



Se Carga el valor 05 en el registro FSR (FSR = 05)



La lectura del registro INDF retornará el valor 10h



Se Incrementa el valor del registro FSR en 1 (FSR = 06)



La lectura del registro INDF retornará el valor 0Ah.

Veamos otro ejemplo pero en código. Lo que hace este miniprograma, es borrar el contenido de la memoria RAM entre 0x20-0x2F utilizando direccionamiento indirecto. ... MOVLW 0x20 ; inicializa el puntero MOVWF FSR ; a la RAM siguiente CLRF INDF ; borra el registro INDF INCF FSR ; incrementa el puntero BTFSS FSR,4 ; terminó ? GOTO siguiente ; NO, borra el siguiente SIGUE ... ; SI, continúa con el programa



Veamos, Primero cargamos W (W=0x20), luego se lo pasamos al FSR, ahora el FSR apunta al registro 0x20, INDF también. Borramos el registro INDF (lo ponemos a 00000000), en realidad es el registro 0x20 el que estamos poniendo a 00000000, luego incrementamos en uno el registro FSR, es decir, apunta a 0x21, adivina a quién apunta INDF...?, exactamente..., a 0x21. Ahora viene la pregunta... El Bit4 de FSR está en uno...?, si es que NO, regresa a siguiente y borra INDF (está borrando el contenido de 0x21), ahora incrementa FSR (FSR=0x22=INDF), y vuelve a preguntar, como la respuesta es NO, borra INDF (0x22) y nuevamente incrementa FSR, y bueno, así, hasta que FSR llega a 0x2F, en donde la respuesta a la pregunta es SÍ, y salta una línea para continuar con el flujo del programa.

Viste que bueno que está..., imagínate todas las aplicaciones en que los puedes utilizar, ok. les comento que estos ejemplos fueron extraídos de la hoja de datos del PIC16F84

DIRECCIONAMIENTO RELATIVO 

Direccionamiento relativo:



No existe este modo de direccionamiento en los microprocesadores PIC o a menos que se cumpla esta regla o caso parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC, pongamos un ejemplo: supongamos que PC vale = 0x0A, si nosotros interpretamos la instrucción jr +03, saltaremos tres posiciones posteriores a PC (también podría ser -03 y serían posiciones anteriores). Pero, ¡cuidado! si esa instrucción estaba en la posición 0x0A la dirección de PC a incrementar será la inmediatamente posterior (ya que PC se incrementa automáticamente después de leer la instrucción), por lo que quedaría:



PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E, con lo que el PC quedaría como 0x0E.

Lihat lebih banyak...

Comentarios

Copyright © 2017 DATOSPDF Inc.