Vous êtes sur la page 1sur 50

LOS

MICROCONTROLADORES

Prof. Hector Mojica

Ao 2017
Los principiantes en electrnica creen que un microcontrolador es igual a un
microprocesador. Esto no es cierto. Difieren uno del otro en muchos sentidos. La
primera y la ms importante diferencia es su funcionalidad. Para utilizar al
microprocesador en una aplicacin real, se debe de conectar con componentes
tales como memoria o componentes buses de transmisin de datos. Aunque el
microprocesador se considera una mquina de computacin poderosa, no est
preparado para la comunicacin con los dispositivos perifricos que se le
conectan. Para que el microprocesador se comunique con algn perifrico, se
deben utilizar los circuitos especiales. As era en el principio y esta prctica sigue
vigente en la actualidad.

Por otro lado, al microcontrolador se le disea de tal manera que tenga todas las
componentes integradas en el mismo chip. No necesita de otros componentes
especializados para su aplicacin, porque todos los circuitos necesarios, que de
otra manera correspondan a los perifricos, ya se encuentran incorporados. As
se ahorra tiempo y espacio necesario para construir un dispositivo.
QUE PUEDEN HACER LOS MICROCONTROLADORES?

Para entender con ms facilidad las razones del xito tan grande de los
microcontroladores, vamos a prestar atencin al siguiente ejemplo. Hace unos
10 aos, disear un dispositivo electrnico de control de un ascensor de un
edificio de varios pisos era muy difcil, incluso para un equipo de expertos. Ha
pensado alguna vez en qu requisitos debe cumplir un simple ascensor? Cmo
lidiar con la situacin cuando dos o ms personas llaman al ascensor al mismo
tiempo? Cul llamada tiene la prioridad? Cmo solucionar las cuestiones de
seguridad, de prdida de electricidad, de fallos, de uso indebido? Lo que sucede
despus de resolver estos problemas bsicos es un proceso meticuloso de
disear los dispositivos adecuados utilizando un gran nmero de los chips
especializados. Este proceso puede tardar semanas o meses, dependiendo de
la complejidad del dispositivo. Cuando haya terminado el proceso, llega la hora
de disear una placa de circuito impreso y de montar el dispositivo.Un
dispositivo enorme! Es otro trabajo difcil y tardado. Por ltimo, cuando todo est
terminado y probado adecuadamente, pasamos al momento crucial y es cuando
uno se concentra, respira profundamente y enciende la fuente de alimentacin.

Esto suele ser el punto en el que la fiesta se convierte en un verdadero trabajo


puesto que los dispositivos electrnicos casi nunca funcionan apropiadamente
desde el inicio. Preprese para muchas noches sin dormir, correcciones,
mejoras y no se olvide de que todava estamos hablando de cmo poner en
marcha un simple ascensor.

Cuando el dispositivo finalmente empiece a funcionar perfectamente y todo el


mundo est satisfecho, y le paguen por el trabajo que ha hecho, muchas
compaas de desarrollo estarn interesadas en su trabajo. Por supuesto, si
tiene suerte, cada da le traer una oferta de trabajo de un nuevo inversionista.
Sin embargo, si lo requieren para trabajar en el control de los elevadores de un
nuevo edificio que tiene cuatro pisos ms de los que ya maneja su sistema de
control. Sabe cmo proceder? Cree acaso que se pueden controlar las
demandas de sus clientes? Pensamos que usted va a construir un dispositivo
universal que se puede utilizar en los edificios de 4 a 40 pisos, una obra maestra
de electrnica. Bueno, incluso si usted consigue construir una joya electrnica,
su inversionista le esperarar delante de la puerta pidiendo una cmara en el
ascensor o una msica relajante en caso de fallo de ascensor. O un ascensor
con dos puertas.

De todos modos, la ley de Murphy es inexorable y sin duda usted no podr tomar
ventaja a pesar de todos los esfuerzos que ha hecho. Por desgracia, todo lo que
se ha dicho hasta ahora sucede en la realidad. Esto es lo que dedicarse a la
ingeniera electrnica realmente significa. Es as como se hacan las cosas
hasta aparicin de los microcontroladores diseados pequeos, potentes y
baratos. Desde ese momento su programacin dej de ser una ciencia, y todo
tom otra direccin

El dispositivo electrnico capaz de controlar un pequeo submarino, una gra o


un ascensor como el anteriormente mencionado, ahora est incorporado en un
slo chip. Los microcontroladores ofrecen una amplia gama de aplicaciones y
slo algunas se exploran normalmente. Le toca a usted decidir qu quiere que
haga el microcontrolador y cargar un programa en l con las instrucciones
apropiadas. Antes de encender el dispositivo es recomendable verificar su
funcionamiento con ayuda de un simulador. Si todo funciona como es debido,
incorpore el microcontrolador en el sistema. Si alguna vez necesita cambiar,
mejorar o actualizar el programa, hgalo. Hasta cundo? Hasta quedar
satisfecho. Eso puede realizarse sin ningn problema.
BIT

La teora dice que un bit es la unidad bsica de informacinVamos a olvidarlo


por un momento y demostrar qu es eso en la prctica. La respuesta es nada
especial- un bit es un slo dgito binario. Similar a un sistema de numeracin
decimal en el que los dgitos de un nmero no tienen la misma ponderacin (por
ejemplo, los dgitos en el nmero 444 son los mismos pero tienen los valores
diferentes), el significado de un bit depende de la posicin que tiene en nmero
binario. En este caso no tiene sentido hablar de unidades, centenas etc. en los
nmeros binarios, sus dgitos se denominan el bit cero (el primer bit a la
derecha), el primer bit (el segundo bit a la derecha) etc. Adems, ya que el
sistema binario utiliza solamente dos dgitos (0 y 1), el valor de un bit puede ser
0 o 1.

No se confunda si se encuentra con un bit que tiene el valor 4, 16 o 64. Son los
valores representados en el sistema decimal. Simplemente, nos hemos
acostumbrado tanto a utilizar los nmeros decimales que estas expresiones
llegaron a ser comunes. Sera correcto decir por ejemplo, el valor del sexto bit
en cualquier nmero binario equivale al nmero decimal 64. Pero todos somos
humanos y los viejos hbitos mueren difcilmente. Adems, cmo le suena
nmero uno-uno-cero-uno-cero?

BYTE

Un byte consiste en 8 bits colocados uno junto al otro. Si un bit es un dgito, es


lgico que los bytes representen los nmeros. Todas las operaciones
matemticas se pueden realizar por medio de ellos, como por medio de los
nmeros decimales comunes. Similar a los dgitos de cualquier nmero, los
dgitos de un byte no tienen el mismo significado. El bit del extremo izquierdo
tiene la mayor ponderacin, por eso es denominado el bit ms significativo
(MSB). El bit del extremo derecho tiene la menor ponderacin, por eso es
denominado el bit menos significativo (LSB). Puesto que los 8 dgitos de un byte
se pueden combinar de 256 maneras diferentes, el mayor nmero decimal que
se puede representar con un byte es 255 (una combinacin representa un cero).
Un nibble o un cuarteto representa una mitad de byte. Dependiendo de la mitad
del nmero en cuestin (izquierda o derecha), se les denomina nibbles altos o
bajos, respectivamente.

Usted seguramente ha pensado alguna vez en cmo es la electrnica dentro de


un circuito integrado digital, un microcontrolador o un microprocesador. Cmo
son los circuitos que realizan las operaciones matemticas complicadas y toman
decisiones? Saba que sus esquemas, aparentemente complicadas consisten
en slo unos pocos elementos diferentes, denominados circuitos lgicos o
compuertas lgicas?

REGISTROS

Un registro o una celda de memoria es un circuito electrnico que puede


memorizar el estado de un byte.
REGISTROS SFR

A diferencia de los registros que no tienen ninguna funcin especial y


