Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Editorial
Director
autor: La coleccin Club Saber Electrnica fue pensada como una obra de 12 tomos de edicin
Varios (ver Editorial)
mensual en la que se tratarn los temas ms significativos de la electrnica. Rpidamente com-
Seleccin y Coordinacin: prendimos que esta serie estaba llenando un vaco en la informacin y por ello decidimos conti-
Ing. Horacio Daniel Vallejo nuarla. Ya llevamos ms de 8 aos (97 tomos de coleccin) y pensamos que su vida an est en
Editorial QUarK S.r.l. paales.
En diversos tomos nos hemos referido a los microcontroladores pero hasta la fecha poco
Propietaria de los derechos en castellano de la publica- hemos hablado de lenguajes de programacin de alto nivel, es por ello que este libro y la siguien-
cin mensual SabEr ElEctrnica - San Ricardo te edicin tratar este tema de una forma sencilla y con gran contenido prctico.
2072 (1273) - Capital Federal - Buenos Aires -
Argentina - T.E. 4301-8804 Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres uni-
administracin y Negocios dades funcionales de una computadora: CPU, Memoria y Unidades de E/S, es decir, se trata de
Teresa C. Jara (Grupo Quark SRL) una computadora completa en un solo circuito integrado.
Patricia Rivero Rivero (SISA SA de CV)
Margarita Rivero Rivero (SISA SA de CV) Son diseados para disminuir el costo econmico y el consumo de energa de un sistema en
particular. Por eso el tamao de la CPU, la cantidad de memoria y los perifricos incluidos depen-
Staff dern de la aplicacin. El control de un electrodomstico sencillo como una batidora, utilizar un
Liliana Teresa Vallejo
Mariela Vallejo procesador muy pequeo (4 u 8 bit) por que sustituir a un autmata pequeo; en cambio un
Diego Vallejo reproductor de msica y/o vdeo digital (mp3 o mp4) requerir de un procesador de 32 bit o de 64
Luis Alberto Castro Regalado (SISA SA de CV) bit y de uno o mas cdec de seal digital (audio y/o vdeo). El control de un sistema de frenos
Jos Luis Paredes Flores (SISA SA de CV) ABS (Antilock Brake System) se basa normalmente en un microcontrolador de 16 bit, al igual que
Sistemas: Paula Mariana Vidal el sistema de control electrnico del motor en un automvil.
red y Computadoras: Ral Romero Los microcontroladores representan la inmensa mayora de los chips de computadoras ven-
Video y animaciones: Fernando Fernndez didos, un 50% son controladores "simples" y el resto corresponde a procesadores ms especiali-
legales: Fernando Flores
Contadura: Fernando Ducach zados. Un microcontrolador difiere de una CPU normal, en que es ms fcil convertirlo en una
Tcnica y Desarrollo de Prototipos: computadora en funcionamiento, con un mnimo de chips externos de apoyo.
Alfredo Armando Flores Un microcontrolador tpico tendr un generador de reloj integrado y una pequea cantidad
atencin al Cliente
de memoria RAM y ROM/EPROM/EEPROM/FLASH, significando que para hacerlo funcionar,
Alejandro Vallejo todo lo que se necesita son unos pocos programas de control y un cristal de sincronizacin. Los
ateclien@webelectronica.com.ar microcontroladores disponen generalmente tambin de una gran variedad de dispositivos de
entrada/salida, como convertidores de analgico a digital, temporizadores, UARTs y buses de
Internet: www.webelectronica.com.mx
interfaz serie especializados, como I2C y CAN. Frecuentemente, estos dispositivos integrados
Publicidad: pueden ser controlados por instrucciones de procesadores especializados. Los modernos micro-
Rafael Morales controladores frecuentemente incluyen un lenguaje de programacin integrado, como el BASIC
rafamorales@webelectronica.com.ar
que se utiliza bastante con este propsito.
Club Se: Esperamos que esta breve introduccin le sirva como disparador para estudiar el conteni-
grupo Quark Srl do en la espera del prximo texto.
luisleguizamon@webelectronica.com.ar
Hasta el mes prximo!
editorial Quark Srl
San Ricardo 2072 (1273) - Capital Federal
www.webelectronica.com.ar
Sobre loS 2 CDS y Su DeSCarga
La Editorial no se responsabiliza por el contenido de
las notas firmadas. Todos los productos o marcas Ud. podr descargar de nuestra web 2 CDs: Microcontroladores vol. 1 y 2
que se mencionan son a los efectos de prestar un con gran cantidad de circuitos para armar y sistemas para experimentar. Todos los
servicio al lector, y no entraan responsabilidad de
nuestra parte. Est prohibida la reproduccin total o
CDs son productos multimedia completos con un costo de mercado equivalente a 8
parcial del material contenido en esta revista, as co- dlares americanos cada uno y Ud. los puede descargar GRATIS con su nmero de
mo la industrializacin y/o comercializacin de los serie por ser comprador de este libro. Para realizar la descarga deber ingresar a
aparatos o ideas que aparecen en los mencionados
textos, bajo pena de sanciones legales, salvo me- nuestra web: www.webelectronica.com.mx, tendr que hacer clic en el cono pass-
diante autorizacin por escrito de la Editorial. word e ingresar la clave MICro97. Tenga este texto cerca suyo ya que se le har
Impresin: Talleres Babieca - Mxico una pregunta aleatoria sobre el contenido para que pueda iniciar la descarga.
Captulo 1 1
suma edi Club 97.qxd:*Cap 4 - telefonia 05/04/13 14:55 Pgina 2
suMario
Captulo 1 Juego de Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
los sistemas de NumeraCiN . . . . . . . . . . . . . . . .3 Cmo se Debe Elegir un Microcontrolador? . . . . . . . . . . .25
Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Qu Pueden Hacer los Microcontroladores . . . . . . . . . . . . .4 Captulo 2
Nmeros, Nmeros, Nmeros... . . . . . . . . . . . . . . . . . . . . . .6 sistemas de programaCiN:
Sistema de Numeracin Binario . . . . . . . . . . . . . . . . . . . . . .6 leNguaje mikroC . . . . . . . . . . . . . . . . . . . . . . . .27
Sistema de Numeracin Exadecimal . . . . . . . . . . . . . . . . . .7 Lenguajes de Programacin . . . . . . . . . . . . . . . . . . . . . . . .27
Conversin de Sistemas de Numeracin . . . . . . . . . . . . . . .8 Lenguaje Ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Conversin de Nmeros Binarios a Decimales . . . . . . . . . .8 Ventajas de los Lenguajes de Programacin
Conversin de Nmeros Hexadecimales a Decimales . . . . .9 de Alto Nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
Conversin de Nmeros Hexadecimales a Binarios . . . . . . .9 Lenguaje C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Marcar los Nmeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Caractersticas de el Lenguaje mikroC . . . . . . . . . . . . . . . .30
Nmeros Negativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Fases de la Compilacin . . . . . . . . . . . . . . . . . . . . . . . . . . .31
BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Estructura del Programa . . . . . . . . . . . . . . . . . . . . . . . . . . .31
BYTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Detalles Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 Tipos de Datos en mikroC . . . . . . . . . . . . . . . . . . . . . . . . . .34
Componentes Bsicos de la Lgica Digital . . . . . . . . . . . . .11 Variables y Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 mbito de Variables y Constantes . . . . . . . . . . . . . . . . . . .39
Puertos de Entrada / Salida (E/S) . . . . . . . . . . . . . . . . . . . .13
Clases de Almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . .40
Unidad de Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Conversin de Tipos de Datos . . . . . . . . . . . . . . . . . . . . . .44
Unidad Central de Procesamiento
Estructuras de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
(CENTRAL PROCESSOR UNIT - CPU) . . . . . . . . . . . . . . .17
Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Sentencias de Salto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
Comunicacin en Serie . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Tipos de Datos Avanzados . . . . . . . . . . . . . . . . . . . . . . . . .50
Velocidad de Transmisin Serial . . . . . . . . . . . . . . . . . . . . .18
Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
I2C Circuito Inter- Integrado
(INTER INTEGRATED CIRCUIT) . . . . . . . . . . . . . . . . . . .18
SPI - Bus Serial de Interfaz de Perifricos Captulo 3
(SERIAL PERIPHERAL INTERFACE BUS . . . . . . . . . . . . .18 los miCroCoNtroladores piC . . . . . . . . . . . . . .63
Oscilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
Circuito de Alimentacin . Fuente de Alimentacin . . . . . . .19 La Memoria de Programa . . . . . . . . . . . . . . . . . . . . . . . . . .67
Temporizadores Contadores . . . . . . . . . . . . . . . . . . . . . .20 La Memoria de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Cmo Funcionan los Temporizadores? . . . . . . . . . . . . . .20 Los Puertos del PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
Utilizando un Preescalador en el El Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Funcionamiento del Temporizador . . . . . . . . . . . . . . . . . . .21 El Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Utilizando una Interrupcin en el Primeras Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
Funcionamiento del Temporizador . . . . . . . . . . . . . . . . . . .21 GPIC USB: Programador de Microcontroladores
Contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21 PIC y Memorias Eeprom por Puerto USB . . . . . . . . . . . . .70
Temporizador Perro Guardin. WATCHDOG . . . . . . . . . . .22 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
Convertidor Digital Analgico (D/A) . . . . . . . . . . . . . . . . .22 Descripcin del Circuito Electrnico . . . . . . . . . . . . . . . . . .70
Arquitectura Interna de un Microcontrolador . . . . . . . . . . . .23 El Programador Quark Pro 2 . . . . . . . . . . . . . . . . . . . . . . .77
Captulo 1
www.mikroe.com
Captulo 1 3
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:50 Pgina 4
les perifricos externos, tales como memoria, man al ascensor al mismo tiempo? Cul llama-
lneas de entrada/salida, temporizadores u da tiene la prioridad? Cmo solucionar las
otros. El incremento posterior de la densidad de cuestiones de seguridad, de prdida de electrici-
integracin permiti crear un circuito integrado dad, de fallos, de uso indebido?
que contena tanto al procesador como perifri- Lo que sucede despus de resolver estos
cos. As es cmo fue desarrollada la primera problemas bsicos es un proceso meticuloso de
microcomputadora en un solo chip, denominada disear los dispositivos adecuados utilizando un
ms tarde microcontrolador. gran nmero de los chips especializados. Este
Los principiantes en electrnica creen que un proceso puede tardar semanas o meses, depen-
microcontrolador es igual a un microprocesador. diendo de la complejidad del dispositivo.
Esto no es cierto. Difieren uno del otro en Cuando haya terminado el proceso, llega la hora
muchos sentidos. La primera y la ms importan- de disear una placa de circuito impreso y de
te diferencia es su funcionalidad. Para utilizar al montar el dispositivo. Un dispositivo enorme! Es
microprocesador en una aplicacin real, se debe otro trabajo difcil y tardado. Por ltimo, cuando
de conectar con componentes tales como todo est terminado y probado adecuadamente,
memoria o componentes buses de transmisin pasamos al momento crucial y es cuando uno se
de datos. Aunque el microprocesador se consi- concentra, respira profundamente y enciende la
dera una mquina de computacin poderosa, no fuente de alimentacin.
est preparado para la comunicacin con los Esto suele ser el punto en el que la fiesta se
dispositivos perifricos que se le conectan. Para convierte en un verdadero trabajo puesto que
que el microprocesador se comunique con algn los dispositivos electrnicos casi nunca funcio-
perifrico, se deben utilizar los circuitos especia- nan apropiadamente desde el inicio. Preprese
les. As era en el principio y esta prctica sigue para muchas noches sin dormir, correcciones,
vigente en la actualidad. mejoras... y no se olvide de que todava estamos
Por otro lado, al microcontrolador se le dise- hablando de cmo poner en marcha un simple
a de tal manera que tenga todas las compo- ascensor.
nentes integradas en el mismo chip. No necesi- Cuando el dispositivo finalmente empiece a
ta de otros componentes especializados para su funcionar perfectamente y todo el mundo est
aplicacin, porque todos los circuitos necesa- satisfecho, y le paguen por el trabajo que ha
rios, que de otra manera correspondan a los hecho, muchas compaas de desarrollo esta-
perifricos, ya se encuentran incorporados. As rn interesadas en su trabajo. Por supuesto, si
se ahorra tiempo y espacio necesario para cons- tiene suerte, cada da le traer una oferta de tra-
truir un dispositivo. bajo de un nuevo inversionista. Sin embargo, si
lo requieren para trabajar en el control de los
elevadores de un nuevo edificio que tiene cuatro
Qu Pueden Hacer los MIcrocontroladores pisos ms de los que ya maneja su sistema de
control.
Para entender con ms facilidad las razones
del xito tan grande de los microcontroladores, Sabe cmo proceder? Cree acaso que se
vamos a prestar atencin al siguiente ejemplo. pueden controlar las demandas de sus clientes?
Hace unos 10 aos, disear un dispositivo elec- Pensamos que usted va a construir un dispo-
trnico de control de un ascensor de un edificio sitivo universal que se puede utilizar en los edi-
de varios pisos era muy difcil, incluso para un ficios de 4 a 40 pisos, una obra maestra de elec-
equipo de expertos. trnica. Bueno, incluso si usted consigue cons-
truir una joya electrnica, su inversionista le
Ha pensado alguna vez en qu requisitos esperar delante de la puerta pidiendo una
debe cumplir un simple ascensor? Cmo lidiar cmara en el ascensor o una msica relajante
con la situacin cuando dos o ms personas lla- en caso de fallo de ascensor. O un ascensor con
dos puertas. De todos modos, la ley de Murphy mente significa. Es as como se hacan las
es inexorable y sin duda usted no podr tomar cosas hasta aparicin de los microcontroladores
ventaja a pesar de todos los esfuerzos que ha diseados - pequeos, potentes y baratos.
hecho. Por desgracia, todo lo que se ha dicho Desde ese momento su programacin dej de
hasta ahora sucede en la realidad. Esto es lo ser una ciencia, y todo tom otra direccin ...
que dedicarse a la ingeniera electrnica real- El dispositivo electrnico capaz de controlar
Figura 1
Captulo 1 5
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:50 Pgina 6
Si slo pudiramos afirmar (1) o negar (0) pocos voltios). La razn son los ruidos elctricos
que algo existe. La respuesta es nada espe- y fenmenos que se presentan dentro de lo que
cial, seguiramos utilizando los mismos nme- llamamos entorno de trabajo real (algunos
ros de la misma manera que utilizamos hoy en ejemplos de estos fenmenos son los cambios
da, no obstante ellos pareceran un poco dife- imprevisibles de la tensin de alimentacin,
rentes. Por ejemplo: 11011010. cambios de temperatura, tolerancia a los valores
de los componentes etc...). Imagnese una com-
Cuntas son realmente 11011010 pginas putadora que opera sobre nmeros decimales al
de un libro? tratarlos de la siguiente manera: 0=0V, 1=5V,
Para entenderlo, siga la misma lgica como 2=10V, 3=15V, 4=20V... 9=45V
en el ejemplo anterior, pero en el orden inverti-
do. Tenga en cuenta que se trata de aritmtica Alguien dijo bateras?
con slo dos dgitos 0 y 1, es decir, del sistema Una solucin mucho ms fcil es una lgica
de numeracin en base 2 (sistema de numera- binaria donde 0 indica la ausencia de voltaje,
cin binario). Vea la figura 3. mientras que 1 indica la presencia de voltaje.
Simplemente, es fcil de
Figura 3 escribir 0 o 1 en vez de no
hay voltaje o hay voltaje.
Mediante el cero lgico (0) y
uno lgico (1) la electrnica
se enfrenta perfectamente y
realiza con facilidad todas
las operaciones aritmticas.
Evidentemente, se trata de
electrnica que en realidad
aplica aritmtica en la que
todos los nmeros son
representados con slo dos
Evidentemente, se trata del mismo nmero dgitos y donde slo es importante saber si hay
representado en dos sistemas de numeracin voltaje o no. Por supuesto, estamos hablando de
diferentes. La nica diferencia entre estas dos electrnica digital.
representaciones yace en el nmero de dgitos
necesarios para escribir un nmero. Un dgito
(2) se utiliza para escribir el nmero 2 en el sis- sIsteMa de nuMeracIn exadecIMal
tema decimal, mientras que dos dgitos (1 y 0)
se utilizan para escribir aquel nmero en el sis- En el principio del desarrollo de las computa-
tema binario. doras era evidente que a la gente le costaba
mucho trabajar con nmeros binarios. Por eso,
Ahora est de acuerdo que hay 10 grupos se estableci un nuevo sistema de numeracin,
de gente? que utilizaba 16 smbolos diferentes. Es llamado
Bienvenido al mundo de la aritmtica bina- el sistema de numeracin hexadecimal. Este
ria! Tiene alguna idea de dnde se utiliza? sistema est compuesto de 10 dgitos a los que
Excepto en las condiciones de laboratorio estamos acostumbrados (0, 1, 2, 3,... 9) y de
estrictamente controladas, los circuitos electr- seis letras del alfabeto A, B, C, D, E y F.
nicos ms complicados no pueden especificar
con exactitud la diferencia entre dos magnitudes Cul es el propsito de esta combinacin
(dos valores de voltaje, por ejemplo), si son aparentemente extraa?
demasiado pequeos (ms pequeos que unos Basta con mirar cmo todo en la historia de
Captulo 1 7
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:50 Pgina 8
los nmeros binarios encaja perfectamente para mal es el que nos resulta ms comprensible,
lograr una mejor comprensin del tema. Vea la mientras que el sistema hexadecimal presenta
figura 4. un balance entre los dos. Por eso, es muy
importante aprender cmo
Figura 4 convertir los nmeros de
un sistema de numeracin
a otro, por ejemplo, cmo
convertir una serie de
El mayor nmero que puede ser representa- ceros y unos a una forma de representacin
do con 4 dgitos binarios es el nmero 1111. comprensible para nosotros.
Corresponde al nmero 15 en el sistema deci-
mal. En el sistema hexadecimal ese nmero se
representa con slo un dgito F. Es el mayor conversIn de nMeros BInarIos
nmero de un dgito en el sistema hexadecimal. a decIMales
Se da cuenta de la gran utilidad de estas Los dgitos en un nmero binario tienen pon-
equivalencias? deraciones diferentes lo que depende de sus
El mayor nmero escrito con ocho dgitos posiciones dentro del nmero que estn repre-
binarios es a la vez el mayor nmero de dos sentando. Adems, cada dgito puede ser 1 o 0,
dgitos en el sistema hexadecimal. Tenga en y su ponderacin se puede determinar con faci-
cuenta que una computadora utiliza nmeros lidad al contar su posicin empezando por la
binarios de 8 dgitos. Acaso se trata de una derecha. Para hacer una conversin de un
casualidad? nmero binario a decimal es necesario multipli-
car las ponderaciones con los dgitos correspon-
dientes (0 o 1) y sumar todos los resultados. La
cdIgo Bcd magia de la conversin de un nmero binario a
decimal funciona de maravilla... Tiene dudas?
El cdigo BCD (Binary-Coded Decimal - Vea el ejemplo de la figura 5.
Cdigo binario decimal)
es un cdigo binario utili-
zado para representar a
los nmeros decimales. Figura 5
Se utiliza para que los cir-
cuitos electrnicos pue-
dan comunicarse con los perifricos utilizando el Cabe destacar que es necesario utilizar slo
sistema de numeracin decimal o bien utilizando dos dgitos binarios para representar a todos los
el sistema binario dentro de su propio mundo. nmeros decimales de 0 a 3.
Consiste en nmeros binarios de 4 dgitos que Por consiguiente, para representar los nme-
representan los primeros diez dgitos (0, 1, 2, ros de 0 a 7 es necesario utilizar tres dgitos
3...8, 9). Aunque cuatro dgitos pueden hacer 16 binarios, para representar los nmeros de 0 a 15
combinaciones posibles en total, el cdigo BCD - cuatro dgitos etc.
normalmente utiliza a las primeras diez. Dicho de manera sencilla, el mayor nmero
binario que se puede representar utilizando n
dgitos se obtiene al elevar la base 2 a la poten-
conversIn de sIsteMas de nuMeracIn cia n. Luego, al resultado se le resta 1. Por ejem-
plo, si n=4:
El sistema de numeracin binario es el que
utilizan los microcontroladores, el sistema deci- 24 - 1 = 16 - 1 = 15
Por consiguiente, al utilizar 4 dgitos binarios, je? Dependiendo del sistema en cuestin (bina-
es posible representar los nmeros decimales rio, decimal o hexadecimal), el resultado podra
de 0 a 15, que son 16 valores diferentes en total. ser 6, 110 o 272 productos, respectivamente.
Por consiguiente, para evitar equivocaciones,
diferentes prefijos y sufijos se aaden directa-
conversIn de nMeros HexadecIMales mente a los nmeros. El prefijo $ o 0x as como
a decIMales el sufijo h marca los nmeros en el sistema
hexadecimal. Por ejemplo, el nmero hexadeci-
Para realizar una conversin de un nmero mal 10AF se puede escribir as: $10AF, 0x10AF
hexadecimal a decimal, cada dgito hexadecimal o 10AFh. De manera similar, los nmeros bina-
debe ser multiplicado con el nmero 16 elevado rios normalmente obtienen el sufijo % o 0B. Si
al valor de su posicin. Como ejemplo, vea la un nmero no tiene ni sufijo ni prefijo se consi-
representacin de la figura 6. dera decimal. Desafortunadamente, esta forma
de marcar los nmeros no es
Figura 6 estandarizada, por consiguiente
depende de la aplicacin con-
creta. La mostrada en la figura 8
es tabla comparativa que con-
tiene los valores de nmeros 0-
255 representados en tres siste-
mas de numeracin diferentes.
conversIn de nMeros HexadecIMales
aBInarIos
Figura 7
Figura 8
Marcar los nMeros
Captulo 1 9
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:50 Pgina 10
volvindose las cosas ms complicadas. Se uti- el nmero 444 son los mismos pero tienen los
lizan slo dos dgitos - 0 y 1, mientras que todos valores diferentes), el significado de un bit
los dems nmeros, smbolos y signos se for- depende de la posicin que tiene en nmero
man por medio de las combinaciones de estos binario. En los nmeros binarios, sus dgitos se
dos dgitos. En el caso de los nmeros negati- denominan el bit cero (el primer bit a la dere-
vos, la solucin es la siguiente: cha), el primer bit (el segundo bit a la derecha)
etc. Adems, ya que el sistema binario utiliza
En los nmeros negativos, el bit ms signifi- solamente dos dgitos (0 y 1), el valor de un bit
cativo (el bit del extremo izquierdo) representa el puede ser 0 o 1.
signo del nmero (donde 0 ser positivo y 1 No se confunda si se encuentra con un bit
negativo). que tiene el valor 4, 16 o 64. Son los valores
representados en el sistema decimal.
En el caso de un nmero de 8 bits, para Simplemente, nos hemos acostumbrado tanto a
representar un valor numrico slo quedan 7 utilizar los nmeros decimales que estas expre-
bits. De acuerdo a este tipo de codificacin el siones llegaron a ser comunes. Sera correcto
nmero +127 es el mayor nmero positivo con decir por ejemplo, el valor del sexto bit en cual-
signo que se puede representar con 8 bits. quier nmero binario equivale al nmero decimal
Asimismo, hay cero (0) positivo y negativo (refi- 64. Pero todos somos humanos y los viejos
rase a la siguiente tabla). hbitos mueren difcilmente. Adems, cmo le
suena nmero uno-uno-cero-uno-cero...?
BYte
Captulo 1 11
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:50 Pgina 12
disponga de ms de dos entradas, es aplicable con los bits invertidos, figura 15. Si los bits de un
lo siguiente: La salida proporciona un uno lgico byte se consideran nmero, el valor invertido es
(1) si por lo menos una entrada es llevada a alto un complemento a ese nmero.
(1). Si todas las entradas estn a cero lgico (0), El complemento de un nmero es el valor
la salida estar a cero lgico (0) tambin. Vea la que se aade al nmero hasta llegar al mayor
figura 13. nmero binario de 8 dgitos. En otras palabras,
la suma de un dgito de 8 nmeros y de su com-
plemento es siempre 255.
Figura 14
Figura 15
regIstros
Captulo 1 13
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 14
otP roM (one time Programmable roM) pequea escala. Por la gran popularidad de esta
roM programable una sola vez memoria, la mayora de los microcontroladores
La memoria programable una sola vez per- se fabrican con tecnologa flash hoy en da. Si
mite descargar un programa en el chip, pero usted va a comprar un microcontrolador, ste
como dice su nombre, una sola vez. Si se detec- es en definitiva la opcin perfecta!
ta un error despus de descargarlo, lo nico que
se puede hacer es descargar el programa Memoria raM Memoria
correcto en otro chip. de acceso aleatorio
RAM: Random Access Memory. Al apagar la
Figura 22 fuente de alimentacin, se pierde el contenido
de la memoria RAM. Se utiliza para almacenar
temporalmente los datos y los resultados inme-
diatos creados y utilizados durante el funciona-
miento del microcontrolador. Por ejemplo, si el
programa ejecuta la adicin (de cualquier cosa)
es necesario tener un registro que representa lo
que se llama suma en vida cotidiana. Con tal
propsito, uno de los registros de la RAM es
denominado suma y se utiliza para almacenar
los resultados de la adicin.
Memoria Flash
Este tipo de memoria se invent en los aos
80 en los laboratorios de la compaa INTEL,
como forma desarrollada de la memoria UV
EPROM. Ya que es posible escribir y borrar el
contenido de esta memoria prcticamente un
nmero ilimitado de veces, los microcontrolado-
res con memoria Flash son perfectos para estu-
diar, experimentar y para la fabricacin en
Captulo 1 15
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 16
InterruPcIones
La mayora de programas utilizan interrupcio- do varios botones sin parar - las horas, los das,
nes durante ejecucin de programa regular. El esto no sera nada prctico.
propsito del microcontrolador generalmente Por lo tanto, el microcontrolador aprendi un
consiste en reaccionar a los cambios en su truco durante su evolucin. En vez de seguir
entorno. En otras palabras, cuando ocurre algo, comprobando algn pin o bit, el microconrolador
el microcontrolador reacciona de alguna mane- deja su trabajo de esperar a un experto que
ra... Por ejemplo, al apretar el botn del mando reaccionar slo en caso de que suceda algo
a distancia, el microcontrolador lo registra y res- digno de atencin.
ponde al comando cambiando de canal, subien- La seal que informa al procesador central
do o bajando el volumen etc. Si el microcontro- acerca de tal acontecimiento se denomina
lador pasar la mayora del tiempo comproban- INTERRUPCIN.
Captulo 1 17
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 18
Cul es la distancia entre los dispositi- entre ellos es corta (el receptor y el transmisor
vos? estn normalmente en la misma placa de circui-
Es necesario transmitir y recibir los to impreso). La conexin se establece por medio
datos simultneamente? de dos lneas - una se utiliza para transmitir los
datos, mientras que la otra se utiliza para la sin-
Una de las cosas ms importantes en cuanto cronizacin (la seal de reloj).
a la comunicacin en serie es el Protocolo que Como se muestra en la figura 25, un disposi-
debe ser estrictamente observado. Es un con- tivo es siempre el principal (master - maestro), el
junto de reglas que se aplican obligatoriamente que realiza el direccionamiento de un chip
para que los dispositivos puedan interpretar subordinado (slave - esclavo) antes de que se
correctamente los datos que intercambian inicie la comunicacin. De esta manera un
mutuamente. Afortunadamente, los microcontro- microcontrolador puede comunicarse con 112
ladores se encargan de eso automticamente, dispositivos diferentes. La velocidad de transmi-
as que el trabajo de programador/usuario es sin serial es normalmente 100 kb/seg (el modo
reducido a la escritura y lectura de datos. estndar) o 10 Kb/seg (modo de velocidad de
transmisin baja).
Recientemente han aparecido los sistemas
velocIdad de transMIsIn serIal con la velocidad de transmisin serial 3.4
Mb/sec. La distancia entre los dispositivos que
La velocidad de transmisin serial (baud se comunican por el bus I2C est limitada a
rate) es el trmino utilizado para denotar el unos metros.
nmero de bits transmiti-
dos por segundo (bps). Figura 25
El protocolo normal-
mente 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 sPI - Bus serIal de InterFase de PerIFrIcos
ejemplo, si velocidad de transmisin serial es (serIal PerIPHeral InterFace Bus)
300 bps un mximo de 37 y un mnimo de 27
bytes se pueden transmitir por segundo. Un bus serial de interfase de perifricos es
Los sistemas de comunicacin serial ms uti- un sistema para la comunicacin serial que utili-
lizados son: za hasta cuatro lneas (normalmente solo son
necesarias tres) para recibir los datos, para
transmitir los datos, para sincronizar y (opcional)
I2c cIrcuIto Inter- Integrado para seleccionar el dispositivo con el que se
(Inter Integrated cIrcuIt) comunica, figura 26.
Esto es la conexin full duplex, lo que signifi-
Circuito inter-integrado es un sistema para el ca que los datos se envan y se reciben simult-
intercambio de datos serial entre los microcon- neamente.
troladores y los circuitos integrados especializa- La velocidad de transmisin mxima es
dos de generacin. Se utiliza cuando la distancia mayor que en el sistema de conexin I2C.
Captulo 1 19
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 20
brown out reset. El circuito reinicia inmediata- La mayora de los programas utiliza estos
mente el microcontrolador si el voltaje de ali- cronmetros electrnicos en miniatura.
mentacin cae por debajo del lmite. Generalmente son registros SFR de 8 o 16 bits
el pin de reset (reinicio), marcado fre- cuyo contenido se aumenta automticamente
cuentemente con MCLR (Master Clear Reset), con cada pulso.
sirve para el reinicio externo del microcontrola-
dor al aplicar un cero (0) o un uno (1) lgico Una vez que se llena el registro, se genera
dependiendo del tipo del microcontrolador. En una interrupcin!
caso de que el circuito brown out no est incor-
porado, un simple circuito externo para el brown Si el temporizador utiliza el oscilador de cuar-
out reset se puede conectar al pin MCLR. zo interno para su funcionamiento, es posible
medir el tiempo entre dos eventos (el valor de
registro en el momento de iniciar la medicin es
teMPorIzadores contadores T1, en el momento de finalizar la medicin es
T2, el tiempo transcurrido es igual al resultado
El oscilador del microcontrolador utiliza cris- de la resta T2 - T1).
tal de cuarzo para su funcionamiento. Aunque Si los registros se aumentan con los pulsos
no se trata de la solucin ms simple, hay que vienen de la fuente externa, tal temporiza-
muchas razones para utilizarlo. La frecuencia dor se convierte en un contador.
del oscilador es definida con precisin y muy Esto es una explicacin simple de su funcio-
estable, as que siempre genera los pulsos del namiento. Es un poco ms complicado en prc-
mismo ancho, lo que los hace perfectos para tica.
medicin de tiempo. Tales osciladores se utilizan
en los relojes de cuarzo. Si es necesario medir
el tiempo transcurrido entre dos eventos, basta cMo FuncIonan los teMPorIzadores?
con contar los pulsos generados por este oscila-
dor. Esto es exactamente lo que hace el tempo- En la prctica los pulsos generados por el
rizador y su representacin la podemos obser- oscilador de cuarzo son llevados al circuito una
var en la figura 28. vez por cada ciclo de mquina directamente o
por el pre-escalador, lo que aumenta el nmero
Figura 28 en el registro del temporizador.
Si una instruccin (un ciclo de mquina gene-
ralmente) dura cuatro perodos del oscilador de
cuarzo, este nmero ser cambiado un milln de
veces por segundo (cada microsegundo) al
incorporar al cuarzo que oscila con una frecuen-
cia de 4MHz.
Es fcil de medir los intervalos de tiempo cor-
tos de la manera descrita anteriormente (hasta
256 microsegundos porque es el mayor nmero
que un registro puede contener).
Esta obvia desventaja se puede superar de
varias maneras: al utilizar el oscilador ms lento,
por medio de registros con ms bits, del pre-
escalador o de la interrupcin. Las primeras dos
soluciones tienen algunas debilidades as que
se recomienda utilizar el pre-escalador y/o la
interrupcin.
Fifura 30
Captulo 1 21
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 22
teMPorIzador Perro guardIn Las seales del mundo real son muy diferen-
WatcHdog tes de las que entiende el microcontrolador
(ceros y unos), as que deben ser convertidas
El perro guardin es un temporizador conec- para que el microcontrolador pueda entenderlas.
tado a un oscilador RC completamente indepen-
diente dentro del microcontrolador. Figura 32
Si el perro guardin est habilitado, cada vez
que cuenta hasta el mximo valor en el que ocu-
rre el desbordamiento del registro se genera una
seal de reinicio del microcontrolador y la ejecu-
cin de programa inicia en la primera instruc-
cin.
El punto es evitar que eso ocurra al utilizar el
comando adecuado.
La idea se basa en el hecho de que cada pro-
grama se ejecuta en varios bucles, ms largos o
cortos. En la figura 32 podemos observar que entre 0
Si las instrucciones que reinician el tempori- (0V) y 1 (5V) hay varios niveles de tensin
zador perro guardin se colocan en lugares intermedios. Un convertidor analgico-digital es
estratgicos del programa, aparte los comandos un circuito electrnico encargado de convertir
que se ejecutan regularmente, el funcionamien- las seales continuas en nmeros digitales dis-
to del perro guardin no afectar a la ejecucin cretos.
del programa, figura 31. En otras palabras, este circuito convierte un
Si por cualquier razn (ruidos elctricos fre- nmero real en un nmero binario y se lo enva
cuentes en la industria) el contador de programa a la CPU para ser procesado. Este mdulo, figu-
se queda atrapado dentro de un bucle infinito, ra 33, se utiliza para medir el voltaje en el pin de
el valor del registro continuar aumentado, el entrada.
temporizador perro guardin alcanzar el mxi- El resultado de esta medicin es un nmero
mo valor, el registro se desbordar y, aleluya! (el valor digital) utilizado y procesado ms tarde
Ocurre el reinicio! en el programa.
Figura 34
Figura 35
Como todos los datos se intercambian por Uno es de 8 bits de ancho y conecta la CPU
medio de estas 8 lneas, este bus est sobre- con la memoria RAM. El otro consiste en varias
cargado, y la comunicacin por si misma es muy lneas (12, 14 o 16) y conecta a la CPU y la
lenta e ineficaz. memoria ROM. Por consiguiente, la CPU puede
La CPU puede leer una instruccin o leer las instrucciones y realizar el acceso a la
leer/escribir datos de/en la memoria. memoria de datos a la vez.
Los dos procesos no pueden ocurrir a la vez Puesto que todos los registros de la memoria
puesto que las instrucciones y los datos utilizan RAM son de 8 bits de ancho, todos los datos
Captulo 1 23
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 24
dentro del microcontrolador que se intercambian grama est compuesto por una instruccin y un
son de la misma anchura. Durante el proceso de dato. En otras palabras, una localidad de memo-
la escritura de programa, slo se manejan los ria - una instruccin de programa.
datos de 8 bits.
En otras palabras, todo lo que usted podr
cambiar en el programa y a lo que podr afectar Juego de InstruccIones
ser de 8 bits de ancho. Todos los programas
escritos para estos microcontroladores sern El nombre colectivo de todas las instruccio-
almacenados en la memoria ROM interna del nes que puede entender el microcontrolador es
microcontrolador despus de haber sido compi- llamado Juego de Instrucciones, figura 36.
lados a cdigo mquina.
No obstante, estas localidades de memoria
ROM no tienen 8, sino 12, 14 o 16 bits. 4, 6 o 8
bits adicionales representan una instruccin que
especifica a la CPU qu hacer con los datos de
8 bits.
Las ventajas de este diseo son las siguien-
tes:
cil explicar dnde est el aeropuerto si se utili- lo siguiente: cuntas entradas/lneas son nece-
zan las palabras adecuadas tales como: a la sarias para su funcionamiento, realizara el dis-
derecha, a la izquierda, el kilmetro etc. positivo otras operaciones adems
encender/apagar un rel, necesita algn modulo
cIsc (complex Instruction set computer) especializado tal como el de comunicacin en
- computadoras con un juego de instruccio- serie, convertidor A/D etc. Cuando usted tiene
nes complejo una clara imagen de lo que quiere, el rango de
CISC es opuesto a RISC! Los microcontro- seleccin se reduce considerablemente, y le
ladores diseados para reconocer ms de 200 queda pensar en el precio. Va a tener varios
instrucciones diferentes realmente pueden reali- dispositivos? Varios cientos? Un milln? De
zar muchas cosas a alta velocidad. No obstante, todos modos ahora es ms claro.
uno debe saber cmo utilizar todas las posibili- Si est pensando en todas estas cosas por
dades que ofrece un lenguaje tan rico, lo que no primera vez, todo le parecer un poco confuso.
es siempre tan fcil. Por esa razn, vaya paso a paso. Antes que
nada, seleccione al fabricante, es decir, la fami-
lia de microcontroladores que ofrece. Luego,
cMo se deBe elegIr aprenda a trabajar con un modelo particular.
unMIcrocontrolador? Slo aprenda lo que necesite aprender, no entre
demasiado en detalles. Resuelva el problema
Si usted es principiante y ha tomado decisin especfico y le pasar una cosa increble - ser
de trabajar con los microcontroladores. felicita- capaz de manejar cualquier modelo del mismo
ciones por la eleccin! No obstante, a primera fabricante...
vista, no es fcil la eleccin del microcontrolador Ms o menos, todo se parece a montar en
ms adecuado como parece a la primera vista. bicicleta: despus de varias cadas inevitables en
El problema no es el pequeo rango de dispo- el principio, ser capaz de mantener el equilibrio
sitivos a elegir, sino todo lo contrario! y montar en cualquier otra bicicleta. Por supues-
Antes de empezar a disear un dispositivo to, nunca se olvida tanto de montar en bicicleta,
basado en un microcontrolador, tome en cuenta como de la destreza de programacin! J
Captulo 1 25
Cap 1 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:51 Pgina 26
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 27
Captulo 2
SiStemaS de Programacin:
Lenguaje mikroc
Usted seguramente sabe que no es suficiente slo conectar el microcontrolador a los
otros componentes y encender una fuente de alimentacin para hacerlo funcionar,
verdad? Hay que hacer algo ms. 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
Captulo 2 27
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 28
hexadecimales denominada cdigo Hex. En los lenguaje ensamblador tiene algunas desventa-
microcontroladores PIC con las palabras de pro- jas a saber:
grama de 14 bits de anchura, el conjunto de ins-
trucciones tiene 35 instrucciones diferentes. * Incluso una sola operacin en el programa
escrito en ensamblador consiste en muchas ins-
trucciones, hacindolo muy largo y difcil de
Lenguaje ensambLador manejar.
* Cada tipo de microcontrolador tiene su pro-
Como el proceso de escribir un cdigo ejecu- pio conjunto de instrucciones que un programa-
table era considerablemente arduo, en conse- dor tiene que conocer para escribir un programa
cuencia fue creado el primer lenguaje de pro- * Un programador tiene que conocer el hard-
gramacin denominado ensamblador (ASM). ware del microcontrolador para escribir un pro-
Siguiendo la sintaxis bsica del ensamblador, grama
era ms fcil escribir y comprender el cdigo.
Las instrucciones en ensamblador consisten en En la figura 2 podemos observar un progra-
las abreviaturas con significado y a cada ins- ma escrito en C y el mismo programa compilado
truccin corresponde una localidad de memoria. al cdigo ensamblador.
Un programa denominado ensamblador compila Los lenguajes de programacin de alto nivel
(traduce) las instrucciones del lenguaje ensam- (Basic, Pascal, C etc.) fueron creados con el
blador a cdigo mquina (cdigo binario). Vea la propsito de superar las desventajas del ensam-
figura 1. Este programa compila instruccin a blador.
instruccin sin optimizacin. Como permite con- En lenguajes de programacin de alto nivel
trolar en detalle todos los procesos puestos en varias instrucciones en ensamblador se sustitu-
marcha dentro del chip, este lenguaje de pro- yen por una sentencia. El programador ya no
gramacin todava sigue siendo popular. tiene que conocer el conjunto de instrucciones o
caractersticas del hardware del microcontrola-
dor utilizado. Ya no es posible conocer exacta-
Ventajas de Los Lenguajes mente cmo se ejecuta cada sentencia, de
de Programacin de aLto niVeL todas formas ya no importa. Aunque siempre se
puede insertar en el programa una secuencia
A pesar de la gran cantidad de beneficios, el escrita en ensamblador.
Figura 1
Figura 2
Captulo 2 29
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 30
Figura 3
Este lenguaje es muy similar al C estndar, no obstante en determinados aspectos difiere del
ANSI estndar en algunas caractersticas, figura 4. Algunas de estas diferencias se refieren a las
mejoras, destinadas a facilitar la programacin de los microcontroladores PIC, mientras que las
dems son la consecuencia de la limitacin de la arquitectura del hardware de los PIC. Aqu vamos
a presentar caractersticas especficas del lenguaje mikroC en la programacin de los microcontro-
ladores PIC.
Figura 4
El trmino C se utilizar para referirse a las caractersticas comunes de los lenguajes C y mikroC.
Este libro describe una aplicacin muy concreta del lenguaje de programacin C utilizado en el com-
pilador mikroc Pro for Pic. En este caso, el compilador se utiliza para la programacin 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 captulo, veremos otras formas de trabajar con microcontroladores PIC.
Fases de La comPiLacin
Figura 5
El archivo fuente contiene el cdigo en mikroC que usted escribe para programar el microcon-
trolador. El preprocesador se utiliza automticamente por el compilador al iniciarse el proceso de la
compilacin. El compilador busca las directivas del preprocesador (que siempre empiezan por #)
dentro del cdigo y modifica el cdigo fuente de acuerdo con las directivas.
En esta fase se llevan a cabo inclusin de archivos, definicin de constantes y macros etc., lo
que facilita el proceso.
Ms tarde vamos a describir estas directivas en detalle. El analizador sintctico (parser) elimi-
na toda la informacin intil del cdigo (comentarios, espacios en blanco). Luego, el compilador
traduce el cdigo a un archivo binario denominado archivo .mcl. El enlazador (linker) recupera toda
la informacin requerida para ejecutar el programa de los archivos externos y la agrupa en un solo
archivo (.dbg).
Adems, un proyecto puede contener ms de un archivo fuente y el programador puede utilizar
funciones predefinidas y agrupadas dentro de los archivos denominados libreras. Por ltimo, el
generador .hex produce un archivo .hex. Es el archivo que se va a cargar en el microcontrola-
dor.
El proceso entero de la compilacin que incluye todos los pasos anteriormente descritos se le
denomina building.
Captulo 2 31
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 32
por medio de varios conductores. En consecuencia, el programa se divide en cuatro partes, de las
que cada una corresponde a una accin especfica:
Figura 7
La manera de escribir el cdigo en C es muy importante. Por ejemplo, C difiere entre minscu-
las y maysculas, as que la funcin main() no se puede escribir MAIN() o Main(). Adems, note
que dos lneas del cdigo dentro de la funcin terminan con un punto y coma. En C todas las sen-
tencias deben terminar con un punto y coma ;, as el compilador puede aislarlas y traducirlas a
cdigo mquina.
Para comprender mejor esta estructura mire la figura 8 en la que se expresan diferentes obser-
vaciones dentro del programa.
Figura 8
comentarios
Los comentarios son las partes del programa utilizados para aclarar las instrucciones de pro-
grama o para proporcionar ms informacin al respecto. El compilador no hace caso a los comen-
tarios y no los compila al cdigo ejecutable.
Dicho de manera sencilla, el compilador es capaz de reconocer los caracteres especiales utili-
zados para designar dnde los comentarios comienzan y terminan y no hace nada de caso al texto
entre ellos durante la compilacin. Hay dos tipos de tales caracteres. Unos designan los comenta-
rios largos que ocupan varias lneas de programa marcados por la secuencia especial /*...*/, mien-
tras que otros designan los comentarios cortos que caben en una sola lnea //. Aunque los comen-
tarios no pueden afectar a la ejecucin 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.
Captulo 2 33
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 34
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 tamao de dato (nmero de bytes reque-
rido en la memoria) y su representacin. Hay varios tipos de datos que se pueden utilizar en el len-
guaje de programacin mikroc dependiendo del tamao 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 bsica.
Tabla 1
Al aadir un prefijo (calificador) a cualquier tipo de dato entero o carcter, el rango de sus posi-
bles valores cambia as como el nmero 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 slo positivo. Note en la tabla 2 que el prefijo es opcional.
Tabla 2
Hexadecimal (base 16): el nmero empieza con 0x (o 0X). Los enteros hexadecimales consis-
ten en los dgitos (de 0 a 9) y/o las letras (A, B, C,D, E, F). Por ejemplo: 0x1A.
Decimal (base 10): el nmero consiste en los dgitos (de 0 a 9). El primer dgito no puede ser
0. En este formato, se puede introducir el signo de nmero (+ o -). Por ejemplo: 569, -25, +1500.
Octal (base 8): los nmeros se representan a base 8 utilizando slo 8 dgitos (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 continuacin un juego de sentencias que pueden corresponder a una parte de un progra-
ma en la que se muestran los diferentes formatos:
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
59 // entero
'p' // carcter ASCII 'p'
Una secuencia de caracteres es denominada cadena (string). Las cadenas estn encerradas
entre comillas dobles:
VariabLes y constantes
definiciones
Una variable es un objeto nombrado capaz de contener un dato que puede ser modificado duran-
te la ejecucin de programa. En C, las variables tienen tipo, que significa que es necesario especi-
ficar 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.
Captulo 2 35
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 36
Una constante tiene las mismas caractersticas que una variable excepto el hecho de que su
valor asignado no puede ser cambiado durante la ejecucin de programa. A diferencia de las varia-
bles, 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
automticamente el tipo de dato de una constante, as que no es necesario especificar el tipo adi-
cionalmente.
Cada variable o constante debe tener un identificador que lo distingue de otras variables y cons-
tantes. Refirase a los ejemplos anteriores, a y a son identificadores.
* Los identificadores pueden incluir cualquiera de los caracteres alfabticos A-Z (a-z), los dgitos
0-9 y el carcter subrayado _. El compilador es sensible a la diferencia entre minsculas y mays-
culas. Los nombres de funciones y variables se escriben con frecuencia con minsculas, mientras
que los nombres de constantes se escriben con maysculas.
* Los identificadores no pueden empezar con un dgito.
* Los identificadores no pueden coincidir con las palabras clave del lenguaje mikroC, porque son
las palabras reservadas del compilador.
Tabla 3
temperatura_V1 // OK
Presin // OK
no_corresponder // OK
dat2string // OK
SuM3 // OK
_vtexto // OK
7temp // NO -- no puede empezar con un nmero
%ms_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
declaracin 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 ms bytes).
Al escribir un programa, usted sabe qu tipo de datos quiere utilizar y qu tipo de datos espera como
resultado de una operacin, mientras que el compilador no lo sabe. No se olvide de que el progra-
ma maneja las variables con los nombres asignados. El compilador las reconoce como nmeros en
la memoria RAM sin conocer su tamao y formato. Para mejorar la legibilidad de cdigo, las varia-
bles se declaran con frecuencia al principio de las funciones:
<tipo> variable;
Aparte del nombre y del tipo, a las variables se les asignan con frecuencia los valores iniciales
justamente enseguida de su declaracin. Esto no es un paso obligatorio, sino una cuestin de bue-
nas 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 funcin. 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 ejecucin de programa.
Captulo 2 37
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 38
En el ejemplo anterior, peso1 no se puede representar con un nmero con punto decimal o un
nmero con valor negativo.
declaracin de constantes
Similar a las variables, las constantes deben ser declaradas antes de ser utilizadas en el pro-
grama. 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 declaracin. Dos siguientes declaraciones son equivalentes:
Las constantes de enumeracin son un tipo especial de constantes enteras que hace un pro-
grama ms comprensible al asignar los nmeros ordinales a las constantes. Por defecto, el valor 0
se asigna automticamente a la primera constante entre llaves, el valor 1 a la segunda, el valor 2 a
la tercera etc.
int Velocidad_de_ascensor
enum motor_de_ascensor {PARADA,INICIO,NORMAL,MXIMO};
Velocidad_de_ascensor = NORMAL; // Velocidad_de_ascensor = 2
La palabra clave typedef le permite crear con facilidad los nuevos tipos de datos, as, por ejem-
plo, podemos escribir la siguiente sentencia:
typedef unsigned int positivo; // positivo es un sinnimo 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
Figura 9
A las variables globales se les puede acceder de cualquier parte en el cdigo, an 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 estn declaradas en el principio del cuerpo de funcin (igual que en la funcin
main) su mbito est entre el punto de declaracin y el fin de esa funcin. Refirase al ejemplo
anterior. A las variables locales declaradas en main() no se les puede acceder desde la Funcin_1
y al revs.
Un bloque compuesto es un grupo de declaraciones y sentencias (que pueden ser bloques tam-
bin) encerradas entre llaves. Un bloque puede ser una funcin, una estructura de control etc. Una
variable declarada dentro de un bloque se considera local, o sea, existe slo dentro del bloque. Sin
embargo, las variables declaradas fuera del mbito todava 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 excepcin de las constantes globales
(declaradas fuera de cualquier funcin). Las constantes se declaran normalmente en el inicio del
cdigo fuera de cualquier funcin (como variables globales).
Captulo 2 39
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 40
cLases de aLmacenamiento
Las clases de almacenamiento se utilizan para definir el mbito y la vida de variables, constan-
tes y funciones dentro de un programa. En mikroC se pueden utilizar diferentes clases de almace-
namiento:
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 funcin declarada en otro
archivo. Por supuesto, para compilar y enlazar este archivo correctamente, el mismo debe ser inclui-
do 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 funcin declaradas se usa en File_2.
File 1:
extern int cnt; // Variable cnt es visible en File_1
extern void hello(); // Funcin hello()se puede utilizar en File_1
void main(){
PORTA = cnt++; // Cualquier modificacin de cnt en File_1 ser visible en File_2
hello(); // Funcin hello()se puede llamar desde aqu
}
File 2:
int cnt = 0;
void hello();
oPeradores
Un operador es un smbolo que denota una operacin aritmtica, lgica u otra operacin parti-
cular. Dicho de manera sencilla, varias operaciones aritmticas y lgicas se realizan por medio de
operadores aritmticos
Los operadores aritmticos se utilizan en las operaciones aritmticas y siempre devuelven resul-
tados numricos. Hay dos tipos de operadores, los unitarios y los binarios. A diferencia de las ope-
raciones unitarias que se realizan sobre un operando, las operaciones binarias se realizan sobre
dos operandos. En otras palabras, se requieren dos nmeros para ejecutar una operacin binaria.
Por ejemplo: a+b o a/b. Vea en la tabla 4 cules son los operadores aritmticos:
Tabla 4
operadores de asignacin
Hay dos tipos de asignacin en el lenguaje C:
* Los operadores simples asignan los valores a las variables utilizando el carcter comn =. Por
ejemplo: a =8
* Las asignaciones compuestas son especficas para el lenguaje C. Consisten en dos caracte-
res como se muestra en la tabla 5.
Tabla 5
Captulo 2 41
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 42
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 propsito de comparar dos
valores, tabla 7.
Tabla 7
int prop;
int var = 5;
prop = var < 10; // Expresin es evaluada como verdadera, prop = 1
En mikroC, si una expresin es evaluada como falsa (false), el operador devuelve 0, mientras
que si una oracin es evaluada como verdadera (true), devuelve 1. Esto se utiliza en expresiones
tales como si la expresin es evaluada como verdadera, entonces...
operadores Lgicos
Hay tres tipos de operaciones lgicas en el lenguaje C: y (and) lgico, o (or) lgico y nega-
cin - no (not) lgico. Los operadores lgicos devuelven verdadero (1 lgico) si la expresin eva-
luada es distinta de cero. En caso contrario, devuelve falso (0 lgico) si la expresin evaluada equi-
vale a cero. Esto es muy importante porque las operaciones lgicas se realizan generalmente sobre
las expresiones, y no sobre las variables (nmeros) particulares en el programa. Por lo tanto, las
operaciones lgicas se refieren a la veracidad de toda la expresin.
Por ejemplo: 1 && 0 es igual a (expresin verdadera) && (expresin falsa)
El resultado 0, o sea - Falso en ambos casos. En la tabla 8 tiene la correspondencia de estos
operadores lgicos.
Tabla 8
Tabla 9
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 parntesis. Si es necesario, se pueden uti-
lizar los parntesis mltiples (anidados).
Captulo 2 43
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 44
Tabla 10
Algunas operaciones implican conversin 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 conversin automtica cuando se requiera. Si dos operandos de tipo dife-
rente se utilizan en una operacin aritmtica, el tipo de operando de la prioridad ms baja se con-
vierte automticamente en el tipo de operando de la prioridad ms alta. Los tipos de datos princi-
pales se colocan segn el orden jerrquico mostrado en la figura 11.
Para realizar una conversin explcita, antes de escribir una expresin o una variable hay que
especificar el tipo de resultado de operacin entre parntesis:
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 expresin. En otras palabras, Si se cum-
ple la condicin (...), se debe hacer (...). De lo contrario, si la condicin 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.
if(expresin) operacin;
if(expresin)
operacin1
else
operacin2
Si operacin1 u operacin2 est compuesta, escriba una lista de sentencias encerradas entre
llaves. Por ejemplo:
Captulo 2 45
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 46
if(expresin) {
... //
... // operacin1
...} //
else
operacin2
operador switch
A diferencia de la sentencia if-else que selecciona entre dos opciones en el programa, el ope-
rador switch permite elegir entre varias opciones. La sintaxis de la sentencia switch es:
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 eje-
cutarn las operaciones que siguen al operador default.
Tambin es posible comparar una expresin con un grupo de constantes. Si coincide con algu-
na de ellas, se ejecutarn las operaciones apropiadas:
bucLes
A menudo es necesario repetir una cierta operacin un par de veces en el programa. Un con-
junto de comandos que se repiten es denominado un bucle de programa. Cuntas veces se ejecu-
tar, es decir cunto 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(expresin){
comandos
...
}
Los comandos se ejecutan repetidamente (el programa se queda en el bucle) hasta que la expre-
sin llegue a ser falsa.
Si la expresin 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 condicin sigue sin
cambios dentro del bucle. La ejecucin 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:
Captulo 2 47
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 48
bucle For
El bucle for se parece a lo siguiente:
La ejecucin de esta secuencia de programa es similar al bucle while, salvo que en este caso el
proceso de especificar el valor inicial (inicializacin) se realice en la declaracin. La expresin_ ini-
cial especifica la variable inicial del bucle, que ms tarde se compara con la expresin_ de_condi-
cin antes de entrar al bucle. Las operaciones dentro del bucle se ejecutan repetidamente y des-
pus de cada iteracin el valor de la expresin_inicial se incrementa de acuerdo con la regla cam-
biar_expresin. La iteracin contina hasta que la expresin_de_condicin llegue a ser falsa.
La operacin se ejecutar cinco veces. Luego, al comprobar se valida que la expresin k<5 sea
falsa (despus 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
operacin
while (cambiar_condicin);
La expresin cambiar_condicin se ejecuta al final del bucle, que significa que operacin se eje-
cuta como mnimo una vez sin reparar en que si la condicin 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 cdigo visualiza hello en un
LCD 10 veces con un retardo de un segundo. Note que en este ejemplo se utilizan funciones pre-
definidas, que se encuentran en las libreras 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.
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); // Condicin
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 tambin. En
stas la sentencia break se utiliza para salir de las sentencias switch si la condicin case es verda-
dera. En este ejemplo, Esperar est parpadeando en la pantalla LCD hasta que el programa detec-
te un uno lgico en el pin 0 del puerto PORTA.
sentencia continue
La sentencia continue colocada dentro de un bucle se utiliza para saltar una iteracin. A dife-
rencia de la sentencia break, el programa se queda dentro del bucle y las iteraciones continan.
Captulo 2 49
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 50
Delay_ms(1000);
x++;
continue; // Despus de esta lnea, saltar a la sentencia while con x=8
}
sentencia goto
La sentencia goto le permite hacer un salto absoluto al otro punto en el programa. Esta caracte-
rstica se debe utilizar con precaucin ya que su ejecucin puede causar un salto incondicional sin
hacer caso a todos los tipos de limitaciones de anidacin. El punto destino es identificado por una
etiqueta, utilizada como un argumento para la sentencia goto. Una etiqueta consiste en un identifi-
cador vlido 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 lnea de programa
// Aire acondicionado
...
Aire acondicionado: // Desde aqu sigue la parte del cdigo que se ejecutar
// en caso de una concentracin de CO2 demasiado alta
... // en el ambiente
matrices
Una matriz es una lista de elementos del mismo tipo colocados en localidades de memoria con-
tiguas. Cada elemento es referenciado por un ndice. Para declarar una matriz, es necesario espe-
cificar el tipo de sus elementos (denominado tipo de matriz), su nombre y el nmero de sus ele-
mentos encerrados entre corchetes. Todos los elementos de una matriz tienen el mismo tipo.
Los elementos de una matriz se identifican por su posicin. En C, el ndice va desde 0 (el primer
elemento de una matriz) a N-1 (N es el nmero de elementos contenidos en una matriz). El compi-
lador tiene que saber cuntas localidades de memoria debe alojar al declarar una matriz.
El tamao de una matriz no puede ser una variable. Por eso, se pueden utilizar dos mtodos:
// mtodo 1
int display [3]; // Declaracin de la matriz display capaz de contener 3 enteros
// mtodo 2
const DGITOS = 5;
char Matriz_nueva[DGITOS]; // Declaracin de la matriz Matriz_nueva
// capaz de contener 5 enteros
Para leer o modificar un elemento de matriz del ejemplo anterior, basta con introducir su ndice
encerrado entre corchetes:
El siguiente programa cambia el orden de los elementos de una matriz. Note que el ndice se
puede expresar mediante variables y operaciones bsicas.
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
matrices bidimensionales
Aparte de las matrices unidimensionales que se pueden interpretar como una lista de valores, el
lenguaje C le permite declarar matrices multidimensionales.
Captulo 2 51
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 52
En esta parte vamos a describir slo las matrices bidimensionales, tambin denominadas tablas
o matrices. Una matriz bidimensional se declara al especificar el tipo de dato de matriz, el nombre
de matriz y el tamao de cada dimensin.
int Tabla [3][4]; // Tabla se define de modo que tenga 3 filas y 4 columnas
___________________________
3 42 1
7 7 19
Punteros
Un puntero es una variable destinada a recibir una direccin. Un puntero apunta a una locali-
dad de memoria, referenciada por una direccin. En C, la direccin de un objeto se puede obtener
por medio un operador unitario &. Para acceder al contenido de la memoria en una direccin espe-
cfica (tambin llamado objeto apuntado), se utiliza un operador de indireccin (*).
tipo_de_variable *puntero;
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 inicializacin es muy recomendable:
puntero = &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 bsicas sobre los punteros (aritmtica
de punteros), es fcil manejar los elementos de una matriz.
Fjese en la diferencia entre *v+1 y *(v+1) en el siguiente ejemplo:
Los punteros tambin pueden ser declarados con el prefijo const. En este caso, su valor no
puede ser modificado despus de la inicializacin, similar a una constante.
A diferencia de C, el mikroC no admite alojamiento dinmico.
estructuras
Ya hemos visto cmo agrupar los elementos dentro de matrices. No obstante, al utilizar este
mtodo 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:
Captulo 2 53
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 54
struct nombre_de_estructura {
tipo1_de_miembro1 miembro1;
tipo2_de_miembro2 miembro2;
tipo3_de_miembro3 miembro3;
..
};
struct generador {
int voltaje;
char corriente;
};
Entonces, podr definir los objetos denominados turbina en el cdigo. A cada uno de estos tres
objetos (turbinas) se le asignan las variables corriente y voltaje.
turbina_3.voltaje = 150;
turbina_3.corriente = 12;
Por supuesto, igual que al utilizar los punteros, todava 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 inicializacin de los
miembros de estructura por medio de las llaves. Por ejemplo, conjunto_1 ={15,m}; devuelve un
error en mikroC.
Funciones
Una funcin 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 ms facilidad. Adems, las funciones nos permiten utilizar las destrezas y el conocimiento de
otros programadores. Una funcin se ejecuta cada vez que se llame dentro de otra funcin. En C,
un programa contiene como mnimo una funcin, la funcin main(), aunque el nmero de funciones
es normalmente mayor. Al utilizar funciones el cdigo se hace ms corto ya que es posible llamar
una funcin tantas veces como se necesite. En C, el cdigo normalmente consiste en muchas fun-
ciones. No obstante, en caso de que su programa sea muy corto y simple, puede escribir todas las
sentencias dentro de la funcin principal.
Funcin Principal
La funcin principal main() es una funcin particular puesto que es la que se ejecuta al iniciar el
programa. Adems, el programa termina una vez completada la ejecucin de esta funcin. El com-
pilador reconoce automticamente esta funcin y no es posible llamarla por otra funcin. La sinta-
xis de esta funcin es la siguiente:
..
.
};
Esto significa que f es una funcin que recibe un nmero real x como parmetro y devuelve 2*x-
y. La misma funcin en C se parece a lo siguiente:
Cada funcin debe ser declarada apropiadamente para poder interpretarla correctamente duran-
te el proceso de compilacin. La declaracin contiene los siguientes elementos:
Note que una funcin no necesita parmetros (funcin main() por ejemplo), pero debe estar entre
parntesis. En caso contrario, el compilador malinterpretara la funcin. Para hacerlo ms claro, puede
sustituir el espacio en blanco encerrado entre parntesis por la palabra clave void: main (void).
Captulo 2 55
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 56
Valor devuelto
Una funcin puede devolver un valor (esto no es obligatorio) por medio de la palabra clave
return. Al llegar a return, la funcin evala un valor (puede ser una expresin) y lo devuelve a la lnea
de programa desde la que fue llamada.
Una funcin no puede devolver ms de un valor, pero puede devolver un puntero o una estruc-
tura. Tenga cuidado al utilizar matrices y punteros. El siguiente ejemplo es un error tpico:
Si la funcin no devuelve ningn valor, la palabra void debe ser utilizada como un tipo de resul-
tado en la declaracin. En este caso, la sentencia return no debe ser seguida por ninguna expre-
sin. Puede ser omitida como en el siguiente ejemplo:
tipo de resultado
nombre de funcin
tipos de parmetros
un punto y coma (;)
Cuando se llama una funcin, el programa salta a la funcin llamada, la ejecuta, despus vuel-
ve a la lnea desde la que fue llamada.
Captulo 2 57
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 58
El primer mtodo, denominado paso por valor, es el ms fcil. En este caso, los parmetros se
pueden considerar como variables locales de la funcin. Cuando se llama una funcin, el valor de
cada parmetro se copia a un nuevo espacio de memoria reservado durante la ejecucin de la fun-
cin. Como los parmetros se consideran como variables locales por el compilador, sus valores
pueden ser modificados dentro de la funcin, pero sus modificaciones no se quedan en la memoria
una vez completada la ejecucin de la funcin.
Tenga en cuenta de que la funcin devuelve un valor, y no una variable. Adems, se crean copias
de los valores de los parmetros, por lo que sus nombres en la funcin f pueden ser diferentes de
los parmetros utilizados en la main(). La mayor desventaja del paso por el valor es que la nica
interaccin que una funcin tiene con el resto del programa es el valor devuelto de un solo resulta-
do (o la modificacin de las variables globales).
El otro mtodo, denominado paso por direccin le permite sobrepasar este problema. En vez de
enviar el valor de una variable al llamar a funcin, se debe enviar la direccin de memoria del valor.
Entonces, la funcin llamada ser capaz de modificar el contenido de esta localidad de memoria.
void main() {
int maximum, input[SIZE] = {5,10,3,12,0}; // Declaracin de variables en la matriz
maximum = sort(input); // Llamar a funcin y asignarle el mximo
// valor a la variable maximum
}
En este ejemplo, por medio de una funcin se realizan dos operaciones: ordena los miembros
de la matriz por valor asdendente y devuelve el mximo valor.
Para utilizar una matriz en una funcin es necesario asignar la direccin a la matriz (o a su pri-
mer miembro). Vea el siguiente ejemplo:
void main()
{
double promedio1, promedio2; // Declaracin de las variables promedio1
// y promedio2
int voltaje [NMERO_DE_MEDICIONES] = {7,8,3,5,6,1,9}; // Declaracin de la
// matriz voltaje
promedio1 = mtodo_1(&voltaje[0]); // Parmetro de la funcin es la direccin
// del primer miembro
promedio2 = mtodo_2(voltaje); // Parmetro de la funcin es la direccin de
// la matriz
}
//
float mtodo_1(int voltaje[]) // Inicio de la funcin mtodo_1
{
int i, suma; // Declaracin de las variables locales i y suma
return(suma/NMERO_DE_MEDICIONES);
}
//
float mtodo_2 (int *voltaje) //Inicio de la funcin mtodo_2
{
int i, suma; // Declaracin de las variables locales i y suma
return(suma/NMERO_DE_MEDICIONES);
}
Las funciones mtodo_1 y mtodo_2 son completamente equivalentes. Las dos devuelven el
valor promedio de la matriz voltaje[].
Despus de declararla, la direccin del primer miembro se puede escribir como voltaje o &vol-
taje[0].
Captulo 2 59
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 60
El preprocesador es un programa que procesa el cdigo antes de que pase por el compilador.
Funciona bajo el control de las lneas de comando del preprocesador denominadas directivas. Las
directivas del preprocesador se colocan en el cdigo fuente, normalmente en el principio del archivo.
Antes de pasar por el compilador, el cdigo fuente se examina por el preprocesador que detecta y eje-
cuta todas las directivas del preprocesador. Las directivas del preprocesador siguen a una regla de la
sintaxis especial, empiezan por un smbolo # y no requieren ningn punto y coma al final (;).
Tabla 11
* Definiciones de macro
* Inclusiones de archivos
* Control de compilacin
Ahora, vamos a presentar slo las directivas del preprocesador utilizadas con ms frecuencia.
Sin embargo, no es necesario saber todas ellas para programar microcontroladores. Slo tenga en
cuenta que el preprocesador es una herramienta muy poderosa para los programadores avanzados
en C, especialmente para el control de compilacin.
Tanque_1 = (((Dimetro/2)*(Dimetro/2)*PI)*altura;
Por medio de la directiva #undef es posible quitar una definicin de nombre de macro. As se
especifica que la substitucin que se ha definido anteriormente ya no va ocurrir en el siguiente cdi-
go. Esto es til cuando usted quiere restringir la definicin slo a una parte particular del programa.
inclusin de archivos
La directiva de preprocesador #include copia un archivo especfico en el cdigo fuente. El cdi-
go incluido debe observar la sintaxis de C para ser compilado correctamente.
Hay dos formas de escribir estas directivas. En el primer ejemplo, slo 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 mtodo es ms
rpido).
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 coleccin del Club Saber Electrnica vamos a presentar las caractersticas especfi-
cas del mikroC con el propsito de facilitar la programacin de los microcontroladores PIC. J
Captulo 2 61
Cap 2 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:53 Pgina 62
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 63
Captulo 3
Captulo 3 63
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 64
Tambin aclaramos que en el prximo tomo realizar otra tarea alternativa; cuando la termina
de la coleccin Club Saber Electrnica vuelve a su programa original).
analizaremos a un PIC de mejores caractersti- Analicemos el bloque ms grande (tempori-
cas como el PIC 16F887. zadores), en ste observamos un grupo de blo-
ques dedicados a mejorar el funcionamiento pe-
Ahora bien, la mayora de los microcontrola- ro sin influir directamente en el flujo de seales.
dores (sean de Microchip, o de National, Moto- Vemos un temporizador de encendido, un tem-
rola, Philips, etc.) se comportan de forma similar, porizador de arranque del oscilador de CLOCK,
por ello nos vamos a referir a los microcontrola- un circuito de reset y un circuito llamado de vigi-
dores PIC16F84 cuya arquitectura interna pue- lancia o WATCHDOG. Los dos primeros bloques
de observarse en la figura 3. procuran un arranque ordenado para no produ-
Observe primero los bloques externos. Exis- cir una carga al mismo tiempo sobre la fuente.
te un cristal que se conecta en OSC1 y OSC2 Por ltimo, existe un circuito con un nombre cu-
para generar el CLOCK del sistema. Luego una rioso: perro guardin. Su funcin es estar vigi-
seal de entrada llamada MCLR negada, que es lante el mximo de tiempo que tarda el micropro-
un nombre de fantasa para nuestro conocido cesador en completar su programa (o mejor se-
RESET (debido a que esa pata tiene un doble ra decir, la derivacin ms larga de su progra-
uso) y, por ltimo, dos puertos paralelos de I/O ma) y en caso de superarse ese tiempo, provo-
(entrada o salida) llamados puerto A y puerto B. car un reset automtico porque el microprocesa-
Una de las patas del puerto A puede ser utiliza- dor se qued trabado en alguna parte de su pro-
da como entrada de interrupciones (esta pata grama. Tambin se dice que el microprocesador
especial hace que el microprocesador deje de se qued colgado o congelado.
realizar la tarea que estaba ejecutando y pase a Este bloque de circuitos no trabaja indepen-
Figura 3
Captulo 3 65
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 66
dientemente sino que requiere conexiones al ex- gistro W (de Work = trabajo) el segundo es el
terior y al interior del dispositivo. Por ejemplo, no presente en el instante en que se invoca la me-
siempre son utilizados y es el programa quien moria de datos. Como las operaciones pueden
determina su utilizacin y adems ajusta sus pa- ser encadenadas (cuando el resultado sirve co-
rmetros. Esto se realiza a travs del bloque de mo operando de la siguiente operacin, tal como
control o decodificador de instrucciones. el caso de un producto) el registro W tiene un re-
Analicemos ahora la seccin de arriba a la iz- torno a la ALU. Vemos adems que la ALU est
quierda en donde observamos la memoria de comandada por el bloque MUX (MUltipleXador).
programa, el contador de programa, el registro En efecto, la ALU requiere que se le enven n-
de instrucciones y la pila o STACK de 8 niveles. meros para procesar que le lleguen desde la
Cuando hablamos de registros nos referimos a memoria de datos, pero antes se la debe predis-
pequeas unidades de memoria transitoria, poner para que efecte la operacin requerida
construida por lo general, con un registro de (comparacin, rotacin de dgitos, etc.).
desplazamiento. Son memorias voltiles que se El registro de estado o estatus colabora du-
utilizan para guardar informacin por un tiempo rante las operaciones matemticas. Piense c-
mnimo, con el fin de realizar una operacin mo opera Ud. para realizar una resta: primero
compleja de varios pasos. ubica el primer nmero, luego el segundo y des-
El contador de programa es el responsable pus comienza a analizar los bits menos signifi-
de que el microprocesador vaya analizando las cativos (las unidades), pero si el nmero de arri-
instrucciones en orden ascendente. Este guarda ba es menor que el nmero de abajo, entonces
el nmero de instruccin en el STACK y la ins- toma prestado de la columna de las decenas,
truccin misma la pasa al registro de instruccio- luego debe recordar esto porque el nmero de
nes desde donde se enva al resto del micropro- arriba en la columna de las decenas se redujo
cesador. El STACK es, en realidad, una pila de en una unidad. En realidad, aunque se trate de
registros (en nuestro ejemplo hay 8), debido a una operacin entre dos nmeros su ejecucin
que el programa puede tener derivaciones (en la requiere guardar lo que se llama acarreo en otro
jerga LOOPS, rulos o subprogramas). Cuando registro y ste no es otra cosa ms que el regis-
se termina de ejecutar un loop se debe volver al tro STATUS.
mismo punto del programa en donde se haba El PIC16F84 contiene adems de todo lo vis-
producido la bifurcacin y eso es posible porque to, una memoria RAM de registros que puede
ese nmero de instruccin qued guardado en ser llamada desde el registro de instruccin a
uno de los registros de la pila. Es comn que un travs de un multiplexador de direcciones. Esta
loop tenga, a su vez, un loop secundario y cuan- seccin slo se utiliza en desarrollos avanzados.
do se ejecuta ese loop secundario se debe vol- Ahora bien, un microcontrolador sin programa
ver al mismo punto del loop primario, eso se no sabe hacer nada, es como un nio recin na-
consigue con guardar ese nmero de instruccin cido; tiene algunos reflejos condicionados como
del loop secundario en otro registro de la pila. el de succin que le permite alimentarse pero no
Analicemos ahora la seccin inferior dere- sabe hacer ms que eso. Nosotros deberemos
cha. En ese sector se ubican los bloques res- ensearle a realizar acciones y lo vamos a hacer
ponsables de efectuar operaciones matemticas como a un beb, paso a paso. Su capacidad de
y lgicas binarias; recordemos que el nombre aprendizaje es enorme y sumamente variada.
ALU proviene de Aritmetic Logic Unite (unidad Le vamos a ensear a llorar a intervalos regula-
arimtica y lgica). En este sector es imprescin- res, a encender luces, a sumar, a restar, etc.
dible utilizar un registro ya que una operacin Ensearle significa programarlo y eso se rea-
aritmtica o lgica siempre se efecta entre dos liza con una plaqueta de programacin que de-
nmeros. Los nmeros binarios que deben pro- pende de cada marca y modelo de microcontro-
cesarse se toman de la memoria de datos, el pri- lador. Antiguamente los microprocesadores te-
mero se acumula en el registro de trabajo o re- nan una ventanita transparente y era necesario
La MeMorIa de datos
Captulo 3 67
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 68
Figura 6
ria de lectura y escritura de 64. De estos 64 re- te). Como puerto de salida, una pata puede to-
gistros, los primeros 12 son fijos y cumplen un mar 25mA del circuito o entregar 20mA al mis-
propsito determinado, en tanto que desde el 13 mo, sin embargo, en el puerto A slo se pue-
hasta el 64 son registros de propsito general, den consumir 80mA en total o entregar 50mA,
en donde el programa puede indicar que se al- esto significa que slo algunas patas pueden
macene un dato para ser tomado ms tarde. trabajar al mximo porque si todas lo hicieran (y
Adems, posee un conjunto de memoria SRAM son 8) el consumo total sera de 25 x 8 = 200mA.
de 36 posiciones con los que se pueden co- El puerto B tiene otras caractersticas mxi-
nstruir registros de 8 bits con caractersticas mas, ya que en total puede tomar 150mA o en-
EEPROM. En lo personal, prefiero designar a tregar 100mA. Como vemos, las salidas admiten
este conjunto de registros como memoria libre. suficiente carga como para alimentar directa-
mente a un led (figura 6). Los puertos no utiliza-
dos siempre se deben conectar a la fuente de
Los Puertos deL PIc 5V a travs de un resistor de 10k debido a que
se trata de un dispositivo CMOS que, de otro
El PIC16C84 tiene dos puertos paralelos de modo, podra deteriorarse por captacin elec-
entrada o salida: el puerto A de 8 patas y el B trosttica (figura 7).
de 5 patas. Cada pata puede ser predispuesta La pata 3 perteneciente al puerto A puede
por el programa para operar como de entrada o ser configurada como de entrada/salida o como
de salida.
Cada pata tiene un resistor de pull-up (resis- Figura 7
tor conectado a fuente) interno que puede ser
desconectado mediante el programa. Estos re-
sistores se desconectan automticamente si
una pata se predispone como pata de salida de-
bido a que las salidas ya tienen posibilidad de
entregar corriente desde fuente con un transis-
tor. Todos los resistores de pull-up se conectan
o desconectan al mismo tiempo (no existe un
comando que los conecte independientemen-
Figura 11
eL cLock
Captulo 3 69
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 70
GPIC USB:
ProGramador de mICroControladoreS PIC y
memorIaS eeProm Por PUerto USB
IntroduccIn dores, surgi el GPIC USB como una apli-
cacin totalmente funcional hacia finales
Este proyecto comenz a principios del de Octubre del 2008.
2008 cuando inici la escritura del cdigo A la fecha ha sufrido algunas modifica-
fuente para el firmware de un 18F2550 y la ciones que permite mejorar su funciona-
elaboracin del Software correspondiente a miento y ampliar la cantidad de componen-
la interfaz de usuario para la PC de un pro- tes soportados.
gramador de microcontroladores Pic por
puerto USB. Anteriormente ya haba esta-
do interesado en los procesos de progra- descrIPcIn deL cIrcuIto eLectrnIco
macin de los Pic por lo tanto, basado en
esas experiencias y en el estudio de los El esquema de la figura 1 corresponde al
Data Sheets referentes a las especificacio- programador de microcontroladores PIC
nes de programacin de los microcontrola- por puerto USB, su diseo es simple y sen-
Figura 1
cillo. Lo podemos dividir en tres bloques de la interfaz de programacin, establece la
fundamentales bien definidos, tal como transferencia de datos con los microcontro-
muestra la figura 2. ladores soportados y activa las tensiones
de VDD y VPP, figura 3.
Bloque 1: Microcontrolador Los pines 15 y 16 (RC4 - RC5) del puer-
El primero y ms importante est consti- to C del PIC conectan con la ficha corres-
tuido por el microcontrolador 18F2550 pondiente para la transmisin y recepcin
(IC2), es el encargado de la comunicacin de los datos va USB.
por el puerto USB con la PC por intermedio Los pines 2 y 3 (RA0 - RA1) del puerto A
se destinan como interfaz
de comunicacin del proto-
colo ICSP entre el progra-
mador y los microcontrola-
dores soportados por ste,
a travs del conector ICSP
(terminales 1 y 2, figura 1).
Los datos por el pin 2 son
bidireccionales, sincroniza-
dos por una seal de reloj
Figura 2 con salida por el pin 3.
Captulo 3 71
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 72
Figura 3
Los pines 23, 24 y 25 (RB2 - RB3 - RB4) configuracin establecida desde la interfaz
del puerto B los utilizamos para el control de usuario en la PC:
de la tensin VPP de programacin. Segn
el estado de estas salidas obtenemos dife- A- Slo se suministra tensin VDD a
rentes tensiones en la salida VPP del los microcontroladores soportados durante
conector ICSP (terminal 3, figura 1). los procesos de lectura, grabacin, verifica-
El pin 26 (RB5) del PIC lo utilizamos cin y borrado.
como una salida para controlar los estados B- Suministro de tensin constante,
de la tensin VDD. para poder alimentar a los circuitos durante
Continuamos con los pines 11, 12 y 13 las pruebas (slo circuitos con bajo consu-
(RC0 - RC1 - RC2) del puerto C, son utili- mo).
zados como salidas para los LEDs de C- No se suministra tensin VDD hacia
visualizacin del funcionamiento del pro- los microcontroladores soportados, una
gramador. fuente externa debe proveer la alimenta-
Comenzando con el LED denominado cin.
"VDD", este se encender con el suministro
de esta tensin. El LED denominado VPP, se enciende
Tenemos tres estados posibles, segn la durante el suministro de dicha tensin
durante todos los procesos. Desde la inter- desde la interfaz de usuario en la PC. Para
faz de programacin en la PC podemos finalizar este bloque, el pin 17 (RC6) del
configurar el suministro de esta tensin de puerto C, lo utilizamos para generar una
dos formas: seal que, junto con el buzzer BZ1 emite
unos "beeps" cada vez que pulsamos los
A- Slo se suministra tensin VPP a botones de comando para lectura, graba-
los microcontroladores soportados durante cin, verificacin y borrado desde la interfaz
todos los procesos. de programacin. Es opcional su imple-
B- Suministro de tensin MCLR post- mentacin y puede ser activado o desacti-
procesos, para "arrancar" al microcontrola- vado desde la misma interfaz.
dor sin tener que desconectar la ficha ICSP.
Bloque 2: conversor dc - dc
Por ltimo el LED denominado USB, se En un comienzo me plante qu diseo
enciende cuando se establece la comuni- usar para el conversor de tensin, si imple-
cacin con el puerto USB y es reconocido mentarlo de forma totalmente independien-
el programador. Volviendo sobre el PIC te o utilizar el PIC para esta tarea generan-
18F2550, ste debe ser grabado en un do un PWM por software, ms los compo-
principio para su funcionamiento. nentes externos necesarios. Me decid por
El programa para este microcontrolador la primera opcin por varios motivos: el cir-
podemos dividirlo en dos partes: un progra- cuito integrado utilizado MC34093, figura 4,
ma residente en un bloque de memoria del es un conversor especializado para esta
PIC, comnmente llamado bootloader, funcin, de muy bajo costo, ampliamente
encargado de "chequear" la existencia del difundido, que figura en las listas de com-
firmware correspondiente al conectar el ponentes de casi todos los comercios de
programador al puerto USB. electrnica. Es autnomo, no depende del
En caso de no encontrarse, el LED firmware grabado en el 18F2550, quiero
denominado USB comenzar una secuen- decir con esto que podemos chequear su
cia de encendido en forma intermitente. En funcionamiento y la tensin de salida del
caso contrario, el firmware tomar el control conversor (en las pruebas) sin necesidad
y el LED quedar encendido en forma con- de tener el PIC en la placa del programador
tinua. ya que no depende de ste. Adems nos
La gran ventaja de utilizar este sistema permite, si fuera necesario, regular la ten-
se debe a que slo una vez debemos pro- sin de salida con slo variar el valor de
gramar el microcontrolador 18F2550, en lo una resistencia: R3 o R4.
sucesivo los cambios y actualizaciones del El valor del choque L1 no es crtico,
firmware se podrn realizar directamente puede estar comprendido entre 220H y
680H sin ningn tipo de
Figura 4 inconveniente.
El circuito se alimenta con 5
volt suministrados por el puerto
USB y a la salida de TP2 obte-
nemos una tensin 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 resis-
tivo conectado al pin 5 del
Captulo 3 73
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 74
Est conformada, como podemos obser- niveles detectados por las entradas del
var en la figura 6, por el Zener Z1 conecta- CA3140 la salida de ste conmutar entre
do al pin 8 del CA3140 en serie con el tran- un estado prximo a masa (0.3 volt) y Vpp,
sistor NPN Q2 que trabaja como llave elec- al finalizar proveer una tensin adecuada
trnica On-Off, de acuerdo a los niveles alto al caso, si se eligi la opcin "suministrar
o bajo en la base. Con un nivel bajo sobre MCLR" desde la interfaz de programacin.
la base de este transistor el circuito est Todas las seales para la activacin de las
desconectado, por lo tanto la tensin VPP tensiones estn sincronizadas desde el
ser la normal de 12.30V a 13V; por otro firmware del microcontrolador Pic.
lado, con un nivel alto proporcionado por Las resistencias R9 y R10 conectadas a
RB4 del 18F2550 a travs de R13 el circui- masa evitan que queden al "aire" las entra-
to se conecta, la tensin VPP en este caso das del operacional en caso que el micro-
ser de 3.3 volt. controlador 18F2550 no est presente en
De esta forma queda totalmente auto- su zcalo, de lo contrario tendramos un
matizado el suministro de VPP de acuerdo estado de indeterminacin a la salida. El
a los dispositivos seleccionados desde la capacitor C10 limita la banda pasante del
interfaz de usuario en la PC. operacional, es obligatorio junto con R11 y
Por el momento no es necesario imple- R12.
mentar Z1, Q2 y R13, ya que es la primera El pin 7 del CA3140 recibe la tensin de
versin base del programador y dicha gama alimentacin para su funcionamiento, pro-
de dispositivos an no estn incorporados. porcionada por el conversor Dc-Dc. El pin 4
En este caso el pin 8 debe quedar sin cone- se conecta a masa.
xin. Como pueden ver, la electrnica del La tensin mxima en la salida del ope-
programador ya est pensada para sopor- racional pin 6 es aproximadamente 2 volts
tar de forma prctica a estos microcontrola- menor a la tensin de alimentacin sobre el
dores a medida que sean agregados. pin 7 (en caso que no se encuentre activa-
Continuando con esta etapa, las entra- do Q2, Z1).
das inversora y no inversora del amplifica- Para finalizar la descripcin y resumien-
dor operacional se conectan con RB3 y do, el terminal 3 del conector ICSP (figura
RB2 del microcontrolador; de acuerdo a los 1) puede manejar cuatro estados de VPP:
Captulo 3 75
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 76
Figura 10
Captulo 3 77
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 78
Figura 11
Figura 12
Figura 13
Captulo 3 79
Cap 3 - Microcont.qxd:*Cap 4 - telefonia 05/04/13 14:54 Pgina 80
3 de forros.qxd:club 05/03/13 16:31 Pgina 3Fo1
4 de forros.qxd:Club 05/03/13 16:33 Pgina 4Fo1