TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: microcom en 23 de Junio de 2006, 18:31:20
-
pa ver esto
cual seria la mejor forma de acceder a las dirreciones del pic puesto que son 64.
seria decretarlas como variables generales o ir incremetando un contador.
mas o meno es lo siguiente se suma el valor de la dirreccion 10 con el valor que se encuentra almacenado en le dirrecion 11 y asi sucesivamente lo que pasa es como se aria sin decretar las variable a utilizar .
bueno se aria incrementando un contador que me valla incrementando la dirrecion hasta el final.
estoy en contacto
como la ven caballeros .
les agradesco la colaboracion
muchas gracias.
-
hola microcom. Para manipular direcciones de memoria sin tener que ingresarlas una por una, se utiliza el Indirect File Addressing. Son dos registros: El FSR y el INDF.
El FSR es el que debe contener la posicion de memoria a la que se hace referencia. El INDF contendra el valor de la posicion de memoria declarada en el registro FSR.
Un ejemplo:
Te lo hago para limpiar por ejemplo, toda la RAM de un PIC desde la 0x0C hasta la 0x40
movlw 0x0C
movwf FSR
Loop
CLRF INDF
INCF FSR,F
movf FSR,W
xorlw 0x41
btfss STATUS,Z
goto Loop
;fin de la limpieza.
Saludos.
-
DIME UNA OPINION DE ESTE PROGRAMA.
mira a ver este programa que me suma todos los valores almacenados desde la direccion 10 hasta la ultima.
el programa deja de sumar si la operacion llega a FF *255* decimal
la suma total es almacenada en OC
para sumar por ejemplo, toda la RAM de un PIC desde la
10 hasta la ultima posición.
Movlw 10
Movwf fsr
Loop Movf indf,0
Addwf oc
MOVLW FF
SUBWF oc,1
BTFSC STATUS,0
GOTO siga
Addwf oc
Goto fin
siga INCF FSR,F
movf FSR,W
xorlw 0x41 ;aquí va la ultima dirección a acceder
btfss STATUS,Z
goto Loop
fin goto fin
end
-
Movlw 10
Movwf fsr
Loop Movf indf,0
Addwf oc
MOVLW FF
SUBWF oc,1
BTFSC STATUS,0
GOTO siga
Addwf oc
Goto fin
siga INCF FSR,F
movf FSR,W
xorlw 0x41 ;aquí va la ultima dirección a acceder
btfss STATUS,Z
goto Loop
fin goto fin
end
Hola microcom.Te hago dos preguntas y a la vez intento corregirlas.
Primero,cuidado con el 10 que es un valor decimal. La primer posicion para registros generales(GPR) es la 0x0c= 12. O sea que estas usando y sumando probablemente registros especiales tambien. Ojo con eso.
Segundo. Al programa lo modificaria por este otro(aunque no se precisamente lo que intentas hacer):
La logica es esta: sumar posicion por posicion de la RAM a la variable OC(cuidado con esta variable, deberia estar fuera del rango de la RAM que sumas!).Si el resultado de la suma excede el valor 0xFF, no sumar el resultado y salir. Sino guardar el resultado de la suma en OC y seguir sumando hasta llegar a la posicion 0x40 inclusive.
oc EQU 0x0C
Movlw 0x0d ;primer posicion a sumar
Movwf fsr
Loop Movf indf,0
Addwf oc,w
btfsc STATUS,C ;la suma es > a 0xFF?
goto fin ;si, entonces salir sin sumar
movwf oc ;no,entonces guardar resultado de la suma en oc
INCF FSR,F
movf FSR,W
xorlw 0x41 ;aquí va la ultima dirección a acceder
btfss STATUS,Z
goto Loop
fin goto fin
end
Saludos.
-
yo tengo entendido que 10 en hex es 16 en decimal
la posicion .10 en decimal es 0A en hex
binario 00010000
hex H'10'
decimal D'16'
10 es la posicion 16
muchas gracias
-
pero la simboligia mia si le falta mas expecificacion.
0x10 seria la posicion 16 en decimal
0x0c seria la posicion donde serian alnmacenados los resultados.
0x0a seria la posicion 10 en decimal
0x03 status
0x06 portb............
.................
muchas gracias
desde 0x10 que es posicion 16 seria la suma de todas las direcciones
muchas gracias
-
Perfecto microcom. Te lo preguntaba por si no utilizabas como sistema por defecto el Hexadecimal. Por lo visto lo has declarado por defecto al sistema hexadecimal(RADIX HEX).
Saludos y suerte.
-
muchas gracias
todo bajo control