INTRODUCCIÓN.

En los proyectos que se describen en estas páginas utilizaremos el software de uso libre como es el MPLAB, si por alguna razón el lector quiere usar la versión que he manejado en estos artículos puede bajarse la versión 5 (¡ojo! pesa 11MBytes y si su conexión no es rápida puede tardar algo de tiempo) El motivo es que hemos de entender y aprender a utilizarlo para ensamblar nuestros proyectos, hacerlo fácil y esto es lo que vamos a describir aquí.

Si no se dispone de esta herramienta recomendamos se obtenga es gratis, para poder seguir nuestros pasos. En programación como ya se ha dicho en estas páginas, existen unas directivas generales que se utilizan de forma repetida y por ese motivo se ha descrito una plantilla del programador que encontrará en estás páginas, como herramienta menor de ayuda.

El entorno de trabajo MPLAB vers5, necesita de una configuración de las instrucciones para ‘que vaya como la seda’, ya hemos documentado este apartado en otras ocasiones y lo vamos a repetir aquí. Para empezar, se debe documentar todo nuestro trabajo, esto significa que los comentarios aclaratorios necesarios son: Nombre del Autor, Archivo, Fecha y Descripción de qué hace el programa y para este fin el MPLAB dice que detrás de «; » todo se considera comentario y no se tendrá en cuenta al compilar el listado.

abrirproyectoFig. 1

Podemos hacer una primera incursión en el MPLAB para tener una visión general de cómo proceder a compilar un listado que tengamos en formato .asm, después entraremos en detalles más extensos. Estos son los pasos:

  1. Ejecutar el programa MPLAB. Hay disponibles cuatro menús de iconos, como muestra la figura de abajo. Elegir el segundo menú para empezar un proyecto y el primero, para ejecutar distintas acciones de análisis.

  2. Menú FileNew, mostrará un cuadro de dialogo que dice: ‘A project is not currently opened’ o sea, que no hay un proyecto disponible, ‘desea crear uno’, pulsamos sobre la opción Yes para empezar. Si ya lo hemos usado con un proyecto y al salir lo guardamos, ahora nos propondrá si queremos abrirlo, pulsamos sobre la opción Yes para continuar con el proyecto.

  3. Mostrará una ventana ‘New Project‘ en la celda correspondiente daremos un nombre a nuestro proyecto y se puede elegir el directorio en el que guardarlo y pulsamos OK.

  4. Empezaremos a crear nuestro proyecto en la ventana ‘Edit Proyect‘ como se ve en la imagen de abajo a la izquierda.

En esta ventana hay cinco celdas en las que debemos introducir datos: En la primera, ‘Target Proyect’ aparecerá el nombre de nuestro proyecto. ‘Include Path‘, ‘Library Path‘ y ‘Linker …‘, se dejan como están. En ‘Development Mode‘ nos aseguramos que el sistema de desarrollo es el correcto ‘MPLAB SIM PIC16F84’ y en la cleda de abajo en ‘Language Tool Suite‘, se encuentraMicrochip.

4menuspFig. 2

Ahora viene la parte más compleja si se quiere, en el menú ‘Project’ la opción ‘Edit Project’ oCRTL+F3, abre un cuadro de dialogo, en la parte de abajo en ‘Project Files‘ aparecerá el nombre del archivo que vamos a producir con la extensión [.hex], al seleccionarlo, a su derecha se activará el botón ‘Node Properties…‘, lo pulsamos, aparecerá una nueva ventan con cuatro zonas diferenciadas, como se aprecia en la imagen de abajo, en la parte de arriba aparece la celda ‘Node‘ con el nombre del proyecto y la extensión hex, a su derecha la celda ‘Language Tool‘ que normalmente no se toca.

mplab_16p mplab_32p
Fig. 3                                    Fig. 4

En la zona central, se encuentra una cuadricula ‘Options‘ con seis columnas y distintas descripciones, observar que algunas no están activas, en definitiva y para acortar, deben estar activadas, en ‘On‘ las siguientes: ‘Hex Format‘, ‘Error File‘, ‘List File‘, ‘Case Sensitivity‘ y ‘Default radix‘ y activada en ‘Off‘ la de ‘Cross-reference File‘. Ya se describirán más adelante estos criterios, ver esto en la imagen que sigue.