predeterminada, cada microcontrolador dispone de un nmero de registros de
funciones especiales (SFR), con la funcin predeterminada por el fabricante. Sus
bits estn conectados a los circuitos internos del microcontrolador tales como
temporizadores, convertidores A/D, osciladores entre otros, lo que significa que
directamente manejan el funcionamiento de estos circuitos, o sea del
microcontrolador. Imagnese ocho interruptores que manejan el funcionamiento
de un circuito pequeo dentro del microcontrolador. Los registros SFR hacen
exactamente lo mismo.

En otras palabras, el estado de los bits de registros se fija dentro de programa,


los registros SFR dirigen los pequeos circuitos dentro del microcontrolador,
estos circuitos se conectan por los pines del microcontrolador a un dispositivo
perifrico utilizado para Bueno, depende de usted.

PUERTOS DE ENTRADA/SALIDA (E/S)

Para hacer til un microcontrolador, hay que conectarlo a un dispositivo externo,


o sea, a un perifrico. Cada microcontrolador tiene uno o ms registros
(denominados puertos) conectados a los pines en el microcontrolador. Por qu
se denominan como puertos de entrada/salida? Porque usted puede cambiar la
funcin de cada pin como quiera. Por ejemplo, usted desea que su dispositivo
encienda y apague los tres seales LEDs y que simultneamente monitoree el
estado lgico de 5 sensores o botones de presin. Uno de los puertos debe estar
configurado de tal manera que haya tres salidas (conectadas a los LEDs) y cinco
entradas (conectadas a los sensores). Eso se realiza simplemente por medio de
software, lo que significa que la funcin de algn pin puede ser cambiada durante
el funcionamiento.

Una de las caractersticas ms importantes de los pines de entrada/salida (E/S)


es la corriente mxima que pueden entregar/recibir. En la mayora de los
microcontroladores la corriente obtenida de un pin es suficiente para activar un
LED u otro dispositivo de baja corriente (10-20mA). Mientras ms pines de E/S
haya, ms baja es la corriente mxima de un pin. En otras palabras, todos los
puertos de E/S comparten la corriente mxima declarada en la hoja de
especificacin tcnica del microprocesador.

Otra caracterstica importante de los pines es que pueden disponer de los


resistores pull-up. Estos resistores conectan los pines al polo positivo del voltaje
de la fuente de alimentacin y su efecto se puede ver al configurar el pin como
una entrada conectada a un interruptor mecnico o a un botn de presin. Las
ltimas versiones de los microcontroladores tienen las resistencias pull-up
configurables por software.

Cada puerto de E/S normalmente est bajo el control de un registro SFR


especializado, lo que significa que cada bit de ese registro determina el estado
del pin correspondiente en el el microcontrolador. Por ejemplo, al escribir un uno
lgico (1) a un bit del registro de control (SFR), el pin apropiado del puerto se
configura automticamente como salida. Eso significa que el voltaje llevado a
ese pin se puede leer como 0 o 1 lgico. En caso contrario, al escribir 0 al registro
SFR, el pin apropiado del puerto se configura como salida. Su voltaje (0V o 5V)
corresponde al estado del bit apropiado del registro del puerto.

UNIDAD DE MEMORIA

La unidad de memoria es una parte del microcontrolador utilizada para


almacenar los datos. La manera ms fcil de explicarlo es compararlo con un
armario grande con muchos cajones. Si marcamos los cajones claramente, ser
fcil acceder a cualquiera de sus contenidos al leer la etiqueta en la parte
delantera del cajn.

Hay varios tipos de memoria dentro del microcontrolador:


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

MEMORIA ROM (READ ONLY MEMORY) MEMORIA DE SLO LECTURA

La memoria ROM se utiliza para guardar permanentemente el programa que se


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

Rom de mscara (enmascarada) MROM

La ROM enmascarada es un tipo de ROM cuyo contenido es programado por el


fabricante. El trmino de mscara viene del proceso de fabricacin, donde las
partes del chip se plasman en las mascaras utilizadas durante el proceso de
fotolitografa. En caso de fabricacin de grandes series, el precio es muy bajo.
Olvide la idea de modificarla

OTP ROM (One Time Programmable ROM) ROM programable una sola vez

La memoria programable una sola vez permite descargar un programa en el chip,


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

UV EPROM (UV Erasable Programmable ROM) ROM programable


borrable por rayos ultravioleta

La instalacin de esta ventana es complicada, lo que por supuesto afecta al


precio. Desde nuestro punto de vista, desgraciadamente, de manera negativa

El encapsulado de este microcontrolador tiene una ventana reconocible en la


parte alta. Eso permite exponer la superficie del chip de silicio a la luz de
ultravioleta y borrar el programa completamente en varios minutos. Luego es
posible descargar un nuevo programa en l.
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 microcontroladores con memoria Flash son
perfectos para estudiar, experimentar y para la fabricacin en pequea escala.
Por la gran popularidad de esta memoria, la mayora de los microconroladores
se fabrican con tecnologa flash hoy en da. Si usted va a comprar un
microcontrolador, ste es en definitiva la opcin perfecta!

MEMORIA RAM (RANDOM ACCESS MEMORY) MEMORIA DE ACCESO


ALEATORIO

Al apagar la fuente de alimentacin, se pierde el contenido de la memoria RAM.


Se utiliza para almacenar temporalmente los datos y los resultados inmediatos
creados y utilizados durante el funcionamiento del microcontrolador. Por
ejemplo, si el programa ejecuta la 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 EEPROM (ELECTRICALLY ERASABLE PROGRAMMABLE ROM)


ROM PROGRAMABLE Y BORRABLE ELCTRICAMENTE

El contenido de la EEPROM se puede cambiar durante el funcionamiento (similar


a la RAM), pero se queda permanentemente guardado despus de la prdida de
la fuente de alimentacin (similar a la ROM). Por lo tanto, la EEPROM se utiliza
con frecuencia para almacenar los valores creados durante el funcionamiento,
que tienen que estar permanentemente guardados. Por ejemplo, si usted ha
diseado una llave electrnica o un alarma, sera estupendo permitir al usuario
crear e introducir una contrasea por su cuenta. Por supuesto, la nueva
contrasea tiene que estar guardada al apagar la fuente de alimentacin. En tal
caso una solucin perfecta es el microcontrolador con una EEPROM embebida.

INTERRUPCIN

La mayora de programas utilizan interrupciones durante ejecucin de programa


regular. El propsito del microcontrolador generalmente consiste en reaccionar
a los cambios en su entorno. En otras palabras, cuando ocurre algo, el
microcontrolador reacciona de alguna manera Por ejemplo, al apretar el botn
del mando a distancia, el microcontrolador lo registra y responde al comando
cambiando de canal, subiendo o bajando el volumen etc. Si el microcontrolador
pasar la mayora del tiempo comprobando varios botones sin parar las horas,
los das, esto no sera nada prctico.

Por lo tanto, el microcontrolador aprendi un truco durante su evolucin. En vez


de seguir comprobando algn pin o bit, el microconrolador deja su trabajo de
esperar a un experto que reaccionar slo en caso de que suceda algo digno
de atencin.

La seal que informa al procesador central acerca de tal acontecimiento se


denomina INTERRUPCIN.

UNIDAD CENTRAL DE PROCESAMIENTO (CENTRAL PROCESSOR UNIT


CPU)

Como indica su nombre, esto es una unidad que controla todos los procesos
dentro del microcontrolador. Consiste en varias unidades ms pequeas, de las
que las ms importantes son:

Decodificador de instrucciones es la parte que descodifica las


instrucciones del programa y acciona otros circuitos basndose en esto.
El conjunto de instrucciones que es diferente para cada familia de
microcontrolador expresa las capacidades de este circuito;

Unidad lgica aritmtica (Arithmetical Logical Unit ALU) realiza


todas las operaciones matemticas y lgicas sobre datos; y
Acumulador o registro de trabajo. Es un registro SFR estrechamente
relacionado con el funcionamiento de la ALU. Es utilizado para almacenar
todos los datos sobre los que se debe realizar alguna operacin (sumar,
mover). Tambin almacena los resultados preparados para el
procesamiento futuro. Uno de los registros SFR, denominado Registro
Status (PSW), est estrechamente relacionado con el acumulador.
Muestra el estado de un nmero almacenado en el acumulador (el
nmero es mayor o menor que cero etc.) en cualquier instante dado.

