Autor Tema: CALL y GOTO  (Leído 8269 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Juan_PIC

  • PIC12
  • **
  • Mensajes: 84
CALL y GOTO
« 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

Cuando se ponen límites, la mente humana comienza a buscar maneras de romperlos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CALL y GOTO
« Respuesta #1 en: 16 de Julio de 2007, 11:20:39 »
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


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Juan_PIC

  • PIC12
  • **
  • Mensajes: 84
Re: CALL y GOTO
« Respuesta #2 en: 16 de Julio de 2007, 11:27:42 »
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.
Cuando se ponen límites, la mente humana comienza a buscar maneras de romperlos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CALL y GOTO
« Respuesta #3 en: 16 de Julio de 2007, 12:06:32 »
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?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Juan_PIC

  • PIC12
  • **
  • Mensajes: 84
Re: CALL y GOTO
« Respuesta #4 en: 16 de Julio de 2007, 12:41:18 »
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.
Cuando se ponen límites, la mente humana comienza a buscar maneras de romperlos.

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: CALL y GOTO
« Respuesta #5 en: 16 de Julio de 2007, 18:43:45 »
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.

Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado Juan_PIC

  • PIC12
  • **
  • Mensajes: 84
Re: CALL y GOTO
« Respuesta #6 en: 16 de Julio de 2007, 18:58:47 »
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
Cuando se ponen límites, la mente humana comienza a buscar maneras de romperlos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CALL y GOTO
« Respuesta #7 en: 17 de Julio de 2007, 08:37:52 »
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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Juan_PIC

  • PIC12
  • **
  • Mensajes: 84
Re: CALL y GOTO
« Respuesta #8 en: 17 de Julio de 2007, 13:08:48 »
Habia leido el datasheet, pero no me habia quedado muy claro. Gracias! :-/
Cuando se ponen límites, la mente humana comienza a buscar maneras de romperlos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: CALL y GOTO
« Respuesta #9 en: 17 de Julio de 2007, 13:20:34 »
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:
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything