INDF y el FSR son registros q se complementan, sucede q el valor q posea el FSR corresponde al valor de una posicion de memoria, el contenido de esa posicion es visualizada en el INDF, por ejemplo supongamos lo siguiente:
Codigo:
Reg --------- Val
1D 11
FSR ???
INDF ???
Si cargamos al FSR con el valor 1D:
Codigo:
Reg ----------- Val
1D 11
FSR 1D
INDF ???
El INDF contiene el valor q existe en 1D:
Codigo:
Reg ----------- Val
1D 11
FSR 1D
INDF 11
Este valor puede leerse y escribirse, es decir podemos obtener el valor desd aki y tb podemos modificarlo. Por eso es q al FSR se le llama "puntero", porq apunta a una direccion de memoria q puede ser leida o escrita mediante el registro INDF.
Lo del macro ni idea solo se q son miniprogramas con la diferencia q no poseen un goto o un call sino q simplemente se escribe el nombre y el PIC ejecuta las instrucciones contenidas dentro de la macro, no se si regresara a la rutina q lo llamo despues de terminada su ejecucion.
Buenas.
Las macros son trozos de programa que insertas en tu código cuando los llamas.
ej:
Codigo:
salida MACRO puerto
bsf STATUS,5
clrf puerto
bcf STATUS,5
ENDM
El nombre del macro es "salida" y el parámero que se la pasa es "puerto". Este macro te evita tener que escribir 3 lineas de código para poner un puerto como salida, pero ojo, no es una subrrutina, simplemente es una "comodidad" para el programador.
Cada vez que llames al macro, el compilador sustituye esa llamada por las tres líneas de código que has definido sustituyendo el argumento por el valor que tu le has pasado como tal:
Codigo:
salida porta;equivale a
bsf status,5
clrf porta
bcf status,5