BUS

El bus est formado por 8, 16 o ms cables. Hay dos tipos de buses: el bus de
direcciones y el bus de datos. El bus de direcciones consiste en tantas lneas
como sean necesarias para direccionar la memoria. Se utiliza para transmitir la
direccin de la CPU a la memoria. El bus de datos es tan ancho como los datos,
en este caso es de 8 bits o lneas de ancho. Se utiliza para conectar todos los
circuitos dentro del microcontrolador.

COMUNICACIN EN SERIE

La conexin paralela entre el microcontrolador y los perifricos a travs de los


puertos de entrada/salida es una solucin perfecta para las distancias cortas
hasta varios metros. No obstante, en otros casos cuando es necesario establecer
comunicacin entre dos dispositivos a largas distancias no es posible utilizar la
conexin paralela. En vez de eso, se utiliza la conexin en serie.

Hoy en da, la mayora de los microcontroladores llevan incorporados varios


sistemas diferentes para la comunicacin en serie, como un equipo estndar.
Cul de estos sistemas se utilizar en un caso concreto, depende de muchos
factores, de los que ms importantes son:

Con cuntos dispositivos el microcontrolador tiene que intercambiar los


datos?

Cul es la velocidad del intercambio de datos obligatoria?

Cul es la distancia entre los dispositivos?

Es necesario transmitir y recibir los datos simultneamente?

Una de las cosas ms importantes en cuanto a la comunicacin en serie es el


Protocolo que debe ser estrictamente observado. Es un conjunto de reglas que
se aplican obligatoriamente para que los dispositivos puedan interpretar
correctamente los datos que intercambian mutuamente. Afortunadamente, los
microcontroladores se encargan de eso automticamente, as que el trabajo de
programador/usuario es reducido a la escritura y lectura de datos.
VELOCIDAD DE TRANSMISIN SERIAL

La velocidad de transmisin serial (baud rate) es el trmino utilizado para denotar


el nmero de bits transmitidos por segundo [bps]. Fjese que este trmino se
refiere a bits, y no a bytes! El protocolo normalmente requiere que cada byte se
transmita junto con varios bits de control. Eso quiere decir que un byte en un flujo
de datos serial puede consistir en 11 bits. Por ejemplo, si velocidad de
transmisin serial es 300 bps un mximo de 37 y un mnimo de 27 bytes se
pueden transmitir por segundo.

Los sistemas de comunicacin serial ms utilizados son:

I2C (INTER INTEGRATED CIRCUIT) CIRCUITO INTER-INTEGRADO

Circuito inter-integrado es un sistema para el intercambio de datos serial entre


los microcontroladores y los circuitos integrados especializados de generacin.
Se utiliza cuando la distancia entre ellos es corta (el receptor y el transmisor
estn normalmente en la misma placa de circuito impreso). La conexin se
establece por medio de dos lneas una se utiliza para transmitir los datos,
mientras que la otra se utiliza para la sincronizacin (la seal de reloj). Como se
muestra en la figura, un dispositivo es siempre el principal (master maestro), el
que realiza el direccionamiento de un chip subordinado (slave esclavo) antes
de que se inicie la comunicacin. De esta manera un microcontrolador puede
comunicarse con 112 dispositivos diferentes. La velocidad de transmisin serial
es normalmente 100 Kb/seg (el modo estndar) o 10 Kb/seg (modo de velocidad
de transmisin baja). Recientemente han aparecido los sistemas con la
velocidad de transmisin serial 3.4 Mb/sec. La distancia entre los dispositivos
que se comunican por el bus I2C est limitada a unos metros.
SPI (SERIAL PERIPHERAL INTERFACE BUS) BUS SERIAL DE INTERFAZ
DE PERIFRICOS

Un bus serial de interfaz de perifricos es un sistema para la comunicacin serial


que utiliza hasta cuatro lneas (normalmente solo son necesarias tres) para
recibir los datos, para transmitir los datos, para sincronizar y (opcional) para
seleccionar el dispositivo con el que se comunica. Esto es la conexin full duplex,
lo que significa que los datos se envan y se reciben simultneamente.

La velocidad de transmisin mxima es mayor que en el sistema de conexin


I2C.

UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER)


TRANSMISOR-RECEPTOR ASNCRONO UNIVERSAL

Este tipo de conexin es asncrona, lo que significa que no se utiliza una lnea
especial para transmitir la seal de reloj. En algunas aplicaciones este rasgo es
crucial (por ejemplo, en mandar datos a distancia por RF o por luz infrarroja).
Puesto que se utiliza slo una lnea de comunicacin, tanto el receptor como el
transmisor reciben y envan los datos a velocidad misma que ha sido predefinida
para mantener la sincronizacin necesaria. Esto es una manera simple de
transmitir datos puesto que bsicamente representa una conversin de datos de
8 bits de paralelo a serial. La velocidad de transmisin no es alta, es hasta 1
Mbit/sec.
OSCILADOR

Los pulsos uniformes generados por el oscilador permiten el funcionamiento


armnico y sncrono de todos los circuitos del microcontrolador. El oscilador se
configura normalmente de tal manera que utilice un cristal de cuarzo o resonador
cermico para estabilizacin de frecuencia. Adems, puede funcionar como un
circuito autnomo (como oscilador RC). Es importante decir que las instrucciones
del programa no se ejecutan a la velocidad impuesta por el mismo oscilador sino
varias veces ms despacio. Eso ocurre porque cada instruccin se ejecuta en
varios ciclos del oscilador. En algunos microcontroladores se necesita el mismo
nmero de ciclos para ejecutar todas las instrucciones, mientras que en otros el
tiempo de ejecucin no es el mismo para todas las instrucciones. Por
consiguiente, si el sistema utiliza el cristal de cuarzo con una frecuencia de 20
MHZ, el tiempo de ejecucin de una instruccin de programa no es 50 nS, sino
200, 400 o 800 nS dependiendo del tipo del microcontrolador.

CIRCUITO DE ALIMENTACIN

Hay que mencionar dos cosas dignas de atencin con relacin al circuito de la
fuente de alimentacin de microcontroladores:

Brown out es un estado potencialmente peligroso que ocurre al apagar


el microcontrolador o en caso de que el voltaje de la fuente de
alimentacin salga de unos mrgenes debido al ruido elctrico. Como el
microcontrolador dispone de varios circuitos que funcionan a niveles de
voltaje diferentes, ese estado puede causar un comportamiento
descontrolado. Para evitarlo, el microcontrolador normalmente tiene un
circuito incorporado para el brown out reset. El circuito reinicia
inmediatamente el microcontrolador si el voltaje de alimentacin cae por
debajo del lmite.

