SlideShare ist ein Scribd-Unternehmen logo
1 von 6
Downloaden Sie, um offline zu lesen
Programación en C de PICs empleando
herramientas libres
Matias De la Puente
mfpuente.ar@gmail.com
10 de mayo de 2009
1. Introducción
Los microcontroladores PIC programados en ensamblador logran una eje-
cución óptima del programa cargado en su memoria, pero muchas veces la
tarea de realizar y mantener un programa de grandes dimensiones en en-
samblador se hace difícil. Sobre todo cuando ha pasado un tiempo sin ver el
programa. Esta es la principal ventaja de C, un lenguaje de programación
de mas alto nivel que ensamblador. Un programa realizado en C puede no
ser mas rápido que uno realizado en ensamblador pero facilita la realización
y mantenimiento de un programa de grandes dimensiones. Además el código
fuente realizado en C es fácilmente portado a distintos modelos de PICs rea-
lizando únicamente pequeñas modicaciones relacionadas a la arquitectura
del microcontrolador.
Este articulo muestra el empleo del compilador libre sdcc[4] para com-
pilar programas en C, como así también el empleo del programador de PICs
libre picp[3] para cargar el programa compilado en la memoria del PIC.
Para leer este articulo solo es necesario que el lector presente mínimos
conocimientos del lenguaje C y de la linea de comandos.
1
2. Primer programa
El listado 1 simplemente hará oscilar un led conectado al pin RA0 de un
microcontrolador PIC16f84A.
1 #include pic16f84a.h
2
3 void delay ()
4 {
5 int i, j;
6 for (i=0; i4; i++)
7 for (j=0; j 250; j++)
8 ;
9 }
10
11 void main ()
12 {
13 TRISA = 0x00;
14
15 while (1)
16 {
17 RA0 = 1;
18 delay ();
19 RA1 = 0;
20 delay ();
21 }
22 }
Listing 1: Primer programa - pic01.c
Este código puede ser escrito con cualquier editor de texto como ser:
vim, nano, gedit, leafpad, mousepad, kate hasta inclusive puede escribirse
empleando openoce o abiword pero guardando el documento como texto
plano.
2.1. Explicación del código
La primera linea del programa incluye al código fuente el archivo de
cabecera pic16f84a.h, el cual dene todos los registros del microcontrolador
incluyendo los registros de conguración.
La función delay (linea 3) realiza un retardo aproximado de 1 segundo
si el microcontrolador presenta un ciclo de instrucción de 1 ms.
La función main (linea 11) es la primera función que ejecuta por defecto
el microcontrolador (y de cualquier programa en C). La primera instrucción
a ejecutar es TRISA = 0x00, la cual congura como salida al puerto A. El
bucle de la linea 15 se ejecutará mientras el microcontrolador se encuentre
encendido, ya que la condición (1) siempre será positiva, a este bucle se lo
denomina bucle innito. Las lineas 17 y 19 colocan en 1 y 0, respectivamente,
2
el bit 0 del puerto A. Las lineas 18 y 20 llaman a la función delay para
realizar el retardo denido.
De esta manera al colocar un led en el pin RA0 del microcontrolador,
este oscilará a una frecuencia de 0.5 Hz aproximadamente.
2.2. Compilación del programa
La compilación del programa se realiza con el siguiente comando:
$ sdcc -mpic14 -p16f84a pic01.c
La opción -mpic14 le indica al compilador que genere código en en-
samblador para microcontroladores con instrucciones de 14 bits (16F84A,
16F628A, 16F876A, etc). Para microcontroladores con instrucciones de 16
bits se debe emplear la opción -mpic16. La siguiente opción, -p16f84a, in-
dica al compilador el modelo de microcontrolador a emplear y debe coincidir
con el modelo del archivo de cabecera incluido en el código fuente. La ultima
opción indica el o los archivo de código fuente a compilar.
Este compilador genera a partir del archivo de código fuente en C distin-
tos archivos, los mas importantes son:
pic01.asm contiene el código ensamblador generado por sdcc.
pic01.hex contiene el código binario listo para ser grabado en la memoria
del microcontrolador.
El archivo pic01.hex, junto con otros más, no son generados directamente
por sdcc sino que son generados por gpasm y gplink del paquete gputils[1].
El compilador sdcc genera el código ensamblador a partir del código en C
y automáticamente ejecuta gpasm y gplink para generar el archivo .hex a
partir del código ensamblador. Se le puede indicar a sdcc que utilice las
herramientas de Microchip[2] mpasm y mplink solamente agregando a sdcc
la opción -mplab-comp.
El compilador sdcc soporta un gran numero de microcontrolador de 14
y 16 bits. Para obtener una lista de los microcontroladores de 14 bits sopor-
tados por el compilador solo hay que ejecutar el siguiente comando
$ sdcc -mpic14 -phelp pic01.c
Para este ejemplo se empleó el archivo pic01.c pero puede ser cualquier
otro inclusive uno vacío. Para obtener una lista de los microcontroladores
de 16 bits soportados por el compilador simplemente hay que reemplazar la
opción -mpic14 por -mpic16.
2.3. Acerca de los registros
Como se menciono anteriormente, los registros del microcontrolador se
encuentran denidos dentro del archivo de cabecera incluido en el código
3
fuente. No hace falta abrir este archivo de cabecera para saber como están
denidos todos los registros del microcontrolador ya que el nombre de registro
es el mismo empleado dentro de la hoja de datos del microcontrolador. Por
ejemplo, si queremos modicar el valor del registro INTCON del PIC16F84A
elegido simplemente hay que introducir la linea INTCON = 0x00; en el código
fuente, para este ejemplo se modico por el valor 0x00 pero puede ser el que
uno desee.
Cabe mencionar que los microcontroladores de 14 bits presentan regis-
tros en diferentes bancos de memoria. En ensamblador el desarrollador debía
seleccionar el banco de memoria en donde se encontraba el registro a mo-
dicar. En C no hace falta realizar esta tarea ya que el mismo compilador
genera el código para elegir el banco correspondiente antes de modica el
registro. En los microcontroladores de 16 bits lo bancos de memoria fueron
eliminados y no hace falta realizar esta tarea, mejorando el rendimiento del
programa.
Ahora bien, a veces es necesario modica solamente un bit de un registro,
esto puede ser fácilmente realizado ya que también se encuentran denidos
los bits de cada registro. La nomenclatura empleada para realizar esta tarea
es diferente entre un microcontrolador de 14 bits y uno de 16 bits. Para un
microcontrolador de 14 bits se emplea esta nomenclatura:
nombre del registro _bits.nombre del bit 
Por ejemplo, se desea habilitar las interrupciones globales de PIC16F84A,
para eso hay que poner en 1 el bit GIE del registro INTCON, simplemente
agregamos al código fuente la linea INTCON_bits.GIE = 1;. Para un micro-
controlador de 16 bits la nomenclatura es similar, la única diferencia es que
no presenta el guión bajo entre nombre del registro y bits. En este caso para
habilitar las interrupciones globales del microcontrolador se emplearía esta
linea de código: INTCONbits.GIE = 1;.
Un caso a tener en cuenta es el de los microcontroladores de 16 bits
ya que no se requiere incluir el archivo de cabecera según el modelo a pro-
gramar. Esto es, solamente hace falta incluir al código fuente el archivo de
cabecera pic18fregs.h y a través de la opción -p18fxxxx se elige el modelo
a programar.
3. Grabación del programa en la memoria del mi-
crocontrolador
Para grabar el programa en la memoria del microcontrolador se emplea
picp. Este comando se comunica con el programador1 PICSTART Plus de
1
Para evitar confusiones el programador es el dispositivo capaz de guardar un programa
en la memoria del microcontrolador. Para hacer referencia a la persona que escribe el
programa se empleara desarrollador
4
Microchip para grabar los microcontroladores.
3.1. Grabar el programa
La grabación del programa en la memoria del microcontrolador se realiza
simplemente empleando los siguientes instrucciones:
$ picp /dev/ttyS0 16f84a -ef
$ picp /dev/ttyS0 16f84a -bp -wp pic01.hex
El primer comando limpieza (erase) toda la memoria ash del microcon-
trolador. La segunda opción realiza un blanqueado (blank) de la memoria de
programa para luego grabar el programa compilado con sdcc.
La primera opción /dev/ttyS0 es el puerto serie en donde se encuentra
conectado el programador (COM1, COM2, etc. para usuarios de Windows). La
segunda opción 16f84a indica el modelo de microcontrolador a colocado
en el programador. Se puede obtener una lista completa de los dispositivo
soportados empleando picp -d. La opción -ef especica que se limpie la
memoria ash del microcontrolador. La opción -bp blanquea la memoria de
programa del microcontrolador. Por ultimo, la opción -wp pic01.hex escribe
en la memoria de programa el archivo pic01.hex.
3.2. Lectura de la memoria del microcontrolador
Con picp también es posible leer la memoria del microcontrolador, siem-
pre y cuando el microcontrolador no este protegido contra lectura. El co-
mando a emplear es similar a escribir el programa:
$ picp /dev/ttyS0 16f84a -rp temp.hex
Aquí, la opción -rp temp.hex lee la memoria de programa del microcon-
trolador y la almacena en temp.hex.
3.3. Lectura y escritura de los bits de conguración
Para leer y escribir los bits de conguración del microcontrolador se em-
plean las opciones -rc y -wc respectivamente. La lectura de los bits de con-
guración se realiza con:
$ picp /dev/ttyS0 16f84a -rc
La escritura de los bits de conguración se realiza con:
$ picp /dev/ttyS0 16f84a -wc 0x3FF9
El microcontrolador es congurado con la palabra
2 0x3FF9. Esto es, sin
protección de código, temporizador de arranque desactivado, temporizador
watchdog desactivado y oscilador de tipo XT. Para mas información el lector
puede referirse al manual del microcontrolador.
2
Dato de 16 bits
5
3.3.1. Denir los bits de conguración desde el programa
Los bits de conguración pueden ser denidos desde el mismo programa
en C. Para ello sdcc ofrece un par de palabras reservadas
3 que hacen posible
esta tarea, las palabras reservadas son code y at y se emplean como se observa
en el listado 2.
code char at 0x2007 CONFIG = 0x3FF9;
Listing 2: Denición de los byte de conguración
Esta linea de código es agregada al programa principal luego de las di-
rectivas #include. De esta manera cuando el programa sea grabado en la
memoria del microcontrolador también lo harán los bits de conguración.
Una vez mas el lector debe referirse al manual del microcontrolador a
usar para obtener la o las direcciones y valores de los bits de conguración.
4. Conclusión
La programación de un microcontrolador empleando el lenguaje C a pro-
bado durante años ser la forma mas eciente de desarrollar un programa para
microcontroladores, por supuesto que no se genera un código ensamblador
óptimo pero el código hecho en C puede ser mantenido en forma mas sencilla
que uno en ensamblador. Además pensar la solución al problema en código
en C es aun mas fácil que pensarla en ensamblador.
Este articulo ha demostrado que el desarrollo de un programa en C y el
grabado del mismo en la memoria del microcontrolador ha sido sencilla de
realizar. Las herramientas a utilizar son de fácil acceso y bien documentadas.
Un editor de texto y comandos fueron solamente necesarios para escribir
el programa y grabarlo al microcontrolador, esto prueba que no hacen falta
complejas aplicaciones grácas para realizar este trabajo. Por supuesto que
puede incorporarse dentro del editor de texto un par de botones en la barra de
herramienta para que haga en forma automática la compilación y el grabado
del programa.
Referencias
[1] GNU PIC Utilities. http://gputils.sourceforge.net/.
[2] Microchip. http://www.microchip.com/.
[3] PIC Programmer. http://home.pacbell.net/theposts/picmicro/.
[4] Small Device C Compiler. http://sdcc.sourceforge.net.
3
Como if, while, etc.
6

