SlideShare una empresa de Scribd logo
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

Más contenido relacionado

La actualidad más candente

como programar un pic
como  programar un piccomo  programar un pic
como programar un pic
Ruderocker Billy
 
Ec2
Ec2Ec2
Construcciondeun pl cconpic
Construcciondeun pl cconpicConstrucciondeun pl cconpic
Construcciondeun pl cconpic
Sergio Uscamaita Flores
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASM
dave
 
Dudas printf()
Dudas printf()Dudas printf()
Dudas printf()
bad_666
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
juan1993are
 
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
iihhhii
 
Sistemas Microprocesados I
Sistemas Microprocesados ISistemas Microprocesados I
Sistemas Microprocesados I
Christian Morales
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
guestf09168b
 
Pikit3 parte i-
Pikit3 parte i-Pikit3 parte i-
Pikit3 parte i-
Gerardo Garcia
 
comunicacion pic - usb
comunicacion pic - usbcomunicacion pic - usb
comunicacion pic - usb
munlis
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadoras
Yessicafragoso
 
Programación de microcontrolador
Programación de microcontroladorProgramación de microcontrolador
Programación de microcontrolador
Marleny Pretell Silva
 
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
Biblioman Aquihayapuntes
 
Adc 4
Adc 4Adc 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
fitomaster
 

La actualidad más candente (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
 

Destacado

History
HistoryHistory
History
Janine16
 
Estructuras de almacenamiento
Estructuras de almacenamientoEstructuras de almacenamiento
Estructuras de almacenamiento
skullsoul
 
Ejercicios
Ejercicios Ejercicios
Ejercicios
marcemanquillo
 
History
HistoryHistory
History
Janine16
 
Framework
FrameworkFramework
Framework
Nguyen Linh
 
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 interncaional
ferminalex
 

Destacado (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
 

Similar a Pic libre

Pic16f84(1)
Pic16f84(1)Pic16f84(1)
Pic16f84(1)
Erick Perez
 
Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84Introducción a la programacion Pic16F84
Introducción a la programacion Pic16F84
Daniel Remondegui
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
Hamiltonn Casallas
 
Pic
PicPic
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
victor pablo
 
Curso integral pic_236
Curso integral pic_236Curso integral pic_236
Curso integral pic_236
Francisco Acevedo Hernandez
 
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
Jose Alva
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
dar851112
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PIC
MicroPart
 
Libro basico pic
Libro basico picLibro basico pic
Libro basico pic
Neda Liz Guevara Vargaya
 
Practica1
Practica1Practica1
Practica1
rexmersxa7
 
38912287 practica1
38912287 practica138912287 practica1
38912287 practica1
rexmersxa7
 
Practica1
Practica1Practica1
Practica1
san jaramillo
 
Sistemas Microprocesados I
Sistemas Microprocesados ISistemas Microprocesados I
Sistemas Microprocesados I
Christian Morales
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en Arduino
Javier Leyva
 
02 programarpic
02 programarpic02 programarpic
02 programarpic
aserege66
 
02 programar
02 programar02 programar
Microcontrolador pic
Microcontrolador picMicrocontrolador pic
Microcontrolador pic
MirkoBlanco
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PIC
Sohar Carr
 
Manual de PicBasic para icrocontroladores de microchip.pdf
Manual de PicBasic para icrocontroladores de microchip.pdfManual de PicBasic para icrocontroladores de microchip.pdf
Manual de PicBasic para icrocontroladores de microchip.pdf
Edwin4321
 

Similar a 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 programarpic
02 programarpic02 programarpic
02 programarpic
 
02 programar
02 programar02 programar
02 programar
 
Microcontrolador pic
Microcontrolador picMicrocontrolador pic
Microcontrolador pic
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PIC
 
Manual de PicBasic para icrocontroladores de microchip.pdf
Manual de PicBasic para icrocontroladores de microchip.pdfManual de PicBasic para icrocontroladores de microchip.pdf
Manual de PicBasic para icrocontroladores de microchip.pdf
 

Último

herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
Miguel Rebollo
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 

Último (20)

herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 

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