Autor Tema: Problema con el PCLATH + PCL  (Leído 6462 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pablormr

  • PIC10
  • *
  • Mensajes: 12
Problema con el PCLATH + PCL
« en: 11 de Agosto de 2006, 13:26:23 »
Estoy comenzando en la programación de pic's, y a ver si alguien me echa una mano (caridad) y me ayuda con una explicadita de como funciona (con detalles) el registro PC, porque estoy confundido... la cosa es así: tengo entendido que el registro PC es igual a PCLATH + PCL, ok, hasta ahí estamos claros, lo que luego no entiendo es eso de que en la parte baja del registro PC, es decir, en los primeros 8 bits <7:0> (PCL) se cargan las instrucciones goto y call y todas las demas, las 33 instrucciones que existen... pero las instrucciones no miden 14 bits, la pila de la memoria flash no es de 14 bits?... yo creo que  los 8 bits de PCL son para ir aumentando de uno en uno cada vez que se pase de una instrucción a otra.. pero ya luego cuando me hablan que con el comando call y goto se altera el PCL, qué quiere decir eso?  :(
Supongo que el PCLATH es para cambiar de banco de memoria RAM cuando los pic's trabajan, pero esto tengo entendido que se usa cuando los bancos van desde 0 a 3, y cuando sól ovan de 0 a 1 se coloca un cero o un uno en el RP0 del registro de Estado (Status)...


Tengo por acá un programa largo, pero voy a colocar sólo un pedacito del inicio a ver si alguien me aclara lo del PCLATH
               ORG 0
               GOTO     INICIO
               ORG       4
INICIO     CALL      CI
               BCF        PCLATH,3
               BCF        PCLATH,4                     ;SE ASEGURA LA PAGINA 0
               BCF        PORTB,RB1
               BCF        PORTB,RB2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema con el PCLATH + PCL
« Respuesta #1 en: 11 de Agosto de 2006, 15:44:49 »
pablormr vamos por partes.  Antes que nada, te es dificulta la lectura de datasheets en inglés? Te digo porque en realidad todos estos temas estan explicados por Microchip pero en inglés y son una buena fuente de consulta.

De todas formas pasaré a explicarte, espero aclararte un poco el panorama.


Estoy comenzando en la programación de pic's, y a ver si alguien me echa una mano (caridad) y me ayuda con una explicadita de como funciona (con detalles) el registro PC, porque estoy confundido... la cosa es así: tengo entendido que el registro PC es igual a PCLATH + PCL, ok, hasta ahí estamos claros, lo que luego no entiendo es eso de que en la parte baja del registro PC, es decir, en los primeros 8 bits <7:0> (PCL) se cargan las instrucciones goto y call y todas las demas, las 33 instrucciones que existen... pero las instrucciones no miden 14 bits, la pila de la memoria flash no es de 14 bits?...

Las instrucciones tienen todas 14 bits, eso es así con 100% de seguridad.

Si te fijas en el datasheet verás que la instrucción CALL y GOTO ocupan 14 bits.  3 bits son para la instrucción y 11 para modificar al PC (en sus 11 bits inferiores).

El PC en los pics 16F tiene 13bits.  Entonces 11 bits se toman de la instrucción CALL o GOTO y los otros 2 se toman del seteo que hayas hecho del PCLATH.

Te adjunto imágenes del datasheet donde puedes observar esta información.


yo creo que  los 8 bits de PCL son para ir aumentando de uno en uno cada vez que se pase de una instrucción a otra.. pero ya luego cuando me hablan que con el comando call y goto se altera el PCL, qué quiere decir eso?  :(

El PCL se modifica solo a medida que se van ejecutando las instrucciones, sino nunca avanzaría.    Además el CALL y el GOTO como son 'saltos' obviamente modifican el PCL para que el pic en la próxima instrucción esté ejecutandose en la dirección destino y no donde venía haciendolo.


Además también puedes modificar el PCL y el PCLATH si es que quieres hacer algún salto 'manual'. 

Te invito a que veas estos ejemplos

Ejemplos de lectura de tabla para PIC16F84A

Ejemplos de lectura de tabla para PIC16F628A

Ejemplos de lectura de tabla para PIC16F876


Supongo que el PCLATH es para cambiar de banco de memoria RAM cuando los pic's trabajan, pero esto tengo entendido que se usa cuando los bancos van desde 0 a 3, y cuando sól ovan de 0 a 1 se coloca un cero o un uno en el RP0 del registro de Estado (Status)...[/size]

El PCLATH es un registro que apunta al Program Counter el cual hace referencia a la Memoria DE PROGRAMA no RAM! cuidado con eso!!.

Los bits STATUS,RP0 y STATUS,RP1 sí son para elegir el banco de memoria RAM.

Espero se te haya aclarado algo.

PD: El código que envíaste no tiene mayor sentido lógico.  cuando releas del tema vuelve a postear si quieres pero fíjate de tener más en claro el tema de memoria de programa y memoria ram
- 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 pablormr

  • PIC10
  • *
  • Mensajes: 12
Re: Problema con el PCLATH + PCL
« Respuesta #2 en: 13 de Agosto de 2006, 15:34:46 »
Gracias por la ayuda amigo!  :)