You are on page 1of 11

Lenguaje C para microcontroladores

El uso del lenguaje C en microcontroladores:

Un programa codificado en lenguaje C resulta muy til en la aplicacin de


microcontroladores, dado que su compilacin es bastante eficiente y ptima
acercndose a la codificacin de lenguaje de mquina.
Lo descriptivo de la sintaxis permite elaborar de mejor forma los algoritmos
olvidndose de los molestos push y pop usados en el lenguaje de mquina cuando
se usan saltos a subrutinas.
El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se
denomina el cdigo ejecutable y est compuesto por una serie de ceros y unos,
aparentemente sin significado. Dependiendo de la arquitectura del microcontrolador,
el cdigo binario est compuesto por palabras de 12, 14 o 16 bits de anchura. Cada
palabra se interpreta por la CPU como una instruccin a ser ejecutada durante el
funcionamiento del microcontrolador. Todas las instrucciones que el microcontrolador
puede reconocer y ejecutar se les denominan colectivamente Conjunto de
instrucciones. Como es ms fcil trabajar con el sistema de numeracin hexadecimal,
el cdigo ejecutable se representa con frecuencia como una serie de los nmeros
hexadecimales denominada cdigo Hex. En los microcontroladores PIC con las
palabras de programa de 14 bits de anchura, el conjunto de instrucciones tiene 35
instrucciones diferentes.

LENGUAJE ENSAMBLADOR
Como el proceso de escribir un cdigo ejecutable era considerablemente arduo, en
consecuencia fue creado el primer lenguaje de programacin denominado
ensamblador (ASM). Siguiendo la sintaxis bsica del ensamblador, era ms fcil
escribir y comprender el cdigo. Las instrucciones en ensamblador consisten en las
abreviaturas con significado y a cada instruccin corresponde una localidad de
memoria. Un programa denominado ensamblador compila (traduce) las instrucciones
del lenguaje ensamblador a cdigo mquina (cdigo binario).
UNMSM-FIEE Circuitos Elctricos I

Este programa compila instruccin a instruccin sin optimizacin. Como permite


controlar en detalle todos los procesos puestos en marcha dentro del chip, este
lenguaje de programacin todava sigue siendo popular.

Ventajas de lenguajes de programacin de alto nivel


A pesar de todos los lados buenos, el lenguaje ensamblador tiene algunas
desventajas:

Incluso una sola operacin en el programa escrito en ensamblador consiste en


muchas instrucciones, hacindolo muy largo y difcil de manejar.

Cada tipo de microcontrolador tiene su propio conjunto de instrucciones que


un programador tiene que conocer para escribir un programa

Un programador tiene que conocer el hardware del microcontrolador para


escribir un programa Programa escrito en C (El mismo programa compilado al
cdigo ensamblador):

Ing. Electrnica Pgina |2


UNMSM-FIEE Circuitos Elctricos I

Los lenguajes de programacin de alto nivel (Basic, Pascal, C etc.) fueron creados
con el propsito de superar las desventajas del ensamblador. En lenguajes de
programacin de alto nivel varias instrucciones en ensamblador se sustituyen por una
sentencia. El programador ya no tiene que conocer el conjunto de instrucciones o
caractersticas del hardware del microcontrolador utilizado. Ya no es posible conocer
exactamente cmo se ejecuta cada sentencia, de todas formas ya no importa. Aunque
siempre se puede insertar en el programa una secuencia escrita en ensamblador.

Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje


ensamblador, probablemente sepa que la arquitectura RISC carece de algunas
instrucciones. Por ejemplo, no hay instruccin apropiada para multiplicar dos
nmeros. Por supuesto, para cada problema hay una solucin y ste no es una
excepcin gracias a la aritmtica que permite realizar las operaciones complejas al
descomponerlas en un gran nmero operaciones ms simples. En este caso, la
multiplicacin se puede sustituir con facilidad por adicin sucesiva (a x b = a + a + a
+ + a). Ya estamos en el comienzo de una historia muy larga No hay que
preocuparse al utilizar uno de estos lenguajes de programacin de alto nivel como es
C, porque el compilador encontrar automticamente la solucin a ste problema y
otros similares. Para multiplicar los nmeros a y b, basta con escribir a*b.

