Autor Tema: como puedo saber el valor del PCL?  (Leído 2561 veces)

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

Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
como puedo saber el valor del PCL?
« en: 18 de Noviembre de 2013, 20:09:16 »
bueno miren este ejemplo
Código: ASM
  1. Principal
  2.              movf    PORTA,W         ;Lee el valor de las variables de entrada
  3.              andlw   b'00000111'     ;se queda con los tres bits de entrada
  4.              addwf   PCL,F              ;Salta a la configuracion adecuada
  5. Tabla
  6.              goto     Configuracion0
  7.              goto     Configuracion1
  8.              goto     Configuracion2
  9.              goto     Configuracion3
  10.              goto     Configuracion4
  11.              goto     Configuracion5
  12.              goto     Configuracion6
  13.              goto     Configuracion7
  14. Configuracion0
  15.     .
  16.     .
  17.     .
  18.     .
  19.     .


no entiendo como rayos hace el salto indexado, como se puede saber el valor de PCL o como se lo asigna, en el libro PIC16F84 no lo explica muy bien que digamos

PD: no no no no no no, ya no me respondan, creo que ya lo descubri, lo que hace es que a la posicion  actual del contador, no importa cual sea, se le suma lo de PORTA, osea se adelanta xxx posiciones mas a la que ya está, sin contar las etiquetas en el camino como Tabla, no es cierto? :D
« Última modificación: 18 de Noviembre de 2013, 20:44:45 por Gusfavio »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: como puedo saber el valor del PCL?
« Respuesta #1 en: 18 de Noviembre de 2013, 22:08:46 »
Exactamente. PCL es un registro que contiene la parte baja (los 8 bits de menor peso) del valor actual de la posición ROM a ejecutarse, y se autoincrementa luego de cada ejecución para apuntar a la próxima instrucción a ejecutar. Al modificarlo se logra "saltar" dentro de la normal ejecución línea a línea, aunque deberías tener en cuenta que el registro es de sólo 8 bits, por lo que no siempre se puede sumar así sencillamente y lograr el resultado correcto.

Ej:
    ORG 0x0FE       ;ubica el código empezando de la posición 0xFE
    movlw 0x01    ;ubicado en la posición ROM 0x0FE
    addwf PCL,W  ;ubicado en la posición ROM 0x0FF

    goto  Configuracion0 ;ubicado en la posición ROM 0x100
    goto  Configuracion1 ;ubicado en la posición ROM 0x101
    ...

al ejecutarse, el PC valdría 0x001 (errónea) en lugar de 0x101 (correcta) y por ende ejecutaría desde el contenido de la posición ROM 0x001 en adelante. Esto es debido a que si bien el registro PCL se desborda y trunca correctamente, el acarreo del desbordamiento no se transporta a los bits altos del PC, resultando en un salto a una posición incorrecta. Para solventar este problema existe el registro PCLATH. Hay bastante información en el foro si te interesa aprender más de este tema.


Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Gusfavio

  • PIC12
  • **
  • Mensajes: 56
Re: como puedo saber el valor del PCL?
« Respuesta #2 en: 18 de Noviembre de 2013, 22:18:12 »
sip, lo estoy tomando en cuenta, gracias


 

anything