Notas Técnicas de Uso y Aplicación 3.3 CODEWARRIOR PARA HC08 V3.1 Ambiente Integrado de Desarrollo para Programación de Microcontroladores en ASM, C y C++ INDICE Preparado por: Edwin de Roux 3.3.1 Introducción 350 e-mail : masterhost3d_2@yahoo.es 3.3.2 Descarga de CodeWarrior 3.1 351 web site : http://www.geocities.com/masterhost3d_2/ 3.3.3 Instalación del Archivo de Licencia 352 Estudiante Graduando de Lic. en Ing. Eléctrica y Electrónica 3.3.4 Iniciando un Proyecto 353 Y Por: Rangel Alvarado 3.3.5 Diagrama de Flujo 356 Estudiante Graduando de Lic. en Ing. Electromecánica 3.3.6 Código 357 Universidad Tecnológica de Panamá 3.3.7 Simulación en Circuito 364 Panamá, Panamá 3.3.8 Programación en Circuito 366 e-mail : issaiass@cwpanama.net 3.3.9 Solución a Algunos Problemas web site : http://www.geocities.com/issaiass/ y Consejos 367 3.3.10 Referencias 369 3.3.1 Introducción El leguaje ensamblador es ideal cuado se desea controlar y configurar el microcontrolador en forma precisa y bastante cercano al hardware, pero su desventaja es a la hora de crear una mejor versión del mismo programa, esta tarea se vuelve una verdadera hazaña, sobre todo si es un programa robusto. Es por esta razón la mayoría de los programadores prefieren utilizar lenguajes de alto nivel como el lenguaje C, para realizar programas. Este lenguaje nos permite crear rutina, procesos matemáticos y lógicos con mayor facilidad, programas que en ensamblador son grandes, en lenguaje C disminuyen considerablemente las líneas de código. El software CW 3.1 es limitado a 32 archivos por proyecto pero la licencia permite compilar hasta 16 kb de código Nota: Para información más específica, si el tutorial no satisface sus necesidades, refiérase al AN2616 del sitio de Freescale, o de la ayuda del Programa CodeWarrior V3.0. F.I.E., C.D.P., 2005
CodeWarrior V3.1 351 3.3.2 Descarga de CodeWarrior 3.1 En esta sección refiérase a la figura 194. (a) Navegue a la dirección: http://www.metrowerks.com/mw/download/default.asp (b) Seleccione CodeWarrior para HC08 y presione Select. Llene los campos y acepte en Submit. (c) Acceda su correo y baje el software con la licencia de la ubicación que se describe en su correo. (a) Seleccione el software CW3.0 y presione Select (b) Llene el formulario y presione Submit (c) Revise su correo electrónico para la confirmación de descarga de archivos To download your software, please use the following link: ftp://ftp.metrowerks.com/pub/embedded/hc08/cw08_v3_1_web.exe - 161.8 MB To use your software you must have a license key, please use the following link to download one: ftp://ftp.metrowerks.com/pub/embedded/hc08/cw08r31_se2license.zip Figura 164. Descarga de CW 3.1. (a) Sección de Download de Metrowerks. Navegue a la dirección en la parte a, seleccione el software. (b) Formulario. Llene los campos, presione submit (c) Correo de confirmación. Revise su correo y descargue el software y la licencia. (d) Ejecute CW08_V3_1_Web.exe y siga los pasos hasta finalizar la instalación.
Nota Técnica 352 3.3.3 Instalación del Archivo de Licencia Refiérase esta sección a la figura 165. (a) Desde el Escritorio de Windows, busque: Programas/Metrowerks/CodeWarrior/CW08 V3.1; y ejecute License File. (c) Guarde el archivo de licencia (b) Copie al final el contenido de la nueva licencia (a) Ejecute el archivo de licencia Figura 165. Copia del Archivo de Licencia. (a) Archivo de licencia. Ejecute el archivo de licencia. (b) Modo de copia del archivo de licencia. Copie el contenido del archivo SElicense.dat al final del contenido del archivo de licencia (c) Salve y cierre la ventana. (b) Del paso (c) de la figura 164 abra el archivo SElicense.dat 1 desde otra ventana de NOTEPAD. (c) Copie el contenido de license.dat y péguelo al final del archivo de licencia. Salve el contenido y cierre la ventana. 1 El archivo está comprimido en CW08R31_SE2license.zip.
CodeWarrior V3.1 353 3.3.4 Iniciando un Proyecto Escriba el nombre del proyecto aquí (a) Elija el tipo de microcontrolador (b) No utilice PC-lint Elija el formato de punto flotante El(Los) lenguajes de programación No Utilice Processor Expert (c) Elija el tipo de Modelo de Memoria (d) Elija su tipo de conexión (f) (e) (g) Figura 166. Iniciación de un proyecto rápido con CW3.1. El proyecto se inicia gracias a una interfase de asistente tipo wizard. Importante: Para compilar cualquier proyecto, solo agregue el main.c y sus archivos *.c y *.h generados por ud. en su carpeta de proyecto. (h)
354 Desde aquí se escribe el código Aquí se declaran los vectores de interrupciones. (a) (b) (c) Figura 167. Proyecto con CodeWarrior 3.1. (a) Ventana de Proyecto. Agregue los nuevos archivos en esa sección (b) main.c. El código principal se escribe aquí. (c) Archivo Linker. Responsable de definición de áreas como FLASH y RAM. Para esta sección refiérase a las figuras 166 y 167. Para iniciar un proyecto: (a) Inicie CodeWarrior IDE. (b) Seleccione File New.
CodeWarrior V3.1 355 Seleccione: (c) HC(s)08 New Project Wizard y escriba el nombre de su proyecto. (d) El dispositivo de trabajo, p.e. MC68HC908JL3. (e) El código de trabajo, p.e. C solamente. (f) No utilizar Processor Expert. (g) No incluir un proyecto con PC-lint. (h) El formato a utilizar sobre el tipo de punto flotante, p.e. None. (i) El modelo de tipo de memoria a utilizar, p.e. Small. (j) El tipo de conexiones, p.e. P&E Full Chip Simulation. Finalmente se abre una ventana con el proyecto, de los cuales nos importan son: main.c y P&E_FCS_Linker.prm. (a) main.c contiene el código de nuestro programa. (b) P&E_FCS_Linker.prm contiene la información de áreas como FLASH, ROM y Vectores de Interrupción. (c) Conocido como se inicializa un proyecto, vamos a trabajar uno existente.
Nota Técnica 356 3.5.5 Diagrama de Flujo El objetivo del programa es prender y apagar el LED conectado al PTD7 dependiendo del estado del jumper PTB5. (a) Si el jumper está levantado, parpadea lentamente. (b) Si el jumper es retornado a su posición, parpadea rápidamente. Rutina Principal, prende y apaga el LED Subrutina de Retardo (b) (a) Figura 168. Diagrama de Flujo de CodeWarrior. (a) Programa Principal. Prende o apaga un LED. (b) Subrutina de retardo. Demora de software.
CodeWarrior V3.1 357 3.3.6 Código * UNIVERSIDAD TECNOLÓGICA DE PANAMÁ * PANAMÁ, REPÚBLICA DE PANAMÁ * * Archivo : main.c * Programador(es) : Rangel Alvarado * Lenguaje : ANSI-C * Descripción : Conmutar un LED conectado al Puerto * PTD7 dependiendo del estado del jumper * PTB5. * Jumper Levantado : Conmuta más lentamente. * Jumper Abajo : Conmuta más rápidamente. * Notas : Ninguna * * ---------------------------------------------------------------------------- * HISTORIAL * DD MM AA * 04 01 04 Creado. * 17 11 04 Modificado. * ARCHIVOS CABECERA #include <hidef.h> for DisableInterrupts macro #include <MC68HC908JL3.h> include peripheral declarations #include "chipmode.h" Compilación condicional, define estado de: (1) Simulación en circuito, [por defecto] (2) Programación, para la aplicación #include "definiciones.h" Definición de partes del programa principal #include "funciones.h" Definición de funciones a usar
Nota Técnica 358 * PROGRAMA PRINCIPAL void main(void) { DisableInterrupts; Deshabilita Interrupciones CONFIG1 = 1; Deshabilida el watchdog PTD = 0; Inicializa Puerto DDRD = 0x80; Bit7, Puerto D como salida for( ; ;) { Para siempre delay(); Retardo de software PTD = ~PTD & 0x80; ~PTD, convierte 1's por 0's ejemplo: ~1001 1100 = 0110 0011 Resultado & 0x80, enmascara el bit 7 ejemplo 0110 0011 1000 0000 --------------- 0000 0000 En la siguiente iteración: ~0000 0000 = 1111 1111 1000 0000 --------------- 1000 0000 if(levanto_el_jumper) { Si el Jumper está arriba delay(); Retarda delay(); Retarda delay(); Retarda } Fin de la condicional } loop forever } Fin del programa principal Listado 23. main.c CodeWarrior. Archivo principal que realiza la función de prender y apagar un LED en PTB7 dependiendo del estado del jumper PTB5.
CodeWarrior V3.1 359 * UNIVERSIDAD TECNOLÓGICA DE PANAMÁ * PANAMÁ, REPÚBLICA DE PANAMÁ * * Archivo : chipmode.h * Programador(es) : Rangel Alvarado * Lenguaje : ANSI-C * Descripción : Defina el modo de programación si se va a quemar * en la memoria FLASH para correr la aplicación en * tiempo real. * Notas : PROGRAMACION 0 = Simulación en circuito. * PROGRAMACION 1 = Para programación de la pastilla. * ---------------------------------------------------------------------------- * HISTORIAL * DD MM AA * 04 01 04 Creado. * 14 11 04 Modificado. * MACROS & CONSTANTES #define PROGRAMACION 0 0 = Simulación en circuito 1 = Para programación de la pastilla #if PROGRAMACION == 1 Si se define programación #define tiempo 5000 la variable tiempo es 5000 #else De lo contrario #define tiempo 127 define el tiempo como 127 #endif Fin de la compilación condicional Listado 24. chipmode.h CodeWarrior. Macros de programación o aplicación.
Nota Técnica 360 * UNIVERSIDAD TECNOLÓGICA DE PANAMÁ * PANAMÁ, REPÚBLICA DE PANAMÁ * * Archivo : definiciones.h * Programador(es) : Rangel Alvarado * Lenguaje : ANSI-C * Descripción : Definiciones de macros del programa. * Notas : PTB5 = Puerto B5, Bandera. * PORTB5 = And Lógico entre bit 5 y el puerto B * ---------------------------------------------------------------------------- * HISTORIAL * DD MM AA * 04 01 04 Creado. * 17 11 04 Modificado. * MACROS & CONSTANTES #define PORTB5 0x20 Bandera, BIT5 #define levanto_el_jumper PTB & PORTB5 And lógico, Enmascara el PTB5 1100 1010 0011 0001 0010 0000 0010 0000 --------------- --------------- 0000 0000 0010 0000 Listado 25. definiciones.h CodeWarrior. Define Bit5 del Pueto B y su máscara, que serán usados en el programa principal.
CodeWarrior V3.1 361 * UNIVERSIDAD TECNOLÓGICA DE PANAMÁ * PANAMÁ, REPÚBLICA DE PANAMÁ * * Archivo : funciones.h * Programador(es) : Rangel Alvarado * Lenguaje : ANSI-C * Descripción : Declaración de funciones. * ---------------------------------------------------------------------------- * HISTORIAL * DD MM AA * 04 01 04 Creado. * 17 11 04 Modificado. * PROTOTIPO DE FUNCIONES LOCALES void delay(void); Retardo de software Listado 26. funciones.h CodeWarrior. Declara las funciones a usarse en el programa main.c, p.e. delay, que equivale a un retardo de software.
Nota Técnica 362 * UNIVERSIDAD TECNOLÓGICA DE PANAMÁ * PANAMÁ, REPÚBLICA DE PANAMÁ * * Archivo : ADC.h * Programador(es) : Rangel Alvarado * Lenguaje : ANSI-C * Descripción : Funciones del Convertidor. * ---------------------------------------------------------------------------- * HISTORIAL * DD MM AA * 29 08 04 Creado. * 29 08 04 Modificado. / FILE : funciones.c PURPOSE : Definición de funciones. FUNCTIONS : delay LANGUAGE : ANSI-C ---------------------------------------------------------------------------- HISTORY DD MM YY 04 01 04 Created. 04 01 04 Last Modification. ************************************************************************************************ * ARCHIVOS CABECERA #include "chipmode.h" Compilación condicional, define estado de: (1) Simulación en circuito, [por defecto] (2) Programación, para la aplicación
CodeWarrior V3.1 363 * * RETARDO DE TIEMPO * * Descripción : Retarda un tiempo "n" dado por el contador retardo. * Argumentos : Ninguno * Retorno : Ninguno * Notas : Ninguna void delay (void) { unsigned int retardo = 0; Variable de retardo while (retardo < tiempo) { Mientras retardo no llegue al tiempo retardo++; Incrementa el contador } Ejecuta hasta que retardo iguale a tiempo } Listado 27. funciones.c CodeWarrior. Implementa la función de retardo.
Nota Técnica 3.3.7 Simulación en Circuito 364 Para esta sección refiérase a las figuras 169 y 170. Ubique los archivos *.c y *.h antes de archivos generados por el programa. Añada los archivos con el botón derecho. (a) (b) Figura 169. Archivos Añadidos al Proyecto. (a) Forma de añadir archivos. Botón derecho. (b) Orden de compilación. Ubique los archivos *.h y *.c antes de los archivos generados.. (a) Del archivo zip, cargue los programas a la carpeta de su proyecto. (b) En CW3.1 IDE, con el botón derecho sobre la ventana de proyectos añada los archivos chipmode.h, funciones.h, definiciones.h, funciones.c y sobrescriba el main.c. (c) Presione el botón make [ ] para compilar y luego debug [ ] para iniciar la simulación. (d) Al ingresar, cambie el modo Full Chip Simulation a In Circuit Simulation. (e) Presione YES a la confirmación.
CodeWarrior V3.1 365 (b) Presione YES para la confirmación (a) Cambie del modo inicial al modo In-Circuit Simualtion. Figura 170. Simulación y Depurador en Tiempo Real. (a) Cambio de ventana de simulación. Cambie de Full Chip Simulation a In Circuit Simulation. (b) Ventana de confirmación. Presione YES para recargar el código.. (f) Presione el botón run [ observe que sucede. ], levante o baje el jumper conectado a PTB5 y (g) Para detener la simulación, presione el botón halt [ ].
Nota Técnica 366 3.3.8 Programación en Circuito Para esta sección refiérase a las figuras 170 y 171. (a) En el listado chipmode.h 2, cambie a: #define PROGRAMACION 1 0 = Simulación en circuito 1 = Para programación de la pastilla (b) Siga el paso 170(c). (b) Cambie al modo de In Circuit Debugging/Programming 3 y presione YES a la confirmación. (c) En la ventana de Programación presione YES y espere a que su pastilla sea programada con la información. Presione YES (a) Ventana de Confirmación de Borrado y Programación de la Memoria Flash Espere a que su pastilla sea programada y presione YES al finalizar (b) Ventana de Programador de P&E Micro en CW V3.0 Figura 171. Depurador/Programador en Circuito. (a) Ventana de programación y borrado. Presione YES. (b) Ventana de Programador. Espere a que su pastilla sea programada. 2 Listado 24. 3 Ver figura 170(a), debajo de In Circuit Simulator
CodeWarrior V3.1 3.3.9 Solución a Algunos Problemas y Consejos 367 A continuación se listan algunos problemas más frecuentes con el compilador y soluciones o posibles alivios a cada error. 3.3.9.1 En el archivo de Proyecto no Posee Ninguna Información del DWARF (Advertencia L1923) El archivo DWARF es el archivo encargado del formato/información del depurador si no se tiene presente, el programa se ejecutará de manera errónea. Luego de agregar la información DWARF proceda a compilar. (a) Fíjese en la columna donde reside el insecto verde, el punto negro. (b) Aquel archivo *.c que NO posea el punto, es un archivo sin información DWARF. (c) Doble clic sobre el archivo a agregar DWARF. Figura 172. Solución a archivo sin información DWARF. (a) Identificación de archivos con información DWARF. Fíjese en la columna del bug, punto negro. (b) Archivo sin información DWARF. Un archivo sin información DWARF no posee punto negro (solo archivos *.c ). (c) Corrección del error del DWARF. Haga doble clic sobre el(los) archivo(s) a agregar la información DWARF y compile.
Nota Técnica 368 3.3.9.2 No se Encuentra la Ruta del Archivo a Compilar Cuando el IDE inicia su proceso de compilar, busca entre las rutas o accesos a archivos por medio de la configuración del programa. (a) Cargue el panel de configuraciones (b) Seleccione el vínculo a las rutas a reconocer (c) Agregue el camino de archivos a segur, p.e. carpeta: (d) Presione OK cuando decida terminar. Figura 173. Solución a Caminos Rotos del Compilador. (a) Panel de configuraciones. Cargue el panel. (b) Panel de Dispositivo. Ubíquese en las rutas de acceso. (c) Rutas de Acceso. Seleccione o agregue las rutas de acceso rotas (sin marca) y presione OK. 3.3.9.3 Ver el Archivo de Listado Generado (Ensamblador) Para ver el archivo de listado generado, presione sobre el archivo *.c Ctrl.+Shitf+F7.
CodeWarrior V3.1 369 3.3.10 Referencias 3.3.10.1 Motorola, Web site de Semiconductores (a) http://www.freescale.com/ 3.3.10.2 Application Note sobre CodeWarrior V3.0 (a) AN2616 3.3.10.3 Compañías de Desarrollo de Software para sistemas embebidos (a) http://www.pemicro.com/ (b) http://www.metrowerks.com/ (c) http://www.cosmicsoftware.com/ (d) http://www.imagecraft.com/ 3.3.10.4 Página de Información sobre microcontroladores HC08 (a) http://www.mundomicro.com.ar/ (b) http://www.ingenieria-inversa.com.ar/ (c) http://www.ingdubatti.com.ar/ (d) http://www.bairesrobotics.com.ar/ (e) http://www.elektronikladen.de/hc08/ (f) http://www.hc08.cz/ (g) http://www.ranchbots.com/hc08/hc08.htm 3.3.10.5 Aprendiendo C para microcontroladores HC11 (a) http://www.ece.utexas.edu/~valvano/embed/toc1.htm 3.3.10.6 Proyectos de µc de 8-bits Concurso Flash Innovations 2003 (a) http://www.circuitcellar.com/fi2003/ 3.3.10.7 Distribuidores de Equipos Electrónicos (a) http://www.jameco.com/ (b) http://www.digikey.com/ (c) http://www.mouser.com/ 3.3.10.8 Grupos de Yahoo para microcontroladores HC08 (a) http://www.groups.yahoo.com/group/mcumotorola (b) http://www.groups.yahoo.com/grup/68hc05_08 (c) http://www.groups.yahoo.com/group/hc08