nodepropertiesFig. 5

 Debajo, en la zona ‘Command Line‘, se muestran las ordenes que se han generado en según lo asignado en el apartado anterior. En la última zona ‘Additional Command Line Options‘ estará en blanco. Y para cerrar pulsamos OK.

  1. Se mostrará la ventana en blanco, de título Untitle1, donde se debe escribir nuestro programa (código fuente). Sin embargo como ya se ha dicho, en muchas ocasiones ya lo dispondremos de nuestro editor más habitual, podemos traer el código fuente hasta la carpeta donde tenemos el proyecto con la extensión .prj . Entonces con el ‘Edit Project‘ pulsamos el botón ‘Add Mode…‘ y nos abrirá una ventana para seleccionar la carpeta en la que localizamos la que contiene el archivo con la extensión .asm que ya tenemos guardado y luego pulsamos ‘Aceptar‘. Ahora el archivo ‘puntoasm’  se muestra debajo del anterior y para cerrar pulsamos ‘OK‘.
  2. Digamos que, ya está en el simulador MPLAB el listado, por fin podremos compilar el programa.
  3. Es el momento de acceder al ‘MenúProject‘ y ‘Make Project‘ o simplemente pulsamos la tecla F10. Esto abrirá una nueva ventana como la de la derecha, en la que se mostrará una barra de progreso de color verde e inmediatamente debajo, unos indicadores con los Errores, Warnings, Menssages, etc. si es que los hay, aunque no siempre hay errores.

1buildingsympFig. 6

Normalmente si hay errores, presentará una ventana como la mostrada debajo que, nos indicará todos los errores producidos y su localización el número de línea en la que se encuentra cada uno. Para corregir los errores, haremos doble clic en uno de ellos, el puntero se desplaza hasta la línea del listado de código que contiene el error, para que así lo modifiquemos. Revisamos las instrucciones que hayamos puesto, para corregir los fallos.

builderrorsFig. 7

Una vez rectificados los errores, volveremos al paso 7 y procederemos a la nueva compilación del programa, verificaremos que no se hayan producido errores o los rectificaremos hasta lograr la depuración del programa. Recuerde que nadie es perfecto y aprenda de sus errores.

El caso más común es que después de ciertas correcciones no presente errores, quizás una atención (warning) y obtendremos el listado en hexadecimal que se ha creado en la misma carpeta donde está el proyecto, éste es el que tenemos que usar con el ‘quemador’de chips descrito en otro artículo de la serie, para comprobar si nuestro proyecto refleja nuestros deseos, en caso de no ser así, debemos realizar los cambios necesarios en el programa y volver a empezar el proceso de compilar de nuevo hasta lograr nuestro propósito y luego a por otro proyecto.

COMO ESTIMULAR AL MPLAB.

Esta bien, cuando hemos terminado de ensamblar un listado .asm y antes de quemar el chip con este, es conveniente en muchas ocasiones, proceder a simular la ejecución del archivo hexadecimal generado para mayor seguridad y para esto el MPLAB incorpora de una herramienta que nos permite realizar dicha simulación. Hasta aquí, todo es normal el caso especial de necesitar estimular una línea, es decir, como por ejemplo, simular que se ha presionado un pulsador en un momento de la simulación, aquí es donde se necesita dominar esta herramienta.

sfregpFig. 8

En menú Window, disponemos de las ventanas que más nos servirán para seguir con detalle la evolución de la simulación, también están los iconos propios en las barras de menú que se menciona al principio de este artículo. Destaca la ventana del stack o pila, aquí se verán en acción la pila con sus 8 niveles y el último en ingresar es el primero en salir, para eso tiene que estar la simulación en activo.

La ventana que mayor importancia le doy, en la de ‘Special Function Register‘, o registros de función especial de la izquierda, en esta se aprecia la evolución de los distintos registros con sus valores cambiantes según el valor resultante de la ejecución de cada instrucción. Todo esto es posible examinarse mediante la ejecución del programa en el modo, paso a paso (step to step) o animado (animate). Es conveniente que el interesado haga su propia simulación en ambos modos y compruebe lo que ocurre en cada momento.

memoriaprogpFig. 9

Otra ventana es la de ‘Program Memory‘ a la derecha que, nos muestra la evolución del programa instrucción a instrucción, obsérvese las columnas que empiezan por 0000, corresponde a la localización en memoria y a su derecha con 4 dígitos, corresponde al código de la instrucción de esa línea, las siguientes columnas se refieren a la etiqueta, a la instrucción propiamente y a sus valores.

