Programación PIC en C

 

Volver al índice

 

En la última práctica que hemos visto  (el uso del TMR0 como contador)  vimos que el entorno de Proteus nos proporciona una ventana  de visualización  del estado de los registro SFR de nuestro PIC , muy útil cuando estamos depurando nuestro programa, pero Proteus nos proporciona más ventanas para ver el estado de los registros de nuestro PIC que podemos acceder a ellas por medio del menú Debug --> PIC-CPU cuando estamos ejecutando nuestro programa en el modo de simulación paso a paso ó cuando hemos pulsado el botón de pausa, una vista condensada de todas esas ventanas la tenemos en la figura de abajo:

 

Simulación de registros PIC

 

 

Como vemos aparte de poder  ver el estado de los registros SFR del PIC podemos ver el estado de la memoria EPROM del PIC, El contenido de la memoria de programa (donde se encuentra grabado de forma permanente nuestro programa ), el estado de PILA  (útil cuando se trabaja con interrupciones y funciones), otra ventana nos muestra el estado de la memoria RAM reservada a los datos ó registros de propósito general  (GPR) en formato hexadecimal y otra donde podemos ver el estado de las variables que tenemos activas en ese momento, recordar que si utilizamos variables locales por ejemplo dentro de una función, estás se destruirán al salir de la función. Pero todo esto  como he dicho lo tenemos cuando estamos ejecutando nuestro programa en el modo paso a paso ó tenemos nuestro programa en pausa.

 

Modo paso a paso y pausa en Proteus

 

 

Si estamos en modo Run e intentamos acceder a estas ventanas vemos que están deshabilitadas:

 

Ventanas pic cpu

 

¿Qué otro sistema tenemos para depurar nuestros programas?  Pues bien una manera que siempre podemos utilizar es utilizar la función printf como herramienta de depuración, es decir, ponemos la función printf en determinadas partes del programa donde queramos saber el estado de una o varias variables y por medio de la terminal podemos saber el valor que van tomando, una vez comprobado que nuestro programa funciona como nosotros queremos borramos las funciones printf que hayamos introducido con propósitos de depuración.


Pero Proteus nos proporciona otro método para ver el estado de las variables cuando estamos ejecutando nuestro programa  ya sea en modo Run ó en modo paso, es la ventana Watch Window y podemos acceder a ella por medio del menú  Debug --> Watch Windows.

Vamos a ver  cómo podemos  utilizarla. Para ello compilaremos el siguiente ejemplo:

#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_B4, RCV=PIN_B5)
int x;
int y;
void main() {
 x,y=0;
 while(TRUE)
 {
 if (x<=9)
 {
 x++;
 delay_ms(500);
 //printf("x = %d.\r",x);
 
 }
 else
 {
 if (y<=9)
 {
 y++;
 delay_ms(500);
 //printf("y = %d.\r",y);
 }
 }
 }
}

Es un programa que lo único que hace es incrementar la variable X de 0 a 10 y después hace lo mismo con la variable Y, pero es suficiente para ver cómo utilizar la ventana Watch Windows para ver el valor que van tomando las variables X e Y.


Primeramente compilamos el ejemplo y después  dentro del IDE del compilador hacemos clic en el icono Symbol Map según se muestra en la figura de abajo:

 

 

symbol map

 

Esto hará que nos aparezca el archivo Symbol Map en modo lectura, en este archivo podemos ver en qué posición de memoria se guardarán las diferentes variables que tengamos declaradas en nuestro programa, este archivo se actualizará en cada compilación que hagamos.

 

 

Posiciones de memoria de las variables

 

 

Como vemos en la figura de arriba las variable X e Y tienen asignadas  las  direcciones  de memoria 0x011 y 0x012 en la memoria RAM  de propósito general  (GPR), que como ya sabemos es la que el programador dispone para almacenar los valores de sus variables.


Bien, una vez anotadas estas direcciones volvemos al entorno de Proteus y abrimos la ventana Watch Windows, dentro de ella hacemos clic con el botón derecho del ratón y seleccionamos Add Items (By Address)… , según se muestra en la figura de abajo:

 

 

watch window

 

 

Nos aparecerá una nueva ventana donde iremos añadiendo las variables con su dirección correspondiente:

 

 

añadir registro de memoria

 

 

Una vez añadidas las variables podemos ver el valor que van tomando mientras ejecutamos nuestro programa en la ventana Watch Windows, según se muestra en la figura de abajo:

 

 

variables watch windows

 

 

Pero tenemos aún mas opcciones, por ejemplo podemos establecer condiciones para ello hacemos clic en la variable con el botón derecho y seleccionamos Watchpoint Condition…

Nos  aparecerá la ventana que se muestra abajo:

 

 

watchpoint condition

 

 

Por ejemplo yo la he configurado para que cuando la variable X sea igual a cinco se pare la simulación, pero admite más condiciones solo hay que ponerse y experimentar con las diferentes opciones que tenemos, también decir que podemos hacer  que la ventana Watch Windows nos muestre los registros SFR que nos interesan junto con las variables que nosotros hemos declarado, en fin muchas posibilidades de depuración.  El conocer estas herramientas nos puede facilitar mucho el aprendizaje porque vemos la secuencia real que sigue nuestro programa, que algunas veces puede que no coincida con nuestra lógica de funcionamiento del programa.

 

Como siempre espero vuestros comentarios y os agradecería que las preguntas que tengáis sobre estos temas, pues las hagáis directamente en el foro que para eso está.

 

Un saludo a todos y hasta el próximo articulo.

 

Volver al índice

 

© 2007-2017 AquiHayapuntes.com