Página de inicio Mi Correo






   » Foro
   » Nuevo Foro
   » Mi Correo
   » Mis Actividades...


--- Novedades ---



    
  » Microcontroladores » Display y Tablas (7 de 9)  

.: 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...

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...?. Para entenderlo mejor estudiemos estos registros...

.: 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, ahora... tienes una idea de lo que es el registro INDF...???

.: 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, y así lo entenderás mejor...

.: Ejemplo de direccionamiento indirecto
  • El 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.

Está mas claro verdad...???

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, y creo que están bastante entendibles.

De acuerdo, todo lo que vimos hasta el momento, será lo que aplicaremos para hacer un programa que controle 4 displays.

Listos...???

Vamos por lo que sigue...



R-Luis...


<--Anterior   Introducción   Siguiente -->
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Tabla de Referencias


    
--| |--