En Modify, podemos modificar el valor de un registro en un momento dado, para no tener que esperar tanto tiempo de ejecución como ocurre con un retardo. Sigamos con la simulación.

asincronoFig. 10

En el menú Debug/Simulator Stimulus…/Asincronus Stimulus tenemos la ventana donde se pueden configurar las señales que deben influir en la simulación como son, pulsadores, señales de reloj, etc. Al abrir esta ventana, muestra 12 botones que, en principio indican Stim 1(P), Stim 2(P), etc. Con el botón derecho del ratón sobre uno de ellos, mostrará una ventana para seleccionar distintas opciones. En nuestra simulación trata de sendos pulsadores en el puerto de entrada, por ej. RA2, RA3 y RA4.

clockstimFig. 11

En el mencionado menú emergente, se selecciona Assign pin… RA0, ahora es RA0 (P), nuevamente haremos click con el botón derecho sobre el mismo botón pero esta vez seleccionamos Toggle aquí significa pulsador, con RA3 y RA4 se procede del mismo modo.

registrospFig. 12

Una vez configurados estos botones, debemos iniciar el generador de tiempos que, como un generador dereset reloj, se encarga de enviar los pulsos a los terminales de puerto, indicados por los botones de estimulo anteriores, en la secuencia prevista. Ahora, en Debug/Simulator Stimulus…/Clock Stimulus, en la celda Stimulus pin, elegimos RA2, en High y Low anotamos 4 que, es la marca espacio de la señal o sea, el ancho del pulso H y L. Añadir los demás botones de tiempos pulsando Add.. y para aplicar todo esto, pulsamos sobre Apply. Por fin están configurados los estímulos.

simulo2gFig. 14

Antes de empezar la simulación, debemos hacer un Reset del micro, pulsando en este icono.

Al pulsar el Reset, el micro se inicializa y los valores de los registros empiezan a moverse según se ejecutan las instrucciones. En este momento debemos disponer cinco ventanas en pantalla, la de proyecto, para seguir el programa, la de registros, para ver la evolución de los mismos, la memoria que, permite ver los valores de memoria en uso, en la de tiempos y estímulos, ver posición en la figura para su mejor apreciación.

LA SIMULACIÓN.

Es el momento de iniciar la simulación, en menú Debug/Run/Step se inicia el simulador en modo paso a paso, este modo nos permite apreciar el trasvase de información entre los registros que intervienen al ejecutar una instrucción, una vez iniciado y dependiendo del programa a simular, podemos optar por la opción de ejecución animada mediante Debug/Run/Animate o usar Ctrl+F9, que empezará desde el punto en el que se encuentre en ese momento hasta el final del programa. Si hubiera algún error, se produce una parada que muestra una ventana emergente indicando el motivo, para poder corregir el error.ejec_opcodep

El proceso de simulación podemos pararlo con una pulsación en el botón semáforo rojo, para seguir sólo pulsamos Ctrl+F9 y seguimos la tarea, debe seguirse el proceso para entender lo que ocurre con nuestro programa. En alguna ocasión el programa nos pide que se presione un pulsador o requiere una señal de entrada por una línea de un puerto, esto puede parecer un problema de, como interactuar con el programa.

Supongamos que el programa trata de un temporizador que, se pone en marcha cuando se aprieta el pulsador A que está en RA1, iniciando el retardo de 1 minuto, al termino del mismo se activa un LED indicando que ha transcurrido el minuto. En ese caso al simular el programa, se ejecutará hasta la instrucción del lazo de espera a que se presione el pulsador y no avanzará hasta que le llegue esa señal. Para interactuar, usamos una herramienta que genera ese pulso en RA1 y podremos seguir. Estamos en el lazo.

Entonces abrimos la ventana Asincronus Stimulus y le ponemos RA1 en el primer botón y la opción Toggle, a continuación en la venta Clock Stimulus, ponemos lo que se indica en su apartado anterior que lo describe muy bien. Con esto, ya podemos seguir la simulación, las señales necesarias se producirán en el momento adecuado y se apreciará su efecto. Sin embargo, justo en nuestro programa se produce un retardo que para la simulación puede ser tedioso su seguimiento, no hay problema, está todo previsto en el MPLAB, en el menú Debug/Execute/Execute An Opcode…, elegimos la opción return y pulsamos Execute, en ese mismo momento habremos salido del lazo de retardo que nos retenía y seguirá la simulación si no hay otra condicionante.