Lenguaje C
El lenguaje C dispone de todas las ventajas de un lenguaje de programacin de alto
nivel (anteriormente descritas) y le permite realizar algunas operaciones tanto sobre
los bytes como sobre los bits (operaciones lgicas, desplazamiento etc.). Las
caractersticas de C pueden ser muy tiles al programar los microcontroladores.
Adems, C est estandarizado (el estndar ANSI), es muy portable, as que el mismo
cdigo se puede utilizar muchas veces en diferentes proyectos. Lo que lo hace
accesible para cualquiera que conozca este lenguaje sin reparar en el propsito de
uso del microcontrolador. C es un lenguaje compilado, lo que significa que los
archivos fuentes que contienen el cdigo C se traducen a lenguaje mquina por el
compilador. Todas estas caractersticas hicieron al C uno de los lenguajes de
programacin ms populares.

Ing. Electrnica Pgina |3


UNMSM-FIEE Circuitos Elctricos I

La figura anterior es un ejemplo general de lo que sucede durante la


compilacin de programa de un lenguaje de programacin de alto nivel a bajo
nivel.

Elementos bsicos del lenguaje C:

Comentario: este permite la documentacin del cdigo y se usa de acuerdo a la


siguiente sintaxis

/* Este es un comentario */ otra opcin // Este es un comentario

Inicio y fin de bloque: permite agrupar un nmero de instrucciones las que pueden
ser ejecutadas con cierta prioridad. Se usa { para iniciar bloque y } para finalizar
bloque.
{ // inicio de bloque

// instrucciones

} // final de bloque

Identificador: es el nombre que se le da a una variable o funcin por lo general


asociado al tipo de dato que ha de contener la variable o al tipo de procedimiento que
ha de realizar la funcin.

Tipo: es una palabra reservada definida que indica el tipo de variable que se ha de
definir y su alcance numrico, esto de acuerdo a la Tabla 1.

Ing. Electrnica Pgina |4


UNMSM-FIEE Circuitos Elctricos I

El microcontrolador y el compilador CC5x

Arquitectura del microcontrolador


Para las aplicaciones se utilizar un microcontrolador basado en la familia 16F87Xa
de microchip. Este microcontrolador contiene registros, mdulos ADC, comunicacin
serial, temporizadores y manejo de interrupciones. Adems posee una memoria de
programa de entre 4 y 8Kbytes, su reloj puede ser de entre 4 y 20MHz. (ver data
C16F87xA).
Un esquema simplificado es el de la Fig. 4.

Es bastante sencillo de hacer funcionar, solo basta un par de capacitores, el cristal


ms un resistor, de acuerdo a la Fig. 5. En dicho circuito, el terminal 28
correspondiente al bit ms significativo del puerto B, se usar como monitor del

Ing. Electrnica Pgina |5


UNMSM-FIEE Circuitos Elctricos I

funcionamiento. La tarea bsica a implementar ser poner en 1 y en 0 alternadamente


el bit mencionado de tal forma de visualizarlo mediante un instrumento.

Entorno de desarrollo

El entorno de desarrollo MPLAB permite el trabajo con el microcontrolador


incorporando al editor y herramientas de simulacin y un compilador proporcionado
por otro fabricante, en este caso el compilador C CC5x desarrollado por B. Knudsen.
Al trabajar con el compilador CC5x, se debe incorporar el archivo cabecera
16F873a.h, esto automticamente permite configurar el entorno de trabajo, quedando
definido todos los recursos de la CPU, registros y mdulos con los nombres
identificados en la referencia tcnica del microcontrolador. Se sugiere revisar el
archivo de cabecera y contrastarlo con los nombres de los registros y direcciones
asociadas descritas en el manual.

Los registros de microcontrolador vienen definidos en el archivo de cabecera, estos


pueden ser accesados directamente al igual que tambin sus bits individuales. En
algunos casos los registros ya tienen definidos algunos bits internos usando otros
identificadores, esto no es incompatible entre s.

Como ejemplo se tiene el caso del puerto B, llamado PORTB por el compilador CC5X,
el cual est definido en el archivo de cabecera como una variable entera de 8 bits.

Tambin es posible encontrar el nombre de algunos bits definidos como variables


tipo bit, ya sean banderas (Flags) o bits de habilitacin de perifricos. Un ejemplo es
RCIF (ReCeive Interrupt Flag) que est definido como una variable tipo bit o el PEIE
(PEriferical Interrupt Enable).

Manejo de Puertos de E/S

El microcontrolador posee al menos 3 puertos que pueden ser usados como entradas-
salidas digitales o como entradas anlogas (si corresponde). Los Puertos son

Ing. Electrnica Pgina |6


UNMSM-FIEE Circuitos Elctricos I