El pin de reset (reinicio), marcado frecuentemente con MCLR (Master


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

TEMPORIZADORES/CONTADORES

El oscilador del microcontrolador utiliza cristal de cuarzo para su funcionamiento.


Aunque no se trata de la solucin ms simple, hay muchas razones para
utilizarlo. La frecuencia del oscilador es definida con precisin y muy estable, as
que siempre genera los pulsos del mismo ancho, lo que los hace perfectos para
medicin de tiempo. Tales osciladores se utilizan en los relojes de cuarzo. Si es
necesario medir el tiempo transcurrido entre dos eventos, basta con contar los
pulsos generados por este oscilador. Esto es exactamente lo que hace el
temporizador.

La mayora de los programas utiliza estos cronmetros electrnicos en miniatura.


Generalmente son registros SFR de 8 o 16 bits cuyo contenido se aumenta
automticamente con cada pulso. Una vez que se llena el registro, se genera
una interrupcin!

Si el temporizador utiliza el oscilador de cuarzo interno para su funcionamiento,


es posible medir el tiempo entre dos eventos (el valor de registro en el momento
de iniciar la medicin es T1, en el momento de finalizar la medicin es T2, el
tiempo transcurrido es igual al resultado de la resta T2 T1). Si los registros se
aumentan con los pulsos que vienen de la fuente externa, tal temporizador se
convierte en un contador.

Esto es una explicacin simple de su funcionamiento. Es un poco ms


complicado en prctica.

CMO FUNCIONAN LOS TEMPORIZADORES?

En prctica, los pulsos generados por el oscilador de cuarzo son llevados al


circuito una vez por cada ciclo de mquina directamente o por el pre-escalador,
lo que aumenta el nmero en el registro del temporizador. Si una instruccin (un
ciclo de mquina) 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 frecuencia de 4 MHz.

Es fcil de medir los intervalos de tiempo cortos 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.
UTILIZAR UN PREESCALADOR EN EL FUNCIONAMIENTO DEL
TEMPORIZADOR

Un pre-escalador es un dispositivo electrnico utilizado para dividir la frecuencia


por un factor predeterminado. Esto quiere decir que se necesita llevar 1, 2, 4 o
ms pulsos a su entrada para generar un pulso a la salida. La mayora de los
microcontroladores disponen de uno o ms pre-escaladores incorporados y su
tasa de divisin puede ser cambiada dentro del programa. El pre-escalador se
utiliza cuando es necesario medir los perodos de tiempo ms largos. Si el
temporizador y el temporizador perro guardin comparten un pre-escalador, ste
no se puede utilizar por los dos simultneamente.

UTILIZAR UNA INTERRUPCIN EN EL FUNCIONAMIENTO DEL


TEMPORIZADOR

Si el registro del temporizador es de 8 bits, el mayor nmero que se puede


escribir en l es 255 (en los registros de 16 bits es el nmero 65.535). Si se
excede este nmero, el temporizador se reinicia automticamente y el conteo
comienza de nuevo en cero. Esto es denominado desbordamiento o sobreflujo
(overflow). Permitido por el programa, el desbordamiento puede provocar una
interrupcin, lo que abre completamente nuevas posibilidades. Por ejemplo, el
estado de registros utilizados para contar segundos, minutos o das puede ser
implementado en una rutina de interrupcin. El proceso entero (excepto la rutina
de interrupcin) se lleva a cabo internamente, lo que permite que los circuitos
principales del microcontrolador funcionen regularmente.
La figura anterior describe el uso de una interrupcin en el funcionamiento del
temporizador. Al asignarle un pre-escalador al temporizador, se producen
retrasos de duracin arbitraria con mnima interferencia en la ejecucin del
programa principal.

CONTADORES

Si un temporizador se suministra por los pulsos ingresados por el pin de entrada


en el microcontrolador, se produce un contador. Evidentemente, es el mismo
circuito electrnico. La nica diferencia es que los pulsos para contar se ingresan
por el pin de entrada y que su duracin (anchura) no es definida. Por eso, no se
pueden utilizar para medicin de tiempo, sino que se utilizan para otros
propsitos, por ejemplo: contar los productos en la cadena de montaje, nmero
de rotaciones del eje de un motor, pasajeros etc. (dependiendo del sensor
utilizado.

TEMPORIZADOR PERRO GUARDIN (WATCHDOG)

El perro guardin es un temporizador conectado a un oscilador RC


completamente independiente dentro del microcontrolador.

Si el perro guardin est habilitado, cada vez que cuenta hasta el mximo valor
en el que ocurre el desbordamiento del registro se genera una seal de reinicio
del microcontrolador y la ejecucin de programa inicia en la primera instruccin.
El punto es evitar que eso ocurra al utilizar el comando adecuado.

La idea se basa en el hecho de que cada programa se ejecuta en varios bucles,


ms largos o cortos. Si las instrucciones que reinician el temporizador perro
guardin se colocan en lugares estratgicos del programa, aparte los comandos
que se ejecutan regularmente, el funcionamiento del perro guardin no afectar
a la ejecucin del programa. Si por cualquier razn (ruidos elctricos frecuentes
en la industria) el contador de programa se queda atrapado dentro de un bucle
infinito, el valor del registro continuar aumentado por el temporizador perro
guardin alcanzar el mximo valor, el registro se desbordar y, aleluya! Ocurre
el reinicio!

CONVERTIDOR A/D

Las seales del mundo real son muy diferentes de las que entiende el
microcontrolador (ceros y unos), as que deben ser convertidas para que el
microcontrolador pueda entenderlas. Un convertidor analgico-digital es un
circuito electrnico encargado de convertir las seales continuas en nmeros
digitales discretos. En otras palabras, este circuito convierte un nmero real en
un nmero binario y se lo enva a la CPU para ser procesado. Este mdulo se
utiliza para medir el voltaje en el pin de entrada. El resultado de esta medicin
es un nmero (el valor digital) utilizado y procesado ms tarde en el programa.
ARQUITECTURA INTERNA

Todos los microcontroladores actuales utilizan uno de dos modelos bsicos de


arquitectura denominados Harvard y von-Neumann.

Son dos maneras diferentes del intercambio de datos entre la CPU y la memoria.

Arquitectura de von-Neumann

Los microcontroladores que utilizan la arquitectura von- Neumann disponen de


un solo bloque de memoria y de un bus de datos de 8 bits. Como todos los datos
se intercambian por medio de estas 8 lneas, este bus est sobrecargado, y la
comunicacin por si misma es muy lenta e ineficaz. La CPU puede leer una
instruccin o leer/escribir datos de/en la memoria. Los dos procesos no pueden
ocurrir a la vez puesto que las instrucciones y los datos utilizan el mismo bus.
Por ejemplo, si alguna lnea de programa dice que el registro de la memoria RAM
llamado SUM debe ser aumentado por uno (instruccin: incf SUMA), el
microcontrolador har lo siguiente:
1. Leer la parte de la instruccin de programa que especifica QU es lo que
debe realizar (en este caso es la instruccin para incrementar incf)

2. Seguir leyendo la misma instruccin que especifica sobre CUL dato lo


debe realizar (en este caso es el contenido del registro SUMA)

3. Despus de haber sido incrementado, el contenido de este registro se


debe escribir en el registro del que fue ledo (direccin del registro
SUMA)

El mismo bus de datos se utiliza para todas estas operaciones intermedias.

ARQUITECTURA DE HARVARD

Los microcontroladores que utilizan esta arquitectura disponen de dos buses de


datos diferentes. Uno es de 8 bits de ancho y conecta la CPU con la memoria
RAM. El otro consiste en varias lneas (12, 14 o 16) y conecta a la CPU y la
memoria ROM. Por consiguiente, la CPU puede leer las instrucciones y realizar
el acceso a la memoria de datos a la vez. Puesto que todos los registros de la
memoria RAM son de 8 bits de ancho, todos los datos dentro del
microcontrolador que se intercambian son de la misma anchura. Durante el
proceso de la escritura de programa, slo se manejan los datos de 8 bits. En
otras palabras, todo lo que usted podr cambiar en el programa y a lo que podr
afectar ser de 8 bits de ancho. Todos los programas escritos para estos
microcontroladores sern almacenados en la memoria ROM interna del
microcontrolador despus de haber sido compilados 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 siguientes:

Todos los datos en el programa son de un byte (8 bits) de ancho. Como


un bus de datos utilizado para lectura de programa tiene unas lneas ms
(12, 14 o 16), tanto la instruccin como el dato se pueden leer
simultneamente al utilizar estos bits adicionales. Por eso, todas las
instrucciones se ejecutan en un ciclo salvo las instrucciones de salto que
son de dos ciclos.

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

En los microcontroladores que utilizan la arquitectura de von-Neumann,


nunca se sabe cunta memoria ocupar algn programa. Generalmente,
la mayora de las instrucciones de programa ocupan dos localidades de
memoria (una contiene informacin sobre QU se debe realizar, mientras
que la otra contiene informa cin sobre CUL dato se debe realizar). Sin
embargo, esto no es una frmula rgida, sino el caso ms frecuente. En
los microcontroladores que utilizan una arquitectura Harvard, el bus de la
palabra de programa es ms ancho que un byte, lo que permite que cada
palabra de programa est compuesto por una instruccin y un dato. En
otras palabras, una localidad de memoria una instruccin de programa.

JUEGO DE INSTRUCCIONES

El nombre colectivo de todas las instrucciones que puede entender el


microcontrolador es llamado Juego de Instrucciones. Cuando se escribe un
programa en ensamblador, en realidad se especifican instrucciones en el orden
en el que deben ser ejecutadas. La restriccin principal es el nmero de
instrucciones disponibles. Los fabricantes aceptan cualquiera de los dos
enfoques descritos a continuacin:

RISC (Reduced Instruction Set Computer) Computadora con Juego de


Instrucciones Reducidas

En este caso la idea es que el microcontrolador reconoce y ejecuta slo


operaciones bsicas (sumar, restar, copiar etc) Las operaciones ms
complicadas se realizan al combinar stas (por ejemplo, multiplicacin se lleva a
cabo al realizar adicin sucesiva). Es como intentar explicarle a alguien con
pocas palabras cmo llegar al aeropuerto en una nueva ciudad. Sin embargo, no
todo es tan oscuro. Adems, el microcontrolador es muy rpido as que no es
posible ver todas las acrobacias aritmticas que realiza. El usuario slo puede
ver el resultado final de todas las operaciones. Por ltimo, no es tan difcil explicar
dnde est el aeropuerto si se utilizan las palabras adecuadas tales como: a la
derecha, a la izquierda, el kilmetro etc.
CISC (Complex Instruction Set Computer) Computadoras con un juego de
instrucciones complejo

CISC es opuesto a RISC! Los microcontroladores diseados para reconocer


ms de 200 instrucciones diferentes realmente pueden realizar muchas cosas a
alta velocidad. No obstante, uno debe saber cmo utilizar todas las posibilidades
que ofrece un lenguaje tan rico, lo que no es siempre tan fcil

CMO ELEGIR UN MICROCONTROLADOR?

Bueno, si usted es principiante, y ha tomado decisin de trabajar con los


microcontroladores. Felicitaciones por la eleccin! No obstante, a primera vista,
no es fcil la eleccin del microcontrolador ms adecuado como parece a la
primera vista. El problema no es el pequeo rango de dispositivos a elegir, sino
todo lo contrario!

Antes de empezar a disear un dispositivo basado en un microcontrolador, tome


en cuenta lo siguiente: cuntas entradas/lneas son necesarias para su
funcionamiento, realizara el dispositivo otras operaciones adems
encender/apagar un rel, necesita algn modulo especializado tal como el de
comunicacin en serie, convertidor A/D etc. Cuando usted tiene una clara imagen
de lo que quiere, el rango de seleccin se reduce considerablemente, y le queda
pensar en el precio. Va a tener varios dispositivos? Varios cientos? Un
milln? De todos modos ahora es ms claro.

Si est pensando en todas estas cosas por primera vez, todo le parecer un poco
confuso. Por esa razn, vaya paso a paso. Antes que nada, seleccione al
fabricante, es decir, la familia de microcontroladores que ofrece. Luego, aprenda
a trabajar con un modelo particular. Slo aprenda lo que necesite aprender, no
entre demasiado en detalles. Resuelva el problema especfico y le pasar una
cosa increble ser capaz de manejar cualquier modelo del mismo fabricante

Ms o menos, todo se parece a montar en bicicleta: despus de varias cadas


inevitables en el principio, ser capaz de mantener el equilibrio y montar en
cualquier otra bicicleta. Por supuesto, nunca se olvida tanto de montar en
bicicleta, como de la destreza de programacin!
Historia de los lenguajes de programacin

Este artculo trata sobre los acontecimientos ms importantes en la historia de


los lenguajes de programacin. Para entrar en detalle en la lnea del tiempo de
estos eventos, visite la cronologa de los lenguajes de programacin.

Antes de 1940

Los primeros lenguajes de programacin preceden a la computadora moderna.


En un inicio los lenguajes eran cdigos.

La mquina del telar de Jacquard, creada en 1801, utilizaba los orificios en


tarjetas perforadas para representar los movimientos de un brazo de la mquina
de tejer, con el objetivo de generar patrones decorativos automticamente.

Durante un perodo de nueve meses entre 1842 y 1843, Ada Lovelace tradujo
las memorias del matemtico italiano Luigi Menabrea acerca de la nueva
mquina propuesta por Charles Babbage, la Mquina Analtica. Con estos
escritos, ella aadi unas notas en las cuales especificaba en detalle un mtodo
para calcular los nmeros de Bernoulli con esta mquina, el cual es reconocido
por muchos historiadores como el primer programa de computadora del mundo.

Herman Hollerith se percat de que poda codificar la informacin en tarjetas


perforadas cuando observ a los conductores de trenes codificar la apariencia
de los tickets del tren con la posicin de los agujeros perforados en estos. En
1890 Hollerith codific los datos del censo en tarjetas perforadas.

Los primeros cdigos de computadora estaban especializados segn sus


aplicaciones. En las primeras dcadas del siglo 20, los clculos numricos
estaban basados en los nmeros decimales. Eventualmente se fueron dando
cuenta que la lgica poda ser representada con nmeros, no slo con palabras.
Por ejemplo, Alonzo Church fue capaz de expresar el clculo lambda a travs de
frmulas. La mquina de Turing estableci las bases para almacenar programas
como datos en la arquitectura de von Neuman de una computadora. Sin
embargo, a diferencia del clculo lambda, el cdigo de Turing no servira
satisfactoriamente como base para lenguajes de ms alto nivel- su principal uso
es en el anlisis riguroso en la complejidad algortmica.
Como muchos primeros en la historia, el primer lenguaje de programacin
moderno es difcil de identificar. Desde un inicio, las restricciones de hardware
definan el lenguaje. Las tarjetas perforadas permitan 80 columnas, pero
algunas de estas seran utilizadas para una clasificacin de cada tarjeta.
FORTRAN inclua algunas palabras reservadas provenientes del Ingls, como
IF, GOTO (go to) y CONTINUE. El uso del tambor magntico para la
memoria implicaba que los programas informticos tuvieran que estar
intercalados con las rotaciones del tambor. Por lo tanto los programas eran muy
dependientes del hardware.

Para algunas personas, lo que sera el primer lenguaje de programacin


moderno depende de cunto poder y legibilidad humana se requera antes de
que se concediera el estado de "lenguaje de programacin". Tanto el telar de
Jacquard como la Mquina Diferencial de Babbage, tenan lenguajes muy
simples y extremadamente limitados para describir las acciones que estas
mquinas realizaran. Se puede incluso considerar los agujeros perforados en los
rollos de pianola como un limitado lenguaje de dominio especfico, a pesar de no
estar diseado para el consumo humano.

Los aos 40

En la dcada de 1940 fueron creadas las primeras computadoras modernas, con


alimentacin elctrica. La velocidad y capacidad de memoria limitadas forzaron
a los programadores a escribir programas, en lenguaje ensamblador muy
afinados. Finalmente se dieron cuenta de que la programacin en lenguaje
ensamblador requera de un gran esfuerzo intelectual y era muy propensa a
errores.

En 1948, Konrad Zuse public un artculo acerca de su lenguaje de programacin


Plankalkl. Sin embargo, no fue implementado en su vida y sus contribuciones
fueron aisladas de otros desarrollos.

Entre algunos lenguajes importantes que fueron desarrollados en este perodo


se encuentran:

1943 - Plankalkl (Konrad Zuse), diseado, pero sin implementar durante


medio siglo
1943 - el sistema de codificacin ENIAC.

1949 - 1954 -- una serie de conjuntos de instrucciones nemotcnicas, como la


de ENIAC, comenzando en 1949 con C-10 para BINAC (que luego evolucionara
en UNIVAC). Cada conjunto de instrucciones estaba destinado a un fabricante
especfico.

Las dcadas de 1950 y 1960

En los cincuenta, los tres primeros lenguajes de programacin modernos, cuyos


descendientes an continan siendo utilizados, son:

FORTRAN (1955), creado por John Backus et al.;

LISP (1958), creado por John McCarthy et al.;

COBOL (1959), creado por el Short Range Committee, altamente influenciado


por Grace Hopper.

Otro hito a finales de 1950 fue la publicacin, por un comit Americano y Europeo
de cientficos de la computacin, de un nuevo lenguaje para algoritmos; el
Reporte de ALGOL 60 ("ALGOrithmic Language"). Este reporte consolid
muchas ideas que estaban circulando en aquel entonces, y proporcion dos
innovaciones importantes para los lenguajes de programacin:

Estructuras de bloques anidadas: las secuencias de cdigo y las declaraciones


asociadas se pueden agrupar en bloques sin tener que pertenecer
explcitamente a procedimientos separados;

mbito lxico: un bloque puede tener sus propias variables, procedimientos y


funciones, invisible al cdigo fuera de dicho bloque, por ejemplo, ocultamiento
de informacin.

Otra innovacin, relacionada con esto, fue cmo el lenguaje fue descrito:

Una notacin matemtica exacta, Backus-Naur Form (BNF), fue utilizada para
describir la sintaxis del lenguaje. Todos los subsecuentes lenguajes de
programacin han utilizado una variante de BNF para describir la porcin libre
del contexto de su sintaxis.
Algol 60 influenci particularmente en el diseo de lenguajes posteriores, de los
cuales algunos se hicieron ms populares. Los grandes sistemas de Burroughs
fueron diseados para ser programados en un subconjunto extendido de Algol.

Las ideas fundamentales de Algol se continuaron, produciendo Algol 68:

La sintaxis y la semntica se hizo an ms ortogonal, con rutinas annimas, un


sistema de tipificacin recursiva con funciones de orden superior, etc.;

y no slo la parte libre del contexto, sino que tanto la sintaxis como la semntica
del lenguaje completo fueron definidos formalmente, en trminos de una
gramtica de Van Wijngaarden, un formalismo diseado especficamente para
este propsito.

Las variadas pero poco usadas caractersticas de Algol 68 (por ejemplo, bloques
simultneos y paralelos) y su complejo sistema de atajos sintcticos y coerciones
automticas de tipo lo hicieron impopular entre los ejecutores y se gan una
reputacin de ser difcil. Niklaus Wirth sali del comit de diseo para crear el
sencillo lenguaje Pascal.

Algunos de los lenguajes importantes que fueron desarrollados en este perodo


incluyen:

1951 - Regional Assembly Language

1952 - Autocode

1954 - IPL (precursor de LISP)

1955 - FLOW-MATIC (precursor de COBOL)

1957 - FORTRAN (primer compilador)

1957 - COMTRAN (precursor de COBOL)

1958 - LISP

1958 - ALGOL 58

1959 - FACT (precursor de COBOL)

1959 - COBOL
1959 - RPG

1962 - APL

1962 - Simula

1962 - SNOBOL

1963 - CPL (precursor de C)

1964 - BASIC

1964 - PL/I

1967 - BCPL (precursor de C)

1968-1979: estableciendo paradigmas fundamentales

El perodo comprendido entre finales de 1960 y finales de 1970 trajo un gran


florecimiento de lenguajes de programacin. La mayora de los paradigmas de
lenguajes de programacin ms importantes y actualmente en uso se inventaron
en este perodo:

Simula, inventado en la dcada de 1960 por Nygaard y Dahl como un


superconjunto de Algol 60, fue el primer lenguaje diseado para apoyar la
programacin orientada a objetos.

C, en principio un lenguaje de programacin de sistemas, fue desarrollado por


Dennis Ritchie y Ken Thompson en los Laboratorios Bell entre 1969 y 1973.

Smalltalk (mediados de los 70) proporcionaron un completo diseo de un


lenguaje orientado a objetos.

Prolog, diseado en 1972 por Colmerauer, Roussel y Kowalski, fue el primer


lenguaje de programacin lgica.

ML construy un sistema de tipos polimrfico (inventado por Robin Milner en


1973) en el tope de Lisp, pionero en los lenguajes funcionales de programacin
con tipado esttico.
Cada uno de estos lenguajes gener toda una familia de descendientes, y los
lenguajes ms modernos cuentan al menos uno de ellos en su ascendencia.

En los aos 60 y 70 tambin suscit un debate considerable sobre los mritos


de la "programacin estructurada", que esencialmente significaba programacin
sin el uso de GOTO. Este debate estaba estrechamente relacionado con el
diseo del lenguaje: algunos lenguajes no incluan GOTO, lo que oblig a la
programacin estructurada en el programador. Aunque el debate se recrudeca
acaloradamente en ese momento, casi todos los programadores estn de
acuerdo en que, incluso en lenguajes que ofrecen GOTO, es una mala prctica
de programacin usarlo, excepto en raras circunstancias. Como resultado de
ello, las generaciones posteriores de diseadores de lenguajes han encontrado
el debate sobre programacin estructurada tedioso e incluso desconcertante.

Algunos lenguajes importantes que se desarrollaron en este perodo fueron:

1968 - Logo

1969 - B (precursor C)

1970 - Pascal

1970 - Forth

1972 - C

1972 - Smalltalk

1972 - Prolog

1973 - ML

1975 - Scheme

1978 - SQL (inicialmente slo un lenguaje de consulta, posteriormente


ampliado con construcciones de programacin)

1978 - Modula-2
La dcada de 1980: consolidacin, mdulos, rendimiento

La dcada de 1980 fueron aos de consolidacin relativa en los lenguajes


imperativos. En vez de inventar nuevos paradigmas, se comenz a trabajar a
partir de las ideas inventadas en la dcada anterior. C++ combinaba la
programacin orientada a objetos y la programacin de sistemas. El gobierno de
Estados Unidos estandariz Ada, un lenguaje de programacin de sistemas
destinado a ser utilizado por contratistas de defensa. En Japn y en otras partes,
se gastaron enormes sumas investigando los llamados lenguajes de
programacin de quinta generacin que incorporaban construcciones de la
programacin lgica. La comunidad de los lenguajes funcionales llevaron a cabo
la estandarizacin de ML y Lisp. La investigacin en Miranda, un lenguaje
funcional, con evaluacin perezosa, comenz a tomar fuerza en esta dcada.

Una nueva tendencia importante en el diseo de lenguajes era un mayor enfoque


en la programacin de sistemas a gran escala a travs del uso de mdulos, una
organizacin a gran escala de unidades de cdigo. Modula, Ada, y ML
desarrollaron sistemas de mdulos notables en la dcada de 1980. Los sistemas
de mdulos eran relacionados con frecuencia con construcciones de
programacin genricas, que seran, en esencia, mdulos parametrizados
(vase tambin polimorfismo en programacin orientada a objetos).

Aunque no aparecan nuevos paradigmas de lenguajes de programacin


imperativos, muchos investigadores expandieron las ideas de los lenguajes
anteriores y las adaptaron a nuevos contextos. Por ejemplo, los lenguajes de los
sistemas Argus y Emerald adaptaron la programacin orientada a objetos para
sistemas distribuidos.

La dcada de 1980 tambin trajo avances en la implementacin de lenguajes de


programacin. El movimiento de RISC en la arquitectura de computadoras
postulaba que el hardware deba estar diseado para los compiladores ms que
para los programadores de ensamblador humanos. Con la ayuda de las mejoras
en la velocidad del procesador, permitiendo tcnicas de compilacin cada vez
ms agresivas, el movimiento RISC despert un mayor inters en la tecnologa
de compilacin de los lenguajes de alto nivel.
Las tecnologas de los lenguajes continuaron sobre estas lneas entrando en la
dcada de 1990.

Algunos lenguajes importantes que se desarrollaron en este perodo son:

1980 - C++ (C con clases, el nombre cambi en julio de 1983)

1983 - Ada

1984 - Common Lisp

1984 - MATLAB

1985 - Eiffel

1986 - Objective-C

1986 - Erlang

1987 - Perl

1988 - Tcl

1988 - Mathematica

1989 - FL (Backus);

La dcada de 1990: la era de Internet

El rpido crecimiento de Internet en la dcada de 1990 fue el siguiente gran


acontecimiento histrico para los lenguajes de programacin. Con la apertura de
una plataforma totalmente nueva para los sistemas informticos, Internet cre
una oportunidad adoptar nuevos lenguajes. En particular, el lenguaje de
programacin Java se hizo popular debido a su pronta integracin con el
navegador web Netscape Navigator, y varios lenguajes de scripting alcanzaron
un amplio uso en el desarrollo de aplicaciones personalizadas para servidores
web. La dcada de 1990 no vio ninguna novedad fundamental en los lenguajes
imperativos, pero s mucha recombinacin y la maduracin de viejas ideas. Esta
era comenz la difusin de los lenguajes funcionales. Una filosofa de
conduccin grande era la productividad del programador. Surgieron muchos
lenguajes de aplicaciones de desarrollo rpido (RAD), los cuales usualmente
venan con un IDE, recolector de basura, y eran descendientes de lenguajes
anteriores. Todos estos lenguajes eran orientados a objeto. Estos incluan Object
Pascal, Visual Basic y Java. Java, en particular, recibi mucha atencin. Pero
ms radicales e innovadores que los lenguajes de RAD eran los nuevos
lenguajes de script. Estos no descendan directamente de otros lenguajes y
ofrecieron nuevas sintaxis e incorporacin ms liberal de otras caractersticas.
Muchos consideran estos lenguajes de script ms productivos que los lenguajes
de RAD, aunque esto se debe a menudo a que es ms difcil escribir y mantener
largos programas que pequeos programas simples. Sin embargo, no es menos
cierto que los programas de script llegaron para convertirse en los ms
prominentes en la conexin con la Web.

Algunos lenguajes importantes que se desarrollaron en este perodo son:

1990 - Haskell

1991 - Python

1991 - Visual Basic

1991 - HTML (lenguaje de marcado de hipertexto)

1993 - Ruby

1993 - Lua

1994 - CLOS (parte del ANSI Common Lisp)

1995 - Java

1995 - Delphi (Object Pascal)

1995 - JavaScript

1995 - PHP

1996 - WebDNA

1997 - Rebol

1999 - D
Tendencias actuales

La evolucin de los lenguajes de programacin contina, tanto en la industria


como en investigacin. Algunas de las tendencias actuales incluyen:

Aumentar el soporte para la programacin funcional en lenguajes importantes


utilizados comercialmente, incluida la programacin funcional pura para hacer el
cdigo ms fcil de razonar y de paralelizar (tanto en macro como en micro-
niveles).

Construir lenguajes para apoyar la programacin concurrente y distribuida.

Mecanismos para aadir al lenguaje verificacin en cuanto a seguridad y


confiabilidad: chequeo sintctico extendido, control de flujo de informacin,
seguridad de hilos.

Mecanismos alternativos de modularidad: mixins, delegados, aspectos.

Desarrollo de software orientado a componentes.

Metaprogramacin, la reflexin o el acceso al rbol de sintaxis abstracta.

Mayor nfasis en cuanto a distribucin y movilidad.

Integracin con bases de datos, incluyendo XML y bases de datos


relacionales.

Soporte para Unicode para que el cdigo fuente (texto del programa) no se
limite slo a los caracteres contenidos en el conjunto de caracteres ASCII,
permitiendo, por ejemplo, el uso de caracteres no latinos basados en guiones o
signos de puntuacin extendidos.

XML para interfaz grfica (XUL, XAML).

El cdigo abierto como una filosofa de desarrollo de lenguajes, incluyendo la


coleccin de compiladores de GNU y lenguajes recientes, como Python, Ruby, y
Squeak.

Programacin Orientada a Aspectos (AOP).

Lenguajes que soporten programar sobre los procesadores de la GPU en


paralelo, como OpenCL.
Algunos lenguajes importantes desarrollados durante este perodo incluyen:

2000 - ActionScript

2001 - C#

2001 - Visual Basic .NET

2002 - F#

2003 - Groovy

2003 - Scala

2003 - Factor

2007 - Clojure

2009 - Go

2011 - Dart

Personas destacadas en la historia de los lenguajes de programacin

Joe Armstrong, creador de Erlang.

John Backus, inventor de Fortran.

Alan Cooper, desarrollador de Visual Basic.

Edsger W. Dijkstra, desarroll la estructura para la programacin estructurada.

James Gosling, desarrollador de Oak, precursor de Java.

Anders Hejlsberg, desarrollador de Turbo Pascal, Delphi y C#.

Grace Hopper, desarrolladora de Flow-Matic, influenciando el lenguaje


COBOL.

Kenneth E. Iverson, desarrollador de APL, y co-desarrollador de J junto a


Roger Hui.

Bill Joy, inventor de vi, autor de BSD Unix, creador de SunOS, el cual se
convirti en Solaris.

Alan Kay, pionero en programacin orientada a objetos, creador de Smalltalk.


Brian Kernighan, coautor del primer libro de programacin en lenguaje C con
Dennis Ritchie, y coautor de los lenguajes de programacin AWK y AMPL.

Yukihiro Matsumoto, creador de Ruby.

John McCarthy, inventor de LISP.

Bertrand Meyer, inventor de Eiffel.

Robin Milner, inventor de ML, y comparti crdito en el mtodo HindleyMilner


de inferencia de tipo polimrfica.

John von Neumann, creador del concepto de sistema operativo.

Martin Odersky, creador de Scala, y previamente contribuy en el diseo de


Java

Seymour Papert, pionero de la inteligencia artificial, inventor del lenguaje de


programacin Logo en 1968. .

Dennis Ritchie, inventor de C. Sistema Operativo Unix.

Nathaniel Rochester, inventor del primer lenguaje en ensamblador simblico


(IBM 701).

Guido van Rossum, creador de Python.

Bjarne Stroustrup, desarrollador de C++.

Ken Thompson, inventor de B, desarrollador de Go, y coauthor del sistema


operativo Unix.

Larry Wall, creador de Perl y Perl 6.

Niklaus Wirth, inventor de Pascal, Modula y Oberon.

Stephen Wolfram, creador de Mathematica.

Lenguajes de programacin

El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se


denomina el cdigo ejecutable y est compuesto por una serie de ceros y unos,
aparentemente sin significado. Dependiendo de la arquitectura del
microcontrolador, el cdigo binario est compuesto por palabras de 12, 14 o 16
bits de anchura. Cada palabra se interpreta por la CPU como una instruccin a
ser ejecutada durante el funcionamiento del microcontrolador. Todas las
instrucciones que el microcontrolador puede reconocer y ejecutar se les
denominan colectivamente Conjunto de instrucciones. Como es ms fcil
trabajar con el sistema de numeracin hexadecimal, el cdigo ejecutable se
representa con frecuencia como una serie de los nmeros hexadecimales
denominada cdigo Hex. En los microcontroladores PIC con las palabras de
programa de 14 bits de anchura, el conjunto de instrucciones tiene 35
instrucciones diferentes.

LENGUAJE ENSAMBLADOR

Como el proceso de escribir un cdigo ejecutable era considerablemente arduo,


en consecuencia fue creado el primer lenguaje de programacin denominado
ensamblador (ASM). Siguiendo la sintaxis bsica del ensamblador, era ms fcil
escribir y comprender el cdigo. Las instrucciones en ensamblador consisten en
las abreviaturas con significado y a cada instruccin corresponde una localidad
de memoria. Un programa denominado ensamblador compila (traduce) las
instrucciones del lenguaje ensamblador a cdigo mquina (cdigo binario).
HEste programa compila instruccin a instruccin sin optimizacin. Como
permite controlar en detalle todos los procesos puestos en marcha dentro del
chip, este lenguaje de programacin todava sigue siendo popular.

Ventajas de lenguajes de programacin de alto nivel

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


desventajas:

Incluso una sola operacin en el programa escrito en ensamblador


consiste en muchas instrucciones, hacindolo muy largo y difcil de
manejar.

Cada tipo de microcontrolador tiene su propio conjunto de instrucciones


que un programador tiene que conocer para escribir un programa

Un programador tiene que conocer el hardware del microcontrolador para


escribir un programa

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


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

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


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

Lenguaje C

El lenguaje C dispone de todas las ventajas de un lenguaje de programacin de


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

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


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

Dentro de los lenguajes en los que programamos rutinas para PIC existen tres
posibilidades:
Lenguaje BASIC

Lenguaje C

Lenguaje Ensamblador (assembler)

Un error comn que cometen los principiantes cuando se les menciona la


posibilidad de programar en Basic o C es pensar que con Visual Basic o Visual
C++ pueden elaborar rutinas para PICs, pero en realidad lo que se debe tener
en cuenta es que existen compiladores especiales para estos lenguajes y por
ende la sintaxis es diferente de la de un lenguaje orientado a objetos.
A continuacin veremos detalladamente cada una de las tres posibilidades
enumeradas anteriormente, cada una con sus ventajas y desventajas asi como
un sencillo ejemplo de aplicacin en cada una de ellas.
1. El lenguaje BASIC:

En la programacin de computadoras, siglas de Beginner's All-purpose Symbolic


Instruction Code1 (Cdigo simblico de instrucciones de propsito general para
principiantes en espaol), es una familia de lenguajes de programacin de alto
nivel. El BASIC original, el Dartmouth BASIC, fue diseado en 1964 por John
George Kemeny y Thomas Eugene Kurtz en el Dartmouth College en Nuevo
Hampshire, Estados Unidos, como un medio para facilitar la programacin en
ordenadores a estudiantes (y profesores) que no fueran de ciencias. De aquella,
casi todo el uso de los ordenadores requera codificar software hecho a medida,
con lo cual quedaba restringida a personas con formacin como cientficos y
matemticos. BASIC originalmente fue desarrollado como una herramienta de
enseanza. El lenguaje y sus variantes llegaron a estar ampliamente disponibles
en los microcomputadores a finales de los aos 1970 y en los aos 1980. BASIC
sigue siendo popular a da de hoy en un puado de dialectos altamente
modificados, y en nuevos lenguajes, influenciados por BASIC tales como
Microsoft Visual Basic o Gambas en GNU/Linux. En el ao 2006, el 59% de los
desarrolladores para la plataforma .NET usaban Visual Basic .NET como su
nico lenguaje.2

Es importante aclarar que una de las grandes desventajas en comparacin con


lenguajes como COBOL, RPG es que no maneja como parte integrada el acceso
a archivos directos o RANDOM. Se tena que apoyar en una aplicacin externa
para poder acceder de manera directa un registro de algn archivo.

El lenguaje BASIC fue inventado en 1964 por John George Kemeny (1926-1992)
y Thomas Eugene Kurtz (1928-) en el Dartmouth College. En aos subsiguientes,
mientras que otros dialectos de BASIC aparecan, el BASIC original de Kemeny
y Kurtz fue conocido como Dartmouth BASIC.
Ventajas:

Es un lenguaje muy simple y con instrucciones fcilmente legibles, incluso


por no expertos.

Desventajas:

Nunca vas a tener el control del programa en cuanto tiempos de ejecucin


y control de registros bit a bit.

Es muy complicado el manejo de interrupciones simultneas en este


lenguaje.
Tiene limitaciones cuando genera el archivo .hex, es decir no optimiza el
tamao de memoria de programa del PIC.

La mayora de compiladores para este lenguaje pueden utilizarse


nicamente bajo ambiente Windows.

Lenguaje C:

C es un lenguaje de programacin originalmente desarrollado por Dennis Ritchie


entre 1969 y 1972 en los Laboratorios Bell,2 como evolucin del anterior lenguaje
B, a su vez basado en BCPL.

Al igual que B, es un lenguaje orientado a la implementacin de Sistemas


Operativos, concretamente Unix. C es apreciado por la eficiencia del cdigo que
produce y es el lenguaje de programacin ms popular para crear software de
sistemas, aunque tambin se utiliza para crear aplicaciones.

Se trata de un lenguaje de tipos de datos estticos, dbilmente tipificado, de


medio nivel, ya que dispone de las estructuras tpicas de los lenguajes de alto
nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un
control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al
lenguaje que posibilitan mezclar cdigo en ensamblador con cdigo C o acceder
directamente a memoria o dispositivos perifricos.

La primera estandarizacin del lenguaje C fue en ANSI, con el estndar X3.159-


1989. El lenguaje que define este estndar fue conocido vulgarmente como ANSI
C. Posteriormente, en 1990, fue ratificado como estndar ISO (ISO/IEC
9899:1990). La adopcin de este estndar es muy amplia por lo que, si los
programas creados lo siguen, el cdigo es portable entre plataformas y/o
arquitecturas.
Ventajas:

Es un lenguaje de alto nivel mas cercano a la mquina.

Puedes construir rutinas matemticas fcilmente.

Puede ser de ayuda al combinarlo con Ensamblador sobre todo en la


gama alta.

Se pueden crear macros con este lenguaje, para despus simplificar el


cdigo en diferentes desarrollos.

Es aceptado por la empresa fabricante Microchip, incluso ellos tienen


algunos compiladores C.

Desventajas:

Los programas al compilarlos pueden resultar un poco extensos y


pesados por ello debe tenerse en cuenta la capacidad de memoria de
programa del PIC a utilizar.

Con este lenguaje tampoco se puede controlar del todo los tiempos y los
registros bit a bit.

Lenguaje Ensamblador:

El lenguaje ensamblador, o assembler (en ingls assembly language y la


abreviacin asm), es un lenguaje de programacin de bajo nivel. Consiste en un
conjunto de mnemnicos que representan instrucciones bsicas para los
computadores, microprocesadores, microcontroladores y otros circuitos
integrados programables. Implementa una representacin simblica de los
cdigos de mquina binarios y otras constantes necesarias para programar una
arquitectura de procesador y constituye la representacin ms directa del cdigo
mquina especfico para cada arquitectura legible por un programador. Cada
arquitectura de procesador tiene su propio lenguaje ensamblador que
usualmente es definida por el fabricante de hardware, y est basada en los
mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los
registros del procesador, las posiciones de memoria y otras caractersticas del
lenguaje. Un lenguaje ensamblador es por lo tanto especfico de cierta
arquitectura de computador fsica (o virtual). Esto est en contraste con la
mayora de los lenguajes de programacin de alto nivel, que idealmente son
porttiles.

Un programa utilitario llamado ensamblador es usado para traducir sentencias


del lenguaje ensamblador al cdigo de mquina del computador objetivo. El
ensamblador realiza una traduccin ms o menos isomorfa (un mapeo de uno a
uno) desde las sentencias mnemnicas a las instrucciones y datos de mquina.
Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola
declaracin generalmente da lugar a muchas instrucciones de mquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para


facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la
ayuda de depuracin. Particularmente, la mayora de los ensambladores
modernos incluyen una facilidad de macro (descrita ms abajo), y se llaman
macro ensambladores.

Fue usado principalmente en los inicios del desarrollo de software, cuando an


no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados.
Actualmente se utiliza con frecuencia en ambientes acadmicos y de
investigacin, especialmente cuando se requiere la manipulacin directa de
hardware, alto rendimiento, o un uso de recursos controlado y reducido. Tambin
es utilizado en el desarrollo de controladores de dispositivo (en ingls, device
drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del
acceso directo a las instrucciones de la mquina. Muchos dispositivos
programables (como los microcontroladores) an cuentan con el ensamblador
como la nica manera de ser manipulados.
Ventajas:

Es el lenguaje de bajo nivel natural de la lnea PIC tanto para gama baja,
media o alta.

Con el se tiene un aprovechamiento eficiente de los recursos del PIC.

Se pueden crear macros con este lenguaje, para despus simplificar el


cdigo en diferentes desarrollos.

Con el se pueden controlar los tiempos y los registros bit a bit.

Excelente para manejar interrupciones simultneas.

Cuando se genera el archivo .hex ste es completamente optimizado.

Desventajas:

En realidad desde mi punto de vista no existe ninguna, excepto cuando


no se tiene experiencia en programacin puede tardarse el desarrollo de
alguna rutina en comparacin con los otros lenguajes.
BIBLIOGRAFA

M. Verle (2009). Microcontroladores PIC Programacin


en C con ejemplos.
https://learn.mikroe.com/ebooks/microcontroladorespicc/

Vous aimerez peut-être aussi