Weitere ähnliche Inhalte

Was ist angesagt?

Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASMdave
 
Dudas printf()
Dudas printf()Dudas printf()
Dudas printf()bad_666
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensambladorjuan1993are
 
TEMPIC-45 Práctica II. Control de un LED a través de un botón
TEMPIC-45 Práctica II. Control de un LED a través de un botónTEMPIC-45 Práctica II. Control de un LED a través de un botón
TEMPIC-45 Práctica II. Control de un LED a través de un botóniihhhii
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84guestf09168b
 
comunicacion pic - usb
comunicacion pic - usbcomunicacion pic - usb
comunicacion pic - usbmunlis
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadorasYessicafragoso
 
Introduccion a la programacion en c 18
Introduccion a la programacion en c 18Introduccion a la programacion en c 18
Introduccion a la programacion en c 18fitomaster
 

Was ist angesagt? (16)

como programar un pic
como  programar un piccomo  programar un pic
como programar un pic
 
Ec2
Ec2Ec2
Ec2
 
Construcciondeun pl cconpic
Construcciondeun pl cconpicConstrucciondeun pl cconpic
Construcciondeun pl cconpic
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASM
 
Dudas printf()
Dudas printf()Dudas printf()
Dudas printf()
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
TEMPIC-45 Práctica II. Control de un LED a través de un botón
TEMPIC-45 Práctica II. Control de un LED a través de un botónTEMPIC-45 Práctica II. Control de un LED a través de un botón
TEMPIC-45 Práctica II. Control de un LED a través de un botón
 