bsicamente registros de 8 bits basados en Flip-Flops Tipo D, que pueden ser usados
como entrada o salida. Los nombres de los puertos corresponden a los especificados
en la data del microcontrolador, as se tiene el PORTB de 8 bits, el PORTC de 8 bit y
el PORTA de 5 bits. Dichos bits se configuran como entrada o salida a travs de un
registro llamado TRIS. Para el caso del Puerto A ser TRISA, para el puerto B, se usa
el TRISB, etc. Los puertos sealados poseen ms de una funcin. Estos puertos del
C se usan como si fueran variables enteras de 8 bit y pueden accesarse nivel de bit
o en forma de bytes.

Primero se debe especificar si el bit es de entrada o salida, esto se hace definiendo


el bit correspondiente como salida, esto se hace con el registro TRISx (x es el puerto
A, B o C) mediante el set o reset de dicho registro. Cada bit del registro TRISx maneja
la entrada o salida del bit correspondiente del PORTx.

TRISB.0=0; // Bit 0 del puerto B se define como salida TRISC.7=1; // Bit 7 del puerto
C se define como entrada

Puede definirse todo el puerto como entrada o salida o mezcla de ambas situaciones
usando un byte completo sobre el registro TRIS correspondiente.

TRISB=0x00; // los 8 bit del PORTB como salida TRISC=0xFF; // los 8 bits del PORTC
como entrada TRISB=0x0f; // Los 4 bit ms significativos de entrada, // los 4
bit menos significativos como salida

La Fig. 6 muestra un diagrama funcional del terminal PORTB.0, el cual es controlado


por el bit 0 del TRISB (TRISB.0).

Ing. Electrnica Pgina |7


UNMSM-FIEE Circuitos Elctricos I

Diferencias entre PIC y ATMEL (arduino)


Existen decenas de empresas fabricantes de microcontroladores, entre las que
podemos nombrar: Intel, Motorola, Texas Instrument, Microchip, Cypress, Atmel,
entre otras. Pero dentro de toda esta gama de microcontroladores se destacan dos
familias de microcontroladores: la familia AVR y la familia PIC, cuya popularidad es
alta entre diseadores de sistemas embebidos que requieren un rendimiento alto y
bajo costo, y eligen uno u otro ya sea por su nivel de integracin, por su arquitectura,
la disponibilidad de recursos o su lenguaje de programacin.
Los PIC son una familia de microcontroladores de 8 bits fabricados por la empresa
estadounidense MICROCHIP, cuentan con un CPU RISC y memoria FLASH para el
almacenamiento del Firmware. Por otro lado los AVR son una familia de
microcontroladores fabricada por la compaa noruega ATMEL, estos
microcontroladores de 8 bits cuentan con una CPU RISC y su memoria de programa
viene implementada en FLASH. Ambas familias cuentan con perifricos como Puertos
Digitales, ADC, PWM, entre otros. Basado en esta descripcin, se podra pensar que
los PIC y AVR son iguales, en cierto modo si, desde un punto de vista de estructura
general, pero es el mbito que rodea esta estructura para el desarrollo de sistemas
embebidos, es donde encontramos diferencia entre ambos microcontroladores, en
indicadores como: Lenguaje de programacin, IDE, interfaces para la programacin,
reloj interno, voltaje de alimentacin, potencia, costo, etc.

Se pueden programar con el mismo lenguaje?

Ing. Electrnica Pgina |8


UNMSM-FIEE Circuitos Elctricos I

No, si es que se quiere programar en lenguaje nativo porque su juego de instrucciones


o mnemnicos son diferentes, sus registros sin distintos. Son arquitecturas de
hardware diferentes.

Si se pueden programar si se utiliza un lenguaje de alto nivel (C, Pascal, Basic). Cabe
aclarar que lenguajes en versiones para PIC, no son los mismos compiladores
tradicionales.

Es decir, para quien use lenguaje C habrn pocas diferencias entre un


microcontrolador y otro.

Pueden tener los mismos usos?


Es posible que s. Se puede encontrar un microcontrolador Atmel equivalente en
funciones y caractersticas a un PIC. No obstante, ello no significa que se pueda
sustituir fsicamente el componente sin alterar el circuito electrnico ni el programa
PIC porque son incompatibles en esos dos niveles.

Son controladores completamente diferentes, cada uno con sus


propias aplicaciones?
Un microcontrolador 8051 o compatible puede servir para hacer un juego de luces
navideas, pero sera un desperdicio de prestaciones. En ese sentido existen
aplicaciones ms o menos determinadas para cada modelo de microcontrolador. PIC
fue y sigue siendo un microcontrolador muy comn en algunas reas, pero esas
mismas reas funcionales en otros lugares geogrficos prefieren utilizar
microcontrolador Freescale que tampoco son costosos. En este ltimo caso PIC y
Freescale son diferentes, se programan de modo diferente, pero tambin tienen
modelos que son prcticamente equivalentes en cuanto a sus funciones.

