Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
Esperamos que esta breve introducci�n le sirva como �disparador� para estudiar el
contenido
en la espera del pr�ximo texto.
Sobre
loS
2 CDSy
Su
DeSCarga
Di rec tor
autor:
Edi to rial
QUarK S.r.l.
Staff
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:
Publicidad:
Rafael Morales
rafamorales@webelectronica.com.ar
Club Se:
grupo Quark Srl
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
Cap�tulo
2
sistemas
de
programaCi�N:
leNguaje
mikroC ........................27
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
www.mikroe.com
IntroduccI�n
Cap�tulo 13
El
Mundo
de
los
Microcontroladores
Qu�
Pueden
Hacer
los
MIcrocontroladores
BaSES
dE
loS
MiCroCoNtroladorES
Cap�tulo 15Figura 1
El
Mundo
de
los
Microcontroladores
�Realmente
tiene
que
ser
as�?
�Necesitamos exactamente esos 10 d�gitos?
�Muy simple!
764 = 4 + 60 + 700
S�:
Figura 2
sIsteMa
de
nuMeracI�n
BInarIo
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
Simplemente,
es
f�cil
de
sIsteMa
de
nuMeracI�n
exadecIMal
Cap�tulo 17
El
Mundo
de
los
Microcontroladores
c�dIgo
Bcd
El
c�digo
BCD
(Binary-Coded
Decimal
C�digo
binario
decimal)
conversI�n
de
n�Meros
BInarIos
a
decIMales
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
24
-1 = 16 -1 = 15
conversI�n
de
n�Meros
HexadecIMales
a
decIMales
conversI�n
de
n�Meros
HexadecIMales
a
BInarIos
Figura 7
Marcar
los
n�Meros
Figura 8
n�Meros
negatIvos
Cap�tulo 19
El
Mundo
de
los
Microcontroladores
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
BYte
Figura 9
integrado
digital,
un
microcontrolador
o
un
microprocesador.
detalles
IMPortantes
coMPonentes
B�sIcos
de
la
l�gIca
dIgItal
compuerta Y
(and)
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)
Cap�tulo 111
El
Mundo
de
los
Microcontroladores
compuerta no (not)
Figura 16Figura 17
regIstros
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
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
Cap�tulo 113Figura 20
El
Mundo
de
los
Microcontroladores
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:
otP
roM (one time Programmable roM)
roM programable una sola vez
Figura 22
uv eProM (uv erasable Programmable
Memoria Flash
de acceso aleatorio
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
unIdad
central
de
ProcesaMIento
(central
Processor unIt -cPu)
�
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
Figura 23
coMunIcacI�n
en
serIe
Figura 24
�
�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
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.
I2c cIrcuIto
Inter-Integrado
(Inter Integrated cIrcuIt)
Figura 25
sPI -Bus
serIal
de
InterFase
de
PerIF�rIcos
(serIal
PerIPHeral
InterFace Bus)
La
velocidad
de
transmisi�n
m�xima
es
mayor que en el sistema de conexi�n I2C.
Figura 27
�
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-
cIrcuIto
de
alIMentacI�n
Fuente
de
alIMenta
cI�n
Hay que mencionar dos cosas dignas de
Cap�tulo 119
El
Mundo
de
los
Microcontroladores
�
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
Figura 28
�c�Mo
FuncIonan
los
teMPorIzadores?
utIlIzando
un
Preescalador
en
el
FuncIonaMIento
del
teMPorIzador
Figura 29
utIlIzando
una
InterruPcI�n
en
el
FuncIonaMIento
del
teMPorIzador
Esto
es
denominado
desbordamiento
o
sobreflujo (overflow). Permitido por el programa,
el desbordamiento puede provocar una interrupci�n,
lo que abre completamente nuevas posibilidades.
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
contadores
Fifura 30
Cap�tulo 121
El
Mundo
de
los
Microcontroladores
convertIdor
dIgItal
� anal�gIco
(d/a)
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
Figura 32
Figura 34
Figura 35
Figura 33
arQuItectura
Interna
de
un
MIcrocontrolador
arquitectura de von-neumann
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.
La
CPU
puede
leer
una
instrucci�n
o
leer/escribir datos de/en la memoria.
Cap�tulo 123
El
Mundo
de
los
Microcontroladores
�
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
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:
�c�Mo
se
deBe
elegIr
un
MIcrocontrolador?
Cap�tulo 125
Cap�tulo2eLmundodeLoSmicrocontroLadoreSCap�tulo2eLmundodeLoSmicrocontroLadoreS
SiStemaSdeProgramaci�n:
Lenguajemikroc
Usted seguramente sabe que no es suficiente s�lo conectar el microcontrolador a los
www.mikroe.com
Lenguajes
de
Programaci�n
Cap�tulo 227
El
Mundo
de
los
Microcontroladores
Lenguaje
ensambLador
Ventajas
de
Los
Lenguajes
de
Programaci�n
de
aLto
niVeL
A
pesar de la gran cantidad de beneficios, el
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.
Lenguaje
c
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.
Fases
de
La
comPiLaci�n
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.
estructura
deL
Programa
Cap�tulo 231
El
Mundo
de
los
Microcontroladores
�Y
ahora, haga su primer programa �real�!
Figura 6
32Club Saber Electr�nica N� 97Figura 7
SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC
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.
Cap�tulo 233
El
Mundo
de
los
Microcontroladores
tiPos
de
datos
en
mikroc
Tabla 1
Tabla 2
Un entero es un n�mero sin parte fraccionaria que puede estar expresado en los
siguientes formatos,
a saber:
11 // formato decimal
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.
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
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.
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.
const A
= 1000 // el valor de la constante A
est� definido
A
= 15; // �ERROR! no se puede modificar el valor de la constante
En mikroC los identificadores pueden ser tan largos como quiera. Sin embargo, hay
varias restricciones
a saber:
Tabla 3
temperatura_V1 // OK
Presi�n // OK
no_corresponder // OK
dat2string // OK
SuM3 // OK
_vtexto // OK
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:
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:
Si hay varias variables con el mismo valor inicial asignado, el proceso se puede
simplificar:
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
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:
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=0,CLORO};
// AGUA
= 0; G�SOLEO = 0; CLORO = 1
int
Velocidad_de_ascensor
enum
motor_de_ascensor {PARADA,INICIO,NORMAL,M�XIMO};
�mbito
de
VariabLes
y
constantes
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.
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
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).
File_1
utiliza una variable y una funci�n declaradas se usa en File_2.
File 1:
PORTA
= cnt++; // Cualquier modificaci�n de cnt en File_1 ser� visible en File_2
File 2:
int cnt = 0;
void hello();
oPeradores
Figura 10
40Club Saber Electr�nica N� 97
SiStEmaS
dE
ProgramaCi�N:
LENguajE
mikroC
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
operadores de asignaci�n
* 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
Cap�tulo 241
El
Mundo
de
los
Microcontroladores
Tabla 6
int a, b, c;
a = b = 5;
c = 1 + a++; // c = 6
b = ++c + a // b = 7 + 6 = 13
operadores relacionales
Tabla 7
int prop;
int var = 5;
operadores L�gicos
Tabla 8
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
Aparte de los operadores de asignaci�n, dos operadores no deben estar escritos uno
junto al
otro, por ejemplo:
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;
Cap�tulo 243
El
Mundo
de
los
Microcontroladores
Tabla 10
conVersi�n
de
tiPos
de
datos
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
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;
estructuras
de
controL
estructuras condicionales
El operador if
se puede utilizar solo o asociado al operador else (if-else).
Ejemplo del operador if:
if(expresi�n) operaci�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:
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
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 �?:�:
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:
break;
case
constante2:
break;
...
default:
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.
switch
(d�as) // La variable d�as representa un d�a de la semana.
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.
Cap�tulo 247
El
Mundo
de
los
Microcontroladores
bucle For
El bucle for
se parece a lo siguiente:
operaciones
...
...
bucle do-while
El bucle do-while
se parece a lo siguiente:
do
operaci�n
while
(cambiar_condici�n);
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.
while
(i<10) { // Condici�n
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.
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++;
Delay_ms(1000);
x++;
sentencia goto
...
if(CO2_sensor) goto
aire acondicionado; // Si se consta que el valor
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];
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
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:
a = array_1[0]; // A
la variable a se le asigna el valor del miembro de matriz
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
// temporalmente
profundiad_de_sonda [i] = profundiad_de_sonda [MUESTRAS_DE_AGUA-1-i];
profundiad_de_sonda [MUESTRAS_DE_AGUA-1-i] = temp;
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
int
Tabla [3][4]; // Tabla se define de modo que tenga 3 filas y 4 columnas
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]
����������������������������������������������
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
�&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;
Ahora, puntero
contiene la direcci�n de variable.
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+1) = 2; // voltio[1] = 2
*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
Cap�tulo 253
El
Mundo
de
los
Microcontroladores
struct
nombre_de_estructura {
tipo1_de_miembro1
miembro1;
tipo2_de_miembro2
miembro2;
tipo3_de_miembro3
miembro3;
..
};
struct
generador {
int
voltaje;
char
corriente;
};
struct
generadores turbina_1, turbina_2, turbina_3;
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.
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
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)�
*/
..
.
};
{
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
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
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
int
r[DIM]; // Declaraci�n de una nueva matriz denominada r
int
i;
return
r; // Devolver el valor r
}
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)
{
tipo de resultado
nombre de funci�n
tipos de par�metros
un punto y coma (;)
float
f (float, float);
// 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
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.
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).
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
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
sequence[i] = sequence[i+1];
sequence[i+1] = temp;
return
sequence[SIZE-1]; // Devolver el valor del �ltimo miembro
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.
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
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);
}
Cap�tulo 259
El
Mundo
de
los
Microcontroladores
caracter�sticas
PrinciPaLes
deL
Procesador
Tabla 11
* 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.
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�.
Tambi�n puede utilizar los par�metros para realizar substituciones m�s complejas:
Tanque_1 = (((Di�metro/2)*(Di�metro/2)*PI)*altura;
inclusi�n de archivos
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).
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
Cap�tulo 363
El
Mundo
de
los
Microcontroladores
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).
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.
Figura 2
Figura 3
Cap�tulo 365
El
Mundo
de
los
Microcontroladores
Figura 4
La
Me Mo rIa
de
Pro gra Ma
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
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
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
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
Figura 11
Cap�tulo 369
El
Mundo
de
los
Microcontroladores
PrIMeras
concLusIones
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).
GPIC USB:
ProGramadordemICroControladoreSPIC ymemorIaSeePromPorPUertoUSB
IntroduccI�n
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
Figura 1
Bloque 1: Microcontrolador
Figura 2
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).
B-Suministro
de
tensi�n
constante,
para poder alimentar a los circuitos durante
las pruebas (s�lo circuitos con bajo consumo).
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
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
Varios:
3-Una
tensi�n
post
programaci�n
MCLR.
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.
Figura 9
76Club Saber Electr�nica N� 97
LoS
MiCroCoNtroLadorES
PiC
Figura 10
eL
PrograMador
Quark
Pro
2
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.
Cap�tulo 377
El
Mundo
de
los
Microcontroladores
Figura 11Figura 12
78Club Saber Electr�nica N� 97
LoS
MiCroCoNtroLadorES
PiC
Figura 13
Cap�tulo 379