Sistemas Microprocesados I
Sistemas Microprocesados ISistemas Microprocesados I
Sistemas Microprocesados I
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Pikit3 parte i-
Pikit3 parte i-Pikit3 parte i-
Pikit3 parte i-
 
comunicacion pic - usb
comunicacion pic - usbcomunicacion pic - usb
comunicacion pic - usb
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadoras
 
Programación de microcontrolador
Programación de microcontroladorProgramación de microcontrolador
Programación de microcontrolador
 
Comandar un pic a través de internet
Comandar un pic a través de internetComandar un pic a través de internet
Comandar un pic a través de internet
 
Adc 4
Adc 4Adc 4
Adc 4
 
Introduccion a la programacion en c 18
Introduccion a la programacion en c 18Introduccion a la programacion en c 18
Introduccion a la programacion en c 18
 

Andere mochten auch

Estructuras de almacenamiento
Estructuras de almacenamientoEstructuras de almacenamiento
Estructuras de almacenamientoskullsoul
 
Netbeans_Subversion
Netbeans_SubversionNetbeans_Subversion
Netbeans_SubversionNguyen Linh
 
Metrologia unidades del sistema interncaional
Metrologia unidades del sistema interncaionalMetrologia unidades del sistema interncaional
Metrologia unidades del sistema interncaionalferminalex
 