OTRO MÉTODO.

Cuando haga la simulación de un retardo, como ya se ha comentado o ha de emplear largo tiempo en decrementar un registro, es interesante conocer esta posibilidad de Modificar que nos brinda el MPLAB.

Por ej. Estamos simulando un programa que crea una señal cuadrada a la salida RB0, para ello utiliza el TMR0 y la interrupción por desbordamiento del mismo, asignando el prescaler con un factor de división de 1/2. De esta forma las interrupciones saltarán a intervalos fijos de tiempo. Invirtiendo el estado de RB0 durante las interrupciones se conseguirá una onda cuadrada perfecta.

registrospFig. 16

Cuando estemos ejecutando el código y lleguemos a la rutina ‘hacer nada’, nos detenemos y debemos acceder a File Registers Window, en el menú Window/File Registers, se verá el cuadro Ventana Registros. Si nos fijamos en el código, el registro PCL está aumentando con cada instrucción, cuando llega a la rutina ‘hacer nada’, el valor es 08 como muestra la imagen, al detenernos el registro mantiene el valor, ahora vamos a modificar el valor de este registro, para reducir el tiempo de espera.

registros2pFig. 17

Con el botón derecho del ratón, hacemos un click justo sobre 08 y luego en File Register(s) como se aprecia en la imagen de arriba y nos muestra un cuadro de diálogo Modify (ver debajo), en él seleccionar en Address, el registro que vamos a modificar, en este caso 01 y en Data/Opcode el nuevo valor para ese registro en este caso ff (este valor hace que llegue al máximo de la cuenta), tal como se ve en esta imagen.

modifipFig. 18

Luego le damos a Write (escribir) y se habrá modificado el valor del registro 0x01, para seguir la simulación. Ahora si, le damos a los F7 para ver que el registro adquiere el nuevo valor, con la siguiente F7, el registro se desborda y hace que el programa avance en su ejecución saliendo del lazo y saltando a la subrutina de servicio de interrupción (RSI) BCF INTCON, 2 en la imagen simulación, esto quiere decir que todo va correctamente y nos ahorramos una larga espera.

Que podemos decir de una temporización de 50 segundos, lo que se hacemos allí es verificar que los respectivos registros (19h,1Ah, 1Bh, 1Ch y 1Dh) se decrementan con cada iteración del programa, de modo que, nuevamente nos encontramos ante un prolongado tiempo de espera para verificar una rutina que ha entrado en un lazo de retardo y ya conocemos su funcionamiento.

Con este ejemplo puede darse por aclarado el uso de algunas de las opciones que nos ofrece esta herramienta que es el MPLAB.

DESENSAMBLADOR.

En alguna ocasión cuando por motivos extraños, se pierde un listado en asambler (.asm) y solo dispones del listado en hexadecimal. La mejor forma de proceder para disponer del listado es usar un desensamblador, personalmente recomiendo el que viene integrado en el MPLAB.

El procedimiento es el siguiente:

  • En el menú File, ir a Import y elegir el archivo en hexadecimal (.HEX)
  • En el menú View, ir a Program Memory; dispone de tres opciones: OPCODE HEX, MACHINE y SYMBOLIC.
  • Sobre la pantalla, botón derecho pulsar ‘Output to file’ para terminar.

«Vaya a FILE, IMPORT y elija el archivo .HEX que desee desensamblar. Luego vaya a VIEW, PROGRAM MEMORY y fíjese que abajo tiene 3 opciones. OPCODE HEX,  MACHINE , SYMBOLIC. Luego botón derecho sobre la pantalla ‘… Output to file’ y listo ya puede tener un .asm del archivo elegido. Eso sí, luego será trabajo suyo determinar que es variable y que no lo es, etc.»

Más adelante y si tengo tiempo abordaré este tema con más profundidad en el que hablare de cómo influir en el MPLAB para simular la acción de un pulsador o un interruptor, por ejemplo, aunque entiendo que ya hay artículos en la red que lo describen muy bien y desde aquí lo hago constar. Este párrafo lo redacté en 2005, en estos momentos ya se ha modificado para mejor.

Manual Rápido del MPLAB.
Etiquetado en:

Un pensamiento en “Manual Rápido del MPLAB.

Deja un comentario