Está en la página 1de 169

Bases

de
los
MiCroControladores

Editorial
Del Editor al Lector

La colecci�n Club Saber Electr�nica fue pensada como una obra de 12 tomos de
edici�n
mensual en la que se tratar�n los temas m�s significativos de la electr�nica.
R�pidamente comprendimos
que esta serie estaba llenando un vac�o en la informaci�n y por ello decidimos
continuarla.
Ya llevamos m�s de 8 a�os (97 tomos de colecci�n) y pensamos que su vida a�n est�
en
pa�ales.

En diversos tomos nos hemos referido a los microcontroladores pero hasta la fecha
poco
hemos hablado de lenguajes de programaci�n de alto nivel, es por ello que este
libro y la siguiente
edici�n tratar� este tema de una forma sencilla y con gran contenido pr�ctico.

Un microcontrolador es un circuito integrado o chip que incluye en su interior las


tres unidades
funcionales de una computadora: CPU, Memoria y Unidades de E/S, es decir, se trata
de
una computadora completa en un solo circuito integrado.

Son dise�ados para disminuir el costo econ�mico y el consumo de energ�a de un


sistema en
particular. Por eso el tama�o de la CPU, la cantidad de memoria y los perif�ricos
incluidos depender�n
de la aplicaci�n. El control de un electrodom�stico sencillo como una batidora,
utilizar� un
procesador muy peque�o (4 u 8 bit) por que sustituir� a un aut�mata peque�o; en
cambio un
reproductor de m�sica y/o v�deo digital (mp3 o mp4) requerir� de un procesador de
32 bit o de 64
bit y de uno o mas c�dec de se�al digital (audio y/o v�deo). El control de un
sistema de frenos
ABS (Antilock Brake System) se basa normalmente en un microcontrolador de 16 bit,
al igual que
el sistema de control electr�nico del motor en un autom�vil.

Los microcontroladores representan la inmensa mayor�a de los chips de computadoras


vendidos,
un 50% son controladores "simples" y el resto corresponde a procesadores m�s
especializados.
Un microcontrolador difiere de una CPU normal, en que es m�s f�cil convertirlo en
una
computadora en funcionamiento, con un m�nimo de chips externos de apoyo.
Un microcontrolador t�pico tendr� un generador de reloj integrado y una peque�a
cantidad
de memoria RAM y ROM/EPROM/EEPROM/FLASH, significando que para hacerlo funcionar,
todo lo que se necesita son unos pocos programas de control y un cristal de
sincronizaci�n. Los
microcontroladores disponen generalmente tambi�n de una gran variedad de
dispositivos de
entrada/salida, como convertidores de anal�gico a digital, temporizadores, UARTs y
buses de
interfaz serie especializados, como I2C y CAN. Frecuentemente, estos dispositivos
integrados
pueden ser controlados por instrucciones de procesadores especializados. Los
modernos micro-
controladores frecuentemente incluyen un lenguaje de programaci�n integrado, como
el BASIC
que se utiliza bastante con este prop�sito.

Esperamos que esta breve introducci�n le sirva como �disparador� para estudiar el
contenido
en la espera del pr�ximo texto.

�Hasta el mes pr�ximo!

Sobre
loS
2 CDSy
Su
DeSCarga

Ud. podr� descargar de nuestra web 2 CDs: �Microcontroladores vol. 1 y 2�


con gran cantidad de circuitos para armar y sistemas para experimentar. Todos los
CDs son productos multimedia completos con un costo de mercado equivalente a 8
d�lares americanos cada uno y Ud. los puede descargar GRATIS con su n�mero de
serie por ser comprador de este libro. Para realizar la descarga deber� ingresar a
nuestra web: www.webelectronica.com.mx, tendr� que hacer clic en el �cono password
e ingresar la clave �MICro97�. Tenga este texto cerca suyo ya que se le har�
una pregunta aleatoria sobre el contenido para que pueda iniciar la descarga.

Di rec tor

Ing. Ho ra cio D. Va lle jo

Pro duc ci�n

Jo s� Ma r�a Nie ves (Grupo Quark SRL)

autor:

Varios (ver Editorial)


Selecci�n y Coordinaci�n:

Ing. Horacio Daniel Vallejo

Edi to rial
QUarK S.r.l.

Pro pie ta ria de los de re chos en cas te lla no de la pu bli ca ci�n


men sual Sa bEr ElEc tr� ni ca
-San Ricardo
2072 (1273) -Ca pi tal Fe de ral -Buenos Aires Argentina
-T.E. 4301-8804

ad mi nis tra ci�n y Ne go cios

Te re sa C. Ja ra (Grupo Quark SRL)


Patricia Rivero Rivero (SISA
SA
de CV)
Margarita Rivero Rivero (SISA
SA
de CV)

Staff

Liliana Teresa Vallejo


Mariela Vallejo
Diego Vallejo
Luis Alberto Castro Regalado (SISA
SA
de CV)
Jos� Luis Paredes Flores (SISA
SA
de CV)

Sis te mas:
Pau la Ma ria na Vi dal
red y Com pu ta do ras:
Ra�l Ro me ro
Video y animaciones: Fernando Fern�ndez
le ga les: Fer nan do Flo res
Con ta du r�a:
Fer nan do Du cach
T�cnica y Desarrollo de Prototipos:

Alfredo Armando Flores

aten ci�n al Clien te


Ale jan dro Va lle jo
ate clien @we be lec tro ni ca .co m.ar

In ter net: www.we be lec tro ni ca .co m.mx

Publicidad:

Rafael Morales
rafamorales@webelectronica.com.ar

Club Se:
grupo Quark Srl

luisleguizamon @we be lec tro ni ca .co m.ar

edi to rial Quark Srl

San Ricardo 2072 (1273) -Ca pi tal Fe de ral


www.we be lec tro ni ca .co m.ar

La Edi to rial no se res pon sa bi li za por el con te ni do de


las no tas fir ma das. To dos los pro duc tos o mar cas
que se men cio nan son a los efec tos de pres tar un
ser vi cio al lec tor, y no en tra �an res pon sa bi li dad de
nues tra par te. Es t� pro hi bi da la re pro duc ci�n to tal o
par cial del ma te rial con te ni do en es ta re vis ta, as� co mo
la in dus tria li za ci�n y/o co mer cia li za ci�n de los
apa ra tos o ideas que apa re cen en los men cio na dos
tex tos, ba jo pe na de san cio nes le ga les, sal vo me dian
te au to ri za ci�n por es cri to de la Edi to rial.

Impresi�n: Talleres Babieca -M�xico

Cap�tulo 11
El
Mundo
de
los
Microcontroladores

ELMunDoDELosMicrocontroLaDorEssuMario
Cap�tulo
1
lossistemas
de
NumeraCi�N . . . . . . . . . . . . . . . .3

Introducci�n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .3
Qu� Pueden Hacer los Microcontroladores . . . . . . . . . . . . .4
N�meros, N�meros, N�meros... . . . . . . . . . . . . . . . . . . . . . .6
Sistema de Numeraci�n Binario . . . . . . . . . . . . . . . . . . . . . .6
Sistema de Numeraci�n Exadecimal . . . . . . . . . . . . . . . . . .7
Conversi�n de Sistemas de Numeraci�n . . . . . . . . . . . . . . .8
Conversi�n de N�meros Binarios a Decimales . . . . . . . . . .8
Conversi�n de N�meros Hexadecimales a Decimales . . . . .9
Conversi�n de N�meros Hexadecimales a Binarios . . . . . . .9
Marcar los N�meros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
N�meros Negativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . .10
BYTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .10
Detalles Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Componentes B�sicos de la L�gica Digital . . . . . . . . . . . . .11
Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .12
Puertos de Entrada / Salida (E/S) . . . . . . . . . . . . . . . . . . . .13
Unidad de Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.16
Unidad Central de Procesamiento
(CENTRALPROCESSOR UNIT
-CPU) . . . . . . . . . . . . . . .17
Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .17
Comunicaci�n en Serie . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Velocidad de Transmisi�n Serial . . . . . . . . . . . . . . . . . . . . .18
I2C Circuito Inter- Integrado
(INTER INTEGRATED CIRCUIT) . . . . . . . . . . . . . . . . . . .18
SPI -Bus Serial de Interfaz de Perif�ricos
(SERIAL
PERIPHERAL
INTERFACE BUS . . . . . . . . . . . . .18
Oscilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .19
Circuito de Alimentaci�n . Fuente de Alimentaci�n . . . . . . .19
Temporizadores � Contadores . . . . . . . . . . . . . . . . . . . . . .20
�C�mo Funcionan los Temporizadores? . . . . . . . . . . . . . .20
Utilizando un Preescalador en el
Funcionamiento del Temporizador . . . . . . . . . . . . . . . . . . .21
Utilizando una Interrupci�n en el
Funcionamiento del Temporizador . . . . . . . . . . . . . . . . . . .21
Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.21
Temporizador Perro Guardi�n. WATCHDOG . . . . . . . . . . .22
Convertidor Digital � Anal�gico (D/A) . . . . . . . . . . . . . . . . .22
Arquitectura Interna de un Microcontrolador . . . . . . . . . . . .23

Juego de Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . .24


�C�mo se Debe Elegir un Microcontrolador? . . . . . . . . . . .25

Cap�tulo
2
sistemas
de
programaCi�N:
leNguaje
mikroC ........................27

Lenguajes de Programaci�n . . . . . . . . . . . . . . . . . . . . . . . .27


Lenguaje Ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Ventajas de los Lenguajes de Programaci�n
de Alto Nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.28
Lenguaje
C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Caracter�sticas de el Lenguaje mikroC . . . . . . . . . . . . . . . .30
Fases de la Compilaci�n . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Estructura del Programa . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
Tipos de Datos en mikroC . . . . . . . . . . . . . . . . . . . . . . . . . .34
Variables y Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
�mbito de Variables y Constantes . . . . . . . . . . . . . . . . . . .39
Clases de Almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . .40
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.40
Conversi�n de Tipos de Datos . . . . . . . . . . . . . . . . . . . . . .44
Estructuras de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .47
Sentencias de Salto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
Tipos de Datos Avanzados . . . . . . . . . . . . . . . . . . . . . . . . .50
Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.54

Cap�tulo
3
losmiCroCoNtroladorespiC . . . . . . . . . . . . . .63

Introducci�n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .63
La Memoria de Programa . . . . . . . . . . . . . . . . . . . . . . . . . .67
La Memoria de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Los Puertos del PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
El
Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.69
El
Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
Primeras Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
GPIC USB: Programador de Microcontroladores
PIC y Memorias Eeprom por Puerto USB . . . . . . . . . . . . .70
Introducci�n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. .70
Descripci�n del Circuito Electr�nico . . . . . . . . . . . . . . . . . .70
El Programador Quark Pro 2 . . . . . . . . . . . . . . . . . . . . . . .77

2Club saber electr�nica n� 97


Cap�tulo1eLmuNdodeLosmicrocoNtroLadoresCap�tulo1eLmuNdodeLosmicrocoNtroLadores
�LossistemasdeNumeraci�N�
Pr�cticamente desde su aparici�n, all� por el a�o 1986, en Saber Electr�nica
destacamos
la importancia de los microcontroladores en el mundo de la electr�nica.
Hemos escrito m�s de 50 art�culos, 10 libros de texto y varios cursos sobre
componentes
de distintas familias. Sin embargo, el tema nunca se agota y siempre se puede
dar una nueva vista que nos permita conocer cada vez mejor a estos procesadores
en un solo chip con los que podemos aprender y capacitarnos en nuestra vida
profesional.
A
partir de este n�mero comenzamos con la edici�n de un curso de micro-
controladores de MicroElectronika (www.mikroe.com) a quienes agradecemos por
permitirnos compartir este important�simo material, invitando a todos los lectores
a
que visiten la p�gina de referencia para obtener importante material de apoyo.

www.mikroe.com

IntroduccI�n

La situaci�n actual en el campo de los micro-


controladores se ha producido gracias al desarrollo
de la tecnolog�a de fabricaci�n de los cir

cuitos integrados. Este desarrollo ha permitido


construir las centenas de miles de transistores
en un chip. Esto fue una condici�n previa para la
fabricaci�n de un microprocesador. Las primeras
microcomputadoras se fabricaron al a�adir-

Cap�tulo 13
El
Mundo
de
los
Microcontroladores

les perif�ricos externos, tales como memoria,


l�neas
de
entrada/salida,
temporizadores
u
otros. El incremento posterior de la densidad de
integraci�n permiti� crear un circuito integrado
que conten�a tanto al procesador como perif�ricos.
As� es c�mo fue desarrollada la primera
microcomputadora en un solo chip, denominada
m�s tarde microcontrolador.

Los principiantes en electr�nica creen que un


microcontrolador es igual a un microprocesador.
Esto no es cierto. Difieren uno del otro en
muchos sentidos. La primera y la m�s importante
diferencia es su funcionalidad. Para utilizar al
microprocesador en una aplicaci�n real, se debe
de
conectar
con
componentes
tales
como
memoria o componentes buses de transmisi�n
de datos. Aunque el microprocesador se considera
una m�quina de computaci�n poderosa, no
est� preparado para la comunicaci�n con los
dispositivos perif�ricos que se le conectan. Para
que el microprocesador se comunique con alg�n
perif�rico, se deben utilizar los circuitos especiales.
As� era en el principio y esta pr�ctica sigue
vigente en la actualidad.

Por otro lado, al microcontrolador se le dise�a


de tal manera que tenga todas las componentes
integradas en el mismo chip. No necesita
de otros componentes especializados para su
aplicaci�n, porque todos los circuitos necesarios,
que de otra manera correspondan a los
perif�ricos, ya se encuentran incorporados. As�
se ahorra tiempo y espacio necesario para construir
un dispositivo.

Qu�
Pueden
Hacer
los
MIcrocontroladores

Para entender con m�s facilidad las razones


del �xito tan grande de los microcontroladores,
vamos a prestar atenci�n al siguiente ejemplo.
Hace unos 10 a�os, dise�ar un dispositivo electr�nico
de control de un ascensor de un edificio
de varios pisos era muy dif�cil, incluso para un
equipo de expertos.

�Ha pensado alguna vez en qu� requisitos


debe cumplir un simple ascensor? �C�mo lidiar
con la situaci�n cuando dos o m�s personas lla

man al ascensor al mismo tiempo? �Cu�l llamada


tiene la prioridad? �C�mo solucionar las
cuestiones de seguridad, de p�rdida de electricidad,
de fallos, de uso indebido?

Lo que sucede despu�s de resolver estos


problemas b�sicos es un proceso meticuloso de
dise�ar los dispositivos adecuados utilizando un
gran n�mero de los chips especializados. Este
proceso puede tardar semanas o meses, dependiendo
de
la
complejidad
del
dispositivo.
Cuando haya terminado el proceso, llega la hora
de dise�ar una placa de circuito impreso y de
montar el dispositivo. �Un dispositivo enorme! Es
otro trabajo dif�cil y tardado. Por �ltimo, cuando
todo est� terminado y probado adecuadamente,
pasamos al momento crucial y es cuando uno se
concentra, respira profundamente y enciende la
fuente de alimentaci�n.

Esto suele ser el punto en el que la fiesta se


convierte en un verdadero trabajo puesto que
los dispositivos electr�nicos casi nunca funcionan
apropiadamente desde el inicio. Prep�rese
para muchas noches sin dormir, correcciones,
mejoras... y no se olvide de que todav�a estamos
hablando de c�mo poner en marcha un simple
ascensor.

Cuando el dispositivo finalmente empiece a


funcionar perfectamente y todo el mundo est�
satisfecho, y le paguen por el trabajo que ha
hecho, muchas compa��as de desarrollo estar�n
interesadas en su trabajo. Por supuesto, si
tiene suerte, cada d�a le traer� una oferta de trabajo
de un nuevo inversionista. Sin embargo, si
lo requieren para trabajar en el control de los
elevadores de un nuevo edificio que tiene cuatro
pisos m�s de los que ya maneja su sistema de
control.

�Sabe c�mo proceder? �Cree acaso que se


pueden controlar las demandas de sus clientes?

Pensamos que usted va a construir un dispositivo


universal que se puede utilizar en los edificios
de 4 a 40 pisos, una obra maestra de electr�nica.
Bueno, incluso si usted consigue construir
una joya electr�nica, su inversionista le
esperar� delante de la puerta pidiendo una
c�mara en el ascensor o una m�sica relajante
en caso de fallo de ascensor. O un ascensor con

4Club Saber Electr�nica N� 97


dos puertas. De todos modos, la ley de Murphy
es inexorable y sin duda usted no podr� tomar
ventaja a pesar de todos los esfuerzos que ha
hecho. Por desgracia, todo lo que se ha dicho
hasta ahora sucede en la realidad. Esto es lo
que �dedicarse a la ingenier�a electr�nica� real-

BaSES
dE
loS
MiCroCoNtroladorES

mente significa. Es as� como se hac�an las


cosas hasta aparici�n de los microcontroladores
dise�ados
-peque�os,
potentes
y
baratos.
Desde ese momento su programaci�n dej� de
ser una ciencia, y todo tom� otra direcci�n ...

El dispositivo electr�nico capaz de controlar

Cap�tulo 15Figura 1
El
Mundo
de
los
Microcontroladores

un peque�o submarino, una gr�a o un ascensor


como el anteriormente mencionado, ahora est�
incorporado en un s�lo chip. Los microcontroladores
ofrecen una amplia gama de aplicaciones y
s�lo algunas se exploran normalmente. Le toca a
usted decidir qu� quiere que haga el microcontrolador
y cargar un programa en �l con las instrucciones
apropiadas. Antes de encender el dispositivo
es recomendable verificar su funcionamiento
con ayuda de un simulador. Si todo funciona
como es debido, incorpore el microcontrolador en
el sistema. Si alguna vez necesita cambiar, mejorar
o actualizar el programa, h�galo.

�Hasta cu�ndo se deben hacer modificaciones?

Hasta quedar satisfecho. Eso puede realizarse


sin ning�n problema. Vea en la figura 1 una
caracterizaci�n sobre los pasos que debe seguir
un principiante para la programaci�n.

Sab�a usted que todas las personas pueden


ser clasificadas en uno de 10 grupos, en los que
est�n familiarizados con el sistema de numeraci�n
binario y en los que no est�n familiarizados
con �l. Si no entendi� lo anterior significa que
todav�a pertenece al segundo grupo. Si desea
cambiar
su
estado,
lea
el
siguiente

texto que describe brevemente algunos


de
los
conceptos
b�sicos
utilizados
m�s tarde en este libro (s�lo para estar
seguro de que estamos hablando en
los mismos t�rminos).

n�Meros, n�Meros, n�Meros...


�La matem�tica es una gran ciencia!
Todo es tan l�gico y simple... El universo
de los n�meros se puede describir
con s�lo diez d�gitos.

�Realmente
tiene
que
ser
as�?
�Necesitamos exactamente esos 10 d�gitos?

Por supuesto que no, es s�lo cuesti�n del


h�bito. Acu�rdese de las lecciones de la escuela.
Por ejemplo, �qu� significa el n�mero 764?
Cuatro unidades, seis decenas y siete centenas.

�Muy simple!

�Se podr�a expresar de una forma m�s desarrollada?

Por supuesto que s�:

764 = 4 + 60 + 700

�A�n m�s desarrollado?

S�:

764 = 4*1 + 6*10 + 7*100

�Podr�a este n�mero parecer un poco m�s


�cient�fico�?

La respuesta es s� otra vez:

764= 4*100 + 6*101


+ 7*102.

�Qu� significa esto realmente? �Por qu� utilizamos


exactamente estos n�meros 100, 101 y
102 ? �Por qu� es siempre el n�mero 10?

Es porque utilizamos 10 d�gitos diferentes (0,


1, 2...8, 9). En otras palabras, es porque utilizamos
el sistema de numeraci�n en base 10, es
decir el sistema de numeraci�n decimal, figura
2.

Figura 2

sIsteMa
de
nuMeracI�n
BInarIo

�Qu� pasar�a si utiliz�ramos s�lo dos n�meros


0 y 1?

6Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

Si s�lo pudi�ramos afirmar (1) o negar (0)


que algo existe. La respuesta es �nada especial�,
seguir�amos utilizando los mismos n�meros
de la misma manera que utilizamos hoy en
d�a, no obstante ellos parecer�an un poco diferentes.
Por ejemplo: 11011010.

�Cu�ntas son realmente 11011010 p�ginas


de un libro?

Para entenderlo, siga la misma l�gica como


en el ejemplo anterior, pero en el orden invertido.
Tenga en cuenta que se trata de aritm�tica
con s�lo dos d�gitos 0 y 1, es decir, del sistema
de numeraci�n en base 2 (sistema de numeraci�n
binario). Vea la figura 3.

Figura 3
pocos voltios). La raz�n son los ruidos el�ctricos
y fen�menos que se presentan dentro de lo que
llamamos �entorno de trabajo real� (algunos
ejemplos de estos fen�menos son los cambios
imprevisibles
de
la
tensi�n
de
alimentaci�n,
cambios de temperatura, tolerancia a los valores
de los componentes etc...). Imag�nese una computadora
que opera sobre n�meros decimales al
tratarlos de la siguiente manera: 0=0V, 1=5V,
2=10V, 3=15V, 4=20V... 9=45V

�Alguien dijo bater�as?

Una soluci�n mucho m�s f�cil es una l�gica


binaria donde 0 indica la ausencia de voltaje,
mientras que 1 indica la presencia de voltaje.

Simplemente,
es
f�cil
de

escribir 0 o 1 en vez de �no


hay voltaje� o � hay voltaje�.
Mediante el cero l�gico (0) y
uno l�gico (1) la electr�nica
se enfrenta perfectamente y
realiza con facilidad todas
las operaciones aritm�ticas.
Evidentemente, se trata de
electr�nica que en realidad
aplica aritm�tica en la que
todos
los
n�meros
son

Evidentemente, se trata del mismo n�mero


representado en dos sistemas de numeraci�n
diferentes. La �nica diferencia entre estas dos
representaciones yace en el n�mero de d�gitos
necesarios para escribir un n�mero. Un d�gito

(2) se utiliza para escribir el n�mero 2 en el sistema


decimal, mientras que dos d�gitos (1 y 0)
se utilizan para escribir aquel n�mero en el sistema
binario.
�Ahora est� de acuerdo que hay 10 grupos
de gente?

�Bienvenido al mundo de la aritm�tica binaria!


�Tiene alguna idea de d�nde se utiliza?

Excepto en las condiciones de laboratorio


