Você está na página 1de 270
CompnaporC ees ~~. PAE eg UPL Ay.) MicroconTroLapores PIC TE fiat air iii We lel i i k ‘tied g gy 2 Ly | ial il (res==a] id ig Compitapor C CCS Y SimuLapor PROTEUS PARA Microcontrotapores PIC Eduardo Garcia Breijo &y Alfaomega EX marcombo ediciones léenicas Datos catalogréficos Garcia, Eduardo ‘Compilador C CCS y simulador PROTEUS para Microcontroladores PIC Primera Edicién Alfaomega Grupo Editor, S.A. de C.V., México ISBN: 978-970-15-1397-2 Formato: 17x 23cm Péginas: 276 Compilador C CCS y simulador PROTEUS para Mierocontroladores PIC Eduardo Garcia Breijo ISBN: 978-84-267- 1495-4, edicién original publicada por MARCOMBO, S.A., Barcelona, Espafia Derechos reservados © MARCOMBO, S.A. Primera edicién: Alfaomega Grupo Editor, México, junio de 2008. © 2008 Alfaomega Grupo Editor, S.A. d Pitégoras 1139, Col. Del Valle, 03100, México D.F. Miembro de la Cémara Nacional de la Industria Editorial Mexicana Registro No. 2317 Pag. Web: http:/www.alfaomega.comamx E-mail: libreriapitagoras @alfaomega.com.mx ISBN: 978-970-15-1397-2 Derechos reservados: Esia obra es propiedad intelectual de su autor y los derechos de publicacién en lengua espafiola han sido legalmente transferidos al editor. Prohibia su reproduccién parcial 0 total por cualquier medio sin permiso por escrito del propietario de los derechos del copyright. Nota importante: La informacién contenida en esta obra tiene un fin exclusivamente didéctico y, por lo tanto, no esté previsto su aprovechamiento a nivel profesional o industrial. Las indicaciones técnicas y programas incluidos, han sido elaborados con gran cuidado por el autor y reproduciddos bajo estrictas normas de control. ALFAOMEGA GRUPO EDITOR, S.A. de C.Y. no seri jurfdicamente responsable Or: ertores u omisiones; daiios y perjuicios que se pudieran atrbuir al uso de la informacién comprendida en este libro y en el CD-ROM adjunto, ni por la utlizacién indebida que pudiera darsele Exdicién autorizada para venta en México y todo el continente americano. Impreso en México. Printed in Mexico. Empresas del grupo: México: Alfuomeva Grupo Esitor, S.A. de C.Y. — Pitdgoras 1139, Col. Del Valle, México, DF ~C.P. 03100. Tel: (52-5) 5089-7740 — Fax: (52-55) 5575-2420 / 2490. Sin costo: 0-800-020-4396 E-mail: libreriapitagoras@alfaomega.com.mx ‘Colombia: Alfaomega Colombiana S.A. ~ Carrera 15 No. 64 A 29 ~ PBX (57-1)2100122 Fax: (57-1) 6068648 — E-mail: scliente@alfaomega.com.co Chile: Atfaomega Grupo Editor, 8.A.— General del Canto 370-Providencia, Santiago, Chile ‘Tel: (56-2) 235-4248 = Fax; (56-2) 235-5786 — E-mail: agechile@alfaomega.cl ‘Argentina: Alfaomega Grupo Faitor Argentino, S.A. ~ Paraguay 1307 P.B. “11”. Capital Federal, Buenos Aires, CP. 1057 ~ Tel.: (54-11) 4811-7183 / 8352, E-mail: info@aifeomegaeditor.com.ar Indice analitico 1. ISIS de PROTEUS VSM 1.1 Introduccién. 1.2 Captura electronica: entorno grafico ISI 1.3 Depuracién de los sistemas basados en PICmicro. 2. Compilador CCS C 2.1 Introduccién 2.2 Esteuctura de un programa 2.3 Tipos de datos. 2.4 Las constantes.. 2.5 Variables 2.6 Operadores 2.6.1 Asignaciéa... 2.6.2 Aritméticos 2.6.3 Relacionales . ; 2.6.4 Légicos... 28 2.6.5 De bits... 28 2.6.6 Punteros. 2.7 Funcion 2.8 Declaraciones de control 2.8.4 WHILE / DO-WHILE 2.8.5 Owros.. 2.9 Comentarios. 2.10 Directivas y funciones (Preprocessor commands y built-in functions) 2.11 Librerias, drivers y Sempion. . : 242 Enmweno de tebsjo de CCS C Compile (2.12.1 Introducciés 2.12.2 Entorno de trabajo. 3, La gestion de los puertos 3.1 Introduccién.. 3.2 Gestion de puertos en C. 3.2.1 A través de la RAM. 3.3.1 LCD. 3.3.2 LCD gritico, 3.3.3 Teelado (keypad . 4, Las interrupciones y los temporizadores... 4.1 Introduccion 4.2 Interrupciones. 4.2.1 Inteerupciones en 4.3 TIMER, 4.3.1 TIMERO en ens 4.4 TIMERI y TIMER2..... 4.4.1 TIMERI y TIMER2 en C 5. Convertidor Analdgico — Digital. 5.1 Introduceién. 5,2 Médulo Convertidor (gama media) 5.2.1 Registros FSR. cst 5,2.2 Proceso de conversion 5.2.3 Efecto del modo SLEEP y RESET en el médulo AD. 5.3 Médulo AD en C oe <7 6. Médulo CCP - Comparador, Captura y PWM .. 6.1 Introduceién: 6.2 Modo Captura 6.3 Modo Comparacién... 6.4 Modo PWM 6.5 Médulo CCP en C 7. Transmisién serie.. 7.1 Introduecién: 7.2. El médulo USART/SC 7.2: Introduccion. 7.2.2 El médulo USART en C 7.2.3 La norma RS232. : 7.3 Puerto serie sincrono (SSP). 7.3.1 Intesfaz Inter-Circuitos (2C) 8. Gama Alta — PICI8 8.1 Introduccién... 8.2 Organizacién de la memoria.. 8.2.1 Arquitectura HARDVARD... 8.2.2 Memoria de Programa... 8.2.3 Contador de Programa .. 8.2.4 Memoria de Configuracién 8.2.5 Pila 8.2.6 Memoria de Datos. 8.2.7 Memoria EEPROM... 82.8 Modos de Direccionamiento 8.2.9 Interrupcion: 8.2.9.1 Registros de salvaguarda 8.2.10 Registro W’... 8.2.11 Osciladot. 8.2.12 Unidades Funcionales.. 8.2.12.1 Puertos de entrada/salida 8.2.12.2 Temporizadores.. 82.123 Convertidor Analégico-Digital... 82124 Canal de Comanicacin Serie (EUSART). &2.12.5 Modulo Master SSP (MSSP). 8.2.12.6 Modulo de Compracién/Captura/PWM. co 8.2.12.7 Modulo Comparado: 8.2.12.8 Modulo de referencia... ! 8.2.12,.9 Modulo detector de Alto/Bajo Voltaje... 9. RTOS - Real Time Operating set 9.1 Introduccién. 9.2 RTOS en C 10. USB - Universal Serial Bus 10.1 Introduccién... 1am 10.1.1 Migracin de RS232 a USB . 10.1.1.1 USB CDC (Communication Device Class) 10.2 USB con ISIS y CCS C 10.2.1 USB en ISIS 10.2.2 USB en CCS C vil Introduccion El estudio de los microcontroladores PIC no consiste sélo en dominar su arquitec- tura interna o el cédigo maquina sino también en conocer programas auxiliares que facilitan el disefio de los sistemas donde intervienen. Entre los muchos programas para el desarrollo de sistemas con PICmicro® desta- can, por su potencia, el PROTEUS VSM de ©Labcenter Electrénics y el compilador C de ©Custom Computer Services Incorporated (CCS). El programa PROTEUS VSM es una herramienta para la verificaci6n via software que permite comprobar, practicamente en cualquier disefio, la eficacia del progra- ma desarrollado. Su combinacién de simulacin de eédigo de programacién y si- mulacin mixta SPICE permite verificaciones analdgico-digitales de sistemas basa- dos en microcontroladores. Su potencia de trabajo es magnifica. Por otra parte, tenemos el compilador C de CCS, ya que después de conocer y “do- minar’ el lenguaje ensamblador es muy util aprender a programar con un lenguaje de alto nivel como el C. El compilador CCS C permite desarrollar programas en C enfocado a PIC con las ventajas que supone tener un lenguaje desarrollado espe- cificamente para un microcontrolador concreto. Su facilidad de uso, su cuidado entorno de trabajo y la posibilidad de compilar en las tres familias de gamas baja, media y alta, le confieren una versatilidad y potencia muy elevadas. Al escribir este libro se plantean muchas dudas, sobre todo a la hora de concretar el temario. Escribir profusamente sobre los PIC o sobre el PROTEUS 0 sobre el CCS C supone, casi seguro, escribir un libro para cada uno de estos temas. Por ello, el planteamiento ha sido diferente, desarrollar los conocimientos basicos necesarios para manejar cada programa, apoyarlo con el mayor nimero de ejercicios y dejar al lector la posterior ampliacién de conocimientos. Asi lo he decido en base a la experiencia que me da estar impartiendo clases sobre PIC en la carrera de Ingenie- ros Técnicos Industriales, especialidad de Electronica Industrial, de la Universidad Politécnica de Valencia. Con estas premisas espero que el libro sirva a lector para aumentar sus conocimien- tos sobre el PIC o para iniciarlos en el caso de los que desconozcan este mundo. 1. ISIS de PROTEUS VSM ISIS de PROTEUS VSM 1.1 Introduccion El entorno de disefio electrénico PROTEUS VSM de LABCENTER ELECTRONICS (wzow labeenter.co.uk) ofrece la posibilidad de simular cédigo microcontrolador de alto y bajo nivel y, simulténeamente, con la simulacién en modo mixto de SPICE. Esto permite el disefio tanto a nivel hardware como software y realizar la simula- cién en un mismo y tinico entorno, Para ello, se suministran tres potentes subentor- nos como son el [SIS para el disefio grafico, VSM (Virtual System Modelling) para la simulacién y el ARES para el disefto de placas (figura 1). The VSM Advantage Con las horramiantas tradieionales de alsefo, el desarrotio del software y la comprabacion det sistema no puede resiizarse hasta que se desarrole un prototvo real, esto puede supaner semarias de relr3s0. ‘Ademas, si sa localiza elgin error en ef disefio hardware, la Totalidad del proceso debe repetise. SS BS) Ftc are mods —_— Usendo Proteus VSM, e! desarrollo dl software puede comenzar tan pronto como el esquemético es Aioujado y fa combinacién de software y hardware puede ser testeada antes del mantar el prottipo. Figura 1. Entorno de trabajo PROTEUS (fuente: Labcenter Electronics} Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 1.2 Captura electronica: entorno grafico ISIS ISIS es un potente programa de disefio electrénico que permite realizar esquemas que pueden ser simulados en el entorno VSM o pasados a un circuito impreso ya en el entorno ARES. Posee una muy buena coleccién de librerias de modelos tanto para dibujar, simular © para las placas. Ademas, permite la creacién de nuevos componentes, su mode- lizaci6n para su simulacién e, incluso, la posibilidad de solicitar al fabricante (Lab- center Electronics) que cree un nuevo modelo. Sin entrar profundamente en como utilizar dicho programa (requeriria un libro sélo para ello), a continuacién se explican las bases para dibujar cualquitr circuito electrénico. El programa ISIS posee un entorno de trabajo (figura 2) formado por distintas barras de herramientas y la ventana de trabajo. Varios de estos mentis también se pueden utilizar con la ayuda del botdn derecho del ratén. Al pulsarlo en cualquier parte del entorno de trabajo aparece un menti contex- tual donde se pueden ir obteniendo los distintos submentis de trabajo (figura3). 1. ISIS de PROTEUS VSM Figura 3. Submenis de trabajo del botén derecho del ratén Para dibujar, lo primero es colocar los distintos componentes en la hoja de trabajo. Para ello, se selecciona el modo componentes (figura 4) y, acto seguido, realizar una pulsacién sobre el botén P de la ventana de componentes y librerias (figura 5). [Pp anes ieee Taal Figura 4. Modo componentes Figura 5. Boton “pick” Tras activar el botén P se abre la ventana para la edicién de componentes (figura 6) donde se puede buscar el componente adecuado y comprobar sus caracteristicas. Al localizar el componente adecuado se realiza una doble pulsacién en él, de tal forma que aparezca en la ventana de componentes y librerias (figura 7). Se pue- de realizar esta accién tantas veces como componentes se quieran incorporar al esquema. Una vez finalizado el proceso se puede cerrar la ventana de edicién de componentes. Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Permite localizar por tipo, clase y fabricante Permite localizar componentes por nombre Lista de dispositivos disponibles y sus caracteristicas ‘Simbolo de esquema y modelo Encapsulado para placa Poquofio oditor de las caracteristicas de un componente (situar el ratén sobre él) Figura 6. Ventana para la edicion de componentes Figura 7. Los componentes ahadidos Para situar un componente en el esquema tan sélo debemos seleccionarlo de la lista, Al hacerlo se puede comprobar su orientacién (tal como se representara en el esquema) en la ventana de edicién (figura 8). Si deseamos modificar la rotacién 0 la reflexidn del componente podemos acceder a ello a través de la barra de herra- mientas correspondiente (figura 9). Hacigndolo de esta forma, “todos” los componentes de la lista tendran la misma orientacién (si se desea orientar un tinico componente deberemos hacerlo una vez ya situado en el esquema). 1. ISIS de PROTEUS VSM > + © a & is cor «+t Figura 8. Seleccion y orlentacion iawra 9. Barra de rotacionyy refiexién del componente Ahora solo falta realizar una pulsacién sobre la ventana de trabajo y se colocard el componente. El cursor del ratén se convierte en un lépiz blanco (figura 10). Se pueden colocar varios componentes del mismo tipo simplemente realizando varias pulsaciones, Para terminar de colocar un componente se debe seleccionar otro com- ponente de la lista o pasar a otro modo de trabajo. Lipic banc Figura 10. Cursor en el modo de colocacién Es importante activar la herramienta de referencia automatica (Real Time Annota- tion). De esta forma, los componentes tendran una referencia distinta y de forma consecutiva; en los circuitos integrados con varios componentes encapsulados tam- bién se referenciarén segiin dicho encapsulado (U1A, UIB, etc.). Esta herramienta se activa o desactiva desde la opcién de menti TOOLS > Real Time Annotation. Una vez situados los componentes en el rea de trabajo se pueden mover, al pasar por encima del componente el cursor se convierte en una mano (figura 11) y al rea~ lizar una pulsacién, el cursor se transforma en una mano con una cruz, indicando que se puede mover el componente (quedan seleccionados al ponerse en rojo) y se puede arrastrar (atencién: si se vuelve a realizar otra pulsacién del botén izquierdo se editan las caracteristicas del componente). Tambign se puede cambiar su orienta- cién utilizando los comands de rotacién y reflexidn a través de una pulsacion del botén derecho del rat6n (figura 12) y se pueden eliminar con dos pulsaciones con el botén derecho sobre ellos (0 con el botén derecho y el comando Delete Objet). OD slain del composes Ng, Mover componente debe ara en Figura 11. El cursor en modo de seleccién y mover Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC ; Figura 12, Menu contextual de un componente activado por el botén derecho del ratén Todas estas acciones se pueden realizar individualmente o de forma colectiva, es decir, se pueden agrupar varios componentes a través de pulsaciones consecutivas sobre ellos (manteniendo la tecla pulsada) o dibujando una ventana con el botén izquierdo y arrastrandola sobre los mismos (figura 14). iS _bbbbht ee uo Haddad EESG: ReRERER lw Figura ‘Una vez seleccionado el conjunto de componentes (se marcan todos en rojo) debe mos utilizar la herramienta de grupo (figura 15), que también aparece tras pulsar el botén derecho. Con esta herramienta se pueden copiar, mover, rotar o eliminar los componentes seleccionados. . Los componentes en el area de trabajo 1. ISIS de PROTEUS VSM 9 Ree ao eo Ow + saaan >> ae aber acat Gaps s08 fe TELE ir le | : Figura 14, Seleccién de varios componentes Figura 15. La herramienta de grupo Para unir los componentes con cables hay que situarse en los extremos de los termi- nales, el cursor se convierte en un lapiz, verde (figura 16). Ahora se pueden ejecutar dos acciones o ir marcando el camino hasta el destino con distintas pulsaciones (figura 17) 0 realizar, directamente, una pulsacién en el destino y dejar que [SIS realice el camino. Para ello, debe estar activada la herramienta TOOLS > Wire Autorouter. Figura 16. inicio Figura 17. Circuito “a mano” Compilador € CCS y Simulador PROTEUS para Microcontroladores PIC Las uniones entre cables se pueden realizar de forma automatica. Para ello, mien- tras se traza un camino debemos realizar una pulsacién sobre el cable objeto de la unién eléctrica (figura 18). También se pueden realizar de forma manual mediante el modo de unién (figura 19); en este modo tan sélo hay que ir haciendo pulsacio- nes sobre los puntos donde deseamos realizar la union. Figura 18. Unién eléctricaentrecables ‘Figura 19. Modo de union Se puede modificar el trazado de los cables. Para ello, se realiza una pulsacién so- bre el cable, en ese instante el cursor se convierte en una doble flecha (figura 20) y se puede arrastrar el ratén para modificar el cable. t Doble flecha: mover cables Figura 20. Mover los cables ‘También se pueden utilizar buses para las uniones multicable. Los buses permiten conectar varios terminales entre si utilizando un tinico elemento (figura 21); en este caso, el cursor se convierte en un lapiz azul (figura 22). Pero para distinguir los distintos cables que forman parte del bus y distribuirlos en Ia entrada y en la salida se deben etiquetar mediante labels. En el caso de los cables se indicard una etiqueta unica LCDO, LCD1, etc., y al bus una etiqueta conjunta segiin el formato LCD[0..3] que indique el nombre y la cantidad de cables que lo forman. Figura 21. Cableado por bus 1. 1SIS de PROTEUS VSM Figura 22. Cursor en modo de trazado de bus El etiquetado también permite unir cables virtualmente. Para ello, tan s6lo es nece- sario que los dos cables se Hamen igual aunque no estén conectados entre si. Para etiquetar cables 0 buses se utiliza el modo label (figura 23). Al activar este modo y realizar una pulsacién sobre un cable 0 bus se abre una ventana donde podemos in- troducir la etiqueta, ademds de seleccionar posicién, orientacién y estilo (figura 24) Figura 23. Modo label Figura 24. Ventana de edicién de etiquetas Otro modo de unién virtual es a través de terminales. Al activar el modo terminal (figura 25) se pueden seleccionar distintos tipos de terminales, entre ellos el utiliza- do por defecto (defauif). Al utilizar este terminal en varios componentes y darle el mismo nombre en todos ellos se consigue una unién eléctrica. Figura 25. Modo terminal Compilador C CCS y Simulador PROTEUS: Figura 26. Uni6n eléctrica a través de terminales Mediante este modo también se pueden colocar las masas y alimentaciones del circuito utilizando las opciones Ground y Power (figura 26). De esta forma se puede finalizar el circuito (figura 27). Figura 27. Circuito cableado Tan s6lo queda modificar las caracteristicas de los componentes que lo requieran, por ejemplo modificando el valor de los componentes pasivos. Para ello, se seleccio- na un componente realizando una pulsacién con el botdn derecho, aparece el mentt contextual y se selecciona la opcién EDIT PROPERTIES; también se puede utilizar el modo edicién (figura 28) en el cual tan sélo es necesario hacer una pulsacién con el botén izquierdo sobre el componente; en este modo el cursor se convierte en una flecha (figura 29). Al ejecutar esta accién se abre la ventana de edicién donde se pueden cambiar las caracteristicas de los componentes (figura 30), por ejemplo la resistencia de 10K a 180 ohm. También se puede editar directamente la referencia o el valor de un componente si la pulsacidn se realiza encima de estos elementos. 10 1. ISIS de PROTEUS VSM I Figura 28. Modo edicién Figura 29. Cursor en modo edicion = |e SIF [ear Figura 30. Ventana de edicién de un componente Con esto quedaria finalizado el circuito electrénico (figura 31). Pero en el caso de los sistemas basados en un microcontrolador atin quedan por modificar las carac- teristicas del mismo microcontrolador. Figura 31. El esquema completo a] Compilador © GCS y Simulador PROTEUS para En el caso de los microcontroladores, la ventana de edicién aporta mucha infor- macién (figura 32). Tal vez lo mas importante es que permite cargar en el micro controlador el archivo de programa (*.HEX) generado en la compilacién; también se puede modificar la frecuencia de reloj (por lo tanto no es necesario el uso de cristales externos en la simulaci6n), cambiar la palabra de configuracién y otras propiedades avanzadas. Sr ia oman feortter — Figura 32. Ventana de edicion de un micro 1.3 Depuracién de los sistemas basados en PiCmicro La caracterfstica mas importante del PROTEUS VSM es la capacidad de depurar pro- gramas fuente de distintos lenguajes de programacidn. Ademas de aceptar el archivo de programacién Intel Hex (HEX), también admite ficheros JAR UBROF (D39), Byte- Craft COD (COD), Microchip Compatible COF (COF) y Crownhill Proton Plus (BAS). Al utilizar estos archivos se puede abrir una ventana de c6digo fuente llamada SOURCE CODE mediante la cual se puede seguir el programa fuente linea a linea de cédigo. Ademés permite visualizar elementos internos del PIC como son la memoria de programa, la memoria de datos RAM o la EEPROM, los registros especiales (FSR) y la pila (Stack). Ademés, el entorno PROTEUS VSM permite compilar programas fuente en cédigo ensamblador directamente, Para ello, se utiliza el comando SOURCE (figura 33). 12 1, ISIS de PROTEUS VSM ' Define Code Generation Tools... Setup External Text Edt... Figura 33. Generador de cédigo de ficheros fuente En el caso del compilador CCS C, después de compilar se generan, entre otros, los archivos *,HEX y “.COF, los cuales se pueden utilizar para trabajar con el entorno PROTEUS VSM. Para ejecutar el programa desde ISIS se debe abrir la ventana de edicién del microcontrolador (figura 32) y en el item PROGRAM FILE se puede indicar el fichero de cédigo fuente utilizado. ‘Ademés, en esta ventana se puede indicar la frecuencia de trabajo con la opcién PROCESSOR CLOCK FREQUENCY (debemos observar que para la simulacin no es necesario colocar elementos externos de oscilacién en el PIC, tan sélo hacen falta en caso de realizar la placa). En la opcién ADVANCED PROPERTIES podemos ha- bilitar 0 configurar muchos més elementos: configurar el wacthdog, habilitar avisos de desbordamiento de pila, accesos no correctos a memoria, etc. Una vez cargado el microcontrolador con el programa fuente, se puede proceder a la simulacién del circuito empleando la barra de simulacién (figura 34). Esta barra se compone de la opcién MARCHA, PASO A PASO, PAUSA y PARADA. Figura 34, Barra de simulacién Con la opeién MARCHA la simulacién se inicia (el botén se vuelve verde) y fun- ciona en modo continuo, La simulacién NO es en tiempo real y dependerd de la carga de trabajo del PC. En la barra de estado se indica la carga de la CPU del PC (a mayor carga menos real seré la simulacién) y el tiempo de ejecucidn; este tiempo indica el tiempo que tardaria, en la realidad, el circuito en realizar un proceso (por ejemplo esto implica que, dependiendo de la carga de trabajo de la CPU, un tiempo de 1 sen el circuito puede significar varios minutos de simulacién). > > TW Tm ] ANIMATING: 00:00:02.5 (CPU load 8) Figura 35. Barra de estado en la simulacion Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC La opcién STOP para totalmente la simulacin mientras que PAUSE la para de for- ma momenténea permitiendo hacer uso de las herramientas de depuracién. La opcién PASO a PASO permite trabajar en tramos de tiempo predefinidos y, ade- més, permite utilizar las herramientas de depuracién. Esta opcidn est ligada a la configuracién de la animacién (figura 36): SYSTEM > SET ANIMATION OP- TIONS > SINGLE STEP TIME donde se puede definir el incremento de tiempo que se desea que pase cada vez que se pulsa esta tecla. eee | Shon toe Geant? | ShonLage Set Fr? | Shon te Votan ti Clee? Max SACETinedep, [3m | Severin th ert Figura 36. Set animation options En este cuadro de didlogo también se pueden cambiar los siguientes pardmetros: * FRAMES PER SECOND: numero de veces que la pantalla de ISIS se refresca en un segundo (por defecto 20). + TIMESTEP PER FRAME: indica el tiempo de simulacién por cada uno de los {frames; lo ideal es que sea el valor inverso del escogido en la opcién FRAMES PER SECOND. + ANIMATIONS OPTIONS: permite habilitar la visualizacion de las sondas de tensidn y corriente, mostrar los niveles légicos en los pines, mostrar el nivel de tension en los cables mediante colores 0 mostrar la direccién de la corriente en los cables mediante flechas. * VOLTAGE/CURRENT RANGES: permite determinar el umbral de tension (£V) y corriente para utilizar en la visualizacién de las correspondientes ANI- MATIONS OPTIONS. En este punto se puede simular (y animar) un sistema con el PICmicro (figura 37) Lo més interesante de la simulacién con microcontroladores es la utilizacién de las herramientas de depuracion. Es decir, visualizar mediante ventanas las distintas paries internas del microcontrolador: memoria de programa, memoria de datos, pila, etc. La mayor parte de estas ventanas s6lo se pueden visualizar durante una PAUSA. 14 Figura 37. Una simulacién en marcha Desde el mend DEBUG (figura 38) también se puede iniciar la simulacién pero pensando en la depuracién. Con la opcién START/RESTAR DEBUGGING se pue- de iniciar la simulacién pero haciendo una pausa para ver las distintas ventanas de depuracién. También se puede ejecutar el programa directamente con la opcién EXECUTE, EXECUTE WITHOUT BREAKPOINT o EXECUTE FOR SPECIFIED TIME que permite ejecutar directamente un programa, ejecutarlo sin puntos de ruptura (en el caso de tenerlos) y ejecutarlo en un tiempo concreto. Figura 38. El mend DEBUG antes de la simulacién 15 Compilador C CCS y Simutador PROTEUS para Microcontroladores PIC Desde esta ventana también se puede reinicializar la memoria EEPROM del mi- crocontrolador mediante RESET PERSISTENT MODEL DATA. Al producirse una pausa, el menti DEBUG se modifica (figura 39) mostrando las correspondientes herramientas de depuracién. rc Pukagns va Fic PubuaNecay Ui 2 PRCCPUERREH Mery =U BC PUReg Menaul BPC Figura 39, El mend DEBUG en una pausa Estas herramientas son (figura 40): SIMULATION LOG: Mensajes resultantes de la simulacién. WATCH WINDOWS: Ventana de visualizacién de posiciones de memoria. Permite afiadir la que e] usuario desea ver PIC CPU REGISTERS: Muestra los registros FSR del PIC. PIC CPU DATA MEMORY: Muestra la memoria de datos (RAM). PIC CPU EPROM MEMORY: Muestra la memoria de datos (EPROM). PIC CPU PROGRAM MEMORY: Muestra la memoria de programa. PIC CPU STACK: Muestra la pila. . 16 1. ISIS de PROTEUS VSM Figura 40. Ventanas de depuracién La ventana WATCH WINDOW es la més versétil puesto que se pueden afiadir variables y modificar su visualizacién. Al pulsar el botdn derecho sobre la ven- tana se abre un menti contextual (figura 41). Con ADD ITEMS (nameladdress) se afiade la variable a visualizar directamente con el nombre predefinido (figura 42) = en el PIC 0, en el caso de varia see we Go] bles propias del programador, se Sema GRE : pueden visualizar por direccién (figura 43), donde se le indica el nombre, la direccién en hexade- cimal, el tipo de dato (byte, word, etc.) y el formato de visualizacién (binario, decimal, etc.). El tipo de dato y el formato también se pue- de cambiar desde DATA TYPE y DISPLAY FORMAT. Figura 41. Menu contextual de WATCH WINDOWS: 7 Compitador C CCS y Simutador PROTEUS para Microcontroladores PIC Con WATCHPOINT CONDITION se pueden habilitar puntos de ruptura median- te condiciones sobre las distintas variables (figura 44); se indica la variable, la mas- cara de la condicién (NONE, AND, OR, XOR) y el tipo de condicion (NONE, ON CHANGE, EQUALS, etc.). Geta Conon Cena ai wate pets © Suspend he venlton ANY exreeson 2 4 Stop hearin ny when ALL ort ee, hes nk vaso — i we foo soar | Condi [Ba Chara Figura 43. Add by Address Figura 44. Puntos de ruptura Hay una ventana de depuracién que sélo se visualiza si se ha incorporado un fi- chero COD 0 COF al microcontrolador, se trata de la ventana CPU SOURCE CODE (figura 45). Con esta ventana se puede seguir la simulacién linea a linea del archivo de cédigo fuente, En esta ventana (también en el menu DEBUG) estan disponibles unos botones de control (figura 46). 18 f4use ceiayceleck= 4000000) Ssnclude <1ca.mio.c Mineliids Skbecmio.e vorg maine) { legates Roath ete port_p-put lups Crave); Ved_putec"\MLasto. ..\A")s arene Lee the: roo Trecieby Tetieeeey Nepictoweas Uppecrine cat sever Ym ine carsceer } Gimer ne Sal arch facies Cater Seth Gprrerine valor fesertco Figura 45. La ventana CPU Source code | de | Figura 46. Los controles para la simulacion Simulacién en modo continuo, no permite ver las ventanas de depu- racién. Permite ejecutar una instruccién; si es una subrutina 0 una funcién la ejecuta directamente. Permite ejecutar una instruccién; si es una subrutina o una funcién entra en ella. Trabaja en modo continuo hasta que encuentra un retorno de cual- quier subrutina. Trabaja en modo continuo hasta que se encuentra con un punto de ruptura. Habilita 0 deshabilita los puntos de ruptura. [=] [=] | (e % 19 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Hay una ventana de diagndstico que facilita la depuracién, almacenando los erro- Tes, mensajes de diagnéstico y avisos producidos durante el proceso de simulacién (figura 47). En la barra de estado (zona inferior del area de trabajo) se muestra un aviso (figura 48); con una pulsacidn en el aviso aparece la ventana de diagnosis. escent © \OOCINE™ NE AALONEAS\elSATG SOF er anon UTE MATA PCIE nce nnn 71002 But |g PETE don Bonin 28 tect iy EEPROM cin rg Xt Vachon ES, Resse debe fon He Wado He® ost, pepan vd nd lee Figura 47. Mensajes de diagnéstico de la simulacion Se pueden configurar las opciones de esta herramienta desde la opeién DEBUG CONFIGURE DISGNOSTIC (figura 49). En la ventana se muestran los componen- tes del esquema susceptibles de un diagnéstico en la simulacién y las diferentes posibilidades de diagnéstico y el tiempo de diagnéstico (figura 50). @ Thies) | ots Figura 48, Mensajes de la herramienta de diagnéstico Figura 49. La configuracion de diagnésticos MILFORD-£e20.0KP (U5) 5240s wi) 152405 (U2) s2405 13) @ Yone/SFF scces evens 1) Pet Everts 1 Slep/WakeEverts 1 eter Everee 1 Watchdog Tee Mate 1 PSP Mose “Tac imation ore Distled Wangs ony @ Fula Sucre seulabonnhenavt an eet ope? Loaten(— te (serie [ Figura 50. Opciones de configuracion Tras la simulacién aparecen los diferentes resultados del andlisis; en el item SOUR- CE aparece indicado el dispositivo fuente del andlisis y tras una pulsacién se puede acceder a él (figura 51). remit Ja? prove on HLS c Baie Jaber pode on ADORE i abe cn A007 i be on HOKE ad abe on AOU tat abe on 30008 at i modal loa 70.03 [Bud 285 sea daeg FCS device VO} Fan Code 8 PEED Ceres ati JQ (01.101 Gvedive ps0. No | Loaded 128 ite fein EEPROM data 1 Loadna HEX le Mectrom HEX Radial of 1082 byes om le Macom HEX. |B Loaded 535 png wor nD cao. Figura 51. Resultado del diagnéstico El listado de nodos y patillas se pueden encontrar con la ayuda del DESIGN EX- PLORER (a ésta opcién podemos acceder a través de distintas opciones: coman- do DESIGN, botén derecho, etc.). En su ventana de trabajo se muestran todos los nodos y patillas que forman el circuito (figura 52). 2 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Figura 52. La ventana Design Explorer Capitulo 2 Compilador CCS C 2.1 Introduccion El Compilador C de CCS ha sido desarrollado especificamente para PIC MCU, ob- teniendo la maxima optimizacién del compilador con estos dispositivos. Dispone de una amplia libreria de funciones predefinidas, comandos de preprocesado y ejemplos. Ademas, suministra los controladores (drivers) para diversos dispositivos como LCD, convertidores AD, relojes en tiempo real, EEPROM serie, etc, Las ca- racteristicas generales de este compilador y mas informacién adicional se pueden encontrar en la direccién hitp://www.ccsinfo.com. Un compilador convierte el lenguaje de alto nivel a instrucciones en cédigo mé- quina; un cross-compiler es un compilador que funciona en un procesador (normal- mente en un PC) diferente al procesador objeto. El compilador CCS C es un cross- compiler. Los programas son editados y compilados a instrucciones maquina en el entorno de trabajo del PC, el cédigo maquina puede ser cargado del PC al sistema PIC mediante el ICD2 (0 mediante cualquier programador) y puede ser depurado (puntos de ruptura, paso a paso, etc.) desde el entorno de trabajo del PC EICCS C es C estandar y, ademés de las directivas estandar (include, etc.), sumi- nistra unas directivas especificas para PIC (device, etc.); ademas incluye funciones especificas (bit_set(), etc.). Se suministra con un editor que permite controlar Ia sin- taxis del programa. En el manual de CCS se da mucha més informacién de la que a continuacién se va a dar. En este capitulo sdlo se describirdn los elementos mas basicos y esenciales pata comenzar a programar. Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 2.2 Estructura de un programa Para escribir un programa en C con el CCS C se deben tener en cuenta una serie de elementos basicos de su estructura (figura 1). * DIRECTIVAS DE PREPROCESADO: controlan la conversién del programa a cédigo maquina por parte del compilador. PROGRAMAS o FUNCIONES: conjunto de instrucciones. Puede haber uno © varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusién de la Hamada main(). INSTRUCCIONES: indican como debe comportar el PIC en todo momento. COMENTARIOS: permiten describir lo que significa cada linea del programa Ding Daeanes a inincion AtSeararasan| Be Funcion principal Sh De eel es Instrucciones we ‘Comentarios pereerrrrtrs Figura 1. Estructura basica de un programa 2.3 Tipos de datos CCS C acepta los siguientes tipos de datos: Tipo Tamaiio Rango Descripcién Inf Short 1 bit Oal Entero de 1 bit 24 2. Compilador CCS C Tipo ‘Tamaiio go Descrips ae 8 bit 0.0255 Entero ate 16 bit 0a 65.535 Entero de 16 bit Int32, 32 bit 0a 4.294.967.295 Entero de 32 bit Float 32bit et: | Coma flotante Void 8 bit 0a255 Caracter Sin valor Signed Int8 8 bit “128 a +127 Entero con signo Signed Inti6 16 bit -32768 a + 32767 _| Entero largo con signo Signed Int32 32bit a H2"1) Entero 32 bit con signo 2.4 Las constantes Las constantes se pueden especificar en decimal, octal, hexadecimal o en binario: 123 Decimal 0123 etal (0) 0x123 Hexadecimal(0x) 06010010 _[ Binario (0b) Caracter 4010" Cardcter octal AxAS’ Cardcter hexade Ademas, se pueden definir constantes con un sufijo: ‘También se definen caracteres especiales, algunos como: Ints 127U Long 80UL Signed INTI6 _ | 80L Float 3.14F Char Con comillas simples \n Cambio de linea \ Retorno de carro 25 2.5 Variables Las variable se utilizan para nombrar posiciones de memoria RAM; se deben decla- rar, obligatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y el tipo de dato que se manejard. Se definen de la siguiente forma: TIPO NOMBRE_VARIABLE [=VALOR INICIAL] TIPO hace referencia a cualquiera de los tipos de datos vistos en el punto 2.3. El NOMBRE_VARIABLE puede ser cualquiera y el valor inicial es opcional. Veamos un ejemplo: float temp. Las variables definidas en un programa pueden ser de tipo LOCAL 0 GLOBAL. Las variables locales s6lo se utilizan en la funcién donde se encuentran declaradas; las variables globales se pueden utilizar en todas las funciones del programa. Ambas deben declararse antes de ser utilizadas y las globales deben declararse antes de cualquier funcién y fuera de ellas. Las variable globales son puestas a cero cuando se inicia la funcién principal main(). #include <16f876.h: #USE DELAY (CLOCK=4000000) int1é c void FUNCION // Variable global char K, kant="0"; // bles locales void main( ) t int temp; // Variable 1 } Las variables pueden ser definidas con: * AUTO: (usada por defecto, no hace falta que se indique) donde la variable existe mientras la funcién esta activa. Estas variables no se inicializan a cero. Su valor se pierde cuando se sale de la funcién. 26 2. Compilador CCS C « STATIC: Una variable local se activa como global, se inicializa a cero y man- tiene su valor al entrar y salir de la funcién. + EXTERN: Permite el uso de variables en compilaciones multiples. 2.6 Operadores 2.6.1 Asignacion 4= _| Asignacién de suma (x+y es lo mismo que x-xty) = _| Asignacién de resta (x-=y es lo mismo que x=x-y) Asignacién de multiplicacién (x*=y es lo mismo que x=x*y) 'y) %= | Asignacién del resto de la division (x%=y es lo mismo que x-x%y) Asignacidn de division (x/=y es lo mismo que x= << | Asignacién de desplazamiento a la izquierda (x<<>=y es igual que x=x>>y) Asignacién OR de bits (x!=y es lo mismo que x=x!y) > &= | Asignacién AND de bits (x&=y es lo mismo que x=x&y) l= ed Asignacién OR EXCLUSIVA de bits (x"=y es lo mismo que x=x“y) 2.6.2 Aritméticos Ss Decremento sizeof | Determina el tamaiio, en bytes, de un operando En las operaciones de decremento e incremento, en funcién de la posicién del ope- rador, se consigue un preincremento (+A) o un postincremento (A++). Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 2.6.3 Relacionales Menor que Mayor que ¥|y]* Mayor 0 igual que Menor igual que ua Igual Distinto Expresién condicional 2.6.4 Légicos ! NOT && AND i [oR 2.6.5 De bits ~ | Complemento a1 & | AND kis OR EXCLUSIVA | OR >>_| Desplazamiento a derechas <<_| Desplazamiento a izquierdas 2.6.6 Punteros & | Direccién Indireccion Puntero a estructura 2, Compilador CCS C Orden de precedencia de los operadores: Expresiones en orden de precedencia descendente (expr) lexpr ~expr “Hrexpr expr ~expr (type)expr “expr &value sizeof(type) exprrexpr expr/expr expr%expr exprtexpr expr-expr expré>expr exprsexpr expreexpr__[exprexpr _| exprexpr expr=expr expri=expr expréexpr expr’expr expr | expr expr &é& expr expr || expr expr ? expriexpr Wvalue=expr | Ivalueexpr_[ Ivalue=expr Ivalue*-expr | Ivalue/expr_| Ivalue%=expr Iwalue>>=expr_| Ivalue<<=expr | Ivalueé&=expr Ivalue*=expr__| Ivaluel=expr_| expr, expr 2.7 Funciones Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar dentro de las funciones. Al igual que las variables, las funciones deben definirse antes de utilizarse. Una funcién puede ser invocada desde una sentencia de otra funcién. Una funcién puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica en la definicién de la funcién; en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe especificar el valor VOID. La fancién, ademas de devolver un valor, puede recibir parametros 0 argumentos. 29 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC La estructura de una funcién es: ncion (tipe paraml, param2,...) Dato Nombre (sentenctas); trunca (float a) { La forma de devolver un valor es mediante la sentencia RETURN: retura (expresién); expresién Donde expresién debe manejar el mismo tipo de dato que el indicado en la de- finicién de la funcién. En el caso de no devolver nada se finaliza con RETURN, al encontrar esta sentencia el compilador vuelve a la ejecucién de la sentencia de llamada. También se puede finalizar la funcién sin RETURN, tan s6lo con la lave de cierre “)”. Las funciones pueden agruparse en ficheros de librerias , que se pueden utilizar mediante la directiva #include . 2.8 Declaraciones de control Las declaraciones son usadas para controlar el proceso de ejecucién del programa. Las que admite CCS son: © IfElse. © While. 30 2 Compilador CCS C + Do-While. * For. * Switch-Case. © Return. * Break, Continue y Goto. 2.8.1 IF-ELSE Con la ayuda de IF-ELSE se pueden tomar decisiones. Af (expresién) sentencia_t; [else sentencia 2;] Los elementos que se encuentran entre corchetes [ ] son opcionales. Primero se evaltia la EXPRESION y sies cierta (TRUE 0 1) ejecuta la SENTENCIA_1, en el caso contrario (FALSE 0 0) ejecuta la SENTENCIA_2. Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF; esto permite tomar deci- siones miiltiples. if (expresion_t) sentencia 1; lelse if (exptesisn_2) sentencia_2;] felse sentencia_3;] En este caso las EXPRESIONES se evalian en orden, si alguna de ellas es cierta la SENTENCIA asociada a ella se ejecutara y se termina la funcién. En caso contrario se ejecuta la SENTENCIA del ELSE. En ambos casos si existen varias sentencias para ejecutar se deben utiliza las Haves { }: 31 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC if (expresion) sentencia 1; [else sentencia 17 HW Bjemplos: IF (A==0) B=10; ELSE C=5; Ss IF (Al=1) B=10; ELSE C=5; —- 32 2, Compitadar GCS C IF (A>10) {IF (A>20) B=15;} ELSE B=5; 2.8.2 SWITCH Switch es un caso particular de una decisién multiple switch fexpresién) t case ante 1: sentencias; break; ease constante 2: sentenciass break; [default ISentencias;) 4 Evahia la expresién y en orden a la CONSTANTE adecuada realiza las sentencias “asociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta DE- T (este comando es opcional). El comando BREAK provoca la salida de SWITCH, de lo contrario se ejecuta el ite CASE. pueden existir dos CASE con la misma CONSTANTE. 33 Compitador C CCS y Simutador PROTEUS para Microcontroladores PIC Ejemplo: case 2: B=2; break; case 3: B=3; break; default: break; zacién ; incremento sentencias; En las expresiones del FOR la inicializacién es una variable a la cual se Je asigna un valor inicial con el que controlar el bucle. La condicién de finalizacién sirve para evaluar ANTES de ejecutar las sentencias sies cierta 0 no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale del FOR. Por iltimo, la expresion de incremento 0 decremento modifica la variable de control DESPUES de ejecutar el bucle. Se pueden anidar bucles FOR utilizando distintas variables de control, 34 2. Compilador COS C Si se ejecuta la siguiente expresién se consigue un BUCLE SIN FIN: Fort; 7) f sentencias; } Ejemplo: For (N=1;N<=10;N++) { Printf(“%u",N); + 2.8.4 WHILE / DO-WHILE WHILE se utiliza para repetir sentencias. while (expresién) ‘ sentencias; ) La expresién se evalia y la sentencia se ejecuta mientras la expresin es verdadera, cuando es falsa se sale del WHILE.

Você também pode gostar