Andere mochten auch (8)

History
HistoryHistory
History
 
Estructuras de almacenamiento
Estructuras de almacenamientoEstructuras de almacenamiento
Estructuras de almacenamiento
 
Ejercicios
Ejercicios Ejercicios
Ejercicios
 
History
HistoryHistory
History
 
A12345
A12345A12345
A12345
 
Framework
FrameworkFramework
Framework
 
Netbeans_Subversion
Netbeans_SubversionNetbeans_Subversion
Netbeans_Subversion
 
Metrologia unidades del sistema interncaional
Metrologia unidades del sistema interncaionalMetrologia unidades del sistema interncaional
Metrologia unidades del sistema interncaional
 

Ähnlich wie Pic libre

Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84Daniel Remondegui
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Hamiltonn Casallas
 
El AT mega8 es un microcontrolador excelente
El AT mega8 es un microcontrolador excelenteEl AT mega8 es un microcontrolador excelente
El AT mega8 es un microcontrolador excelenteJose Alva
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2dar851112
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PICMicroPart
 
38912287 practica1
38912287 practica138912287 practica1
38912287 practica1rexmersxa7
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en ArduinoJavier Leyva
 
02 programarpic
02 programarpic02 programarpic
02 programarpicaserege66
 
Microcontrolador pic
Microcontrolador picMicrocontrolador pic
Microcontrolador picMirkoBlanco
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PICSohar Carr
 
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...ezequiel
 

Ähnlich wie Pic libre (20)

Pic16f84(1)
Pic16f84(1)Pic16f84(1)
Pic16f84(1)
 
Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
 
Pic
PicPic
Pic
 
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
 
Curso integral pic_236
Curso integral pic_236Curso integral pic_236
Curso integral pic_236
 
