Descargar ASM
Pueden descargarlo y subirlo a su MPLAB para que sigan paso a paso la guía. Si conocen poco o casi nada del lenguaje assembler, no se preocupen, en la sección de “Mis primeros programas” brindo información acerca del código, que es lo que hace, etc.
Una vez tengamos el archivo del programa o hayamos copiado el código en un archivo en blanco, como había explicado en la guía anterior, tenemos que compilarlo para descartar que no tenga errores, como comandos mal escritos, espacio de memoria excedido, etiquetas no creadas, etc. Menú superior Project luego Build All (Crtl +F10) o como vemos en la siguiente imagen:
Como vemos también se compila haciendo clic en el icono Build All .Con esto compilará el programa y se crearán archivos de error, mapa del programa, archivos objetos y archivos .hex.
Si todo está correcto les debe salir ese cuadro verde y el mensaje BUILD SUCCEEDED.
Ahora generemos un error para que vean el mensaje que se genera y la información que brinda el programa.
Ahora nos sale un error BUILD FAILED y los mensajes informan de cual se trata, aunque la mayoría de las veces es más difícil encontrar el error, en un programa más extenso por ejemplo.
Comencemos a ver las utilidades para analizar el programa y comprobar que funciona como queremos que lo haga.
Una vez el código haya sido compilado satisfactoriamente podemos ver todas estas ventanas:
Menu superior View, ahí encontramos todas estas ventanas: Registros de archivo ( los puertos, nuestras variables, etc) ,EEPROM, Registros especiales(TIMERS, STATUS, WREG, PLC, EEDATA, etc) y más.
La ventana Watch es para poder ver nuestras variables de una mejor forma, los cambios que presentan, su dirección, solo buscando nuestra variable en la lista desplegable y haciendo clic en Add SFR/Symbol. Tenemos 4 ventanas Watch como pueden ver en la parte inferior de la imagen.
Ahora con todas estas variables a la vista podemos comenzar a simular.
Menú superior Debugger luego en Select Tool en MPLAB SIM
Nos aparecerá el siguiente cuadro en la parte superior derecha:
                                                      
                                 
•Run (F9): Al activarse esta opción el programa se ejecuta a toda velocidad en "modo tiempo real", aunque no hay que olvidar que se trata de una  simulación por ordenador. La ejecución comienza en la dirección actual del contador de programa (PC). Mientras el programa está en ejecución Step  y Run están deshabilitados y se detiene si se activa Halt
•Animate: Esta opción es similar a la anterior pero en este caso el programa se simula de forma automática desde la dirección que indique el PC en el  instante en que se active. Equivale a pulsar contínuamente Step Into. Se detiene con Halt.
•Halt (F5): Detiene la ejecución del programa, el contador de programa se detiene y se actualiza la información. Como un Pause.
•Step Into (F7): Esta acción ejecuta la instrucción actual y se detiene, actualizándose la información, es decir, ejecuta instrucción por instrucción  haciendo clic sobre él. Si se realiza un Step Into sobre una instrucción SLEEP, como en la realidad, el dispositivo pasa a modo sleep, siendo  necesario despertarlo para continuar, por ejemplo mediante un reset.
•Step Over (F8): Ejecuta la instrucción actual y se detiene, actualizándose la información. Parecido a Step Into, pero si la siguiente instrucción es un  CALL, lo ejecuta como si fuera otra instrucción más y continua. Esta herramienta es muy útil, luego lo veremos.
•Step Out: Si la localización actual está dentro de una subrutina, la termina y retorna al programa principal.
•Reset: Esta opción inicializa el sistema. El Contador de Prograna (PC), que es la dirección de memoria donde se encuentra la primera instrucción  que ejecuta el microcontrolador cuando se realiza un reset en el sistema, se pone a 0. A esta dirección de memoria se le denomina vector de reset.
Cuando usamos librerías utilizamos frecuentemente la instrucción CALL para llamar nuestra función, en las simulaciones podemos pasar de un solo paso toda nuestra función con Step Over. Personalmente lo uso varias veces cuando simulo un programa, me acerca más rápido al punto donde hay conflictos en mi lógica de programación.
Teniendo todas estas ventanas y herramientas de simulación, tenemos aún más herramientas para verificar nuestro programa y hacer que funcione como queremos en la práctica.
Los Breakpoints
Los breakppoints son puntos donde los comandos Run y Animate se detienen, como estas se ejecutan rápidamente, podremos estar en el punto seleccionado rápidamente y continuar con un análisis detallado con el comando Step Into instrucción por instrucción.
Hay dos maneras de crear los breakpoints, una es haciendo doble clic en la línea donde queremos crearla y la otra es entrando directamente, menú superior Debugger luego en Breakpoints (F2). De este segundo modo se escribe el número de la línea donde se quiere crear el breakpoint (0x1,0x2,etc).
La B de rojo es con doble clic y la de amarrillo es con F2, donde escriben el número, funcionan igual.
Cambios directos en los puertos de salida, variables
Cuando queremos realizar cambios en nuestros puertos de entrada o en nuestras variables para comprobar nuestro código, podemos hacerlo dando doble clic sobre el dato a cambiar, luego ingresamos el valor nuevo para el dato y damos enter, normalmente empleo esto en la ventana File Registers, también se puede hacer el cambio en la ventana Watch y en Special Function Registers, aunque en esta última están los registros especiales, evito modificar estos porque están muy ligados al programa y solo complicaría mi análisis, aunque depende del caso. En File Registers se puede modificar el dato en binario, decimal o hexadecimal.
El PLC o contador automático de programa siempre está cambiando en las simulaciones.
En la imagen estoy cambiando el dato de COUNT2 por un “8”. Cambie COUNT1 por "150", cuando se cambian pasan al color rojo.
Controlador de estímulos
Los puertos configurados como entradas también se pueden modificar para un mejor análisis del programa. Una vez activado el simulador MPLAB SIM podemos acceder en el menú superior Debugger luego en Stimulus Controller luego New scenario. Nos aparecerá la siguiente ventana:
Aquí podemos acceder a los pines de los puertos de entrada como podemos ver en la imagen, accedí al RA1 y RA2 del puerto A y estoy dando estímulos de nivel alto y bajo.
Tenemos estímulos del tipo Action Toggle, que cambia de estado una entrada, también Set High que aplica un 1, Set Low que aplica un cero y Pulse High/Low que proporciona un pulso de corta duración, este último lo podemos modificar para el ancho de pulso que queramos, desde 1 ciclo maquina hasta n segundos.
Luego solo debemos dar clic en Fire, al costado del pin seleccionado en “>“ nos aparece el mensaje Fire Button. Accionado nos aparecerá el mensaje del estímulo dado en la ventana Output y el dato del puerto A en este caso, cambiara y se pondrá rojo como podemos ver en la imagen.
El StopWatch
Retomando la simulación del programa principal, el que está arriba, y estando en modo simulación el MPLAB, ingresamos al StopWatch, menú superior Debugger luego StopWatch.
Esta es una herramienta poderosa, podemos calcular los tiempos de ejecución de nuestras rutinas con una gran aproximación. Primero vamos a modificar la frecuencia de trabajo del simulador, en Debugger escogemos la opción Settings… nos aparecerá la siguiente ventana:
Modificamos a 4MHz que es la frecuencia a la que trabajara el programa principal en la práctica. Pueden modificar el valor según sus requerimientos. Considerando que una instrucción (excepto los saltos) consume cuatro ciclos de reloj y un ciclo de reloj es 1/4MHz (para la frecuencia de trabajo de mi programa), entonces una instrucción consume 4(1/4MHz) = 1us.
Calculando cuánto dura nuestra rutina, obtenemos con el Stopwatch alrededor de 200ms.
El botón Zero es para reiniciar los contadores a “0”.
Como pueden ver tenemos varias herramientas para analizar nuestros programas.
Es el momento de practicar
No hay comentarios :
Publicar un comentario