Servidor PICP: ejemplos


Lectura memoria de configuración

La memoria de configuración se encuentra a partir de la dirección 2000h y en ella se encuentra la palabra de configuración y la palabra de identificación del PIC (Se puede encontrar más información aquí)

Una vez en modo monitor, se accede a la memoria de configuración invocando el servicio Load Configuration, que hace que el contador de programa apunte a la dirección 2000h (PC=2000h). Las direcciones que nos interesa leer son la 2006h (identificación) y la 2007h (configuracion). Para acceder a ellas se incrementa el contador de programa realizando llamadas al servicio Increment Address. Con cada llamada, el PC se incrementa en una unidad. Una vez que PC=2006h, usamos el servicio Read Data from Program Memory para leer su contenido. A continuación volvemos a incrementar el PC y leemos el contenido de la dirección 2007h.

La secuencia completa de llamadas a los servicios es la siguiente:

  1. Load Configuration (PC=2000h)
  2. Increment Address (PC=2001h)
  3. Increment Address (PC=2002h)
  4. Increment Address (PC=2003h)
  5. Increment Address (PC=2004h)
  6. Increment Address (PC=2005h)
  7. Increment Address (PC=2006h)
  8. Read Data from Program Memory. Lectura de la identificación del PIC
  9. Increment Address (PC=2007h)
  10. Read Data from Program Memory. Lectura de la palabra de configuración

Grabación de palabras (PIC16F8X)

La grabación en la familia PIC16F8X se realiza byte a byte. Primero hay que incrementar el contador de programa hasta que apunte a la dirección a partir de la cual queremos grabar las palabras. En este ejemplo comenzaremos en la dirección 0000h, por lo que primero habrá que hacer un Reset para inicializar el contador de programa (PC=0000h). A continuación se envía la primera palabra a grabar, usando el servicio Load Data for Program Memory y a continuación invocando el servicio de Begin Erase/Programming Cycle. El primer dato queda grabado. Ahora se incrementa el contador de programa (Increment Address) y se repite la operación, enviando las otras dos palabras que faltan.

La secuencia completa de llamadas a los servicios es la siguiente:

  1. Reset (PC=0000h)
  2. Load Data for Program Memory (Envío del dato 0x01AB)
  3. Begin Erase/Programming Cycle (Gración en la Flash)
  4. Increment Address (PC=0001h)
  5. Load Data for Program Memory (Envío del dato 0x02BC)
  6. Begin Erase/Programming Cycle (Gración en la Flash)
  7. Increment Address (PC=0002h)
  8. Load Data for Program Memory (Envío del dato 0x03CD)
  9. Begin Erase/Programming Cycle (Gración en la Flash)

Con esto se graban las palabras 0x01AB, 0x02BC y 0x03CD en las direcciones 0000h, 0001h y 0002h, respectivamente.


Grabación de palabras (PIC16F87XA)

En la familia 16f87xA las palabras se graban de 8 en 8. Es preciso por tanto enviar bloques de 8 palabras, aunque sólo se quieran grabar menos. Para grabar las tres palabras de este ejemplo, habrá que enviar 8 palabras. Las 3 primeras son las que nos interesan. En las 5 restantes se enviará "basura" (por ejemplo 0x0000). Primero hay que inicializar el contador de programa, utilizando el servicio de Reset (PC=0000h). Ahora se envía el primer dato, con

  • Load Data for Program Memory y se incrementa el contador de programa (Increment Address). Este proceso se repite hasta que el contador de programa alcance la dirección 0007h, donde se almacenará la octava palabra, que se envía con Load Data for Program Memory y luego se invoca a Begin Erase/Programming Cycle. Al hacerlo se grabarán las 8 palabras previamente enviadas.

    La secuencia completa de llamadas a los servicios es la siguiente:

    1. Reset (PC=0000h)
    2. Load Data for Program Memory (Envío del dato 0x01AB)
    3. Increment Address (PC=0001h)
    4. Load Data for Program Memory (Envío del dato 0x02BC)
    5. Increment Address (PC=0002h)
    6. Load Data for Program Memory (Envío del dato 0x03CD)
    7. Increment Address (PC=0003h)
    8. Load Data for Program Memory (Envío un dato "basura")
    9. Increment Address (PC=0004h)
    10. Load Data for Program Memory (Envío un dato "basura")
    11. Increment Address (PC=0005h)
    12. Load Data for Program Memory (Envío un dato "basura")
    13. Increment Address (PC=0006h)
    14. Load Data for Program Memory (Envío un dato "basura")
    15. Increment Address (PC=0007h)
    16. Load Data for Program Memory (Envío un dato "basura")
    17. Begin Erase/Programming Cycle (Gración en la Flash de las 8 palabras)

    Grabación de la palabra de configuración

    La palabra de configuración se graba de las misma manera en las familias 16F87XA y 16F8x. Hay que situar el contador de programa en la dirección PC=2007h, enviar la nueva palabra con Load Data for Program Memory y grabarla con Begin Erase/Programming Cycle

    La secuencia completa de llamadas a los servicios es la siguiente:

    1. Load Configuration (PC=2000h)
    2. Increment Address (PC=2001h)
    3. Increment Address (PC=2002h)
    4. Increment Address (PC=2003h)
    5. Increment Address (PC=2004h)
    6. Increment Address (PC=2005h)
    7. Increment Address (PC=2006h)
    8. Increment Address (PC=2007h)
    9. Load Data for Program Memory (Enviar la nueva palabra de configuración)
    10. Begin Erase/Programming Cycle (Grabarla en la Flash)

    [Servidor PICP]
    IEA ROBOTICS
    Juan González