A ello agreguemos el hecho de que ciertos microcontrolador son ms bien un sector


clase A tal como los ARM y los propios AVR. Por lo general sus prestaciones son
superiores. Aunque tambin encontrars potentes PIC de 32 bits.

Se pueden programar con el mismo hardware, o tiene cada uno un


hardware especfico?
Cada uno se programa con un hardware especfico. Sin embargo, existen diversos
circuitos programadores universales que te permiten programar varias
marcas/modelos con distinta cantidad de pines sin hacer ningn cambio.

Podra sustituir un controlador Atmel por un controlador PIC?

Ing. Electrnica Pgina |9


UNMSM-FIEE Circuitos Elctricos I

Por sus funciones s. Pero no puedes retirar un PIC y colocar un Atmel as de simple.
El circuito es otro. El programa es otro a pesar de que funcionalmente puedan ejecutar
las mismas tareas.

Encapsulamiento y ocultacin

Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos
y programas, todos ellos relacionados entre s, como si estuvieran encerrados
conjuntamente en una cpsula. Esta propiedad (encapsulamiento), es una de las
caractersticas fundamentales en la OOP.

Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los
programadores conozcan cmo est distribuida la informacin o qu informacin hay
disponible. Esta propiedad de los objetos se denomina ocultacin de la informacin.

Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto
a un objeto y a lo que contiene. Si as fuera no se podra hacer gran cosa con l. Lo
que sucede es que las peticiones de informacin a un objeto. deben realizarse a
travs de mensajes dirigidos a l, con la orden de realizar la operacin pertinente. La
respuesta a estas rdenes ser la informacin requerida, siempre que el objeto
considere que quien enva el mensaje est autorizado para obtenerla.

El hecho de que cada objeto sea una cpsula facilita enormemente que un objeto
determinado pueda ser transportado a otro punto de la organizacin, o incluso a otra
organizacin totalmente diferente que precise de l. Si el objeto ha sido bien
construido, sus mtodos seguirn funcionando en el nuevo entorno sin problemas.
Esta cualidad hace que la OOP sea muy apta para la reutilizacin de programas.

Organizacin de los objetos

En principio, los objetos forman siempre una organizacin jerrquica, en el sentido de


que ciertos objetos son superiores a otros de cierto modo.

Existen varios tipos tipos de jerarquas: sern simples cuando su estructura pueda ser
representada por medio de un "rbol". En otros casos puede ser ms compleja.

En cualquier caso, sea la estructura simple o compleja, podrn distinguirse en ella


tres niveles de objetos.

La raz de la jerarqua. Se trata de un objeto nico y especial. Este se caracteriza


por estar en el nivel ms alto de la estructura y suele recibir un nombre muy genrico,
que indica su categora especial, como por ejemplo objeto madre, Raz o Entidad.

Los objetos intermedios. Son aquellos que descienden directamente de la raz y


que a su vez tienen descendientes. Representan conjuntos o clases de objetos, que
pueden ser muy generales o muy especializados, segn la aplicacin. Normalmente

Ing. Electrnica P g i n a | 10
UNMSM-FIEE Circuitos Elctricos I

reciben nombres genricos que denotan al conjunto de objetos que representan, por
ejemplo, VENTANA, CUENTA, FICHERO. En un conjunto reciben el nombre de
clases o tipos si descienden de otra clase o subclase.

Los objetos terminales. Son todos aquellos que descienden de una clase o subclase
y no tienen descendientes. Suelen llamarse casos particulares, instancias o tems
porque representan los elementos del conjunto representado por la clase o subclase
a la que pertenecen.

Veamos ahora en detalle los tres elementos mencionados en "Estructura de un


Objeto".

Bibliografa
http://luis.izqui.org/resources/ProgOrientadaObjetos.pdfhttp://users.salleurl.edu/~tl13
960/tutorial_hi_tech.pdf

http://sites.ieee.org/sb-itver/files/2014/09/Programa-y-requerimientos-del-curso-uC-
en-C.pdf

http://www.edudevices.com.ar/download/articulos/MCUsPIC/Programando_PICs_C
CS_08.pdf

http://controlautomaticoeducacion.com/primeros-pasos-programando-un-
microcontrolador/

Ing. Electrnica P g i n a | 11

You might also like