estrictamente controladas, los circuitos electr�nicos
m�s complicados no pueden especificar
con exactitud la diferencia entre dos magnitudes
(dos valores de voltaje, por ejemplo), si son
demasiado peque�os (m�s peque�os que unos

representados con s�lo dos


d�gitos y donde s�lo es importante saber si hay
voltaje o no. Por supuesto, estamos hablando de
electr�nica digital.

sIsteMa
de
nuMeracI�n
exadecIMal

En el principio del desarrollo de las computadoras


era evidente que a la gente le costaba
mucho trabajar con n�meros binarios. Por eso,
se estableci� un nuevo sistema de numeraci�n,
que utilizaba 16 s�mbolos diferentes. Es llamado
el sistema de numeraci�n hexadecimal. Este
sistema est� compuesto de 10 d�gitos a los que
estamos acostumbrados (0, 1, 2, 3,... 9) y de
seis letras del alfabeto A, B, C, D, E y F.

�Cu�l es el prop�sito de esta combinaci�n


aparentemente extra�a?

Basta con mirar c�mo todo en la historia de

Cap�tulo 17
El
Mundo
de
los
Microcontroladores

los n�meros binarios encaja perfectamente para


mal es el que nos resulta m�s comprensible,
lograr una mejor comprensi�n del tema. Vea la
mientras que el sistema hexadecimal presenta
figura 4.
un balance entre los dos. Por eso, es muy
importante aprender c�mo

convertir los n�meros deun sistema de numeraci�na otro, por ejemplo,


c�moconvertirunaseriedeFigura 4
El mayor n�mero que puede ser representado
con 4 d�gitos binarios es el n�mero 1111.
Corresponde al n�mero 15 en el sistema decimal.
En el sistema hexadecimal ese n�mero se
representa con s�lo un d�gito F. Es el mayor
n�mero de un d�gito en el sistema hexadecimal.

�Se da cuenta de la gran utilidad de estas


equivalencias?

El mayor n�mero escrito con ocho d�gitos


binarios es a la vez el mayor n�mero de dos
d�gitos en el sistema hexadecimal. Tenga en
cuenta que una computadora utiliza n�meros
binarios de 8 d�gitos. �Acaso se trata de una
casualidad?

c�dIgo
Bcd

El
c�digo
BCD
(Binary-Coded
Decimal
C�digo
binario
decimal)

es un c�digo binario utilizado


para representar a
los
n�meros
decimales.
Se utiliza para que los cir
ceros y unos a una forma de representaci�n
comprensible para nosotros.

conversI�n
de
n�Meros
BInarIos
a
decIMales

Los d�gitos en un n�mero binario tienen ponderaciones


diferentes lo que depende de sus
posiciones dentro del n�mero que est�n representando.
Adem�s, cada d�gito puede ser 1 o 0,
y su ponderaci�n se puede determinar con facilidad
al contar su posici�n empezando por la
derecha. Para hacer una conversi�n de un
n�mero binario a decimal es necesario multiplicar
las ponderaciones con los d�gitos correspondientes
(0 o 1) y sumar todos los resultados. La
magia de la conversi�n de un n�mero binario a
decimal funciona de maravilla... �Tiene dudas?
Vea el ejemplo de la figura 5.

Figura 5
cuitos
electr�nicos
puedan
comunicarse con los perif�ricos utilizando el
sistema de numeraci�n decimal o bien utilizando
el sistema binario dentro de �su propio mundo�.
Consiste en n�meros binarios de 4 d�gitos que
representan los primeros diez d�gitos (0, 1, 2,
3...8, 9). Aunque cuatro d�gitos pueden hacer 16
combinaciones posibles en total, el c�digo BCD
normalmente utiliza a las primeras diez.

conversI�n
de
sIsteMas
de
nuMeracI�n

El sistema de numeraci�n binario es el que


utilizan los microcontroladores, el sistema deci-

Cabe destacar que es necesario utilizar s�lo


dos d�gitos binarios para representar a todos los
n�meros decimales de 0 a 3.

Por consiguiente, para representar los n�meros


de 0 a 7 es necesario utilizar tres d�gitos
binarios, para representar los n�meros de 0 a 15
-cuatro d�gitos etc.
Dicho de manera sencilla, el mayor n�mero
binario que se puede representar utilizando n
d�gitos se obtiene al elevar la base 2 a la potencia
n. Luego, al resultado se le resta 1. Por ejemplo,
si n=4:

24
-1 = 16 -1 = 15

8Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

Por consiguiente, al utilizar 4 d�gitos binarios,


es posible representar los n�meros decimales
de 0 a 15, que son 16 valores diferentes en total.

conversI�n
de
n�Meros
HexadecIMales
a
decIMales

Para realizar una conversi�n de un n�mero


hexadecimal a decimal, cada d�gito hexadecimal
debe ser multiplicado con el n�mero 16 elevado
al valor de su posici�n. Como ejemplo, vea la
representaci�n de la figura 6.

conversI�n
de
n�Meros
HexadecIMales
a
BInarIos

No es necesario realizar ning�n c�lculo para


convertir un n�mero hexadecimal a binario. Los
d�gitos hexadecimales se reemplazan simplemente
por los cuatro d�gitos binarios apropiados.
Ya que el d�gito hexadecimal m�ximo es equivalente
al n�mero decimal 15, es necesario utilizar
cuatro d�gitos binarios para representar un d�gito
hexadecimal. Vea la figura 7.

Figura 7
Marcar
los
n�Meros

El sistema de numeraci�n hexadecimal, junto


con los sistemas binario y decimal, se consideran
los m�s importantes para nosotros. Es f�cil
realizar una conversi�n de cualquier n�mero
hexadecimal a binario, adem�s es f�cil de recordarlo.
Sin obstante, estas conversiones pueden
provocar una confusi�n. Por ejemplo, �qu� significa
en realidad la sentencia: �Es necesario
contar 110 productos en una cadena de monta

je�? Dependiendo del sistema en cuesti�n (binario,


decimal o hexadecimal), el resultado podr�a
ser 6, 110 o 272 productos, respectivamente.
Por consiguiente, para evitar equivocaciones,
diferentes prefijos y sufijos se a�aden directamente
a los n�meros. El prefijo $ o 0x as� como
el sufijo h marca los n�meros en el sistema
hexadecimal. Por ejemplo, el n�mero hexadecimal
10AF se puede escribir as�: $10AF, 0x10AF

o 10AFh. De manera similar, los n�meros binarios


normalmente obtienen el sufijo % o 0B. Si
un n�mero no tiene ni sufijo ni prefijo se considera
decimal. Desafortunadamente, esta forma
de marcar los n�meros no es
Figura 6
estandarizada, por consiguiente
depende de la aplicaci�n concreta.
La mostrada en la figura 8
es tabla comparativa que contiene
los valores de n�meros 0255
representados en tres sistemas
de numeraci�n diferentes.

Figura 8

n�Meros
negatIvos

Como ya hemos visto, para escribir un n�mero


negativo en matem�ticas, basta con a�adirle
el prefijo �-� (signo menos). Sin embargo, en la
programaci�n, al acabarse el proceso de la compilaci�n,
se quedan s�lo los n�meros binarios,

Cap�tulo 19
El
Mundo
de
los
Microcontroladores

volvi�ndose las cosas m�s complicadas. Se utilizan


s�lo dos d�gitos - 0 y 1, mientras que todos
los dem�s n�meros, s�mbolos y signos se forman
por medio de las combinaciones de estos
dos d�gitos. En el caso de los n�meros negativos,
la soluci�n es la siguiente:

�En los n�meros negativos, el bit m�s significativo


(el bit del extremo izquierdo) representa el
signo del n�mero (donde 0 ser� positivo y 1
negativo)�.

En el caso de un n�mero de 8 bits, para


representar un valor num�rico s�lo quedan 7
bits. De acuerdo a este tipo de codificaci�n el
n�mero +127 es el mayor n�mero positivo con
signo que se puede representar con 8 bits.
Asimismo, hay cero (0) positivo y negativo (refi�rase
a la siguiente tabla).

�Se puede saber de qu� n�mero se trata?

Por
ejemplo,
si
ponemos
el
n�mero
10000001, �es -1 o 129? No se preocupe, de
eso se encarga el compilador. �sta es la raz�n
por la que se declaran variables al escribir el
programa, mientras tanto, mire la tabla 1 para
interpretar lo que estamos diciendo. Bueno, de
eso vamos a hablar a continuaci�n.

BIt

La teor�a dice que un bit es la unidad b�sica


de informaci�n...

Vamos a olvidarlo por un momento y demostrar


qu� es eso en la pr�ctica. La respuesta es nada
especial-un bit es un s�lo d�gito binario.
Similar a un sistema de numeraci�n decimal en
el que los d�gitos de un n�mero no tienen la
misma ponderaci�n (por ejemplo, los d�gitos en
el n�mero 444 son los mismos pero tienen los
valores diferentes), el �significado� de un bit
depende de la posici�n que tiene en n�mero
binario. En los n�meros binarios, sus d�gitos se
denominan el bit cero (el primer bit a la derecha),
el primer bit (el segundo bit a la derecha)
etc. Adem�s, ya que el sistema binario utiliza
solamente dos d�gitos (0 y 1), el valor de un bit
puede ser 0 o 1.

No se confunda si se encuentra con un bit


que tiene el valor 4, 16 o 64. Son los valores
representados
en
el
sistema
decimal.
Simplemente, nos hemos acostumbrado tanto a
utilizar los n�meros decimales que estas expresiones
llegaron a ser comunes. Ser�a correcto
decir por ejemplo, �el valor del sexto bit en cualquier
n�mero binario equivale al n�mero decimal
64�. Pero todos somos humanos y los viejos
h�bitos mueren dif�cilmente. Adem�s, �c�mo le
suena �n�mero uno-uno-cero-uno-cero...�?

BYte

Un byte consiste en 8 bits colocados uno


junto al otro. Si un bit es un d�gito, es l�gico que
los bytes representen los n�meros. Todas las
operaciones matem�ticas se pueden realizar
por medio de ellos, como por medio de los
n�meros decimales comunes. Similar a los d�gitos
de cualquier n�mero, los d�gitos de un byte
no tienen el mismo significado. El bit del extremo
izquierdo tiene la mayor ponderaci�n, por eso es
denominado el bit m�s significativo (MSB). El bit
del extremo derecho tiene la menor ponderaci�n,
por eso es denominado el bit menos significativo
(LSB). Puesto que los 8 d�gitos de un
byte se pueden combinar de 256 maneras diferentes,
el mayor n�mero decimal que se puede
representar con un byte es 255 (una combinaci�n
representa un cero).

Un nibble o un cuarteto representa una


mitad de byte. Dependiendo de la mitad del
n�mero en cuesti�n (izquierda o derecha), se
les denomina nibbles �altos� o �bajos�, respectivamente
(figura 9).
Usted seguramente ha pensado alguna vez
en c�mo es la electr�nica dentro de un circuito

10Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

Figura 9
integrado
digital,
un
microcontrolador
o
un
microprocesador.

�C�mo son los circuitos que realizan las operaciones


matem�ticas
complicadas
y
toman
decisiones? �Sab�a que sus esquemas, aparentemente
complicadas consisten en s�lo unos
pocos elementos diferentes, denominados circuitos
l�gicos o compuertas l�gicas?

detalles
IMPortantes

El funcionamiento de estos elementos es


basado en los principios establecidos por el
matem�tico brit�nico George Boole en la mitad
del siglo 19 -es decir, �antes de la invenci�n de
la primera bombilla! En breve, la idea principal
era de expresar las formas l�gicas por medio de
las funciones algebraicas. Tal idea pronto se
transform� en un producto pr�ctico que se convirti�
m�s tarde en lo que hoy en d�a conocemos
como circuitos l�gicos Y
(AND), O (OR) o NO
(NOT). El principio de su funcionamiento es
conocido como algebra de Boole.

coMPonentes
B�sIcos
de
la
l�gIca
dIgItal

Algunas instrucciones de programa utilizadas


por un microcontrolador funcionan de la misma
manera que las compuertas l�gicas, pero en
forma de comandos. A
continuaci�n vamos a
explicar el principio de su funcionamiento.

compuerta Y
(and)

Una compuerta l�gica �Y� dispone de dos o


m�s entradas y de una salida. En este caso la
compuerta utilizada dispone de s�lo dos entradas.
Un uno l�gico (1) aparecer� en su salida

s�lo en caso de que ambas entradas


(A
Y
B) sean llevadas a alto
(1). La tabla a la derecha de la
figura 10 (en la que tambi�n se
muestra el s�mbolo de esta compuerta)
es la tabla de verdad que
muestra
la
relaci�n
entre
las
entradas y salidas de la compuer

ta. El principio de funcionamiento es el mismo


cuando la compuerta disponga de m�s de dos
entradas: la salida proporciona un uno l�gico (1)
s�lo si todas las entradas son llevadas a alto (1).
Vea la figura 11.

Figura 10Figura 11
Cualquier otra combinaci�n de voltajes de
entrada proporcionar� un cero l�gico (0) en su
salida. Utilizada en el programa, la operaci�n Y
l�gico es realizada por una instrucci�n de programa,
de la que vamos a hablar m�s tarde. Por
ahora basta con conocer que Y
l�gico en un programa
se refiere a la realizaci�n de este tipo de
operaci�n sobre los bits correspondientes de
dos registros diferentes.

compuerta o (or)

De manera similar, la compuerta O, cuyo


s�mbolo se observa en la figura 12, tambi�n dispone
de dos o m�s entradas y de una salida. Si
la compuerta dispone de s�lo dos entradas, es
aplicable lo siguiente: la salida proporciona un
uno l�gico (1) si una u otra entrada (A
o B) es llevada
a alto (1). En caso de que la compuerta O

Cap�tulo 111
El
Mundo
de
los
Microcontroladores

disponga de m�s de dos entradas, es aplicable


lo siguiente: La salida proporciona un uno l�gico

(1) si por lo menos una entrada es llevada a alto


(1). Si todas las entradas est�n a cero l�gico (0),
la salida estar� a cero l�gico (0) tambi�n. Vea la
figura 13.
Figura 12Figura 13
En un programa, la operaci�n O l�gico se
realiza de la misma manera que la operaci�n Y.

compuerta no (not)

La compuerta l�gica NO dispone de una sola


entrada y una sola salida, por lo que funciona
muy simplemente, figura 14. Cuando un cero l�gico
(0) aparezca en su entrada, la salida proporciona
un uno l�gico (1) y viceversa. Esto significa
que esta compuerta invierte las se�ales por s�
mismas y por eso es denominada inversor.

En el programa la operaci�n l�gica NO se


realiza sobre un byte. El resultado es un byte

12Club Saber Electr�nica N� 97Figura 14Figura 15


con los bits invertidos, figura 15. Si los bits de un
byte se consideran n�mero, el valor invertido es
un complemento a ese n�mero.

El complemento de un n�mero es el valor


que se a�ade al n�mero hasta llegar al mayor
n�mero binario de 8 d�gitos. En otras palabras,
la suma de un d�gito de 8 n�meros y de su complemento
es siempre 255.

compuerta xor (o exclusiva)

La compuerta XOR (O EXCLUSIVA) es un


poco
complicada
en
comparaci�n
con
las
dem�s. Representa una combinaci�n de todas
las compuertas anteriormente descritas y su
s�mbolo se puede ver en la figura 16. La salida
proporciona un uno l�gico (1) s�lo si sus entradas
est�n en estados l�gicos diferentes.

En el programa, esta operaci�n se utiliza con


frecuencia para comparar dos bytes. La resta se
puede utilizar con el mismo prop�sito (si el resultado
es 0, los bytes son iguales). A diferencia de
la resta, la ventaja de esta operaci�n l�gica es
que no es posible obtener los resultados negativos.
En la figura 17 puede apreciar c�mo es la
correspondencia entre entradas y salidas.

Figura 16Figura 17
regIstros

Un registro o una celda de memoria es un circuito


electr�nico que puede memorizar el estado
de un byte.
BaSES
dE
loS
MiCroCoNtroladorES

Puertosdeentrada/ salIda(e/s)
Para hacer �til un microcontrolador, hay queconectarlo a un dispositivo externo, o
sea, a unperif�rico. Cada microcontrolador tiene uno om�s registros (denominados
puertos) conecta-
Figura 18
En la figura 18 tenemos un esquena queejemplifica el funcionamiento de un registro.

registros sFr

Adiferencia de los registros que no tienenningunafunci�nespecialypredeterminada,


cada microcontrolador dispone de un n�mero de

Figura 19
registros de funciones especiales (SFR), con la
funci�n predeterminada por el fabricante. Sus
bits est�n conectados a los circuitos internos del
microcontrolador
tales
como
temporizadores,
convertidores
A/D,
osciladores
entre

otros, lo que significa que directamente


manejan el funcionamiento de estos
circuitos, o sea del microcontrolador.
Imag�nese
ocho
interruptores
que
manejan el funcionamiento de un circuito
peque�o dentro del microcontrolador.
Los registros SFR hacen exactamente
lo mismo. Vea en la figura 19 un
diagrama en bloques de aplicaci�n de
estos registros.

En otras palabras, el estado


de los bits de registros se fija
dentro
de
programa,
los
registros
SFR
dirigen
los
peque�os
circuitos
dentro
del microcontrolador, estos
circuitos se conectan por los
pines del microcontrolador a
un dispositivo perif�rico utilizado
para... bueno, depende
de usted.

dos a los pines en el microcontro

lador, figura 20.

�Por qu� se denominan puertos


de entrada/salida?

Porque usted puede cambiar la


funci�n de cada pin como quiera.
Por ejemplo, usted desea que su
dispositivo encienda y apague los
tres se�ales LEDs y que simult�neamente
monitoree
el
estado
l�gico de 5 sensores o botones de
presi�n. Uno de los puertos debe

estar configurado de tal manera


que haya tres salidas (conectadas a los LEDs) y
cinco entradas (conectadas a los sensores). Eso
se realiza simplemente por medio de software,
lo que significa que la funci�n de alg�n pin

Cap�tulo 113Figura 20
El
Mundo
de
los
Microcontroladores

puede ser cambiada durante el funcionamiento.

Una de las caracter�sticas m�s importantes


de
los
pines
de
entrada/salida
(E/S)
es
la
corriente m�xima que pueden entregar/recibir.
En la mayor�a de los microcontroladores la
corriente obtenida de un pin es suficiente para
activar un LED u otro dispositivo de baja corriente
(10-20mA).

Mientras m�s pines de E/S haya, m�s baja


es la corriente m�xima de un pin. En otras palabras,
todos los puertos de E/S comparten la
corriente m�xima declarada en la hoja de especificaci�n
t�cnica del microprocesador.

Otra caracter�stica importante de los pines es


que pueden disponer de los resistores pull-up.
Estos resistores conectan los pines al polo positivo
del voltaje de la fuente de alimentaci�n y su
efecto se puede ver al configurar el pin como
una entrada conectada a un interruptor mec�nico
o a un bot�n de presi�n. Las �ltimas versiones
de los microcontroladores tienen las resistencias
pull-up configurables por software.

Cada puerto de E/S normalmente est� bajo


el control de un registro SFR especializado, lo
que significa que cada bit de ese registro determina
el estado del pin correspondiente en el
microcontrolador. Por ejemplo, al escribir un uno
l�gico (1) a un bit del registro de control (SFR),
el pin apropiado del puerto se configura autom�ticamente
como salida.

Eso significa que el voltaje llevado a ese pin


se puede leer como 0 o 1 l�gico. En caso contrario,
al escribir 0 al registro SFR, el pin apropiado
del puerto se configura como salida. Su
voltaje (0V o 5V) corresponde al estado del bit
apropiado del registro del puerto.
unIdad
de
MeMorIa

La unidad de memoria es una parte del


microcontrolador utilizada para almacenar los
datos, figura 21. La manera m�s f�cil de explicarlo
es compararlo con un armario grande con
muchos cajones. Si marcamos los cajones claramente,
ser� f�cil acceder a cualquiera de sus
contenidos al leer la etiqueta en la parte delantera
del caj�n.

Figura 21
De manera similar, cada direcci�n de memoria
corresponde a una localidad de memoria. El
contenido de cualquier localidad se puede leer y
se le puede acceder al direccionarla. La memoria
se puede escribir en la localidad o leer.

Hay
varios
tipos
de
memoria
dentro
del
microcontrolador:

Memoria roM � Memoria de s�lo lectura

ROM: Read Only Memory.


La memoria ROM
se utiliza para guardar permanentemente el programa
que se est� ejecutando. El tama�o de
programa que se puede escribir depende del
tama�o de esta memoria. Los microcontroladores
actuales normalmente utilizan el direccionamiento
de 16 bits, que significa que son capaces
de direccionar hasta 64 Kb de memoria, o sea
65535 localidades. Por ejemplo, si usted es principiante,
su programa exceder� pocas veces el
l�mite de varios cientos de instrucciones. Hay
varios tipos de memoria ROM:

rom de M�scara (enmascarada) -MroM

La ROM enmascarada es un tipo de ROM


cuyo contenido es programado por el fabricante.
El t�rmino �de m�scara� viene del proceso de
fabricaci�n, donde las partes del chip se plasman
en las mascaras utilizadas durante el proceso
de fotolitograf�a. En caso de fabricaci�n de
grandes series, el precio es muy bajo. Olvide la
idea de modificarla...

14Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

otP
roM (one time Programmable roM)
roM programable una sola vez

La memoria programable una sola vez permite


descargar un programa en el chip, pero
como dice su nombre, una sola vez. Si se detecta
un error despu�s de descargarlo, lo �nico que
se
puede
hacer
es
descargar
el
programa
correcto en otro chip.

Figura 22
uv eProM (uv erasable Programmable

roM) -roM programable borrable

por rayos ultravioleta

El encapsulado de esta memoria, figura 22,


tiene una �ventana� reconocible en la parte alta.
Eso permite exponer la superficie del chip de silicio
a la luz de ultravioleta y borrar el programa
completamente en varios minutos. Luego es
posible descargar un nuevo programa en �l.

La instalaci�n de esta ventana es complicada,


lo que por supuesto afecta al precio. Desde
nuestro punto de vista, desgraciadamente, de
manera negativa...

Memoria Flash

Este tipo de memoria se invent� en los a�os


80 en los laboratorios de la compa��a INTEL,
como forma desarrollada de la memoria UV
EPROM. Ya que es posible escribir y borrar el
contenido de esta memoria pr�cticamente un
n�mero ilimitado de veces, los microcontroladores
con memoria Flash son perfectos para estudiar,
experimentar
y
para
la
fabricaci�n
en

peque�a escala. Por la gran popularidad de esta


memoria, la mayor�a de los microcontroladores
se fabrican con tecnolog�a flash hoy en d�a. Si
usted va a comprar un microcontrolador, ��ste
es en definitiva la opci�n perfecta!

Memoria raM � Memoria

de acceso aleatorio

RAM: Random Access Memory. Al apagar la


fuente de alimentaci�n, se pierde el contenido
de la memoria RAM. Se utiliza para almacenar
temporalmente los datos y los resultados inmediatos
creados y utilizados durante el funcionamiento
del microcontrolador. Por ejemplo, si el
programa ejecuta la adici�n (de cualquier cosa)
es necesario tener un registro que representa lo
que se llama �suma� en vida cotidiana. Con tal
prop�sito, uno de los registros de la RAM es
denominado �suma� y se utiliza para almacenar
los resultados de la adici�n.

Memoria eeProM � roM Programable

y Borrable el�ctricamente

EEPROM:
Electricall
y
Erasable
Programmable
ROM.
El
contenido
de
la
EEPROM se puede cambiar durante el funcionamiento
(similar a la RAM), pero se queda permanentemente
guardado despu�s de la p�rdida
de la fuente de alimentaci�n (similar a la ROM).
Por lo tanto, la EEPROM se utiliza con frecuencia
para almacenar los valores creados durante
el funcionamiento, que tienen que estar permanentemente
guardados. Por ejemplo, si usted ha

Cap�tulo 115
El
Mundo
de
los
Microcontroladores

dise�ado una llave electr�nica

o un alarma, ser�a estupendo


permitir al usuario crear e introducir
una contrase�a por su
cuenta. Por supuesto, la nueva
contrase�a
tiene
que
estar
guardada al apagar la fuente
de alimentaci�n. En tal caso
una
soluci�n
perfecta
es
el
microcontrolador
con
una
EEPROM embebida.
InterruPcIones

La mayor�a de programas utilizan interrupciones


durante ejecuci�n de programa regular. El
prop�sito
del
microcontrolador
generalmente
consiste en reaccionar a los cambios en su
entorno. En otras palabras, cuando ocurre algo,
el microcontrolador reacciona de alguna manera...
Por ejemplo, al apretar el bot�n del mando
a distancia, el microcontrolador lo registra y responde
al comando cambiando de canal, subiendo
o bajando el volumen etc. Si el microcontrolador
pasar� la mayor�a del tiempo comproban

do varios botones sin parar -las horas, los d�as,


esto no ser�a nada pr�ctico.

Por lo tanto, el microcontrolador �aprendi� un


truco� durante su evoluci�n. En vez de seguir
comprobando alg�n pin o bit, el microconrolador
deja su �trabajo de esperar� a un �experto� que
reaccionar� s�lo en caso de que suceda algo
digno de atenci�n.
La se�al que informa al procesador central
acerca
de
tal
acontecimiento
se
denomina
INTERRUPCI�N.

16Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

unIdad
central
de
ProcesaMIento
(central
Processor unIt -cPu)

Como indica su nombre, esto es una unidad


que
controla
todos
los
procesos
dentro
del
microcontrolador.

Consiste en varias unidades m�s peque�as,


figura 23, de las que las m�s importantes son:


Decodificador
de
instrucciones
es
la
parte que descodifica las instrucciones del programa
y acciona otros circuitos bas�ndose en
esto. El �conjunto de instrucciones� que es diferente
para
cada
familia
de
microcontrolador
expresa las capacidades de este circuito;

Unidad l�gica aritm�tica (Arithmetical
Logical Unit -ALU) realiza todas las operaciones
matem�ticas y l�gicas sobre datos; y

Acumulador o registro de trabajo. Es un
registro SFR estrechamente relacionado con el
funcionamiento de la ALU. Es utilizado para
almacenar todos los datos sobre los que se
debe realizar alguna operaci�n (sumar, mover).
Tambi�n almacena los resultados preparados
para el procesamiento futuro. Uno de los registros
SFR, denominado Registro Status (PSW),
est� estrechamente relacionado con el acumulador.
Muestra el �estado� de un n�mero almacenado
en el acumulador (el n�mero es mayor o
menor que cero etc.) en cualquier instante dado.
Bus

El bus est� formado por 8, 16 o m�s cables.


Hay dos tipos de buses: el bus de direcciones y
el bus de datos. El bus de direcciones consiste
en tantas l�neas como sean necesarias para

direccionar la memoria. Se utiliza para transmitir


la direcci�n de la CPU a la memoria. El bus de
datos es tan ancho como los datos, en este caso
es de 8 bits o l�neas de ancho. Se utiliza para
conectar todos los circuitos dentro del microcontrolador.

Figura 23

coMunIcacI�n
en
serIe

La conexi�n paralela entre el


microcontrolador y los perif�ricos
a trav�s de los puertos de
entrada/salida es una soluci�n
perfecta
para
las
distancias

cortas �hasta varios metros�,


figura 24. No obstante, en otros casos cuando
es necesario establecer comunicaci�n entre dos
dispositivos a largas distancias no es posible utilizar
la conexi�n paralela. En vez de eso, se utiliza
la conexi�n en serie.

Figura 24

Hoy en d�a, la mayor�a de los microcontroladores


llevan incorporados varios sistemas diferentes
para la comunicaci�n en serie, como un
equipo est�ndar. Cu�l de estos sistemas se utilizar�
en un caso concreto, depende de muchos
factores, de los que m�s importantes son:


�Con cu�ntos dispositivos el microcontrolador
tiene que intercambiar los datos?

�Cu�l es la velocidad del intercambio de
datos obligatoria?
Cap�tulo 117
El
Mundo
de
los
Microcontroladores


�Cu�l es la distancia entre los dispositivos?

�Es necesario transmitir y recibir los
datos simult�neamente?
Una de las cosas m�s importantes en cuanto
a la comunicaci�n en serie es el �Protocolo� que
debe ser estrictamente observado. Es un conjunto
de reglas que se aplican obligatoriamente
para que los dispositivos puedan interpretar
correctamente
los
datos
que
intercambian
mutuamente. Afortunadamente, los microcontroladores
se encargan de eso autom�ticamente,
as� que el trabajo de programador/usuario es
reducido a la escritura y lectura de datos.

velocIdad
de
transMIsI�n
serIal

La velocidad de transmisi�n serial (baud


rate) es el t�rmino utilizado para denotar el

n�mero de bits transmitidos


por segundo (bps).

�F�jese que este t�rmino


se refiere a bits, y
no a bytes!

El protocolo normalmente
requiere
que
cada byte se transmita
junto con varios bits de
control. Eso quiere decir que un byte en un flujo
de datos serial puede consistir en 11 bits. Por
ejemplo, si velocidad de transmisi�n serial es
300 bps un m�ximo de 37 y un m�nimo de 27
bytes se pueden transmitir por segundo.

Los sistemas de comunicaci�n serial m�s utilizados


son:

I2c cIrcuIto
Inter-Integrado
(Inter Integrated cIrcuIt)

Circuito inter-integrado es un sistema para el


intercambio de datos serial entre los microcontroladores
y los circuitos integrados especializados
de generaci�n. Se utiliza cuando la distancia

entre ellos es corta (el receptor y el transmisor


est�n normalmente en la misma placa de circuito
impreso). La conexi�n se establece por medio
de dos l�neas -una se utiliza para transmitir los
datos, mientras que la otra se utiliza para la sincronizaci�n
(la se�al de reloj).

Como se muestra en la figura 25, un dispositivo


es siempre el principal (master -maestro), el
que
realiza
el
direccionamiento
de
un
chip
subordinado (slave -esclavo) antes de que se
inicie
la
comunicaci�n.
De
esta
manera
un
microcontrolador puede comunicarse con 112
dispositivos diferentes. La velocidad de transmisi�n
serial es normalmente 100 kb/seg (el modo
est�ndar) o 10 Kb/seg (modo de velocidad de
transmisi�n baja).

Recientemente han aparecido los sistemas


con
la
velocidad
de
transmisi�n
serial
3.4
Mb/sec. La distancia entre los dispositivos que
se comunican por el bus I2C est� limitada a
unos metros.

Figura 25
sPI -Bus
serIal
de
InterFase
de
PerIF�rIcos
(serIal
PerIPHeral
InterFace Bus)

Un bus serial de interfase de perif�ricos es


un sistema para la comunicaci�n serial que utiliza
hasta cuatro l�neas (normalmente solo son
necesarias tres) para recibir los datos, para
transmitir los datos, para sincronizar y (opcional)
para seleccionar el dispositivo con el que se
comunica, figura 26.

Esto es la conexi�n full duplex, lo que significa


que los datos se env�an y se reciben simult�neamente.

La
velocidad
de
transmisi�n
m�xima
es
mayor que en el sistema de conexi�n I2C.

18Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

Figura 27

atenci�n con relaci�n al circuito de la fuente


de alimentaci�n de microcontroladores:


Brown out es un estado potencialmente
peligroso que ocurre al apagar el micro-
controlador o en caso de que el voltaje de la
fuente de alimentaci�n salga de unos m�rgenes
debido al ruido el�ctrico.
Como el microcontrolador dispone de varios
circuitos que funcionan a niveles de voltaje
diferentes, ese estado puede causar un comportamiento
descontrolado.
Para evitarlo, el microcontrolador normalmente
tiene un circuito incorporado para el
Figura 26

uart � transMIsor
� recePtor
asIncr�nIco

unIversal
(unIversal
asYncHronous

receIver/transMItter) -transMIsor-

Este tipo de conexi�n es asincr�nica o as�ncrona,


lo que significa que no se utiliza una l�nea
especial para transmitir la se�al de reloj. En
algunas aplicaciones este rasgo es crucial (por
ejemplo, en mandar datos a distancia por RF o
por luz infrarroja). Puesto que se utiliza s�lo una
l�nea de comunicaci�n, tanto el receptor como el
transmisor reciben y env�an los datos a velocidad
misma que ha sido predefinida para mantener
la sincronizaci�n necesaria. Esto es una
manera simple de transmitir datos puesto que
b�sicamente
representa
una
conversi�n
de
datos de 8 bits de paralelo a serial. La velocidad
de transmisi�n no es alta, es hasta 1 Mbit/sec.
oscIlador

Los pulsos uniformes generados por el osci

lador (figura 27) permiten


el
funcionamiento
arm�nico y s�ncrono de
todos
los
circuitos
del
microcontrolador.
El oscilador se configura
normalmente
de
tal
manera
que
utilice
un
cristal de cuarzo o resonador
cer�mico
para

estabilizaci�n de frecuencia. Adem�s, puede


funcionar como un circuito aut�nomo (como
oscilador RC). Es importante decir que las instrucciones
del programa no se ejecutan a la
velocidad impuesta por el mismo oscilador sino
varias veces m�s despacio. Eso ocurre porque
cada instrucci�n se ejecuta en varios ciclos del
oscilador.

En algunos microcontroladores se necesita el


mismo n�mero de ciclos para ejecutar todas las
instrucciones, mientras que en otros el tiempo
de ejecuci�n no es el mismo para todas las instrucciones.

Por consiguiente, si el sistema utiliza el cristal


de cuarzo con una frecuencia de 20MHZ, el
tiempo de ejecuci�n de una instrucci�n de programa
no es 50 nS, sino 200, 400 o 800 nS
dependiendo del tipo del microcontrolador.

cIrcuIto
de
alIMentacI�n
Fuente
de
alIMenta
cI�n
Hay que mencionar dos cosas dignas de

Cap�tulo 119
El
Mundo
de
los
Microcontroladores

brown out reset. El circuito reinicia inmediatamente


el microcontrolador si el voltaje de alimentaci�n
cae por debajo del l�mite.


el pin de reset (reinicio),
marcado frecuentemente
con MCLR (Master Clear Reset),
sirve para el reinicio externo del microcontrolador
al aplicar un cero (0) o un uno (1) l�gico
dependiendo del tipo del microcontrolador. En
caso de que el circuito brown out no est� incorporado,
un simple circuito externo para el brown
out reset se puede conectar al pin MCLR.
teMPorIzadores
� contadores

El oscilador del microcontrolador utiliza cristal


de cuarzo para su funcionamiento. Aunque
no se trata de la soluci�n m�s simple, hay
muchas razones para utilizarlo. La frecuencia
del oscilador es definida con precisi�n y muy
estable, as� que siempre genera los pulsos del
mismo ancho, lo que los hace perfectos para
medici�n de tiempo. Tales osciladores se utilizan
en los relojes de cuarzo. Si es necesario medir
el tiempo transcurrido entre dos eventos, basta
con contar los pulsos generados por este oscilador.
Esto es exactamente lo que hace el temporizador
y su representaci�n la podemos observar
en la figura 28.

Figura 28

La mayor�a de los programas utiliza estos


cron�metros
electr�nicos
en
miniatura.
Generalmente son registros SFR de 8 o 16 bits
cuyo contenido se aumenta autom�ticamente
con cada pulso.

�Una vez que se llena el registro, se genera


una interrupci�n!
Si el temporizador utiliza el oscilador de cuarzo
interno para su funcionamiento, es posible
medir el tiempo entre dos eventos (el valor de
registro en el momento de iniciar la medici�n es
T1, en el momento de finalizar la medici�n es
T2, el tiempo transcurrido es igual al resultado
de la resta T2 -T1).

Si los registros se aumentan con los pulsos


que vienen de la fuente externa, tal temporizador
se convierte en un contador.

Esto es una explicaci�n simple de su funcionamiento.


Es un poco m�s complicado en pr�ctica.

�c�Mo
FuncIonan
los
teMPorIzadores?

En la pr�ctica los pulsos generados por el


oscilador de cuarzo son llevados al circuito una
vez por cada ciclo de m�quina directamente o
por el pre-escalador, lo que aumenta el n�mero
en el registro del temporizador.

Si una instrucci�n (un ciclo de m�quina generalmente)


dura cuatro per�odos del oscilador de
cuarzo, este n�mero ser� cambiado un mill�n de
veces
por
segundo
(cada
microsegundo)
al
incorporar al cuarzo que oscila con una frecuencia
de 4MHz.

Es f�cil de medir los intervalos de tiempo cortos


de la manera descrita anteriormente (hasta
256 microsegundos porque es el mayor n�mero
que un registro puede contener).

Esta obvia desventaja se puede superar de


varias maneras: al utilizar el oscilador m�s lento,
por medio de registros con m�s bits, del pre-
escalador o de la interrupci�n. Las primeras dos
soluciones tienen algunas debilidades as� que
se recomienda utilizar el pre-escalador y/o la
interrupci�n.

20Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

utIlIzando
un
Preescalador
en
el
FuncIonaMIento
del
teMPorIzador

Un pre-escalador es un dispositivo electr�nico


utilizado para dividir la frecuencia por un factor
predeterminado. Esto quiere decir que se
necesita llevar 1, 2, 4 o m�s pulsos a su entrada
para generar un pulso a la salida. La mayor�a de
los microcontroladores disponen de uno o m�s
pre-escaladores incorporados y su tasa de divisi�n
puede ser cambiada dentro del programa.
El pre-escalador se utiliza cuando es necesario
medir los per�odos de tiempo m�s largos, figura
29.

Figura 29

Si el temporizador y el temporizador perro


guardi�n comparten un pre-escalador, �ste no
se puede utilizar por los dos simult�neamente.

utIlIzando
una
InterruPcI�n
en
el
FuncIonaMIento
del
teMPorIzador

Si el registro del temporizador es de 8 bits, el

mayor n�mero que se puede escribir en �l es


255 (en los registros de 16 bits es el n�mero
65.535). Si se excede este n�mero, el temporizador
se reinicia autom�ticamente y el conteo
comienza de nuevo en cero.

Esto
es
denominado
desbordamiento
o
sobreflujo (overflow). Permitido por el programa,
el desbordamiento puede provocar una interrupci�n,
lo que abre completamente nuevas posibilidades.

Por ejemplo, el estado de registros utilizados


para contar segundos, minutos o d�as puede ser
implementado en una rutina de interrupci�n. El
proceso entero (excepto la rutina de interrup

ci�n)
se
lleva
a

cabo internamente,
lo que permite que
los circuitos principales
del
micro-
controlador funcionen
regularmente.
La figura 30 describe
el uso de una
interrupci�n
en
el
funcionamiento del

temporizador. Al asignarle un pre-escalador al


temporizador, se producen retrasos de duraci�n
arbitraria con m�nima interferencia en la ejecuci�n
del programa principal.

contadores

Si un temporizador se suministra por los pulsos


ingresados por el pin de entrada en el micro-

Fifura 30

Cap�tulo 121
El
Mundo
de
los
Microcontroladores

convertIdor
dIgItal
� anal�gIco
(d/a)

Las se�ales del mundo real son muy diferentes


de las que �entiende� el microcontrolador
(ceros y unos), as� que deben ser convertidas
para que el microcontrolador pueda entenderlas.

controlador, se produce un con-

Figura 31

tador.
Evidentemente,
es
el
mismo circuito electr�nico. La
�nica diferencia es que los pulsos
para contar se ingresan por
el pin de entrada y que su duraci�n
(anchura) no es definida.
Por eso, no se pueden utilizar
para medici�n de tiempo, sino
que se utilizan para otros prop�sitos,
por ejemplo: contar los
productos en la cadena de montaje,
n�mero de rotaciones del
eje de un motor, pasajeros etc.
(dependiendo del sensor utilizado).

teMPorIzador
Perro
guardI�n
WatcHdog

El perro guardi�n es un temporizador conectado


a un oscilador RC completamente independiente
dentro del microcontrolador.

Si el perro guardi�n est� habilitado, cada vez


que cuenta hasta el m�ximo valor en el que ocurre
el desbordamiento del registro se genera una
se�al de reinicio del microcontrolador y la ejecuci�n
de programa inicia en la primera instrucci�n.
El punto es evitar que eso ocurra al utilizar el
comando adecuado.

La idea se basa en el hecho de que cada programa


se ejecuta en varios bucles, m�s largos o
cortos.

Si las instrucciones que reinician el temporizador


perro guardi�n se colocan en lugares
estrat�gicos del programa, aparte los comandos
que se ejecutan regularmente, el funcionamiento
del perro guardi�n no afectar� a la ejecuci�n
del programa, figura 31.

Si por cualquier raz�n (ruidos el�ctricos frecuentes


en la industria) el contador de programa
�se queda atrapado� dentro de un bucle infinito,
el valor del registro continuar� aumentado, el
temporizador perro guardi�n alcanzar� el m�ximo
valor, el registro se desbordar� y, �aleluya!
�Ocurre el reinicio!

Figura 32

En la figura 32 podemos observar que entre �0�


(0V) y �1� (5V) hay varios niveles de tensi�n
intermedios. Un convertidor anal�gico-digital es
un circuito electr�nico encargado de convertir
las se�ales continuas en n�meros digitales discretos.

En otras palabras, este circuito convierte un


n�mero real en un n�mero binario y se lo env�a
a la CPU para ser procesado. Este m�dulo, figura
33, se utiliza para medir el voltaje en el pin de
entrada.

El resultado de esta medici�n es un n�mero


(el valor digital) utilizado y procesado m�s tarde
en el programa.

22Club Saber Electr�nica N� 97


BaSES
dE
loS
MiCroCoNtroladorES

Figura 34
Figura 35
Figura 33

arQuItectura
Interna
de
un
MIcrocontrolador

Todos los microcontroladores actuales utilizan


uno de dos modelos b�sicos de arquitectura
denominados Harvard y Von-Neumann.

Son dos maneras diferentes del intercambio


de datos entre la CPU y la memoria:

arquitectura de von-neumann

Los microcontroladores que utilizan la arquitectura


Von- Neumann disponen de un solo bloque
de memoria y de un bus de datos de 8 bits,
figura 34.

el mismo bus. Por ejemplo, si alguna


l�nea de programa dice que el registro
de
la
memoria
RAM
llamado
�SUM� debe ser aumentado por uno
(instrucci�n: incf SUMA), el micro-
controlador har� lo siguiente:

1.
Leer la parte de la instrucci�n
de programa que especifica QU� es
lo que debe realizar (en este caso es
la instrucci�n para incrementar �incf�)
2.
Seguir leyendo la misma instrucci�n
que especifica sobre CU�L
dato lo debe realizar (en este caso es
el contenido del registro �SUMA�)
3.
Despu�s de haber sido incrementado, el
contenido de este registro se debe escribir en el
registro del que fue le�do (direcci�n del registro
�SUMA�).
El mismo bus de datos se utiliza para todas
estas operaciones intermedias.

arquitectura Harvard

Los
microcontroladores
que
utilizan
esta
arquitectura disponen de dos buses de datos
diferentes, figura 35.

Como todos los datos se intercambian por


medio de estas 8 l�neas, este bus est� sobrecargado,
y la comunicaci�n por si misma es muy
lenta e ineficaz.

La
CPU
puede
leer
una
instrucci�n
o
leer/escribir datos de/en la memoria.

Los dos procesos no pueden ocurrir a la vez


puesto que las instrucciones y los datos utilizan

Uno es de 8 bits de ancho y conecta la CPU


con la memoria RAM. El otro consiste en varias
l�neas (12, 14 o 16) y conecta a la CPU y la
memoria ROM. Por consiguiente, la CPU puede
leer las instrucciones y realizar el acceso a la
memoria de datos a la vez.

Puesto que todos los registros de la memoria


RAM son de 8 bits de ancho, todos los datos

Cap�tulo 123
El
Mundo
de
los
Microcontroladores

dentro del microcontrolador que se intercambian


son de la misma anchura. Durante el proceso de
la escritura de programa, s�lo se manejan los
datos de 8 bits.

En otras palabras, todo lo que usted podr�


cambiar en el programa y a lo que podr� afectar
ser� de 8 bits de ancho. Todos los programas
escritos para estos microcontroladores ser�n
almacenados en la memoria ROM interna del
microcontrolador despu�s de haber sido compilados
a c�digo m�quina.

No obstante, estas localidades de memoria


ROM no tienen 8, sino 12, 14 o 16 bits. 4, 6 o 8
bits adicionales representan una instrucci�n que
especifica a la CPU qu� hacer con los datos de
8 bits.

Las ventajas de este dise�o son las siguientes:


Todos los datos en el programa son de
un byte (8 bits) de ancho. Como un bus de datos
utilizado para lectura de programa tiene unas
l�neas m�s (12, 14 o 16), tanto la instrucci�n
como el dato se pueden leer simult�neamente al
utilizar estos bits adicionales. Por eso, todas las
instrucciones se ejecutan en un ciclo salvo las
instrucciones de salto que son de dos ciclos.

El hecho de que un programa (la ROM)
y los datos temporales (la RAM) est�n separados,
permite a la CPU poder ejecutar dos instrucciones
simult�neamente. Dicho de manera
sencilla, mientras que se realiza la lectura o
escritura de la RAM (que marca el fin de una instrucci�n),
la siguiente instrucci�n se lee por
medio de otro bus.

En los microcontroladores que utilizan la
arquitectura de von-Neumann, nunca se sabe
cu�nta
memoria
ocupar�
alg�n
programa.
Generalmente, la mayor�a de las instrucciones
de programa ocupan dos localidades de memoria
(una contiene informaci�n sobre QU� se
debe realizar, mientras que la otra contiene
informaci�n sobre CU�L
dato se debe realizar).
Sin embargo, esto no es una f�rmula r�gida, sino
el caso m�s frecuente. En los microcontroladores
que utilizan una arquitectura Harvard, el bus
de la palabra de programa es m�s ancho que un
byte, lo que permite que cada palabra de programa
est� compuesto por una instrucci�n y un
dato. En otras palabras, una localidad de memoria
-una instrucci�n de programa.

Juego
de
InstruccIones

El nombre colectivo de todas las instrucciones


que puede entender el microcontrolador es
llamado
Juego
de
Instrucciones,
figura
36.

Figura 36
Cuando se escribe un programa en ensamblador,
en realidad se especifican instrucciones en
el orden en el que deben ser ejecutadas. La restricci�n
principal es el n�mero de instrucciones
disponibles. Los fabricantes aceptan cualquiera
de los dos enfoques descritos a continuaci�n:

rIsc (reduced Instruction set computer)

-computadora con Juego de Instrucciones


reducidas
En este caso la idea es que el microcontrolador
reconoce y ejecuta s�lo operaciones b�sicas
(sumar, restar, copiar etc.) Las operaciones m�s
complicadas se realizan al combinar �stas (por
ejemplo, multiplicaci�n se lleva a cabo al realizar
adici�n sucesiva).

Es como intentar explicarle a alguien con


pocas palabras c�mo llegar al aeropuerto en
una nueva ciudad. Sin embargo, no todo es tan
oscuro. Adem�s, el microcontrolador es muy
r�pido as� que no es posible ver todas las �acrobacias�
aritm�ticas que realiza.

El usuario s�lo puede ver el resultado final de


todas las operaciones. Por �ltimo, no es tan dif�
24Club Saber Electr�nica N� 97
BaSES
dE
loS
MiCroCoNtroladorES

cil explicar d�nde est� el aeropuerto si se utilizan


las palabras adecuadas tales como: a la
derecha, a la izquierda, el kil�metro etc.

cIsc (complex Instruction set computer)

-computadoras con un juego de instrucciones


complejo
�CISC es opuesto a RISC! Los microcontroladores
dise�ados para reconocer m�s de 200
instrucciones diferentes realmente pueden realizar
muchas cosas a alta velocidad. No obstante,
uno debe saber c�mo utilizar todas las posibilidades
que ofrece un lenguaje tan rico, lo que no
es siempre tan f�cil.

�c�Mo
se
deBe
elegIr
un
MIcrocontrolador?

Si usted es principiante y ha tomado decisi�n


de trabajar con los microcontroladores. �felicitaciones
por la elecci�n! No obstante, a primera
vista, no es f�cil la elecci�n del microcontrolador
m�s adecuado como parece a la primera vista.
�El problema no es el peque�o rango de dispositivos
a elegir, sino todo lo contrario!

Antes de empezar a dise�ar un dispositivo


basado en un microcontrolador, tome en cuenta

lo siguiente: cu�ntas entradas/l�neas son necesarias


para su funcionamiento, realizar�a el dispositivo
otras
operaciones
adem�s
encender/apagar un rel�, necesita alg�n modulo
especializado tal como el de comunicaci�n en
serie, convertidor A/D etc. Cuando usted tiene
una clara imagen de lo que quiere, el rango de
selecci�n se reduce considerablemente, y le
queda pensar en el precio. �Va a tener varios
dispositivos? �Varios cientos? �Un mill�n? De
todos modos ahora es m�s claro.

Si est� pensando en todas estas cosas por


primera vez, todo le parecer� un poco confuso.
Por esa raz�n, vaya paso a paso. Antes que
nada, seleccione al fabricante, es decir, la familia
de microcontroladores que ofrece. Luego,
aprenda a trabajar con un modelo particular.
S�lo aprenda lo que necesite aprender, no entre
demasiado en detalles. Resuelva el problema
espec�fico y le pasar� una cosa incre�ble -ser�
capaz de manejar cualquier modelo del mismo
fabricante...

M�s o menos, todo se parece a montar en


bicicleta: despu�s de varias ca�das inevitables en
el principio, ser� capaz de mantener el equilibrio
y montar en cualquier otra bicicleta. �Por supuesto,
nunca se olvida tanto de montar en bicicleta,
como de la destreza de programaci�n! �

Cap�tulo 125
Cap�tulo2eLmundodeLoSmicrocontroLadoreSCap�tulo2eLmundodeLoSmicrocontroLadoreS
SiStemaSdeProgramaci�n:
Lenguajemikroc
Usted seguramente sabe que no es suficiente s�lo conectar el microcontrolador a los

otros componentes y encender una fuente de alimentaci�n para hacerlo funcionar,


�verdad? Hay que hacer algo m�s. Se necesita programar el microcontrolador. Si cree

que esto es complicado, est� equivocado. Todo el procedimiento es muy simple.


Basta con leer el texto para entender de lo que estamos hablando.

www.mikroe.com

Lenguajes
de
Programaci�n

El microcontrolador ejecuta el programa cargado


en la memoria flash. Esto se denomina el
c�digo ejecutable y est� compuesto por una
serie de ceros y unos, aparentemente sin significado.
Dependiendo
de
la
arquitectura
del
microcontrolador, el c�digo binario est� compuesto
por palabras de 12, 14 o 16 bits de

ancho. Cada palabra se interpreta por la CPU


como una instrucci�n 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
m�s f�cil trabajar con el sistema de numeraci�n
hexadecimal, el c�digo ejecutable se representa
con frecuencia como una serie de los n�meros

Cap�tulo 227
El
Mundo
de
los
Microcontroladores

hexadecimales denominada c�digo 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 c�digo ejecutable


era considerablemente arduo, en consecuencia
fue creado el primer lenguaje de programaci�n
denominado
ensamblador
(ASM).
Siguiendo la sintaxis b�sica del ensamblador,
era m�s f�cil escribir y comprender el c�digo.
Las instrucciones en ensamblador consisten en
las abreviaturas con significado y a cada instrucci�n
corresponde una localidad de memoria.
Un programa denominado ensamblador compila
(traduce) las instrucciones del lenguaje ensamblador
a c�digo m�quina (c�digo binario). Vea la
figura 1. Este programa compila instrucci�n a
instrucci�n sin optimizaci�n. Como permite controlar
en detalle todos los procesos puestos en
marcha dentro del chip, este lenguaje de programaci�n
todav�a sigue siendo popular.

Ventajas
de
Los
Lenguajes
de
Programaci�n
de
aLto
niVeL

A
pesar de la gran cantidad de beneficios, el

lenguaje ensamblador tiene algunas desventajas


a saber:

* Incluso una sola operaci�n en el programa


escrito en ensamblador consiste en muchas instrucciones,
haci�ndolo muy largo y dif�cil 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
En la figura 2 podemos observar un programa
escrito en C y el mismo programa compilado
al c�digo ensamblador.

Los lenguajes de programaci�n de alto nivel


(Basic, Pascal, C etc.) fueron creados con el
prop�sito de superar las desventajas del ensamblador.

En lenguajes de programaci�n de alto nivel


varias instrucciones en ensamblador se sustituyen
por una sentencia. El programador ya no
tiene que conocer el conjunto de instrucciones o
caracter�sticas del hardware del microcontrolador
utilizado. Ya no es posible conocer exactamente
c�mo se ejecuta cada sentencia, de
todas formas ya no importa. Aunque siempre se
puede insertar en el programa una secuencia
escrita en ensamblador.

28Club Saber Electr�nica N� 97Figura 1


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

Figura 2
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 instrucci�n apropiada para multiplicar
dos n�meros.

Por supuesto, para cada problema hay una


soluci�n y �ste no es una excepci�n gracias a la
aritm�tica que permite realizar las operaciones
complejas al descomponerlas en un gran n�mero
operaciones m�s simples. En este caso, la
multiplicaci�n se puede sustituir con facilidad
por adici�n 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 programaci�n de alto nivel
como es C, porque el compilador encontrar�
autom�ticamente la soluci�n a �ste problema y
otros similares. Para multiplicar los n�meros a
y
b, basta con escribir a*b
� axb.

Lenguaje
c

El lenguaje C dispone de todas las ventajas


de un lenguaje de programaci�n de alto nivel
(anteriormente descritas) y le permite realizar
algunas operaciones tanto sobre los bytes como
sobre los bits (operaciones l�gicas, desplazamiento
etc.).

Las caracter�sticas de C pueden ser muy �tiles


al
programar
los
microcontroladores.
Adem�s,
C
est�
estandarizado
(el
est�ndar
ANSI), es muy portable, as� que el mismo c�digo
se puede utilizar muchas veces en diferentes
proyectos.

Lo que lo hace accesible para cualquiera que


conozca este lenguaje sin reparar en el prop�sito
de uso del microcontrolador. C es un lenguaje
compilado, lo que significa que los archivos
fuentes que contienen el c�digo C se traducen a
lenguaje
m�quina
por
el
compilador.
Todas
estas caracter�sticas hicieron al C uno de los
lenguajes de programaci�n m�s populares.

Cap�tulo 229
El
Mundo
de
los
Microcontroladores

Figura 3
La figura 3 es un ejemplo general de lo que
un lenguaje de programaci�n de alto nivel a bajo
sucede durante la compilaci�n de programa de
nivel.

caracter�SticaSdeLLenguajemikroc
A
continuaci�n vamos a presentar a los elementos principales del lenguaje mikroC
desarrollado por Mikroelektronika.

Este lenguaje es muy similar al C est�ndar, no obstante en determinados aspectos


difiere del
ANSI est�ndar en algunas caracter�sticas, figura 4. Algunas de estas diferencias se
refieren a las
mejoras, destinadas a facilitar la programaci�n de los microcontroladores PIC,
mientras que las
dem�s son la consecuencia de la limitaci�n de la arquitectura del hardware de los
PIC. Aqu� vamos
a presentar caracter�sticas espec�ficas del lenguaje mikroC en la programaci�n de
los microcontroladores
PIC.

30Club Saber Electr�nica N� 97Figura 4


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

El t�rmino C se utilizar� para referirse a las caracter�sticas comunes de los


lenguajes C y mikroC.
Este libro describe una aplicaci�n muy concreta del lenguaje de programaci�n C
utilizado en el compilador
�mikroc Pro for Pic�. En este caso, el compilador se utiliza para la programaci�n
de los
microcontroladores PIC. Cabe destacar que el lector no necesariamente precisar�
este compilador
pero creemos oportuno utilizarlo dado que sus ventajas son enormes. De todos modos,
en el pr�ximo
cap�tulo, veremos otras formas de trabajar con microcontroladores PIC.

Fases
de
La
comPiLaci�n

El proceso de compilaci�n consiste en varios pasos y se ejecuta autom�ticamente por


el compilador,
figura 5. Por consiguiente, un conocimiento b�sico del funcionamiento puede ser
�til para
entender el concepto del lenguaje mikroC.

Figura 5
El archivo fuente contiene el c�digo en mikroC que usted escribe para programar el
microcontrolador.
El preprocesador se utiliza autom�ticamente por el compilador al iniciarse el
proceso de la
compilaci�n. El compilador busca las directivas del preprocesador (que siempre
empiezan por �#�)
dentro del c�digo y modifica el c�digo fuente de acuerdo con las directivas.

En esta fase se llevan a cabo inclusi�n de archivos, definici�n de constantes y


macros etc., lo
que facilita el proceso.

M�s tarde vamos a describir estas directivas en detalle. El analizador sint�ctico


(parser) elimina
toda la informaci�n in�til del c�digo (comentarios, espacios en blanco). Luego, el
compilador
traduce el c�digo a un archivo binario denominado archivo .mcl. El enlazador
(linker) recupera toda
la informaci�n requerida para ejecutar el programa de los archivos externos y la
agrupa en un solo
archivo (.dbg).

Adem�s, un proyecto puede contener m�s de un archivo fuente y el programador puede


utilizar
funciones predefinidas y agrupadas dentro de los archivos denominados librer�as.
Por �ltimo, el
generador �.hex�
produce un archivo .hex. Es el archivo que se va a cargar en el microcontrolador.

El proceso entero de la compilaci�n que incluye todos los pasos anteriormente


descritos se le
denomina �building�.

estructura
deL
Programa

La idea principal de escribir un programa en C es de �romper� un problema mayor en


varios trozos
m�s peque�os. Supongamos que es necesario escribir un programa para el
microcontrolador
para medir la temperatura y visualizar los resultados en un LCD. El proceso de
medici�n se realiza
por un sensor que convierte temperatura en voltaje. El microcontrolador utiliza el
convertidor A/D
para convertir este voltaje (valor anal�gico) en un n�mero (valor digital) que
luego se env�a al LCD

Cap�tulo 231
El
Mundo
de
los
Microcontroladores

por medio de varios conductores. En consecuencia, el programa se divide en cuatro


partes, de las
que cada una corresponde a una acci�n espec�fica:

Activar y configurar el convertidor A/D incorporado;


Medir el valor anal�gico;
Calcular temperatura; y
Enviar los datos en el formato apropiado al LCD.

Los lenguajes de programaci�n de alto nivel


como es C le permiten solucionar este problema
con facilidad al escribir cuatro funciones
que se ejecutar�n c�clicamente sin parar, tal
como se deduce de la figura 6.

La idea general es de dividir el problema en


varios trozos, de los que cada uno se puede
escribir como una sola funci�n. Todos los programas
escritos en mikroC contienen por lo
menos una funci�n llamada main()
que encierra
entre llaves {} las sentencias a ser ejecutadas.
Esto es la primera funci�n a ser ejecutada
al iniciarse la ejecuci�n de programa. Las otras
funciones se pueden llamar dentro de la funci�n
main. En otras palabras, podemos decir
que la funci�n main()
es obligatoria, mientras
que las dem�s son opcionales. Si todav�a no ha escrito un programa en C, es
probable que todo le
resulte confuso. No se preocupe, ac�ptelo tal como es por el momento y m�s tarde
entender� la
sintaxis.

�Y
ahora, haga su primer programa �real�!

La figura 7 muestra la estructura de un programa, se�alando las partes en las que


consiste.

Figura 6
32Club Saber Electr�nica N� 97Figura 7
SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

La manera de escribir el c�digo en C es muy importante. Por ejemplo, C difiere


entre min�sculas
y may�sculas, as� que la funci�n main()
no se puede escribir MAIN() o Main(). Adem�s, note
que dos l�neas del c�digo dentro de la funci�n terminan con un punto y coma. En C
todas las sentencias
deben terminar con un punto y coma �;�,
as� el compilador puede aislarlas y traducirlas a
c�digo m�quina.

Para comprender mejor esta estructura mire la figura 8 en la que se expresan


diferentes observaciones
dentro del programa.

Figura 8

comentarios

Los comentarios son las partes del programa utilizados para aclarar las
instrucciones de programa
o para proporcionar m�s informaci�n al respecto. El compilador no hace caso a los
comentarios
y no los compila al c�digo ejecutable.

Dicho de manera sencilla, el compilador es capaz de reconocer los caracteres


especiales utilizados
para designar d�nde los comentarios comienzan y terminan y no hace nada de caso al
texto
entre ellos durante la compilaci�n. Hay dos tipos de tales caracteres. Unos
designan los comentarios
largos que ocupan varias l�neas de programa marcados por la secuencia especial
/*...*/, mientras
que otros designan los comentarios cortos que caben en una sola l�nea //. Aunque
los comentarios
no pueden afectar a la ejecuci�n de programa, son tan importantes como cualquier
otra parte
de programa.

Aqu� est� el porqu�... con frecuencia es necesario mejorar, modificar, actualizar,


simplificar un
programa... No es posible interpretar incluso los programas simples sin utilizar
los comentarios.

Cap�tulo 233
El
Mundo
de
los
Microcontroladores

tiPos
de
datos
en
mikroc

En el lenguaje C, los datos tienen un tipo, o sea, cada dato utilizado en el


programa debe tener
su tipo especificado. Esto permite al compilador conocer el tama�o de dato (n�mero
de bytes requerido
en la memoria) y su representaci�n. Hay varios tipos de datos que se pueden
utilizar en el lenguaje
de programaci�n mikroc dependiendo del tama�o de dato y del rango de valores. La
tabla 1
muestra el rango de valores que los datos pueden tener cuando se utilizan en su
forma b�sica.

Tabla 1

Al a�adir un prefijo (calificador) a cualquier tipo de dato entero o car�cter, el


rango de sus posibles
valores cambia as� como el n�mero de los bytes de memoria necesarios. Por defecto,
los datos
de tipo int son con signo, mientras que los de tipo char son sin signo. El
calificador signed
(con
signo) indica que el dato puede ser positivo o negativo. El prefijo unsigned indica
que el dato puede
ser s�lo positivo. Note en la tabla 2 que el prefijo es opcional.

Tabla 2

tipo entero (int)

Un entero es un n�mero sin parte fraccionaria que puede estar expresado en los
siguientes formatos,
a saber:

Hexadecimal (base 16):


el n�mero empieza con 0x (o 0X). Los enteros hexadecimales consisten
en los d�gitos (de 0 a 9) y/o las letras (A, B, C,D, E, F). Por ejemplo: �0x1A�.

Decimal (base 10):


el n�mero consiste en los d�gitos (de 0 a 9). El primer d�gito no puede ser

0. En este formato, se puede introducir el signo de n�mero (�+�


o �-�). Por ejemplo: 569, -25, +1500.
Octal (base 8): los n�meros se representan a base 8 utilizando s�lo 8 d�gitos (de 0
a 7). Los
enteros octales empiezan con 0. Por ejemplo: �056�.
Binario (base 2):
cuando un entero empieza con 0b (o 0B) se representan como una serie de
bits (�0�
y �1�). Por ejemplo: 0B10011111.

Vea a continuaci�n un juego de sentencias que pueden corresponder a una parte de un


programa
en la que se muestran los diferentes formatos:

34Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

0x11 // formato hexadecimal equivale a decimal 17

11 // formato decimal

-152 // formato decimal

011 // formato octal equivale a decimal 9

0b11 // formato binario equivale a decimal 3

tipo punto flotante (float)

El tipo punto flotante (float) se utiliza para los n�meros reales con el punto
decimal. Los datos
de tipo float se pueden representar de varias maneras.

Un dato float es siempre con signo (signed):

0. // = 0.0
-1.23 // = -1.23
23.45e6 // = 23.45 * 10^6
2e-5 // = 2.0 * 10^-5
3E+10 // = 3.0 * 10^10
.09E34 // = 0.09 * 10^34
tipo car�cter (char)

El tipo char
es considerado como un entero por el compilador. No obstante, se utiliza
normalmente
para los datos de tipo car�cter. Un dato de tipo car�cter est� encerrado entre
comillas y codificado
en un car�cter ASCII:

59 // entero

'p' // car�cter ASCII 'p'

Una secuencia de caracteres es denominada cadena (string). Las cadenas est�n


encerradas
entre comillas dobles:
"Presione el bot�n RA0"

VariabLes
y
constantes

definiciones

Una variable es un objeto nombrado capaz de contener un dato que puede ser
modificado durante
la ejecuci�n de programa. En C, las variables tienen tipo, que significa que es
necesario especificar
el tipo de dato que se le asigna a una variable (int, float etc.). Las variables se
almacenan en
la memoria RAM y el espacio de memoria que ocupan (en bytes) depende de su tipo,
figura 13.

/* dos l�neas de programa consecutivas. En la primera l�nea del programa

se define el tipo de variable */

int a = 1000; // Variable a es de tipo int y equivale a 1000


a = 15; // a equivale a 15

Cap�tulo 235
El
Mundo
de
los
Microcontroladores

Una constante tiene las mismas caracter�sticas que una variable excepto el hecho de
que su
valor asignado no puede ser cambiado durante la ejecuci�n de programa. A
diferencia de las variables,
las constantes se almacenan en la memoria Flash del microcontrolador para guardar
el mayor
espacio posible de memoria RAM.

El compilador las reconoce por el nombre y el prefijo const. En mikroC, el


compilador reconoce
autom�ticamente el tipo de dato de una constante, as� que no es necesario
especificar el tipo adicionalmente.

/* dos l�neas de programa consecutivas */

const A
= 1000 // el valor de la constante A
est� definido

A
= 15; // �ERROR! no se puede modificar el valor de la constante

Cada variable o constante debe tener un identificador que lo distingue de otras


variables y constantes.
Refi�rase a los ejemplos anteriores,
a
y a
son identificadores.

reglas para nombrar

En mikroC los identificadores pueden ser tan largos como quiera. Sin embargo, hay
varias restricciones
a saber:

* Los identificadores pueden incluir cualquiera de los caracteres alfab�ticos A-Z


(a-z), los d�gitos
0-9 y el car�cter subrayado �_�. El compilador es sensible a la diferencia entre
min�sculas y may�sculas.
Los nombres de funciones y variables se escriben con frecuencia con min�sculas,
mientras
que los nombres de constantes se escriben con may�sculas.
* Los identificadores no pueden empezar con un d�gito.
* Los identificadores no pueden coincidir con las palabras clave del lenguaje
mikroC, porque son
las palabras reservadas del compilador.
El compilador mikroC reconoce 33 palabras clave que se muestran en la tabla 3.

Tabla 3

Ejemplos de los identificadores v�lidos e inv�lidos los puede ver a continuaci�n:

36Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

temperatura_V1 // OK

Presi�n // OK

no_corresponder // OK

dat2string // OK

SuM3 // OK

_vtexto // OK

7temp // NO --no puede empezar con un n�mero

%m�s_alto // NO --no pueden contener caracteres especiales

if // NO --no puede coincidir con una palabra reservada

j23.07.04 // NO --no puede contener caracteres especiales (punto)

nombre de variable // NO --no puede contener espacio en blanco

declaraci�n de Variables

Cada variable debe ser declarada antes de ser utilizada en el programa. Como las
variables se
almacenan en la memoria RAM, es necesario reservar el espacio para ellas (uno, dos
o m�s bytes).
Al escribir un programa, usted sabe qu� tipo de datos quiere utilizar y qu� tipo de
datos espera como
resultado de una operaci�n, mientras que el compilador no lo sabe. No se olvide de
que el programa
maneja las variables con los nombres asignados. El compilador las reconoce como
n�meros en
la memoria RAM sin conocer su tama�o y formato. Para mejorar la legibilidad de
c�digo, las variables
se declaran con frecuencia al principio de las funciones:
<tipo> variable;

Es posible declarar m�s de una variable de una vez si tienen el mismo tipo:

<tipo> variable1, variable2, variable3;

Aparte del nombre y del tipo, a las variables se les asignan con frecuencia los
valores iniciales
justamente enseguida de su declaraci�n. Esto no es un paso obligatorio, sino �una
cuesti�n de buenas
costumbres�. Se parece a lo siguiente:

unsigned int peso; // Declarar una variable llamada peso

peso = 20; // Asignar el valor 20 a la variable peso

Un m�todo m�s r�pido se le denomina declaraci�n con inicializaci�n (asignaci�n de


los valores
iniciales):

unsigned int peso = 20; // peso est� declarado y su valor es 20

Si hay varias variables con el mismo valor inicial asignado, el proceso se puede
simplificar:

unsigned int peso1 = peso2 = peso3 = 20;

int valor_inicial = un_m�nimo_de_petr�leo = 0;

Tenga cuidado de no declarar la misma variable otra vez dentro de la misma funci�n.
Puede
modificar el contenido de una variable al asignarle un nuevo valor tantas veces que
quiera.

Al declarar una variable, siempre piense en los valores que la variable tendr� que
contener
durante la ejecuci�n de programa.

Cap�tulo 237
El
Mundo
de
los
Microcontroladores

En el ejemplo anterior, peso1 no se puede representar con un n�mero con punto


decimal o un
n�mero con valor negativo.

declaraci�n de constantes

Similar a las variables, las constantes deben ser declaradas antes de ser
utilizadas en el programa.
En mikroC, no es obligatorio especificar el tipo de constante al declararla. Por
otra parte, las
constantes deben ser inicializadas a la vez que se declaran. El compilador reconoce
las constantes
por su prefijo const
utilizado en la declaraci�n. Dos siguientes declaraciones son equivalentes:

const int MINIMUM = -100; // Declarar constante MINIMUM

const MINIMUM = -100; // Declarar constante MINIMUM

Las constantes pueden ser de cualquier tipo, incluyendo cadenas:

const T_MAX = 3.260E1; // constante de punto flotante T_MAX

const I_CLASS = �A�; // constante car�cter I_CLASS

const Mensaje = �Presione el bot�n IZQUIERDA�;


// constante de cadena Mensaje

Las constantes de enumeraci�n son un tipo especial de constantes enteras que hace
un programa
m�s comprensible al asignar los n�meros ordinales a las constantes. Por defecto, el
valor 0
se asigna autom�ticamente a la primera constante entre llaves, el valor 1 a la
segunda, el valor 2 a
la tercera etc.

enum surtidores {AGUA,GAS�LEO,CLORO};


// AGUA
= 0; GAS�LEO = 1; CLORO = 2
Es posible introducir directamente el valor de una constante dentro de la lista de
enumeraciones.
El incremento se detiene al asignar un valor a un elemento de matriz, despu�s se
reinicia a partir
del valor asignado. Vea el siguiente ejemplo:

enum
surtidores {AGUA,GAS�LEO=0,CLORO};
// AGUA
= 0; G�SOLEO = 0; CLORO = 1

Las constantes de enumeraci�n se utilizan de la siguiente manera:

int
Velocidad_de_ascensor

enum
motor_de_ascensor {PARADA,INICIO,NORMAL,M�XIMO};

Velocidad_de_ascensor = NORMAL; // Velocidad_de_ascensor = 2

definir los nuevos tipos de datos

La palabra clave typedef


le permite crear con facilidad los nuevos tipos de datos, as�, por ejemplo,
podemos escribir la siguiente sentencia:

typedef unsigned int


positivo; // positivo es un sin�nimo para el tipo sin signo int
positivo a,b; // Variables a y b son de tipo positivo
a = 10; // Variable a equivale a 10
b = 5; // Variable b equivale a 5

38Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

�mbito
de
VariabLes
y
constantes

Una variable o una constante es reconocida por el compilador en base de su


identificador. Un
identificador tiene significado si el compilador lo puede reconocer. El �mbito de
una variable o una
constante es el rango de programa en el que su identificador tiene significado. El
�mbito es determinado
por el lugar en el que se declara una variable o una constante. Intentar acceder a
una variable
o una constante fuera de su �mbito resulta en un error. Una variable o una
constante es invisible
fuera de su �mbito.

Todas las variables y constantes que pensamos utilizar en un programa deben ser
declaradas
anteriormente en el c�digo. Las variables y constantes pueden ser globales o
locales. Una variable
global se declara en el c�digo fuente, fuera de todas las funciones, mientras que
una variable local
se declara dentro del cuerpo de la funci�n o dentro de un bloque anidado en una
funci�n. Vea la
figura 9.

Figura 9

A
las variables globales se les puede acceder de cualquier parte en el c�digo, a�n
dentro de las
funciones con tal de que sean declaradas. El �mbito de una variable global est�
limitado por el fin
del archivo fuente en el que ha sido declarado.

El �mbito de variables locales est� limitado por el bloque encerrado entre llaves
{}
en el que han
sido declaradas.

Por ejemplo, si est�n declaradas en el principio del cuerpo de funci�n (igual que
en la funci�n
main) su �mbito est� entre el punto de declaraci�n y el fin de esa funci�n.
Refi�rase al ejemplo
anterior. A las variables locales declaradas en main()
no se les puede acceder desde la Funci�n_1
y al rev�s.

Un bloque compuesto es un grupo de declaraciones y sentencias (que pueden ser


bloques tambi�n)
encerradas entre llaves. Un bloque puede ser una funci�n, una estructura de control
etc. Una
variable declarada dentro de un bloque se considera local, o sea, �existe�
s�lo dentro del bloque. Sin
embargo, las variables declaradas fuera del �mbito todav�a son visibles.

Aunque las constantes no pueden ser modificadas en el programa, siguen las mismas
reglas que
las variables.

Esto significa que son visibles dentro de su bloque a excepci�n de las constantes
globales
(declaradas fuera de cualquier funci�n). Las constantes se declaran normalmente en
el inicio del
c�digo fuera de cualquier funci�n (como variables globales).

Cap�tulo 239
El
Mundo
de
los
Microcontroladores

cLases
de
aLmacenamiento

Las clases de almacenamiento se utilizan para definir el �mbito y la vida de


variables, constantes
y funciones dentro de un programa. En mikroC se pueden utilizar diferentes clases
de almacenamiento:

auto
es una clase de almacenamiento por
defecto para las variables locales, as� que se
utiliza raramente. Se utiliza para definir que
una variable local tiene duraci�n local. La
clase de almacenamiento auto no se puede
utilizar con variables globales, figura 10.

static
es una clase de almacenamiento por defecto para las variables globales. Especifica
que
una variable es visible dentro del archivo. A
las variables locales declaradas con el prefijo static
se
les puede acceder dentro del archivo fuente (o sea se comportan como variables
globales).

extern: la palabra clave extern


se utiliza cuando el programa est� compuesto por diferentes
archivos fuente. Esto le permite utilizar una variable, una constante o una funci�n
declarada en otro
archivo. Por supuesto, para compilar y enlazar este archivo correctamente, el mismo
debe ser incluido
en su proyecto. Vea un ejemplo de un programa que consiste en dos archivos: File_1
y File_2.

File_1
utiliza una variable y una funci�n declaradas se usa en File_2.

File 1:

extern int cnt; // Variable cnt es visible en File_1

extern void hello(); // Funci�n hello()se puede utilizar en File_1


void main(){

PORTA
= cnt++; // Cualquier modificaci�n de cnt en File_1 ser� visible en File_2

hello(); // Funci�n hello()se puede llamar desde aqu�

File 2:

int cnt = 0;

void hello();

void hello(){ // Modificaciones que afectan a la

. // cnt en File_1 son visibles aqu�

oPeradores

Un operador es un s�mbolo que denota una operaci�n aritm�tica, l�gica u otra


operaci�n particular.
Dicho de manera sencilla, varias operaciones aritm�ticas y l�gicas se realizan por
medio de

Figura 10
40Club Saber Electr�nica N� 97
SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

los operadores. Hay m�s de 40 operaciones disponibles en el lenguaje C, pero se


utiliza un m�ximo
de 10 a 15 de ellas en la pr�ctica. Cada operaci�n se realiza sobre uno o m�s
operandos que
pueden ser variables o constantes. Adem�s, cada operaci�n se caracteriza por la
prioridad de ejecuci�n
y por la asociatividad.

operadores aritm�ticos

Los operadores aritm�ticos se utilizan en las operaciones aritm�ticas y siempre


devuelven resultados
num�ricos. Hay dos tipos de operadores, los unitarios y los binarios. A
diferencia de las operaciones
unitarias que se realizan sobre un operando, las operaciones binarias se realizan
sobre
dos operandos. En otras palabras, se requieren dos n�meros para ejecutar una
operaci�n binaria.
Por ejemplo: a+b
o a/b. Vea en la tabla 4 cu�les son los operadores aritm�ticos:

Tabla 4

int
a,b,c; // Declarar 3 enteros a, b, c
a = 5; // Inicializar a
b = 4; // Inicializar b
c = a + b; // c = 9
c = c%2; // c = 1. Esta operaci�n se utiliza con frecuencia

// para comprobar la paridad. En este caso, el


// resultado es 1 lo que significa que la variable
// es un n�mero imparo

operadores de asignaci�n

Hay dos tipos de asignaci�n en el lenguaje C:

* Los operadores simples asignan los valores a las variables utilizando el car�cter
com�n �=�. Por
ejemplo: a =8
* Las asignaciones compuestas son espec�ficas para el lenguaje C. Consisten en dos
caracteres
como se muestra en la tabla 5.
Tabla 5

int a = 5; // Declarar e inicializar la variable a


a += 10; // a = a + 10 = 15

Cap�tulo 241
El
Mundo
de
los
Microcontroladores

Se utilizan para simplificar la sintaxis y habilitar la ejecuci�n m�s r�pida.


Debajo de la tabla se
puede observar un ejemplo de uso en lenguaje C.

operadores de incremento y decremento

Las operaciones de incremento y decremento por 1 se denotan con �++�


y ���. Estos caracteres
pueden preceder o seguir a una variable.

En primer caso (++x), la variable x


ser� incrementada por 1 antes de ser utilizada en la expresi�n.
De lo contrario, la variable se utilizar� en la expresi�n antes de ser aumentada
por 1. Lo mismo
se aplica a la operaci�n de decremento, tabla 6.

Tabla 6

int a, b, c;

a = b = 5;

c = 1 + a++; // c = 6

b = ++c + a // b = 7 + 6 = 13

operadores relacionales

Los operadores relacionales se utilizan en comparaciones con el prop�sito de


comparar dos
valores, tabla 7.

Tabla 7

int prop;

int var = 5;

prop = var < 10; // Expresi�n es evaluada como verdadera, prop = 1


En mikroC, si una expresi�n es evaluada como falsa (false), el operador devuelve 0,
mientras
que si una oraci�n es evaluada como verdadera (true), devuelve 1. Esto se utiliza
en expresiones
tales como
�si la expresi�n es evaluada como verdadera, entonces...�

operadores L�gicos

Hay tres tipos de operaciones l�gicas en el lenguaje C: y


(and)
l�gico, o (or)
l�gico y negaci�n
-no (not)
l�gico. Los operadores l�gicos devuelven verdadero (1 l�gico) si la expresi�n
evaluada
es distinta de cero. En caso contrario, devuelve falso (0 l�gico) si la expresi�n
evaluada equivale
a cero. Esto es muy importante porque las operaciones l�gicas se realizan
generalmente sobre

42Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

las expresiones, y no sobre las variables (n�meros) particulares en el programa.


Por lo tanto, las

operaciones l�gicas se refieren a la veracidad de toda la expresi�n.

Por ejemplo: 1 && 0


es igual a (expresi�n verdadera) && (expresi�n falsa)

El resultado 0, o sea -Falso en ambos casos. En la tabla 8 tiene la correspondencia


de estos
operadores l�gicos.

Tabla 8

operadores de manejo de bits

A
diferencia de las operaciones l�gicas que se realizan sobre los valores o
expresiones, las operaciones
de manejo de bits se realizan sobre los bits de un operando. Se enumeran en la
tabla 9.

Tabla 9

�c�mo utilizar los operadores?

Aparte de los operadores de asignaci�n, dos operadores no deben estar escritos uno
junto al
otro, por ejemplo:

x*%12; // esta expresi�n generar� un error

Cada operador tiene su prioridad y asociatividad como se muestra en la tabla 10.

Similar a las expresiones aritm�ticas, los operadores se agrupan juntos por medio
de par�ntesis
como se puede observar a continuaci�n:
int a, b, res;

a = 10;

b = 100;

res = a*(a + b); // resultado = 1100

res = a*a + b; // resultado = 200

Primero se calculan las expresiones encerradas entre par�ntesis. Si es necesario,


se pueden utilizar
los par�ntesis m�ltiples (anidados).

Cap�tulo 243
El
Mundo
de
los
Microcontroladores

Tabla 10

conVersi�n
de
tiPos
de
datos

Algunas operaciones implican conversi�n de datos. Por ejemplo, si divide dos


valores enteros,
hay una alta posibilidad de que el resultado no sea un entero.

El mikroC realiza una conversi�n autom�tica cuando se requiera. Si dos operandos de


tipo diferente
se utilizan en una operaci�n aritm�tica, el tipo de operando de la prioridad m�s
baja se convierte
autom�ticamente en el tipo de operando de la prioridad m�s alta. Los tipos de datos
principales
se colocan seg�n el orden jer�rquico mostrado en la figura 11.

La autoconversi�n se realiza asimismo en las operaciones de asignaci�n. El


resultado de la
expresi�n de la derecha del operador de la asignaci�n siempre se convierte en el
tipo de la variable
de la izquierda del operador. Si el resultado es de tipo de la prioridad m�s alta,
se descarta o se
redondea para coincidir con el tipo de la variable. Al convertir un dato real en un
entero, siempre se
descartan los n�meros que siguen al punto decimal:

int x; // A
la variable x se le asigna el tipo integer (un entero)

x = 3; // A
la variable x se le asigna el valor 3

x+ = 3.14; // El valor 3.14 se agrega a la variable x al

// realizar la operaci�n de asignaci�n

/* El resultado de la adici�n es 6 en vez de 6.14, como era de esperar.


Para obtener el resultado esperado sin descartar los n�meros que siguen al

punto decimal, se debe declarar x como un punto flotante. */

44Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

Para realizar una conversi�n expl�cita, antes de escribir una expresi�n o una
variable hay que
especificar el tipo de resultado de operaci�n entre par�ntesis:

double
distancia, tiempo, velocidad;

distancia = 0.89;

tiempo = 0.1;

velocidad = (int)(a/b); // c = (int)8.9 = 8.0

velocidad = ((int)a)/b; // c = 0/0.1 = 0.0

estructuras
de
controL

estructuras condicionales

Las condiciones son ingredientes comunes de un programa. Las condiciones permiten


ejecutar
una o varias sentencias dependiendo de validez de una expresi�n. En otras palabras,
�Si se cumple
la condici�n (...), se debe hacer (...). De lo contrario, si la condici�n no se
cumple, se debe hacer
(...)�.

Los operandos condicionales if-else


y switch
se utilizan en las operaciones condicionales. Una
sentencia condicional puede ser seguida por una sola sentencia o por un bloque de
sentencias a
ser ejecutadas.

operador condicional if-else

El operador if
se puede utilizar solo o asociado al operador else (if-else).
Ejemplo del operador if:

if(expresi�n) operaci�n;

Si el resultado de la expresi�n encerrada entre par�ntesis es verdadero (distinto


de 0) la operaci�n
se realiza y el programa contin�a con la ejecuci�n. Si el resultado de la expresi�n

es falso (0),
la operaci�n
no se realiza y el programa contin�a inmediatamente con la ejecuci�n.

Como hemos mencionado, la otra forma combina tanto el operador if como el else:

if(expresi�n) operaci�n1 else


operaci�n2;

Si el resultado de la expresi�n
es verdadero (distinto de 0), se realiza operaci�n1, de lo contrario
se realiza la operaci�n2. Despu�s de realizar una de las operaciones, el programa
contin�a con
la ejecuci�n.

La sentencia if-else
se parece a lo siguiente:

if(expresi�n)
operaci�n1

else

operaci�n2

Si operaci�n1 u operaci�n2 est� compuesta, escriba una lista de sentencias


encerradas entre
llaves. Por ejemplo:

Cap�tulo 245
El
Mundo
de
los
Microcontroladores

if(expresi�n) {

... //

... // operaci�n1

...} //

else

operaci�n2

El operador if-else
se puede sustituir por el operador condicional �?:�:

(expresi�n1)? expresi�n2 : expresi�n3

Si el valor de la expresi�n1
es distinto de 0 (verdadero), el resultado de la expresi�n entera ser�
equivalente al resultado obtenido de la expresi�n2. De lo contrario, si la
expresi�n1
es 0 (falso), el
resultado de la expresi�n entera ser� equivalente al resultado obtenido de la
expresi�n3. Por ejemplo:

maximum = (a>b)? a : b // A
la variable maximum se le asigna el
// valor de la variable mayor(a o b)

operador switch

A
diferencia de la sentencia if-else
que selecciona entre dos opciones en el programa, el operador
switch
permite elegir entre varias opciones. La sintaxis de la sentencia switch
es:

switch
(selector) // Selector es de tipo char o int

{
case constante1:

operaci�n1 // El grupo de operadores que se ejecutan si

... // el selector y la constante1 son equivalentes

break;

case
constante2:

operaci�n2 // El grupo de operadores se ejecuta si


... // el selector y la constante2 son equivalentes

break;

...

default:

operaci�n_esperada // El grupo de operadores que se ejecuta si


... // ninguna constante equivale al selector
break;
}

La operaci�n switch se ejecuta de la siguiente manera: primero se ejecuta el


selector y se compara
con la constante1. Si coinciden, las sentencias que pertenecen a ese bloque se
ejecutan hasta
llegar a la palabra clave break o hasta el final de la operaci�n switch. Si no
coinciden, el selector se

46Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

compara con la constante2. Si coinciden, las sentencias que pertenecen a ese bloque
se ejecutan
hasta llegar a la palabra clave break etc. Si el selector no coincide con ninguna
constante, se ejecutar�n
las operaciones que siguen al operador default.

Tambi�n es posible comparar una expresi�n con un grupo de constantes. Si coincide


con alguna
de ellas, se ejecutar�n las operaciones apropiadas:

switch
(d�as) // La variable d�as representa un d�a de la semana.

{ // Es necesario determinar si es un d�a laborable o no lo es

case1:case2:case3:case4:case5: LCD_message = �D�a laborable�; break;

case6:case7: LCD_message = �Fin de semana�; break;

default:LCD_message_1 = �Elija un d�a de la semana�; break;

La palabra clave de C �break�


se puede utilizar en cualquier tipo de bloques.
Al utilizar �break�, es posible salir de un bloque aunque la condici�n para su
final no se haya cumplido.
Se puede utilizar para terminar un bucle infinito, o para forzar un bucle a
terminar antes de lo
normal.

bucLes

A
menudo es necesario repetir una cierta operaci�n un par de veces en el programa. Un
conjunto
de comandos que se repiten es denominado un bucle de programa. Cu�ntas veces se
ejecutar�,
es decir cu�nto tiempo el programa se quedar� en el bucle, depende de las
condiciones de
salir del bucle.
bucle While

El bucle while
se parece a lo siguiente:

while(expresi�n){

comandos

...

Los comandos se ejecutan repetidamente (el programa se queda en el bucle) hasta que
la expresi�n
llegue a ser falsa.
Si la expresi�n es falsa en la entrada del bucle, entonces el bucle no se ejecutar�
y el programa
continuar� desde el fin del bucle while.

Un tipo especial del bucle de programa es un bucle infinito. Se forma si la


condici�n sigue sin
cambios dentro del bucle. La ejecuci�n es simple en este caso ya que el resultado
entre llaves es
siempre verdadero (1=verdadero), lo que significa que el programa se queda en el
mismo bucle:

while(1){ // En vez de �while(1)�, se puede escribir �while(true)�

... // Expresiones encerradas entre llaves se ejecutar�n

... // repetidamente (bucle infinito)

Cap�tulo 247
El
Mundo
de
los
Microcontroladores

bucle For

El bucle for
se parece a lo siguiente:

for(expresi�n_inicial; expresi�n_de_condici�n; cambiar_expresi�n) {

operaciones

...

La ejecuci�n de esta secuencia de programa es similar al bucle while, salvo que en


este caso el
proceso de especificar el valor inicial (inicializaci�n) se realice en la
declaraci�n. La expresi�n_ inicial
especifica la variable inicial del bucle, que m�s tarde se compara con la
expresi�n_ de_condici�n
antes de entrar al bucle. Las operaciones dentro del bucle se ejecutan
repetidamente y despu�s
de cada iteraci�n el valor de la expresi�n_inicial se incrementa de acuerdo con la
regla cambiar_
expresi�n. La iteraci�n contin�a hasta que la expresi�n_de_condici�n llegue a ser
falsa.

for(k=0; k<5; k++) // La variable k se incrementa 5 veces (de 1 a 4) y

operaci�n // cada vez se repite la expresi�n operaci�n

...

La operaci�n se ejecutar� cinco veces. Luego, al comprobar se valida que la


expresi�n k<5 sea
falsa (despu�s de 5 iteraciones k=5) y el programa saldr� del bucle for.

bucle do-while

El bucle do-while
se parece a lo siguiente:

do

operaci�n

while
(cambiar_condici�n);

La expresi�n cambiar_condici�n se ejecuta al final del bucle, que significa que


operaci�n se ejecuta
como m�nimo una vez sin reparar en que si la condici�n es verdadera o falsa. Si el
resultado
es distinto de 0 (verdadero), el procedimiento se repite.

Todos los siguientes ejemplos son equivalentes. Esta parte del c�digo visualiza
�hello� en un
LCD 10 veces con un retardo de un segundo. Note que en este ejemplo se utilizan
funciones predefinidas,
que se encuentran en las librer�as del compilador mikroC PRO for PIC. No obstante
le
aconsejamos que no trate de entenderlas en detalle. Su comportamiento general
dentro del bucle
se explica por medio de los comentarios.

i = 0; // Inicializaci�n del contador

while
(i<10) { // Condici�n

Lcd_Out(1,3,�hello�); // Visualizar �hello� en el LCD

Delay_ms(1000); // Retardo de 1000 ms

Lcd_Cmd(_LCD_CLEAR); // Borrar el LCD

Delay_ms(500); // Retardo de 500ms

i++; // Contador se incrementa

48Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

for(i=0; i<10; i++) { // Inicializaci�n, condici�n, incremento


Lcd_Out(1,3,�hello�); // Visualizar �hello� en el LCD
Delay_ms(1000); // Retardo de 1000 ms
Lcd_Cmd(_LCD_CLEAR); // Borrar el LCD
Delay_ms(500); // Retardo de 500ms
}
i = 0; // Inicializaci�n del contador
do
{
Lcd_Out(1,3,�hello�); // Visualizar �hello� en el LCD
Delay_ms(1000); // Retardo de 1000 ms
Lcd_Cmd(_LCD_CLEAR); // Borrar LCD
Delay_ms(500); // Retardo de 500ms
i++; // Contador se incrementa
}
while
(i<10); // Condici�n
sentencias
de
saLto
sentencia break

A
veces es necesario detener y salir de un bucle dentro de su cuerpo. La sentencia
break se
puede utilizar dentro de cualquier bucle (while, for, do while) y en las sentencias
switch tambi�n. En
�stas la sentencia break se utiliza para salir de las sentencias switch si la
condici�n case es verdadera.
En este ejemplo, �Esperar� est� parpadeando en la pantalla LCD hasta que el
programa detecte
un uno l�gico en el pin 0 del puerto PORTA.

while(1){ // Bucle infinito


if(PORTA.F0 == 1) // Probar si el estado l�gico del pin 0 del puerto
break; // PORTA
es 1; si equivale, salir del bucle
Lcd_Out(1,3,�Esperar�); // Visualizar �Esperar� en el LCD
Delay_ms(1000); // Retardo de 1000 ms
Lcd_Cmd(_LCD_CLEAR); // Borrar LCD
Delay_ms(500); // Retardo de 500ms
}
sentencia continue

La sentencia continue colocada dentro de un bucle se utiliza para saltar una


iteraci�n. A
diferencia
de la sentencia break, el programa se queda dentro del bucle y las iteraciones
contin�an.

// Si x=7, puede ocurrir una divisi�n por 0.

// continue se utiliza aqu� para evitar esta situaci�n.


x=1;
while
(x<=10) {

if
(x == 7) { // saltar x=7 para evitar divisi�n por 0
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,3,�Division by 0�);

Cap�tulo 249
El
Mundo
de
los
Microcontroladores

Delay_ms(1000);

x++;

continue; // Despu�s de esta l�nea, saltar a la sentencia while con x=8

a = 1/(x-7); // Esta divisi�n generar� un error si x=7

/* Muchas operaciones pueden ocurrir aqu� */

Lcd_Out(1,3,�Division is OK�); // Poner este mensaje en el LCD

Delay_ms(1000);

x++;

sentencia goto

La sentencia goto le permite hacer un salto absoluto al otro punto en el programa.


Esta caracter�stica
se debe utilizar con precauci�n ya que su ejecuci�n puede causar un salto
incondicional sin
hacer caso a todos los tipos de limitaciones de anidaci�n. El punto destino es
identificado por una
etiqueta, utilizada como un argumento para la sentencia goto. Una etiqueta consiste
en un identificador
v�lido seguido por un colon (:).

...
if(CO2_sensor) goto
aire acondicionado; // Si se consta que el valor

... // de la variable CO2_sensor =1


// hacer salto a la l�nea de programa
// Aire acondicionado
...
Aire acondicionado: // Desde aqu� sigue la parte del c�digo que se ejecutar�
// en caso de una concentraci�n de CO2 demasiado alta
... // en el ambiente
tiPos
de
datos
aVanzados
matrices

Una matriz es una lista de elementos del mismo tipo colocados en localidades de
memoria contiguas.
Cada elemento es referenciado por un �ndice. Para declarar una matriz, es necesario
especificar
el tipo de sus elementos (denominado tipo de matriz), su nombre y el n�mero de sus
elementos
encerrados entre corchetes. Todos los elementos de una matriz tienen el mismo tipo.

tipo_de_matriz
nombre_de_matriz [n�_de_elementos];

Los elementos de una matriz se identifican por su posici�n. En C, el �ndice va


desde 0 (el primer
elemento de una matriz) a N-1 (N es el n�mero de elementos contenidos en una
matriz). El compilador
tiene que �saber� cu�ntas localidades de memoria debe alojar al declarar una
matriz.

50Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

El tama�o de una matriz no puede ser una variable. Por eso, se pueden utilizar dos
m�todos:

// m�todo 1

int
display [3]; // Declaraci�n de la matriz display capaz de contener 3 enteros
// m�todo 2

const
D�GITOS = 5;

char
Matriz_nueva[D�GITOS]; // Declaraci�n de la matriz Matriz_nueva
// capaz de contener 5 enteros

Una matriz se puede inicializar a la vez que se


declara, o m�s tarde en el programa. En ambos
casos, este paso se realiza al utilizar llaves:

int
array_1[3] = {10,1,100};

Para leer o modificar un elemento de matriz del ejemplo anterior, basta con
introducir su �ndice
encerrado entre corchetes:

/* Se supone que a ha sido declarado anteriormente como un entero */

a = array_1[0]; // A
la variable a se le asigna el valor del miembro de matriz

// con �ndice 0 (a = 10)


array_1[2] = 20; // Miembro de matriz array_1[2] es modificado (nuevo valor es 20)

El siguiente programa cambia el orden de los elementos de una matriz. Note que el
�ndice se
puede expresar mediante variables y operaciones b�sicas.
void
main() {
const MUESTRAS_DE_AGUA
= 4; // Valor de la constante MUESTRAS_DE_AGUA
es 4
int i, temp; // Variables i y temp son de tipo int
int profunidad_de_sonda [MUESTRAS_DE_AGUA] = {24,25,1,1987};
// Todos

// los miembros de la matriz profundidad


// de sonda son de tipo int

for(i=0;i<(MUESTRAS_DE_AGUA/2);i++){ // Bucle se ejecuta 2 veces


temp = profundiad_de_sonda [i]; // temp se utiliza para guardar un valor

// temporalmente
profundiad_de_sonda [i] = profundiad_de_sonda [MUESTRAS_DE_AGUA-1-i];
profundiad_de_sonda [MUESTRAS_DE_AGUA-1-i] = temp;

// Aqu� tenemos: profundidad_de_sonda [MUESTRAS_DE_AGUA] = {1987,1,25,24}


}

matrices bidimensionales

Aparte de las matrices unidimensionales que se pueden interpretar como una lista de
valores, el
lenguaje C le permite declarar matrices multidimensionales.

Cap�tulo 251
El
Mundo
de
los
Microcontroladores

En esta parte vamos a describir s�lo las matrices bidimensionales, tambi�n


denominadas tablas

o matrices. Una matriz bidimensional se declara al especificar el tipo de dato de


matriz, el nombre
de matriz y el tama�o de cada dimensi�n.
tipo_de_matriz
nombre_de_matriz [n�mero_de_filas] [n�mero_de_columnas];

En la declaraci�n de esta matriz n�mero_de_filas y n�mero_de_columnas representan


el n�mero
de filas y columnas en las que consiste una tabla, respectivamente. Vea la
siguiente matriz bidimensional:

int
Tabla [3][4]; // Tabla se define de modo que tenga 3 filas y 4 columnas

Esta matriz se puede representar en la forma de una tabla:

tabla[0][0]
tabla[0][1]
tabla[0][2]
tabla[0][3]
tabla[1][0]
tabla[1][1]
tabla[1][2]
tabla[1][3]
tabla[2][0]
tabla[2][1]
tabla[2][2]
tabla[2][3]

����������������������������������������������

Similar a las matrices unidimesionales, es posible asignar los valores a los


elementos de una
tabla en la l�nea de declaraci�n. La asignaci�n debe ser realizada l�nea a l�nea
como en el siguiente
ejemplo. Como hemos visto anteriormente, esta matriz tiene dos filas y tres
columnas:

int
Tabla [2][3]= { {3,42,1},{7,7,19} };
La matriz anterior se puede representar tambi�n en la forma de una tabla de
valores:

342
1

77
19

���������������������������

Punteros

Un puntero es una variable destinada a recibir una direcci�n. Un puntero �apunta� a


una localidad
de memoria, referenciada por una direcci�n. En C, la direcci�n de un objeto se
puede obtener
por medio un operador unitario &. Para acceder al contenido de la memoria en una
direcci�n espec�fica
(tambi�n llamado objeto apuntado), se utiliza un operador de indirecci�n (*).

�&n�
es la direcci�n de la localidad de memoria �n�.
�*(&n)�
es el contenido de la direcci�n �(&n)�, o sea de �n�.
Para declarar un puntero, se debe que especificar el tipo de la variable apuntada:

tipo_de_variable
*puntero;

52Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

En esta etapa, el puntero mi_puntero apunta al valor almacenado en esta localidad


de memoria,

o sea, a un valor desconocido. As� que, una inicializaci�n es muy recomendable:


puntero = &variable;

Ahora, puntero
contiene la direcci�n de variable.

Para acceder al contenido de la variable apuntada, debe utilizar �*�.

El siguiente ejemplo muestra el contenido de memoria dependiendo de la acci�n


realizada por
medio del puntero.

Los punteros son muy �tiles para manejar las matrices. En este caso, un puntero se
utilizar� para
apuntar al primer elemento de una matriz.
Debido al hecho de que es posible realizar operaciones b�sicas sobre los punteros
(aritm�tica
de punteros), es f�cil manejar los elementos de una matriz.
F�jese en la diferencia entre �*v+1�
y �*(v+1)�
en el siguiente ejemplo:

short int
voltio[3] = {0,5,10};

short int
*v;

v = &(voltio[0]); // v contiene la direcci�n de voltio[0]

*(v+1) = 2; // voltio[1] = 2

voltio[2] = *v+1; // tab[2] = 1 (tab[0] + 1)

*(v+2) = *(v+1); // voltio[2] = 2


v++; // v contiene la direcci�n de voltio[1]

*v = 1; // voltio[1] = 1

Los punteros tambi�n pueden ser declarados con el prefijo �const�. En este caso, su
valor no
puede ser modificado despu�s de la inicializaci�n, similar a una constante.
A
diferencia de C, el mikroC no admite alojamiento din�mico.

estructuras

Ya hemos visto c�mo agrupar los elementos dentro de matrices. No obstante, al


utilizar este
m�todo todos los elementos deben ser del mismo tipo.

Al utilizar estructuras, es posible agrupar diferentes tipos de variables bajo el


mismo nombre. Las
variables dentro de una estructura se le denominan los miembros de la estructura.
Las estructuras
de datos se declaran al utilizar la siguiente sintaxis:

Cap�tulo 253
El
Mundo
de
los
Microcontroladores

struct
nombre_de_estructura {
tipo1_de_miembro1
miembro1;
tipo2_de_miembro2
miembro2;
tipo3_de_miembro3
miembro3;
..

};

No es posible inicializar variables dentro de la declaraci�n de la estructura de


datos:

struct
generador {

int
voltaje;

char
corriente;

};

Entonces, podr� definir los objetos denominados �turbina�


en el c�digo. A
cada uno de estos tres
objetos (turbinas) se le asignan las variables �corriente�
y �voltaje�.

struct
generadores turbina_1, turbina_2, turbina_3;

Para acceder a las variables, es preciso utilizar el operador �.�

turbina_3.voltaje = 150;

turbina_3.corriente = 12;
Por supuesto, igual que al utilizar los punteros, todav�a se le permite realizar
operaciones por
medio de operadores y sentencias definidos en las partes anteriores.

Si est� familiarizado con el lenguaje C, recuerde que mikroC no admite la


inicializaci�n de los
miembros de estructura por medio de las llaves. Por ejemplo, �conjunto_1
={15,�m�};�
devuelve un
error en mikroC.

Funciones

Una funci�n es una subrutina que contiene una lista de sentencias a realizar. La
idea principal
es dividir un programa en varias partes utilizando estas funciones para resolver el
problema inicial
con m�s facilidad. Adem�s, las funciones nos permiten utilizar las destrezas y el
conocimiento de
otros programadores. Una funci�n se ejecuta cada vez que se llame dentro de otra
funci�n. En C,
un programa contiene como m�nimo una funci�n, la funci�n main(), aunque el n�mero
de funciones
es normalmente mayor. Al utilizar funciones el c�digo se hace m�s corto ya que es
posible llamar
una funci�n tantas veces como se necesite. En C, el c�digo normalmente consiste en
muchas funciones.
No obstante, en caso de que su programa sea muy corto y simple, puede escribir
todas las
sentencias dentro de la funci�n principal.

Funci�n Principal

La funci�n principal main() es una funci�n particular puesto que es la que se


ejecuta al iniciar el
programa. Adem�s, el programa termina una vez completada la ejecuci�n de esta
funci�n. El compilador
reconoce autom�ticamente esta funci�n y no es posible llamarla por otra funci�n. La
sintaxis
de esta funci�n es la siguiente:

54Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

void
main (void) {

/* el primer �void�
significa que main no devuelve ning�n valor. El segundo
�void�
significa que no recibe ning�n valor. Note que el compilador
tambi�n admite la siguiente sintaxis: �main()�
o �void main()�
o
�main(void)�
*/

..

/* �-Introduzca su programa aqu� �-*/

.
};

Esto significa que


f es una funci�n que recibe un n�mero real x
como par�metro y devuelve 2*x

y. La misma funci�n en C se parece a lo siguiente:


float
f (float
x, float
y) // variables flotantes x y y se pueden utilizar en f

{
float
r; // declarar r para almacenar el resultado
r = 2*x -y; // almacenar el resultado del c�lculo en r
return
r; // devolver el valor de r

Cada funci�n debe ser declarada apropiadamente para poder interpretarla


correctamente durante
el proceso de compilaci�n. La declaraci�n contiene los siguientes elementos:
* Tipo de resultado (valor devuelto):
tipo de dato del valor devuelto
* Nombre de funci�n: es un identificador que hace posible llamar a una funci�n.
* Declaraci�n de par�metros: se parece a la declaraci�n de variable regular (por
ejemplo: float
x). Cada par�metro consiste en una variable, constante, puntero o matriz,
precedidos por la etiqueta
de tipo de dato. Se utilizan para pasar la informaci�n a la funci�n al llamarla.
Los par�metros diferentes
est�n delimitados por comas.
* Cuerpo de funci�n: bloque de sentencias dentro de llaves.
Una funci�n se parece a lo siguiente:

tipo_de_resultado
nombre_de_funci�n (tipo
argumento1, tipo
argumento2,...)

{
Sentencia;
Sentencia;
...
return
...

Note que una funci�n no necesita par�metros (funci�n main() por ejemplo), pero debe
estar entre
par�ntesis. En caso contrario, el compilador malinterpretar�a la funci�n. Para
hacerlo m�s claro, puede
sustituir el espacio en blanco encerrado entre par�ntesis por la palabra clave
void: main (void).

Cap�tulo 255
El
Mundo
de
los
Microcontroladores

Valor devuelto

Una funci�n puede devolver un valor (esto no es obligatorio) por medio de la


palabra clave
return. Al llegar a return, la funci�n eval�a un valor (puede ser una expresi�n) y
lo devuelve a la l�nea
de programa desde la que fue llamada.

return
r; // Devolver el valor contenido en r

return
(2*x -y); // Devolver el valor de la expresi�n 2*x-y

Una funci�n no puede devolver m�s de un valor, pero puede devolver un puntero o una
estructura.
Tenga cuidado al utilizar matrices y punteros. El siguiente ejemplo es un error
t�pico:

int
*reverse(int
*tab) // Esta funci�n debe devolver una matriz r

{ // cuyo contenido est� en orden inverso con

// respecto a la matriz tab

int
r[DIM]; // Declaraci�n de una nueva matriz denominada r

int
i;

for(i=0;i<DIM;i++) // Bucle que copia el contenido de tab en r

r[i] = tab[DIM-1-i]; // al invertir el orden

return
r; // Devolver el valor r
}

En realidad, el compilador reserva memoria para el almacenamiento de variables de


la funci�n
reverse s�lo durante su ejecuci�n. Una vez completada la ejecuci�n de reverse, la
localidad de
memoria para la variable i o para la matriz r ya no est� reservada. Esto significa
que la direcci�n
que contiene los valores de i o r[] est� libre para introducir datos nuevos.
Concretamente, la funci�n
devuelve s�lo el valor &r[0], as� que s�lo el primer elemento de la matriz tab ser�
almacenado en la
memoria. Las dem�s localidades de memoria, tales como &tab[1], &tab[2], etc. ser�n
consideradas
por el compilador como espacios en blanco, o sea, estar�n listas para recibir los
nuevos valores.

Para escribir esta funci�n es necesario pasar la matriz r [] como par�metro (vea la
subsecci�n
Pasar los par�metros).

La funci�n puede contener m�s de una sentencia return. En este caso, al ejecutar la
primera sentencia
return, la funci�n devuelve el valor correspondiente y se detiene la ejecuci�n de
la funci�n.

float
abs (float
x, float
y) // Devolver el valor absoluto de 2*x-y
{
if
((2*x -y) >= 0)
return
(2*x -y);
else
return
(-2*x + y);
}

Si la funci�n no devuelve ning�n valor, la palabra void debe ser utilizada como un
tipo de resultado
en la declaraci�n. En este caso, la sentencia return no debe ser seguida por
ninguna expresi�n.
Puede ser omitida como en el siguiente ejemplo:

void
wait_1 (unsigned int
a)
{

56Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

cnt ++; // Incremento de una variable global cnt


Delay_ms(a) ; // Ejecuci�n de la funci�n Delay_ms
} // Note que Delay_ms no devuelve nada

declarar Prototipos de Funciones

Para utilizar una funci�n, el compilador debe ser consciente de su presencia en el


programa. En
la programaci�n en C, los programadores normalmente primero escriben la funci�n
main()
y luego
las funciones adicionales. Para avisar al compilador de la presencia de las
funciones adicionales,
se requiere declarar los prototipos de funciones en el principio de programa antes
de la funci�n
main(). Un prototipo de funci�n est� compuesto por:

tipo de resultado
nombre de funci�n
tipos de par�metros
un punto y coma (;)

El prototipo de la funci�n main no necesita ser declarado.

float
f (float, float);

/* no es obligatorio escribir los nombres de los par�metros. Este prototipo


informa al compilador: en el programa se utilizar� la funci�n f,
que utiliza dos par�metros de tipo float y devuelve el resultado del tipo
float. */

Llamar a una Funci�n

Mientras una funci�n es definida y su prototipo declarado, se puede utilizar en


cualquier parte de
programa. Sin embargo, como la funci�n main
es �raiz�
del programa, no puede ser llamada de ninguna
parte de programa. Para ejecutar una funci�n, es necesario escribir su nombre y los
par�metros
asociados. Vea los siguientes ejemplos:
float
resultado,a,b; // resultado,a,b,time deben coincidir con los tipos

// definidos
int
time = 100; // en la declaraci�n de las funciones f y wait_1
a = 10.54;
b = 5.2;
resultado = f(a,b); // Ejecutar la funci�n f por medio de los par�metros a y b

// El valor devuelto se le asigna a la variable resultado


pausa_1(tiempo); // Ejecutar la funci�n pausa_1 por medio de la variable tiempo
funci�nX(); // Ejecutar la funci�n funci�nX (sin par�metros)

Cuando se llama una funci�n, el programa salta a la funci�n llamada, la ejecuta,


despu�s vuelve
a la l�nea desde la que fue llamada.

Pasar los Par�metros

Al llamar una funci�n, se le pasan los par�metros. En C existen dos formas


diferentes para pasar
par�metros a una funci�n.

Cap�tulo 257
El
Mundo
de
los
Microcontroladores

El primer m�todo, denominado �paso por valor�, es el m�s f�cil. En este caso, los
par�metros se
pueden considerar como variables locales de la funci�n. Cuando se llama una
funci�n, el valor de
cada par�metro se copia a un nuevo espacio de memoria reservado durante la
ejecuci�n de la funci�n.
Como los par�metros se consideran como variables locales por el compilador, sus
valores
pueden ser modificados dentro de la funci�n, pero sus modificaciones no se quedan
en la memoria
una vez completada la ejecuci�n de la funci�n.

Tenga en cuenta de que la funci�n devuelve un valor, y no una variable. Adem�s, se


crean copias
de los valores de los par�metros, por lo que sus nombres en la funci�n f pueden ser
diferentes de
los par�metros utilizados en la main(). La mayor desventaja del �paso por el valor�

es que la �nica
interacci�n que una funci�n tiene con el resto del programa es el valor devuelto de
un solo resultado
(o la modificaci�n de las variables globales).

El otro m�todo, denominado �paso por direcci�n�


le permite sobrepasar este problema. En vez de
enviar el valor de una variable al llamar a funci�n, se debe enviar la direcci�n de
memoria del valor.
Entonces, la funci�n llamada ser� capaz de modificar el contenido de esta localidad
de memoria.

// Funci�n �sort�ordena los miembros de la matriz por valor ascendente


// y devuelve el miembro con m�ximo valor

int
sort(int
*); // Prototipo de funci�n

const
SIZE = 5; // N�mero de miembros a ordenar

void
main() {

int
maximum, input[SIZE] = {5,10,3,12,0};
// Declaraci�n de variables en la matriz

maximum = sort(input); // Llamar a funci�n y asignarle el m�ximo

// valor a la variable maximum

int
sort(int
*sequence) {
int
i, temp, permut; // Declaraci�n de variables
permut = 1; // Bandera de bit indica que se ha hecho una permutaci�n

while(permut!=0) { // Quedarse en el bucle hasta reiniciar la bandera

permut = 0; // Bandera reiniciada

for(i=0;i<SIZE-1;i++) { // Comparar y ordenar los miembros de la

// matriz (dos a dos)

if(sequence [i] > sequence[i+1]){

temp = sequence [i];

sequence[i] = sequence[i+1];

sequence[i+1] = temp;

permut = 1; // Se ha hecho una permutaci�n, bandera de bit

//se pone a uno

return
sequence[SIZE-1]; // Devolver el valor del �ltimo miembro

} // que es al mismo tiempo el miembro con el m�ximo valor

58Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

En este ejemplo, por medio de una funci�n se realizan dos operaciones: ordena los
miembros
de la matriz por valor asdendente y devuelve el m�ximo valor.

Para utilizar una matriz en una funci�n es necesario asignar la direcci�n a la


matriz (o a su pri

mer miembro). Vea el siguiente ejemplo:


float
m�todo_1(int[]); // Declaraci�n de prototipo de la funci�n M�todo_1
float
m�todo_2(int*); // Declaraci�n de prototipo de la funci�n M�todo_2
const
N�MERO_DE_MEDICIONES = 7; // N�mero de los miembros de la matriz
void
main()
{
double
promedio1, promedio2; // Declaraci�n de las variables promedio1
// y promedio2

int
voltaje [N�MERO_DE_MEDICIONES] = {7,8,3,5,6,1,9}; // Declaraci�n de la
// matriz voltaje
promedio1 = m�todo_1(&voltaje[0]); // Par�metro de la funci�n es la direcci�n
// del primer miembro
promedio2 = m�todo_2(voltaje); // Par�metro de la funci�n es la direcci�n de
// la matriz
}

//��������������������������������������������������������������������
float
m�todo_1(int
voltaje[]) // Inicio de la funci�n m�todo_1
{

int
i, suma; // Declaraci�n de las variables locales i y suma

for(i=0;i<N�MERO_DE_MEDICIONES;i++) // C�lculo del valor promedio de voltaje


suma += voltaje[i]; // Es posible utilizar *(voltaje+i)en vez de voltaje[i]

return(suma/N�MERO_DE_MEDICIONES);
}
//��������������������������������������������������������������������

float
m�todo_2 (int
*voltaje)
{

int
i, suma;

for(i=0;i<N�MERO_DE_MEDICIONES;i++)
suma += *(voltaje+i);

return(suma/N�MERO_DE_MEDICIONES);
}

//Inicio de la funci�n m�todo_2


// Declaraci�n de las variables locales i y suma
// C�lculo del valor promedio de voltaje

// Es posible utilizar voltaje[i] en vez de *(voltaje+i)

Las funciones �m�todo_1�


y �m�todo_2�
son completamente equivalentes. Las dos devuelven el
valor promedio de la matriz �voltaje[]�.

Despu�s de declararla, la direcci�n del primer miembro se puede escribir como


�voltaje�
o �&voltaje[
0]�.

Cap�tulo 259
El
Mundo
de
los
Microcontroladores

caracter�sticas
PrinciPaLes
deL
Procesador

El preprocesador es un programa que procesa el c�digo antes de que pase por el


compilador.
Funciona bajo el control de las l�neas de comando del preprocesador denominadas
directivas. Las
directivas del preprocesador se colocan en el c�digo fuente, normalmente en el
principio del archivo.
Antes de pasar por el compilador, el c�digo fuente se examina por el preprocesador
que detecta y ejecuta
todas las directivas del preprocesador. Las directivas del preprocesador siguen a
una regla de la
sintaxis especial, empiezan por un s�mbolo �#�
y no requieren ning�n punto y coma al final (;).

directivas del Procesador

La tabla 11 contiene un conjunto de directivas del preprocesador frecuentemente


utilizadas:

Tabla 11

Las directivas del preprocesador se pueden dividir en tres categor�as:

* Definiciones de macro
* Inclusiones de archivos
* Control de compilaci�n
Ahora, vamos a presentar s�lo las directivas del preprocesador utilizadas con m�s
frecuencia.
Sin embargo, no es necesario saber todas ellas para programar microcontroladores.
S�lo tenga en
cuenta que el preprocesador es una herramienta muy poderosa para los programadores
avanzados
en C, especialmente para el control de compilaci�n.

directivas del Procesador para definir marcos

Por medio de los macros es posible definir las constantes y ejecutar funciones
b�sicas. Una sustituci�n
de macro es un proceso en el que un identificador del programa se sustituye por una
cadena
predefinida. El preprocesador sustituye cada ocurrencia del identificador en el
c�digo fuente por
una cadena. Despu�s de la sustituci�n, el c�digo ser� compilado normalmente.

Esto significa que el c�digo sustituido debe respetar la sintaxis del mikroC. La
acci�n se realiza
por medio de la directiva �#define�.

#define PI 3.14159 // Sustituci�n simple, PI ser� sustituido por


// el valor 3.14159 en todas las partes del programa

Tambi�n puede utilizar los par�metros para realizar substituciones m�s complejas:

#define VOLUMEN (D,H) (((D/2)*(D/2)*PI))*H // Macro con par�metros

60Club Saber Electr�nica N� 97


SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC

Entonces, en el c�digo, la siguiente sentencia:

Tanque_1 = VOLUMEN (Di�metro,altura);

Ser� sustituida por:

Tanque_1 = (((Di�metro/2)*(Di�metro/2)*PI)*altura;

Por medio de la directiva #undef es posible quitar una definici�n de nombre de


macro. As� se
especifica que la substituci�n que se ha definido anteriormente ya no va ocurrir en
el siguiente c�digo.
Esto es �til cuando usted quiere restringir la definici�n s�lo a una parte
particular del programa.

#undef TANQUE // Quitar la definici�n del macro VOLUMEN

inclusi�n de archivos

La directiva de preprocesador #include


copia un archivo espec�fico en el c�digo fuente. El c�digo
incluido debe observar la sintaxis de C para ser compilado correctamente.

Hay dos formas de escribir estas directivas. En el primer ejemplo, s�lo el nombre
de archivo se
especifica, as� que el preprocesador lo buscar� dentro del archivo include. En el
segundo ejemplo,
se especifica la ruta entera, as� que el archivo estar� directamente incluido (este
m�todo es m�s
r�pido).

#include <nombre_de_archivo> // Se especifica s�lo el nombre del archivo

#include �C:\Ruta\nombre_de_archivo.h� // Se especifica la localidad


exacta del archivo

Lo dados hasta aqu� es una �base� para que pueda aprender a programar en lenguaje.

Como ya hemos visto, hay varias divergencias entre los lenguajes mikroC y ANSI C.
En el pr�ximo
tomo de colecci�n del Club Saber Electr�nica vamos a presentar las caracter�sticas
espec�ficas
del mikroC con el prop�sito de facilitar la programaci�n de los microcontroladores
PIC. �

Cap�tulo 261
Cap�tulo3eLMundodeLosMicrocontroLadoresCap�tulo3eLMundodeLosMicrocontroLadores
�LosMicrocontroLadoresPic�
Los circuitos integrados programables (Programmable Integrated Circuits = PIC) son
componentes sumamente �tiles en la Electr�nica de Consumo. Aun cuando son
conocidos desde hace m�s de veinte a�os, existen en la actualidad nuevos tipos que
cumplen con una serie de requisitos y caracter�sticas sumamente �tiles. Como una
primera aproximaci�n podemos definir a un PIC como �un chip que permite obtener
un circuito integrado a mi medida�, es decir, puedo hacer que el PIC se comporte
como un procesador de luminancia, un temporizador o cualquier otro sistema
mediante un programa que le grabo en una memoria ROM interna. Los
microcontroladores
PIC son, en el fondo, procesadores similares a otros tipos, como por ejemplo
la familia de los microprocesadores X86, 80486, Pentium y muchos otros pero con
capacidades limitadas. En este cap�tulo veremos en qu� consiste un PIC y cu�les son

los tipos m�s comunes, lo que nos permitir� abordar el tema de su programaci�n, lo
cual se desarrollar� en el pr�ximo tomo de la colecci�n Club Saber Electr�nica.

IntroduccI�n
ele men tos in dis pen sa bles pa ra que pue da fun cio
nar co mo una mi ni com pu ta do ra en un so lo

En rea li dad, un mi cro pro ce sa dor y un mi cro -chip.


con tro la dor no son la mis ma co sa. Los PICs son
mi cro con tro la do res, es de cir, una uni dad que
Un mi cro pro ce sa dor es so la men te la uni dad
po see en su in te rior al mi cro pro ce sa dor y a los
cen tral de pro ce sos o CPU, la me mo ria, los

Cap�tulo 363
El
Mundo
de
los
Microcontroladores

puer tos y to dos los de m�s pe ri f� ri cos son ex te rio


res. La pro gra ma ci�n de un mi cro pro ce sa dor
es, por lo tan to, una ta rea com ple ja por que de ben
con tro lar se to dos es tos dis po si ti vos ex ter nos.

Un mi cro con tro la dor in te gra la CPU y to dos


los pe ri f� ri cos en un mis mo chip. El pro gra ma dor
se de sen tien de de una gran can ti dad de dis po
si ti vos y se con cen tra en el pro gra ma de tra ba
jo. Es ta cir cuns tan cia da lu gar a una gran p�r di
da de tiem po por que los da tos tie nen que ser
re ti ra dos de la me mo ria y lle va dos a la CPU
(Cen tral Pro ces sor Unit) y vi ce ver sa. Es to sig ni fi
ca que la com pu ta do ra de di ca la ma yor par te
del tiem po al trans por te de da tos de ida o de
vuel ta, en lu gar de usar es te tiem po pa ra tra ba jar
so bre los da tos.

Los PICs em plean un con jun to de ins truc cio nes


del ti po RISC (Re du ced Ins truc tion Set
Com pu ter). Con el RISC se sue le eje cu tar la ma yo
r�a de las ins truc cio nes con un so lo pul so del
clock. Con las ins truc cio nes que se usan en
otros equi pos del ti po CISC (Com plex Ins truc tion
Set Com pu ter), se lo gran ins truc cio nes m�s po de
ro sas, pe ro a cos ta de va rios ci clos del clock.
En el bien co no ci do pro ce sa dor 68HC11 de Mo to
ro la se re quie ren, a ve ces, has ta 5 ci clos del
clock pa ra eje cu tar una ins truc ci�n.

A
los fi nes pr�c ti cos, nos va mos a re fe rir a los
mi cro con tro la do res co mo blo ques que po seen
una me mo ria de pro gra ma, que es el lu gar don de
de ben alo jar se los da tos que le in di quen al
chip qu� es lo que de be ha cer; una me mo ria de
da tos don de in gre sen las se �a les que de be pro ce
sar el pro gra ma, una uni dad arit m� ti ca y l� gi ca
don de se de sa rro llen to das las ta reas, una
uni dad de con trol que se en car gue de su per vi sar
to dos los pro ce sos y puer tos de en tra da y sa li da
pa ra que el PIC ten ga con tac to con el ex te rior
(fi gu ra 1).

Un mi cro con tro la dor, co mo cual quier cir cui to


in te gra do ana l� gi co, tie ne en tra das, sa li das y al gu
nos com po nen tes ex te rio res ne ce sa rios pa ra
pro ce sar las se �a les de en tra da y con ver tir las
en las se �a les de sa li da (fi gu ra 2). El 16C54
(con memoria tipo OTP) y su similar 16F84 (con
memoria EEPROM tipo flash) re quie ren un cris tal
con dos ca pa ci to res y co mo m� ni mo un re sis

Figura 1
tor pa ra el re set. Por su pues to ne ce si ta una ten si�n
de fuen te de 5V (VDD) apli ca da con res pec to
al ter mi nal de ma sa (VSS). Po see dos puer tos
de sa li da, el A
y el B, cu yos ter mi na les son mar ca
dos RA0 al RA4 y RB0 al RB7. Es tos puer tos
pue den ser pro gra ma dos co mo de en tra da o de
sa li da. El ter mi nal 4 ope ra co mo re set pe ro tam bi�n
cum ple fun cio nes de car ga de me mo ria de
pro gra ma cuan do es ex ci ta do con pul sos de
15V. El ter mi nal RA4 (pa ta 3) tam bi�n tie ne fun cio
nes co mo en tra da de un tem po ri za dor y RBO
(pa ta 6) cum ple tam bi�n fun cio nes co mo en tra da
de in te rrup ci�n.

Va mos a rea li zar la ex pli ca ci�n de es te cap�tulo


en ba se al mi cro con tro la dor 16F84 por ser
uno de los PICs de ma yor re nom bre y por exis tir
abun dan te bi blio gra f�a y pro yec tos dis po ni bles
gra tui ta men te en In ter net. Sin em bar go, de be
mos acla rar que exis ten otros chips co mo el
16F628, que son si mi la res a �s te, m�s eco n� mi cos
y de me jo res pres ta cio nes. Opor tu na men te
ve re mos c�mo �mi grar� de uno a otro sin ma yo res
com pli ca cio nes.

Figura 2

64Club Saber Electr�nica N� 97


LoS
MiCroCoNtroLadorES
PiC

Tambi�n aclaramos que en el pr�ximo tomo


de
la
colecci�n
Club
Saber
Electr�nica
analizaremos a un PIC de mejores caracter�sticas
como el PIC 16F887.

Aho ra bien, la ma yo r�a de los mi cro con tro la do


res (sean de Mi cro chip, o de Na tio nal, Mo to ro
la, Phi lips, etc.) se com por tan de for ma si mi lar,
por ello nos va mos a re fe rir a los mi cro con tro la do
res PIC16F84 cu ya ar qui tec tu ra in ter na pue de
ob ser var se en la fi gu ra 3.

Ob ser ve pri me ro los blo ques ex ter nos. Exis te


un cris tal que se co nec ta en OSC1 y OSC2
pa ra ge ne rar el CLOCK del sis te ma. Lue go una
se �al de en tra da lla ma da MCLR ne ga da, que es
un nom bre de fan ta s�a pa ra nues tro co no ci do
RE SET
(de bi do a que esa pa ta tie ne un do ble
uso) y, por �l ti mo, dos puer tos pa ra le los de I/O
(en tra da o sa li da) lla ma dos puer to A
y puer to B.
Una de las pa tas del puer to A
pue de ser uti li za da
co mo en tra da de in te rrup cio nes (es ta pa ta
es pe cial ha ce que el mi cro pro ce sa dor de je de
rea li zar la ta rea que es ta ba eje cu tan do y pa se a

rea li zar otra ta rea al ter na ti va; cuan do la ter mi na


vuel ve a su pro gra ma ori gi nal).

Ana li ce mos el blo que m�s gran de (tem po ri za


do res), en �s te ob ser va mos un gru po de blo ques
de di ca dos a me jo rar el fun cio na mien to pe ro
sin in fluir di rec ta men te en el flu jo de se �a les.
Ve mos un tem po ri za dor de en cen di do, un tem po
ri za dor de arran que del os ci la dor de CLOCK,
un cir cui to de re set y un cir cui to lla ma do de vi gi lan
cia o WATCH DOG. Los dos pri me ros blo ques
pro cu ran un arran que or de na do pa ra no pro du cir
una car ga al mis mo tiem po so bre la fuen te.
Por �l ti mo, exis te un cir cui to con un nom bre cu rio
so: �pe rro guar di�n�. Su fun ci�n es es tar vi gi lan
te el m� xi mo de tiem po que tar da el mi cro pro ce
sa dor en com ple tar su pro gra ma (o me jor se r�a
de cir, la de ri va ci�n m�s lar ga de su pro gra ma)
y en ca so de su pe rar se ese tiem po, pro vo car
un re set au to m� ti co por que el mi cro pro ce sa dor
se que d� tra ba do en al gu na par te de su pro gra
ma. Tam bi�n se di ce que el mi cro pro ce sa dor
se que d� col ga do o con ge la do.

Es te blo que de cir cui tos no tra ba ja in de pen

Figura 3

Cap�tulo 365
El
Mundo
de
los
Microcontroladores

dien te men te si no que re quie re co ne xio nes al ex te


rior y al in te rior del dis po si ti vo. Por ejem plo, no
siem pre son uti li za dos y es el pro gra ma quien
de ter mi na su uti li za ci�n y ade m�s ajus ta sus pa r�
me tros. Es to se rea li za a tra v�s del blo que de
con trol o de co di fi ca dor de ins truc cio nes.

Ana li ce mos aho ra la sec ci�n de arri ba a la iz quier


da en don de ob ser va mos la me mo ria de
pro gra ma, el con ta dor de pro gra ma, el re gis tro
de ins truc cio nes y la pi la o STACK de 8 ni ve les.
Cuan do ha bla mos de re gis tros nos re fe ri mos a
peque�as
unidades
de
memoria
transitoria,
cons trui da por lo ge ne ral, con un re gis tro de
des pla za mien to. Son me mo rias vo l� ti les que se
uti li zan pa ra guar dar in for ma ci�n por un tiem po
m� ni mo, con el fin de rea li zar una ope ra ci�n
com ple ja de va rios pa sos.

El con ta dor de pro gra ma es el res pon sa ble


de que el mi cro pro ce sa dor va ya ana li zan do las
ins truc cio nes en or den as cen den te. Es te guar da
el n� me ro de ins truc ci�n en el STACK y la ins truc
ci�n mis ma la pa sa al re gis tro de ins truc cio nes
des de don de se en v�a al res to del mi cro pro ce
sa dor. El STACK es, en rea li dad, una pi la de
re gis tros (en nues tro ejem plo hay 8), de bi do a
que el pro gra ma pue de te ner de ri va cio nes (en la
jer ga LOOPS, ru los o sub pro gra mas). Cuan do
se ter mi na de eje cu tar un loop se de be vol ver al
mis mo pun to del pro gra ma en don de se ha b�a
pro du ci do la bi fur ca ci�n y eso es po si ble por que
ese n� me ro de ins truc ci�n que d� guar da do en
uno de los re gis tros de la pi la. Es co m�n que un
loop ten ga, a su vez, un loop se cun da rio y cuan do
se eje cu ta ese loop se cun da rio se de be vol ver
al mis mo pun to del loop pri ma rio, eso se
con si gue con guar dar ese n� me ro de ins truc ci�n
del loop se cun da rio en otro re gis tro de la pi la.

Ana li ce mos aho ra la sec ci�n in fe rior de re cha.


En ese sec tor se ubi can los blo ques res pon
sa bles de efec tuar ope ra cio nes ma te m� ti cas
y l� gi cas bi na rias; re cor de mos que el nom bre
ALU pro vie ne de Arit me tic Lo gic Uni te (uni dad
ari m� ti ca y l� gi ca). En es te sec tor es im pres cin di
ble uti li zar un re gis tro ya que una ope ra ci�n
arit m� ti ca o l� gi ca siem pre se efec t�a en tre dos
n� me ros. Los n� me ros bi na rios que de ben pro ce
sar se se to man de la me mo ria de da tos, el pri me
ro se acu mu la en el re gis tro de tra ba jo o re

gis tro W (de Work = tra ba jo) el se gun do es el


pre sen te en el ins tan te en que se in vo ca la me mo
ria de da tos. Co mo las ope ra cio nes pue den
ser en ca de na das (cuan do el re sul ta do sir ve co mo
ope ran do de la si guien te ope ra ci�n, tal co mo
el ca so de un pro duc to) el re gis tro W tie ne un re tor
no a la ALU. Ve mos ade m�s que la ALU es t�
co man da da por el blo que MUX (MUl ti ple Xa dor).
En efec to, la ALU re quie re que se le en v�en n� me
ros pa ra pro ce sar que le lle guen des de la
me mo ria de da tos, pe ro an tes se la de be pre dis po
ner pa ra que efec t�e la ope ra ci�n re que ri da
(com pa ra ci�n, ro ta ci�n de d� gi tos, etc.).

El re gis tro de es ta do o es ta tus co la bo ra du ran


te las ope ra cio nes ma te m� ti cas. Pien se c� mo
ope ra Ud. pa ra rea li zar una res ta: pri me ro
ubi ca el pri mer n� me ro, lue go el se gun do y des pu�s
co mien za a ana li zar los bits me nos sig ni fi ca
ti vos (las uni da des), pe ro si el n� me ro de arri ba
es me nor que el n� me ro de aba jo, en ton ces
to ma pres ta do de la co lum na de las de ce nas,
lue go de be re cor dar es to por que el n� me ro de
arri ba en la co lum na de las de ce nas se re du jo
en una uni dad. En rea li dad, aun que se tra te de
una ope ra ci�n en tre dos n� me ros su eje cu ci�n
re quie re guar dar lo que se lla ma aca rreo en otro
re gis tro y �s te no es otra co sa m�s que el re gis tro
STATUS.

El PIC16F84 con tie ne ade m�s de to do lo vis to,


una me mo ria RAM de re gis tros que pue de
ser lla ma da des de el re gis tro de ins truc ci�n a
tra v�s de un mul ti ple xa dor de di rec cio nes. Es ta
sec ci�n s� lo se uti li za en de sa rro llos avan za dos.
Aho ra bien, un mi cro con tro la dor sin pro gra ma
no sa be ha cer na da, es co mo un ni �o re ci�n na ci
do; tie ne al gu nos re fle jos con di cio na dos co mo
el de suc ci�n que le per mi te ali men tar se pe ro no
sa be ha cer m�s que eso. No so tros de be re mos
en se �ar le a rea li zar ac cio nes y lo va mos a ha cer
co mo a un be b�, pa so a pa so. Su ca pa ci dad de
apren di za je es enor me y su ma men te va ria da.
Le va mos a en se �ar a llo rar a in ter va los re gu la res,
a en cen der lu ces, a su mar, a res tar, etc.

En se �ar le sig ni fi ca pro gra mar lo y eso se rea li


za con una pla que ta de pro gra ma ci�n que de pen
de de ca da mar ca y mo de lo de mi cro con tro la
dor. An ti gua men te los mi cro pro ce sa do res te n�an
una ven ta ni ta trans pa ren te y era ne ce sa rio

66Club Saber Electr�nica N� 97


LoS
MiCroCoNtroLadorES
PiC

Figura 4

ex po ner los a la luz ul tra vio le ta pa ra bo rrar su


me mo ria e in tro du cir un pro gra ma nue vo. Ac tual
men te cuen tan con me mo rias que no tie nen
es te re qui si to. Bas ta con car gar los con un pro gra
ma pa ra que se bo rre el an te rior. Es to sig ni fi ca
que, con el mis mo in te gra do, po dre mos cons truir
di fe ren tes dis po si ti vos que rea li cen fun cio nes
to tal men te dis tin tas unas de otras.

La
Me Mo rIa
de
Pro gra Ma

La memoria del PIC16F84 es una EE PROM,


es de cir, de lec tu ra so la men te (ROM = Read
Only Me mory) que se pro gra ma por ten si�n (no
ne ce si ta luz ul tra vio le ta); es de cir que bas ta con
in tro du cir los da tos con cier to ni vel de ten si�n
pa ra que �s tos bo rren el pro gra ma an te rior y
gra ben uno nue vo.

�Por qu� es ta me mo ria se lla ma ROM, si se


pue den gra bar da tos so bre ella?

Se lla ma ROM por que pa ra gra bar la se de be

co nec tar el PIC al pro gra ma dor;


lue go de que el PIC co lo ca es tos
da tos en la pla que ta del dis po si ti vo,
s� lo pue den ser le� dos, ya que en ton
ces for man el pro gra ma del PIC.
Es ta me mo ria (fi gu ra 4) tie ne una
lon gi tud de 1 Kby te con pa la bras de
14 bits. Di ga mos que tie ne un an cho
de 14 bits y una al tu ra de 1.000
By tes o que es una me mo ria de

1.000 x 14. Ob ser ve que los n� me ros de ins truc


ci�n en he xa de ci mal van des de el 000 al
3FF, lo cual im pli ca que exis ten 1.040 po si cio nes
de me mo ria, va lor ob te ni do em plean do la f�r mu la:
3 x 162+16 x 161+16 x 160

Ob ser ve que dos de las po si cio nes de me


mo ria tie nen las in di ca cio nes �vec tor de re set� y

�vec tor de in te rrup ci�n�.

Eso sig ni fi ca que, cuan do se pro vo ca un re set,


el mi cro pro ce sa dor vuel ve a la po si ci�n 000
del pro gra ma y cuan do se pro du ce una in te rrup ci�n,
a la po si ci�n 004. Es tos re tor nos for za dos
de ben ser con si de ra dos al di se �ar el pro gra ma
del mi cro pro ce sa dor; es de cir que el re set se
pro du ce por que la se �al ex ter na po ne el con ta dor
de pro gra ma en 000 y to do el pro gra ma se
rei ni cia. En cam bio, cuan do in gre sa una se �al
por la pa ta de in te rrup ci�n el con ta dor de pro gra ma
va a 004 y la ac ci�n que, en ge ne ral ocu rre,
es que se co mien za a leer un sub pro gra ma par ticular.
Cuando
este
subprograma
termina,

Figura 5
el con ta dor de pro gra ma
re cu pe ra el n� me ro
que te n�a en el mo men to
de arri bar la in te rrup ci�n.

La
Me Mo rIa
de
datos

La RAM (Ran dom Ac cess


Me mory = me mo ria
de ac ce so alea to rio,
fi gu ra 5) es una me mo

Cap�tulo 367
El
Mundo
de
los
Microcontroladores

Figura 6
ria de lec tu ra y es cri tu ra de 64. De es tos 64 re gis
tros, los pri me ros 12 son fi jos y cum plen un
pro p� si to de ter mi na do, en tan to que des de el 13
has ta el 64 son re gis tros de pro p� si to ge ne ral,
en don de el pro gra ma pue de in di car que se al ma
ce ne un da to pa ra ser to ma do m�s tar de.
Adem�s, posee un conjunto de memoria SRAM
de 36 posiciones con los que se pueden construir
registros de 8 bits con caracter�sticas
EEPROM. En lo personal, prefiero designar a
este conjunto de registros como �memoria libre�.

Los
Puer tos
deL
PIc

El PIC16C84 tie ne dos puer tos pa ra le los de


en tra da o sa li da: el puer to �A� de 8 pa tas y el �B�
de 5 pa tas. Ca da pa ta pue de ser pre dis pues ta
por el pro gra ma pa ra ope rar co mo de en tra da o
de sa li da.

Ca da pa ta tie ne un re sis tor de pull-up (re sis tor


co nec ta do a fuen te) in ter no que pue de ser
des co nec ta do me dian te el pro gra ma. Es tos re sistores
se
desconectan
autom�ticamente
si
una pa ta se pre dis po ne co mo pa ta de sa li da de bi
do a que las sa li das ya tie nen po si bi li dad de
en tre gar co rrien te des de fuen te con un tran sis tor.
To dos los re sis to res de pull-up se co nec tan

o des co nec tan al mis mo tiem po (no exis te un


co man do que los co nec te in de pen dien te men te).
Co mo puer to de sa li da, una pa ta pue de to mar
25mA
del cir cui to o en tre gar 20mA
al mis mo,
sin em bar go, en el puer to �A� s� lo se pue den
con su mir 80mA
en to tal o en tre gar 50mA,
es to sig ni fi ca que s� lo al gu nas pa tas pue den
tra ba jar al m� xi mo por que si to das lo hi cie ran (y
son 8) el con su mo to tal se r�a de 25 x 8 = 200mA.
El puer to �B� tie ne otras ca rac te r�s ti cas m� xi mas,
ya que en to tal pue de to mar 150mA
o en tre
gar 100mA. Co mo ve mos, las sa li das ad mi ten
su fi cien te car ga co mo pa ra ali men tar di rec ta men
te a un led (fi gu ra 6). Los puer tos no uti li za dos
siem pre se de ben co nec tar a la fuen te de
5V a tra v�s de un re sis tor de 10kO
de bi do a que
se tra ta de un dis po si ti vo CMOS que, de otro
mo do, po dr�a de te rio rar se por cap ta ci�n elec tros
t� ti ca (fi gu ra 7).

La pa ta 3 per te ne cien te al puer to �A� pue de


ser con fi gu ra da co mo de en tra da /sa li da o co mo

Figura 7
68Club Saber Electr�nica N� 97
LoS
MiCroCoNtroLadorES
PiC

Figura 8
de arran que de un tem po ri za dor /con ta dor (fi gu ra
8). Cuan do se pro gra ma co mo en tra da es ta
pa ta fun cio na co mo un dis pa ra dor de SCH MITT

o Sch mitt trig ger, ideal pa ra re co no cer se �a les


dis tor sio na das o con cre ci mien to len to. Es ta
mis ma pa ta tam bi�n tie ne una ca rac te r�s ti ca dis tin
ta cuan do ope ra co mo sa li da. Ella es la �ni ca
que tra ba ja a co lec tor abier to, es de cir, que no
pue de em plear se co mo fuen te, en es te ca so
siem pre se uti li za r� un re sis tor ex ter no.
eL
cLock

Los PICs po seen un

Figura 9
os ci la dor con fi gu ra ble
por pro gra ma de
caracter�sticas
muy
am plias. Cuan do no
se re quie re mu cha
pre ci si�n se pue de
tra ba jar con un os ci la
dor a RC co nec ta do
se g�n la fi gu ra 9.

Figura 10
Pa ra cir cui tos que re quie ran una gran
pre ci si�n se pue de tra ba jar con un cris tal
de fre cuen cia ba ja, me dia o al ta (fi gu ra
10). Co mo m� xi mo el PIC16F84 pue de
tra ba jar con un cris tal de 10MHz. In ter na
men te la fre cuen cia del cris tal se di vi de
por 4, por lo tan to, es muy co m�n la
uti li za ci�n de un cris tal de 4MHz pa ra ob te
ner un CLOCK in ter no de 1MHz que
garantiza
que
cada
instrucci�n
dure
exac ta men te 1mS. Pa ra tem po ri za do res
de pe r�o do lar go se uti li zan cris ta les de
ba ja fre cuen cia.
eL
re set

El PIC �se re se tea� cuan do la pa ta 4 (MCLR


ne ga da) se po ne a po ten cial ba jo. Pa ra sim pli fi car
el cir cui to de re set, el PIC po see un tem po ri za
dor in ter no que per mi te rea li zar un re set au to m�
ti co cuan do se apli ca ten si�n de 5V. En es tos
ca sos el cir cui to ex ter no de re set s� lo im pli ca el

Figura 11

uso de un re sis tor de 10kO


en tre la pa ta 4 y
fuen te tal co mo se mues tra en la fi gu ra 11.

En mu chos cir cui tos es ne ce sa rio rea li zar un


re set ma nual y pa ra ello exis ten dos po si bi li da des,
una es uti li zar s� lo el tem po ri za dor in ter no
(por pro gra ma) y la otra es agre gar una cons tan te
de tiem po ex te rior co mo se mues tra en la fi gu
ra 12. En el se gun do cir cui to C1 pro vee un re tar
do al en cen di do o pos te rior al pul sa do de re set
por que C1 se car ga r� len ta men te a tra v�s de
R1 con una cons tan te de tiem po de 22kO
x
10�F = 220mS.

Cap�tulo 369
El
Mundo
de
los
Microcontroladores

El re sis tor R3 li mi ta la co rrien te de des car ga


de C1 a va lo res com pa ti bles con sus ca rac te r�s ti
cas de co rrien te de pi co m� xi ma.

D1 des car ga a C1 cuan do la ten si�n de fuen te


de cae pa ra per mi tir un re set in me dia to cuan do
la fuen te se apa ga y se en cien de en r� pi da
su ce si�n. R2 li mi ta la co rrien te de re set, to ma da
des de el mi cro pro ce sa dor. Es te se gun do sis te ma
se sue le uti li zar cuan do se re quie re un re se tea
do re mo to a tra v�s de va rios me tros de ca ble
que po dr�an cap tar zum bi do (C1 re du ce la im pe dan
cia del cir cui to de re set).

PrIMeras
concLusIones

El PIC es un mi cro con tro la dor, una es pe cie


de "or de na dor en mi nia tu ra" (con mu chas co mi llas)
que po dre mos pro gra mar. Hay mu chos ti pos
de mi cro con tro la do res PIC, los hay de 8 pa tas
con 6 ter mi na les pa ra in ter cam bio de da tos
(6 ter mi na les de en tra da / sa li da de da tos), pe ro
tam bi�n exis ten dis po si ti vos m�s po de ro sos de
80 pa tas con 40 pi nes I/O (de en tra da y sa li da
de da tos).

El PIC16F84 po see en su in te rior un mi cro pro


ce sa dor, una me mo ria RAM (vo l� til) don de
guar da re mos las va ria bles, una me mo ria EE PROM
(no vo l� til) don de guar da re mos nues tro
pro gra ma, un ti mer o con ta dor que nos fa ci li ta r�
al gu nas ta reas, y otros blo ques de con trol y apo yo.
Al gu nas ca rac te r�s ti cas m�s re pre sen ta ti vas
del PIC16F84 son:

Opera
a
una
frecuencia
m�xima
de
10MHz (ex cep to el PIC 16F84A
que pue de ope rar
a 20MHz).
1kbyte
de
memoria
EEPROM
para
nues tro pro gra ma (1024 po si cio nes).

68 by tes (de 8 bits) de me mo ria RAM

64 by tes de me mo ria EE PROM pa ra da tos


(no vo l� ti les)

Pro gra ma ble con s� lo 35 ins truc cio nes

Po see 13 pi nes de en tra da /sa li da (un


puer to de 8 bits + otro de 5 bits)

Tie ne un ti mer /con ta dor de 8 bits

Tam bi�n po see una se rie de re gis tros y tem po


ri za do res, cu yo es tu dio no rea li za re mos en
es ta obra.

GPIC USB:
ProGramadordemICroControladoreSPIC ymemorIaSeePromPorPUertoUSB
IntroduccI�n

Este proyecto comenz� a principios del


2008 cuando inici� la escritura del c�digo
fuente para el firmware de un 18F2550 y la
elaboraci�n del Software correspondiente a
la interfaz de usuario para la PC de un programador
de microcontroladores Pic por
puerto USB. Anteriormente ya hab�a estado
interesado en los procesos de programaci�n
de los Pic por lo tanto, basado en
esas experiencias y en el estudio de los
Data Sheets referentes a las especificaciones
de programaci�n de los microcontrola

dores, surgi� el GPIC USB como una aplicaci�n


totalmente funcional hacia finales
de Octubre del 2008.

A
la fecha ha sufrido algunas modificaciones
que permite mejorar su funcionamiento
y ampliar la cantidad de componentes
soportados.
descrIPcI�n
deL
cIrcuIto
eLectr�nIco

El esquema de la figura 1 corresponde al


programador
de
microcontroladores
PIC
por puerto USB, su dise�o es simple y sen

70Club Saber Electr�nica N� 97


LoS
MiCroCoNtroLadorES
PiC

Figura 1

cillo. Lo podemos dividir en tres bloques


fundamentales
bien
definidos,
tal
como
muestra la figura 2.

Bloque 1: Microcontrolador

El primero y m�s importante est� constituido


por
el
microcontrolador
18F2550
(IC2), es el encargado de la comunicaci�n
por el puerto USB con la PC por intermedio

Figura 2

de la interfaz de programaci�n, establece la


transferencia de datos con los microcontroladores
soportados y activa las tensiones
de VDD y VPP, figura 3.

Los pines 15 y 16 (RC4 -RC5) del puerto


C del PIC conectan con la ficha correspondiente
para la transmisi�n y recepci�n
de los datos v�a USB.

Los pines 2 y 3 (RA0 -RA1) del puerto A

se destinan como interfaz


de comunicaci�n del protocolo
ICSP
entre el programador
y los microcontroladores
soportados por �ste,
a trav�s del conector ICSP
(terminales 1 y 2, figura 1).
Los datos por el pin 2 son
bidireccionales,
sincronizados
por una se�al de reloj
con salida por el pin 3.

Cap�tulo 371
El
Mundo
de
los
Microcontroladores

Figura 3
Los pines 23, 24 y 25 (RB2 -RB3 -RB4)
del puerto B los utilizamos para el control
de la tensi�n VPP
de programaci�n. Seg�n
el estado de estas salidas obtenemos diferentes
tensiones
en
la
salida
VPP
del
conector ICSP
(terminal 3, figura 1).

El pin 26 (RB5) del PIC lo utilizamos


como una salida para controlar los estados
de la tensi�n VDD.

Continuamos con los pines 11, 12 y 13


(RC0 -RC1 -RC2) del puerto C, son utilizados
como
salidas
para
los
LEDs
de
visualizaci�n del funcionamiento del programador.

Comenzando con el LED denominado


"VDD", este se encender� con el suministro
de esta tensi�n.

Tenemos tres estados posibles, seg�n la

configuraci�n establecida desde la interfaz


de usuario en la PC:

A-S�lo se suministra tensi�n VDD a


los microcontroladores soportados durante
los procesos de lectura, grabaci�n, verificaci�n
y borrado.

B-Suministro
de
tensi�n
constante,
para poder alimentar a los circuitos durante
las pruebas (s�lo circuitos con bajo consumo).

C-No se suministra tensi�n VDD hacia


los
microcontroladores
soportados,
una
fuente externa debe proveer la alimentaci�n.

El LED denominado VPP, se enciende


durante
el
suministro
de
dicha
tensi�n

72Club Saber Electr�nica N� 97


LoS
MiCroCoNtroLadorES
PiC

durante todos los procesos. Desde la interfaz


de programaci�n en la PC podemos
configurar el suministro de esta tensi�n de
dos formas:

A-S�lo se suministra tensi�n VPP


a
los microcontroladores soportados durante
todos los procesos.

B-Suministro de tensi�n MCLR postprocesos,


para "arrancar" al microcontrolador
sin tener que desconectar la ficha ICSP.

Por �ltimo el LED denominado USB, se


enciende cuando se establece la comunicaci�n
con el puerto USB y es reconocido
el programador. Volviendo sobre el PIC
18F2550, �ste debe ser grabado en un
principio para su funcionamiento.

El programa para este microcontrolador


podemos dividirlo en dos partes: un programa
residente en un bloque de memoria del
PIC,
com�nmente
llamado
bootloader,
encargado de "chequear" la existencia del
firmware
correspondiente
al
conectar
el
programador al puerto USB.

En caso de no encontrarse, el LED


denominado USB comenzar� una secuencia
de encendido en forma intermitente. En
caso contrario, el firmware tomar� el control
y el LED quedar� encendido en forma continua.

La gran ventaja de utilizar este sistema


se debe a que s�lo una vez debemos programar
el microcontrolador 18F2550, en lo
sucesivo los cambios y actualizaciones del
firmware se podr�n realizar directamente

desde la interfaz de usuario en la PC. Para


finalizar este bloque, el pin 17 (RC6) del
puerto C, lo utilizamos para generar una
se�al que, junto con el buzzer BZ1 emite
unos "beeps" cada vez que pulsamos los
botones de comando para lectura, grabaci�n,
verificaci�n y borrado desde la interfaz
de programaci�n. Es opcional su implementaci�n
y puede ser activado o desactivado
desde la misma interfaz.

Bloque 2: conversor dc -dc

En un comienzo me plante� qu� dise�o


usar para el conversor de tensi�n, si implementarlo
de forma totalmente independiente
o utilizar el PIC para esta tarea generando
un PWM por software, m�s los componentes
externos necesarios. Me decid� por
la primera opci�n por varios motivos: el circuito
integrado utilizado MC34093, figura 4,
es un conversor especializado para esta
funci�n, de muy bajo costo, ampliamente
difundido, que figura en las listas de componentes
de casi todos los comercios de
electr�nica. Es aut�nomo, no depende del
firmware grabado en el 18F2550, quiero
decir con esto que podemos chequear su
funcionamiento y la tensi�n de salida del
conversor (en las pruebas) sin necesidad
de tener el PIC en la placa del programador
ya que no depende de �ste. Adem�s nos
permite, si fuera necesario, regular la tensi�n
de salida con s�lo variar el valor de
una resistencia: R3 o R4.

El valor del choque L1 no es cr�tico,


puede estar comprendido entre 220�H y
680�H
sin
ning�n
tipo
de

Figura 4

inconveniente.
El circuito se alimenta con 5
volt suministrados por el puerto
USB y a la salida de TP2 obtenemos
una tensi�n continua de
aproximadamente 14V a 14.5V
necesarios para alimentar el
bloque 3 de la figura 2.
Las resistencias R3, R4 junto
con R5 forman un divisor resistivo
conectado
al
pin
5
del

Cap�tulo 373
El
Mundo
de
los
Microcontroladores

MC34093, este lazo de realimentaci�n


estabiliza la tensi�n de salida ya que es
comparada con una tensi�n de referencia
interna, como podemos observar en
la figura 5. En la salida del integrado pin
1,
obtenemos
una
onda
variable
en
ancho de pulso (PWM) en relaci�n al
consumo exigido luego de la rectificaci�n,
l�gicamente dentro de unos l�mites.
Los estados de conmutaci�n On-Off
en el pin 1 del MC34093 junto con L1
producen la elevaci�n de la tensi�n, el
diodo D1 y los capacitares C3, C4 se
encargan de la rectificaci�n. El capacitor
C2 establece la frecuencia del oscilador
interno.

Bloque 3: tensiones VPP


y Vdd

Podr�a haber utilizado un solo transistor


para tratar la tensi�n de programaci�n VPP,
pero estar�amos bastante limitados. La idea
era tener una salida Vpp �nica y m�s flexible,
que proporcionara la tensi�n normal de
programaci�n, la opci�n de una tensi�n
MCLR post programaci�n y por �ltimo que
ya estuviera pensada para los microcontroladores
que trabajan con 3.3 volt que ser�n
incorporados en el futuro. Esto lo pod�a
obtener utilizando un amplificador operacional,
precisamente el CA3140 con entradas
MOSFET
y salida bipolar, que trabaja bien
con alimentaci�n de simple v�a, pero lo m�s
importante en cuanto a la elecci�n es que
est� preparado para obtener una tensi�n
de salida diferente independientemente a la
tensi�n suministrada sobre el pin 7.

Con un diodo Zener sobre el pin 8


(STROBE) se consigue de forma simple y
pr�ctica modificar el valor de la tensi�n de
salida por el pin 6. En la figura 7 podemos
ver la informaci�n que brinda el fabricante
del CA3140 para adaptar la salida a niveles
compatibles TTL
independientemente de la
tensi�n V+ en el pin 7.

En el programador he adaptado el circuito


para manejar las tensiones de 3.3 volt
para esta gama de PICs que se ir�n incorporando
en pr�ximas actualizaciones.

Figura 5
Figura 7Figura 6
74Club Saber Electr�nica N� 97
LoS
MiCroCoNtroLadorES
PiC

Listado de Materiales

IC1 = MC34063
IC2 = PIC 18F2550
IC3 = CA
3140
Q1 = BC327
Q2 = BC547
Vpp, Vdd, Usb = LEDs de 3 mm
D1 = 1N4148
R1 = 0.22 a 0.47 Ohm
R2 = 180 Ohm
R3 = R4 = 12kO
R5 = 2.2kO
R6, R7 -R8 = 33 Ohm
R9, R10, R11= 10kO
R12 = 33kO
R13, R14, R15, R21, R22 = 4.7kO
R16, R17, R18 = 470 Ohm

Est� conformada, como podemos observar


en la figura 6, por el Zener Z1 conectado
al pin 8 del CA3140 en serie con el transistor
NPN Q2 que trabaja como llave electr�nica
On-Off, de acuerdo a los niveles alto

o bajo en la base. Con un nivel bajo sobre


la base de este transistor el circuito est�
desconectado, por lo tanto la tensi�n VPP
ser� la normal de 12.30V a 13V; por otro
lado, con un nivel alto proporcionado por
RB4 del 18F2550 a trav�s de R13 el circuito
se conecta, la tensi�n VPP
en este caso
ser� de 3.3 volt.
De esta forma queda totalmente automatizado
el suministro de VPP
de acuerdo
a los dispositivos seleccionados desde la
interfaz de usuario en la PC.

Por el momento no es necesario implementar


Z1, Q2 y R13, ya que es la primera
versi�n base del programador y dicha gama
de dispositivos a�n no est�n incorporados.
En este caso el pin 8 debe quedar sin conexi�n.
Como pueden ver, la electr�nica del
programador ya est� pensada para soportar
de forma pr�ctica a estos microcontroladores
a medida que sean agregados.

Continuando con esta etapa, las entradas


inversora y no inversora del amplificador
operacional se conectan con RB3 y
RB2 del microcontrolador; de acuerdo a los

C1, C4 = 100�F x 16V, electrol�tico


C2 = 390pF, cer�mico
C3, C5 = 0,1�F, cer�mico
C6 = 10�F x 16V, electrol�tico
C7, C8 = 15pF, cer�mico
C9 = 0,47�F, cer�mico
C10 = 1nF, cer�mico
C11 = 1�F x 16V, electrol�tico
L1 = choque de 330�H a 680�H
Xtal = cristal de 20MHz
Bz1 = (opcional) buzzer sin oscilador interno
F1 = Fusible de 250mA, requiere puente o portafusible

Varios:

Placa de circuito impreso, gabinete para montaje,


conector USB, conector ICSP, cables,
esta�o, etc.

niveles detectados por las entradas del


CA3140 la salida de �ste conmutar� entre
un estado pr�ximo a masa (0.3 volt) y Vpp,
al finalizar proveer� una tensi�n adecuada
al caso, si se eligi� la opci�n "suministrar
MCLR" desde la interfaz de programaci�n.
Todas las se�ales para la activaci�n de las
tensiones
est�n
sincronizadas
desde
el
firmware del microcontrolador Pic.

Las resistencias R9 y R10 conectadas a


masa evitan que queden al "aire" las entradas
del operacional en caso que el micro-
controlador 18F2550 no est� presente en
su z�calo, de lo contrario tendr�amos un
estado de indeterminaci�n a la salida. El
capacitor C10 limita la banda pasante del
operacional, es obligatorio junto con R11 y
R12.

El pin 7 del CA3140 recibe la tensi�n de


alimentaci�n para su funcionamiento, proporcionada
por el conversor Dc-Dc. El pin 4
se conecta a masa.

La tensi�n m�xima en la salida del operacional


pin 6 es aproximadamente 2 volts
menor a la tensi�n de alimentaci�n sobre el
pin 7 (en caso que no se encuentre activado
Q2, Z1).

Para finalizar la descripci�n y resumiendo,


el terminal 3 del conector ICSP
(figura

1) puede manejar cuatro estados de VPP:


Cap�tulo 375
El
Mundo
de
los
Microcontroladores

1-Una tensi�n pr�xima a masa (0.3


volt).

2-Una tensi�n Vpp de aproximadamente


12.30 -13 volt.

3-Una
tensi�n
post
programaci�n
MCLR.

4-Una tensi�n Vpp baja de 3.3 volt.

Por �ltimo el transistor Q1 se encarga


del manejo de la tensi�n Vdd, se encuentra
conectado con la salida RB5 del microcontrolador.
Un nivel alto en la base de Q1 lo
mantiene bloqueado y un nivel bajo lo coloca
en estado de conducci�n con salida por
colector; el emisor de dicho transistor se
conecta a +5 volt suministrados por el puerto
USB.

extensi�n 3.3 Volt Vdd2

Opcionalmente
podemos
anexar
una
l�nea auxiliar de 3.3 volt en el conector

Figura 8
ICSP
(ya
est�
contemplado
en
el circuito general
de la figura 1).
Con
un
simple
circuito
(figura
8) obtenemos
una
tensi�n
de
salida
de

3.3 volts en
el
emisor
de Q3, con las mismas caracter�sticas
de control que VDD. La entrada
de tensi�n se produce por el colector
de Q3, conectado a VDD, colector de
Q2.

En la figura 9 se puede ver la imagen


de la placa de circuito impreso
con su m�scara de componentes.
Desde la p�gina del autor puede descargar
tanto la interfaz gr�fica para
programaci�n
(figura
10)
como
el
firmware para el PIC del programador.
La versi�n 2.1 de dicho firmware
soporta los siguientes componentes:

PIC18F67J93 PIC18F87J93 PIC18F67J90


PIC18F87J90 PIC18F67J50 PIC18F87J72
PIC18F67J11 PIC18F87J50 PIC18F67J10
PIC18F87J11 PIC18F66J93 PIC18F87J10
PIC18F66J90 PIC18F86J93 PIC18F66J55
PIC18F86J90 PIC18F66J50 PIC18F86J72
PIC18F66J16 PIC18F86J55 PIC18F66J15
PIC18F86J50 PIC18F66J11 PIC18F86J16
PIC18F66J10 PIC18F86J15 PIC18F65J90
PIC18F86J11 PIC18F65J50 PIC18F86J10
PIC18F65J15 PIC18F85J90 PIC18F65J11
PIC18F85J50 PIC18F65J10 PIC18F85J15
PIC18F64J90 PIC18F85J11 PIC18F64J11
PIC18F85J10 PIC18F63J90 PIC18F84J90
PIC18F63J11 PIC18F84J11 PIC18F83J90
PIC18F83J11 PIC18F66J60 PIC18F66J65
PIC18F67J60 PIC18F86J60 PIC18F86J65
PIC18F87J60 PIC18F96J60 PIC18F96J65
PIC18F97J60 PIC18F24J10 PIC18LF24J10
PIC18F25J10 PIC18LF25J10 PIC18F44J10
PIC18LF44J10 PIC18F45J10 PIC18LF45J10
PIC18F24J11 PIC18LF24J11 PIC18F25J11
PIC18LF25J11 PIC18F26J11 PIC18LF26J11
PIC18F44J11 PIC18LF44J11 PIC18F45J11
PIC18LF45J11 PIC18F46J11 PIC18LF46J11

Figura 9
76Club Saber Electr�nica N� 97
LoS
MiCroCoNtroLadorES
PiC

Figura 10

PIC18F26J13 PIC18LF26J13 PIC18F27J13


PIC18LF27J13 PIC18F46J13 PIC18LF46J13
PIC18F47J13 PIC18LF47J13 PIC18F24J50
PIC18LF24J50 PIC18F25J50 PIC18LF25J50
PIC18F26J50 PIC18LF26J50 PIC18F44J50
PIC18LF44J50 PIC18F45J50 PIC18LF45J50
PIC18F46J50 PIC18LF46J50 PIC18F26J53
PIC18LF26J53 PIC18F27J53 PIC18LF27J53
PIC18F46J53 PIC18LF46J53 PIC18F47J53

eL
PrograMador
Quark
Pro
2

Para cargar un programa en un micro-


controlador PIC se requiere de una serie de
par�metros b�sicos a saber:

VDD = Voltaje de alimentaci�n de 5V


VSS = Referencia de tierra del circuito
VPP
= Voltaje de programaci�n de 14V
PGD = Datos de programaci�n
PGC = Pulsos de reloj para la sincroni

zaci�n

El
primer
cargador
desarrollado
por
nuestro
equipo
y
publicado
en
Saber
Electr�nica en 1998, utilizaba el puerto
paralelo de una computadora, precisaba
una fuente externa y estaba basado en un
circuito
de
David
Tate.
Posteriormente
desarrollamos varios cargadores usando el
puerto serie con y sin fuente de alimentaci�n,
muchos de ellos basados en un dise�o
denominado �JDM� y que emplean como
interfaz gr�fica al programa IC-Prog. El programador
m�s completo lo hemos denominado
Quark Pro 2 y se public� en Saber
Electr�nica N� 200. Aqu� una breve descripci�n.

En la figura 11 se muestra el circuito


el�ctrico del programador QUARK-PRO 2.
Como puede observar no existe ninguna
fuente de alimentaci�n externa. El circuito
se alimenta del puerto serial de la PC a trav�s
del conector DB9. El voltaje de alimentaci�n
VDD se obtiene de los mismos pulsos
de reloj (pin 7 del DB9), los cuales son

Cap�tulo 377
El
Mundo
de
los
Microcontroladores

Figura 11Figura 12
78Club Saber Electr�nica N� 97
LoS
MiCroCoNtroLadorES
PiC

rectificados por los diodos D3 y D4 y estabilizado


a 5 volt mediante el diodo zener D5
(5.1V) y el capacitor C1. De la misma
manera, se obtiene el voltaje de programaci�n
VPP, cargando el capacitor C2 y estabilizando
con el diodo zener D6 (8.2V) el
cual se suma al voltaje del zener D5 (5,1V),
obteni�ndose as� 13.3 Volt suficientes para
realizar la programaci�n del PIC. Se han
adicionado el LED L1 para visualizar el proceso
de grabaci�n o lectura del PIC, as�
como el LED L2 para indicar que el circuito
se encuentra alimentado, adem�s, si se
colocara un PIC en corto, este LED se apagar�
o bajar� significativamente su intensidad.
En la figura 12 se muestra el circuito
impreso sugerido para nuestro prototipo.

�Por qu� utilizar el programa IC-PROG?

Con el mismo criterio que seleccionamos


el
hardware
(programador
JDM),
seleccionamos
el
software
(IC-PROG),

Figura 13

basados en el que fuera m�s compatible. El


IC-PROG ofrece varias ventajas: La primera
es que dentro de su men� ofrece opciones
importantes como la posibilidad de
seleccionar el puerto a utilizar, as� como el
prototipo
de
programador
a
utilizar;
la
segunda es que el programa ofrece un
ambiente de trabajo muy amigable, ya que
este programa y gracias a las aportaciones
de
muchos
colaboradores
de
todo
el
mundo, est� traducido a varios idiomas y
tercero es que es compatible con la mayor�a
de los sistemas operativos de la PC,
adem�s que con frecuencia est�n disponibles
de manera gratuita versiones actualizadas
(v�ase www.ic-prog.com). En la figura
13 se muestra el ambiente de trabajo de
este programa.

Si usted ha trabajado con ambientes de


programas diferentes, podr� observar que
el ambiente del IC-Prog dispone de herramientas
de trabajo muy completas. �

Cap�tulo 379

También podría gustarte