El AT mega8 es un microcontrolador excelente
El AT mega8 es un microcontrolador excelenteEl AT mega8 es un microcontrolador excelente
El AT mega8 es un microcontrolador excelente
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PIC
 
Libro basico pic
Libro basico picLibro basico pic
Libro basico pic
 
Practica1
Practica1Practica1
Practica1
 
38912287 practica1
38912287 practica138912287 practica1
38912287 practica1
 
Practica1
Practica1Practica1
Practica1
 
Sistemas Microprocesados I
Sistemas Microprocesados ISistemas Microprocesados I
Sistemas Microprocesados I
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en Arduino
 
02 programar
02 programar02 programar
02 programar
 
02 programarpic
02 programarpic02 programarpic
02 programarpic
 
Microcontrolador pic
Microcontrolador picMicrocontrolador pic
Microcontrolador pic
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PIC
 
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
 

Kürzlich hochgeladen

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Kürzlich hochgeladen (13)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

Pic libre

  • 1. Programación en C de PICs empleando herramientas libres Matias De la Puente mfpuente.ar@gmail.com 10 de mayo de 2009 1. Introducción Los microcontroladores PIC programados en ensamblador logran una eje- cución óptima del programa cargado en su memoria, pero muchas veces la tarea de realizar y mantener un programa de grandes dimensiones en en- samblador se hace difícil. Sobre todo cuando ha pasado un tiempo sin ver el programa. Esta es la principal ventaja de C, un lenguaje de programación de mas alto nivel que ensamblador. Un programa realizado en C puede no ser mas rápido que uno realizado en ensamblador pero facilita la realización y mantenimiento de un programa de grandes dimensiones. Además el código fuente realizado en C es fácilmente portado a distintos modelos de PICs rea- lizando únicamente pequeñas modicaciones relacionadas a la arquitectura del microcontrolador. Este articulo muestra el empleo del compilador libre sdcc[4] para com- pilar programas en C, como así también el empleo del programador de PICs libre picp[3] para cargar el programa compilado en la memoria del PIC. Para leer este articulo solo es necesario que el lector presente mínimos conocimientos del lenguaje C y de la linea de comandos. 1
  • 2. 2. Primer programa El listado 1 simplemente hará oscilar un led conectado al pin RA0 de un microcontrolador PIC16f84A. 1 #include pic16f84a.h 2 3 void delay () 4 { 5 int i, j; 6 for (i=0; i4; i++) 7 for (j=0; j 250; j++) 8 ; 9 } 10 11 void main () 12 { 13 TRISA = 0x00; 14 15 while (1) 16 { 17 RA0 = 1; 18 delay (); 19 RA1 = 0; 20 delay (); 21 } 22 } Listing 1: Primer programa - pic01.c Este código puede ser escrito con cualquier editor de texto como ser: vim, nano, gedit, leafpad, mousepad, kate hasta inclusive puede escribirse empleando openoce o abiword pero guardando el documento como texto plano. 2.1. Explicación del código La primera linea del programa incluye al código fuente el archivo de cabecera pic16f84a.h, el cual dene todos los registros del microcontrolador incluyendo los registros de conguración. La función delay (linea 3) realiza un retardo aproximado de 1 segundo si el microcontrolador presenta un ciclo de instrucción de 1 ms. La función main (linea 11) es la primera función que ejecuta por defecto el microcontrolador (y de cualquier programa en C). La primera instrucción a ejecutar es TRISA = 0x00, la cual congura como salida al puerto A. El bucle de la linea 15 se ejecutará mientras el microcontrolador se encuentre encendido, ya que la condición (1) siempre será positiva, a este bucle se lo denomina bucle innito. Las lineas 17 y 19 colocan en 1 y 0, respectivamente, 2
  • 3. el bit 0 del puerto A. Las lineas 18 y 20 llaman a la función delay para realizar el retardo denido. De esta manera al colocar un led en el pin RA0 del microcontrolador, este oscilará a una frecuencia de 0.5 Hz aproximadamente. 2.2. Compilación del programa La compilación del programa se realiza con el siguiente comando: $ sdcc -mpic14 -p16f84a pic01.c La opción -mpic14 le indica al compilador que genere código en en- samblador para microcontroladores con instrucciones de 14 bits (16F84A, 16F628A, 16F876A, etc). Para microcontroladores con instrucciones de 16 bits se debe emplear la opción -mpic16. La siguiente opción, -p16f84a, in- dica al compilador el modelo de microcontrolador a emplear y debe coincidir con el modelo del archivo de cabecera incluido en el código fuente. La ultima opción indica el o los archivo de código fuente a compilar. Este compilador genera a partir del archivo de código fuente en C distin- tos archivos, los mas importantes son: pic01.asm contiene el código ensamblador generado por sdcc. pic01.hex contiene el código binario listo para ser grabado en la memoria del microcontrolador. El archivo pic01.hex, junto con otros más, no son generados directamente por sdcc sino que son generados por gpasm y gplink del paquete gputils[1]. El compilador sdcc genera el código ensamblador a partir del código en C y automáticamente ejecuta gpasm y gplink para generar el archivo .hex a partir del código ensamblador. Se le puede indicar a sdcc que utilice las herramientas de Microchip[2] mpasm y mplink solamente agregando a sdcc la opción -mplab-comp. El compilador sdcc soporta un gran numero de microcontrolador de 14 y 16 bits. Para obtener una lista de los microcontroladores de 14 bits sopor- tados por el compilador solo hay que ejecutar el siguiente comando $ sdcc -mpic14 -phelp pic01.c Para este ejemplo se empleó el archivo pic01.c pero puede ser cualquier otro inclusive uno vacío. Para obtener una lista de los microcontroladores de 16 bits soportados por el compilador simplemente hay que reemplazar la opción -mpic14 por -mpic16. 2.3. Acerca de los registros Como se menciono anteriormente, los registros del microcontrolador se encuentran denidos dentro del archivo de cabecera incluido en el código 3
  • 4. fuente. No hace falta abrir este archivo de cabecera para saber como están denidos todos los registros del microcontrolador ya que el nombre de registro es el mismo empleado dentro de la hoja de datos del microcontrolador. Por ejemplo, si queremos modicar el valor del registro INTCON del PIC16F84A elegido simplemente hay que introducir la linea INTCON = 0x00; en el código fuente, para este ejemplo se modico por el valor 0x00 pero puede ser el que uno desee. Cabe mencionar que los microcontroladores de 14 bits presentan regis- tros en diferentes bancos de memoria. En ensamblador el desarrollador debía seleccionar el banco de memoria en donde se encontraba el registro a mo- dicar. En C no hace falta realizar esta tarea ya que el mismo compilador genera el código para elegir el banco correspondiente antes de modica el registro. En los microcontroladores de 16 bits lo bancos de memoria fueron eliminados y no hace falta realizar esta tarea, mejorando el rendimiento del programa. Ahora bien, a veces es necesario modica solamente un bit de un registro, esto puede ser fácilmente realizado ya que también se encuentran denidos los bits de cada registro. La nomenclatura empleada para realizar esta tarea es diferente entre un microcontrolador de 14 bits y uno de 16 bits. Para un microcontrolador de 14 bits se emplea esta nomenclatura: nombre del registro _bits.nombre del bit Por ejemplo, se desea habilitar las interrupciones globales de PIC16F84A, para eso hay que poner en 1 el bit GIE del registro INTCON, simplemente agregamos al código fuente la linea INTCON_bits.GIE = 1;. Para un micro- controlador de 16 bits la nomenclatura es similar, la única diferencia es que no presenta el guión bajo entre nombre del registro y bits. En este caso para habilitar las interrupciones globales del microcontrolador se emplearía esta linea de código: INTCONbits.GIE = 1;. Un caso a tener en cuenta es el de los microcontroladores de 16 bits ya que no se requiere incluir el archivo de cabecera según el modelo a pro- gramar. Esto es, solamente hace falta incluir al código fuente el archivo de cabecera pic18fregs.h y a través de la opción -p18fxxxx se elige el modelo a programar. 3. Grabación del programa en la memoria del mi- crocontrolador Para grabar el programa en la memoria del microcontrolador se emplea picp. Este comando se comunica con el programador1 PICSTART Plus de 1 Para evitar confusiones el programador es el dispositivo capaz de guardar un programa en la memoria del microcontrolador. Para hacer referencia a la persona que escribe el programa se empleara desarrollador 4
  • 5. Microchip para grabar los microcontroladores. 3.1. Grabar el programa La grabación del programa en la memoria del microcontrolador se realiza simplemente empleando los siguientes instrucciones: $ picp /dev/ttyS0 16f84a -ef $ picp /dev/ttyS0 16f84a -bp -wp pic01.hex El primer comando limpieza (erase) toda la memoria ash del microcon- trolador. La segunda opción realiza un blanqueado (blank) de la memoria de programa para luego grabar el programa compilado con sdcc. La primera opción /dev/ttyS0 es el puerto serie en donde se encuentra conectado el programador (COM1, COM2, etc. para usuarios de Windows). La segunda opción 16f84a indica el modelo de microcontrolador a colocado en el programador. Se puede obtener una lista completa de los dispositivo soportados empleando picp -d. La opción -ef especica que se limpie la memoria ash del microcontrolador. La opción -bp blanquea la memoria de programa del microcontrolador. Por ultimo, la opción -wp pic01.hex escribe en la memoria de programa el archivo pic01.hex. 3.2. Lectura de la memoria del microcontrolador Con picp también es posible leer la memoria del microcontrolador, siem- pre y cuando el microcontrolador no este protegido contra lectura. El co- mando a emplear es similar a escribir el programa: $ picp /dev/ttyS0 16f84a -rp temp.hex Aquí, la opción -rp temp.hex lee la memoria de programa del microcon- trolador y la almacena en temp.hex. 3.3. Lectura y escritura de los bits de conguración Para leer y escribir los bits de conguración del microcontrolador se em- plean las opciones -rc y -wc respectivamente. La lectura de los bits de con- guración se realiza con: $ picp /dev/ttyS0 16f84a -rc La escritura de los bits de conguración se realiza con: $ picp /dev/ttyS0 16f84a -wc 0x3FF9 El microcontrolador es congurado con la palabra 2 0x3FF9. Esto es, sin protección de código, temporizador de arranque desactivado, temporizador watchdog desactivado y oscilador de tipo XT. Para mas información el lector puede referirse al manual del microcontrolador. 2 Dato de 16 bits 5
  • 6. 3.3.1. Denir los bits de conguración desde el programa Los bits de conguración pueden ser denidos desde el mismo programa en C. Para ello sdcc ofrece un par de palabras reservadas 3 que hacen posible esta tarea, las palabras reservadas son code y at y se emplean como se observa en el listado 2. code char at 0x2007 CONFIG = 0x3FF9; Listing 2: Denición de los byte de conguración Esta linea de código es agregada al programa principal luego de las di- rectivas #include. De esta manera cuando el programa sea grabado en la memoria del microcontrolador también lo harán los bits de conguración. Una vez mas el lector debe referirse al manual del microcontrolador a usar para obtener la o las direcciones y valores de los bits de conguración. 4. Conclusión La programación de un microcontrolador empleando el lenguaje C a pro- bado durante años ser la forma mas eciente de desarrollar un programa para microcontroladores, por supuesto que no se genera un código ensamblador óptimo pero el código hecho en C puede ser mantenido en forma mas sencilla que uno en ensamblador. Además pensar la solución al problema en código en C es aun mas fácil que pensarla en ensamblador. Este articulo ha demostrado que el desarrollo de un programa en C y el grabado del mismo en la memoria del microcontrolador ha sido sencilla de realizar. Las herramientas a utilizar son de fácil acceso y bien documentadas. Un editor de texto y comandos fueron solamente necesarios para escribir el programa y grabarlo al microcontrolador, esto prueba que no hacen falta complejas aplicaciones grácas para realizar este trabajo. Por supuesto que puede incorporarse dentro del editor de texto un par de botones en la barra de herramienta para que haga en forma automática la compilación y el grabado del programa. Referencias [1] GNU PIC Utilities. http://gputils.sourceforge.net/. [2] Microchip. http://www.microchip.com/. [3] PIC Programmer. http://home.pacbell.net/theposts/picmicro/. [4] Small Device C Compiler. http://sdcc.sourceforge.net. 3 Como if, while, etc. 6