TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Juan_PIC en 16 de Julio de 2007, 11:10:22
-
Hola amigos del foro. La pregunta es la siguiente:
Estamos de acuerdo con el problema que existe con las tablas y el contador de programa, ya que si se encuentran en otra pagina, cuando hacemos el addwf salta a cualquier lado. Ahora, Sucede lo mismo o algo parecido con las subrrutinas(CALL) y los saltos(GOTO)?
De antemano gracias! :P
-
Hola amigos del foro. La pregunta es la siguiente:
Estamos de acuerdo con el problema que existe con las tablas y el contador de programa, ya que si se encuentran en otra pagina, cuando hacemos el addwf salta a cualquier lado. Ahora, Sucede lo mismo o algo parecido con las subrrutinas(CALL) y los saltos(GOTO)?
De antemano gracias! :P
No se si entiendo bien tu pregunta, pero el GOTO y el CALL, ambos necesitan que esté bien específico el número de página antes de hacer el salto. Si apuntas a la página 0 pero quieres hacer un call a una rutina en la página 3.. deberás cargar la página 3 en el PCLATH.
Saludos
-
Si, ya tuve problemas con una tabla, tarde un monton en descubrir ese error. Ahora me pregunto si pasara lo mismo con los CALL y GOTO.
Por ejemplo, hago un CALL en la linea 200, y esa subrrutina esta en la 350. No se si fui claro. Saludos.
-
Si, ya tuve problemas con una tabla, tarde un monton en descubrir ese error. Ahora me pregunto si pasara lo mismo con los CALL y GOTO.
Por ejemplo, hago un CALL en la linea 200, y esa subrrutina esta en la 350. No se si fui claro. Saludos.
¿Estas hablando en decimal o en hexa? ¿de qué pic me hablas? leíste mi respuesta anterior?
-
Estoy hablando en decimal. O sea, la subrrutina que quiero llamar y el salto estan mas alla de la posicion d'255'
ORG 0x00
...
CALL EJEMPLO
...
GOTO EJEMPLO2
...
ORG 0x350 ;ESTO NO ESTA EN MI PROGRAMA, ES SOLO PARA SER MAS CLARO.
EJEMPLO
...
RETURN
EJEMPLO2
...
...
END
A ver si ahora es mas claro. Saludos y gracias.
-
eso va a depender del PIC que estes usando, si te fijas en la hoja de datos del pic que estas usando vas a ver los banco de memoria y el tamaño de los mismos. Como dice maunix, si tienes que hacer un CALL o GOTO a otra pagina antes debes poner el valor adecuado en el PCLATH.
-
Hola. Gracias por su ayuda. Estoy utilizando el 16f877a. La duda que tengo, es que algunos dicen que las paginas tienen d'256' lineas, y otros d'2024'.
Y no se cual es la correcta. Por otro lado, cuando en mi programa (que no excede las 2024 lineas) tuve que llamar a una tabla, no funcionaba. La llamaba entre la posicion 0x00 hasta la 0xFF (no se exactamente cual), y la tabla estaba mas alla de la posicion 0xFF, y movi la tabla entre la posicion 0x00 hasta la 0xFF y el programa funciono perfecto. Esto es lo que no entiendo. Si esto me podria estar ocurriendo con un CALL por ejemplo. Gracias otra vez. :P
-
Hola. Gracias por su ayuda. Estoy utilizando el 16f877a. La duda que tengo, es que algunos dicen que las paginas tienen d'256' lineas, y otros d'2024'.
Y no se cual es la correcta. Por otro lado, cuando en mi programa (que no excede las 2024 lineas) tuve que llamar a una tabla, no funcionaba. La llamaba entre la posicion 0x00 hasta la 0xFF (no se exactamente cual), y la tabla estaba mas alla de la posicion 0xFF, y movi la tabla entre la posicion 0x00 hasta la 0xFF y el programa funciono perfecto. Esto es lo que no entiendo. Si esto me podria estar ocurriendo con un CALL por ejemplo. Gracias otra vez. :P
Yendo a tu ejemplo concreto, para saltar a la posición 350dec no hace falta modificar nada en un call o un goto.
A los fines del Program Counter LOW, un fin de página se le llama casualmente a saltos de a 256 bytes.
0x0000 a 0x00FF Página 0
0x0100 a 0x01FF Página 1
Si estás haciendo un salto en una tabla usando solo el PCL entonces debes hacer caso a ello.
Ahora bien, para el caso del CALL y GOTO, estas instrucciones toman 11 bits, por lo tanto los cambios los debes hacer cada 2048 bytes y no cada 256. En este caso se llaman BANCOS DE MEMORIA DE PROGRAMA.
0x0000 a 0x07FF : Banco 0
0x0800 a 0x0FFF : Banco 1
Estas limitantes aclaro son para los pic 16F. En los 18F no existe tal limitación.
Por último, si lees en el datasheet de tu pic, hay unos gráficos que explican bien claramente cómo se llena el Program Counter cuando haces un CALL o un GOTO, qué datos toma de la instrucción y cuales del registro auxiliar PCLATH.
Saludos
-
Habia leido el datasheet, pero no me habia quedado muy claro. Gracias! :-/
-
Habia leido el datasheet, pero no me habia quedado muy claro. Gracias! :-/
OK, yo digo por las gráficas, realmente están claras una vez que entendiste el concepto :) y para que agregar lo que ya está ¿no? :mrgreen: