Sunteți pe pagina 1din 0

E.E.

T N 460 Guillermo Lehmann


Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
1
Micro Controladores


PIC 16F628A

Arquitectura, Lenguajes de Programacin, Pic Simulator, El
Basic, Instrucciones, Manejo de LCD, Puerto Serie

















E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
2
Introduccin
Qu es un Microcontrolador?
Estructura de un Microprocesador
PIC16F628
Puertos del PIC 16F628
Lenguajes de Programacin
Lenguaje de Alto y Bajo Nivel
Pic simulator IDE
IC-Prog
JDM Programmer GTP USB Lite
El BASIC
Comportamiento Digital
Manejo de Instrucciones y Variables
LECTURA DE LA PROGRAMACION
ALLDIGITAL
TRISx
PORTx
Comillas
WAITMS - WaitUs
GOTO
DIM
SYMBOL
IF THEN ELSE
Ejercicios
FOR TO STEP NEXT
LOOKUP
SHIFTLEFT SHIFTRIGHT
WHILE WEND
GOSUB
FREQOUT
HSEROUT / HSERIN
Ejercicios
Manejo de LCD en PIC
El HD44780
PinOut del LCD HD44780
Ejemplos en BASIC
Bibliografa








E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
3







Introduccin:

Generalmente en cualquier proyecto electrnico que diseemos nos vemos en
situaciones donde un solo circuito integrado o bien la combinacin de estos con sus
aplicaciones especificas no siempre llegan a conformar el Proyecto que tenemos en
mente ya que, justamente, este o estos circuitos integrados poseen una sola aplicacin
especifica, es decir, sabemos por ejemplo que un CD4093 es una compuerta NANAD
Schmidt Trigger, pero es solo una compuerta por lo cual ese ser su trabajo, otro
ejemplo seria un CD4017 el cual es un registro de desplazamiento, solo cumple la
funcin de desplazar un bit por cada cambio de CLOCK, pero solo har esta tarea, si
queremos realizar algn proyecto donde variables como tiempo, entradas, salidas,
RS232, PWM, comparadores, etc deberamos juntar un puado de integrados con sus
aplicaciones especificas y congeniarlos para que en conjunto realice nuestro Proyecto.
La pregunta seria Funcionaria?, Posiblemente si, o bien en parte, o en el peor de los
casos estos integrados no serian del todo compatibles ya sea por diferencias en la
alimentacin de cada Integrado, la sincronizacin entre cada uno de ellos y otros
factores a tener en cuenta, y ni hablar del diseo del PCB con tantos integrados.-
Pero bien, que podemos hacer entonces. Y si les digo que estas variables y funciones la
puede ejercer un solo integrado, que el mismo puede hacer casi cualquier funcion que
necesitemos, que adems se pueda Programar como quisiramos y que solo nos
puede ocupar 18 Pines, que cada Pin lo puedo programar para que haga tal o cual
trabajo, y que el PCB solo posea uno y solo un integrado...seria genial no!
Perfecto!!!....les presento al MICROCONTROLADOR


Qu es un Microcontrolador?

Un Microcontrolador es un dispositivo electrnico programable capaz de realizar tareas
que el usuario programe. Este esta formado por una CPU, una Memoria RAM, una
Memoria ROM, Puertos de Entrada y Salida, etc. Lo que nos da una idea de lo que
comnmente vemos, una PC.
Sabemos que una PC esta formada por una CPU, Memoria, Disco Rgido, Teclado,
Monitor. Un microprocesador es exactamente igual ,salvando distancia en cuanto a
tamao y capacidades obviamente, veremos que el mismo posee una CPU donde realiza
operaciones aritmticas, una Memoria RAM donde lleva a cabo los movimientos de los

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
4
Bits, Una ROM donde guarda el programa que generemos y unos Puertos de entrada y
Salida.
Hay que tener en cuenta que un Microcontrolador al energizarlo, este no har
absolutamente nada si no tiene una programacin, es decir, el Micro tal como lo
compramos viene vacio, ser nuestro trabajo programarlo de forma correcta para que
realice las operaciones que queremos que haga.
Pero antes de entrar a la Programacin del Micro veamos cmo est Construido un
Microcontrolador.

Estructura de un Microprocesador


Figura: 1. Estructura bsica de un microcontrolador
En esta figura, vemos al microcontrolador metido dentro de un encapsulado de circuito
integrado, con su procesador (CPU), buses, memoria, perifricos y puertos de entrada
salida. Fuera del encapsulado se ubican otros circuitos para completar perifricos internos y
dispositivos que pueden conectarse a los pines de entrada/salida. Tambin se conectarn a
los pines del encapsulado la alimentacin, masa, circuito de completamiento del oscilador y
otros circuitos necesarios para que el microcontrolador pueda trabajar.
Una de las ventajas que tenemos con algunos de los microprocesadores actuales es que
estos poseen una memoria EEPROM o E2PROM (Electrical Erasable Programmable Read
Only Memory) es decir, posee una Memoria elctricamente programable de solo lectura.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
5
Esta ventaja nos da la posibilidad de modificar miles de veces nuestro programa ya sea por
correccin del programa o bien para futuras modificaciones.
Registros
Son un espacio de memoria muy reducido pero necesario para cualquier microprocesador,
de aqu se toman los datos para varias operaciones que debe realizar el resto de los circuitos

del procesador. Los registros sirven para almacenar los resultados de la ejecucin de
instrucciones, cargar datos desde la memoria externa o almacenarlos en ella.
En realidad los registros es una de las partes ms importantes de un Microprocesador, esta
nos da lacapacidad de nuestro Micro,
Cuando escuchamos que un procesador es de 4, 8, 16, 32 64 bits, nos estamos refiriendo a
procesadores que realizan sus operaciones con registros de datos de ese tamao, y por
supuesto, esto determina muchas de las potencialidades de estas mquinas.
Mientras mayor sea el nmero de bits de los registros de datos del procesador, mayores
sern sus prestaciones, en cuanto a poder de cmputo y velocidad de ejecucin, ya que este
parmetro determina la potencia que se puede incorporar al resto de los componentes del
sistema, por ejemplo, no tiene sentido tener una ALU* de 16 bits en un procesador de 8
bits.
*ALU (Aritmetric Logila Unit o Unidad Lgica Aritmtica)
Por otro lado un procesador de 16 bits, puede que haga una suma de 16 bits en un solo ciclo
de mquina, mientras que uno de 8 bits deber ejecutar varias instrucciones antes de tener
el resultado, an cuando ambos procesadores tengan la misma velocidad de ejecucin para
sus instrucciones. El procesador de 16 bits ser ms rpido porque puede hacer el mismo
tipo de tareas que uno de 8 bits, en menos tiempo.
Unidad de control
Esta unidad es de las ms importantes en el procesador, en ella recae la lgica necesaria
para la decodificacin y ejecucin de las instrucciones, el control de los registros, la ALU,
los buses y cuanta cosa ms se quiera meter dentro del procesador. No hay nada dentro de
un procesador que escape a las garras de la unidad de control. La unidad de control es Dios
en el procesador, es omnipotente y omnipresente, todos tienen que rendirle y nadie escapa a
su voluntad.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
6
La unidad de control es uno de los elementos fundamentales que determinan las
prestaciones del procesador, ya que su tipo y estructura, determina parmetros tales como el
tipo de conjunto de instrucciones, velocidad de ejecucin, tiempo del ciclo de mquina, tipo
de buses que puede tener el sistema, manejo de interrupciones y un buen nmero de cosas
ms que en cualquier procesador van a para a este bloque. Por supuesto, las unidades de
control, son el elemento ms complejo de un procesador y normalmente estn divididas en
unidades ms pequeas trabajando de conjunto. La unidad de control agrupa componentes
tales como la unidad de decodificacin, unidad de ejecucin, controladores de memoria
cache, controladores de buses, controladores de interrupcin, pipelines, entre otros
elementos, dependiendo siempre del tipo de procesador.
Unidad aritmtica y lgica
Como los procesadores son circuitos que hacen bsicamente operaciones lgicas y
matemticas, se le dedica a este proceso una unidad completa, con cierta independencia.
Aqu es donde se realizan las sumas, restas, y operaciones lgicas tpicas del lgebra de
Boole.
Actualmente este tipo de unidades ha evolucionado mucho y los procesadores ms
modernos tienen varias ALU, especializadas en la realizacin de operaciones complejas
como las operaciones en coma flotante. De hecho en muchos casos le han cambiado su
nombre por el de coprocesador matemtico, aunque este es un trmino que surgi para
dar nombre a un tipo especial de procesador que se conecta directamente al procesador ms
tradicional.
Su impacto en las prestaciones del procesador es tambin importante porque, dependiendo
de su potencia, tareas ms o menos complejas, pueden hacerse en tiempos muy cortos,
como por ejemplo, los clculos en coma flotante.
Buses
Son el medio de comunicacin que utilizan los diferentes componentes del procesador para
intercambiar informacin entre s, eventualmente los buses o una parte de ellos estarn
reflejados en los pines del encapsulado del procesador.
En el caso de los microcontroladores, no es comn que los buses estn reflejados en el
encapsulado del circuito, ya que estos se destinan bsicamente a las E/S de propsito
general y perifricos del sistema.
Existen tres tipos de buses:

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
7
Direccin: Se utiliza para seleccionar al dispositivo con el cual se quiere trabajar o en el
caso de las memorias, seleccionar el dato que se desea leer o escribir.
Datos
Control: Se utiliza para gestionar los distintos procesos de escritura lectura y controlar la
operacin de los dispositivos del sistema.
Conjunto de instrucciones
Aunque no aparezca en el esquema, no podamos dejar al conjunto o repertorio de
instrucciones fuera de esta fiesta, porque este elemento determina lo que puede hacer el
procesador.
Define las operaciones bsicas que puede realizar el procesador, que conjugadas y
organizadas forman lo que conocemos como software. El conjunto de instrucciones vienen
siendo como las letras del alfabeto, el elemento bsico del lenguaje, que organizadas
adecuadamente permiten escribir palabras, oraciones y cuanto programa se le ocurra.
Aqu es donde centraremos atencin ms adelante y donde veremos las instrucciones ms
conocidas para el tratamiento de seales DIGITALES
Memoria
Anteriormente habamos visto que la memoria en los microcontroladores debe estar
ubicada dentro del mismo encapsulado, esto es as la mayora de las veces, porque la idea
fundamental es mantener el grueso de los circuitos del sistema dentro de un solo integrado.
En los microcontroladores la memoria no es abundante, aqu no encontrar Gigabytes de
memoria como en las computadoras personales. Tpicamente la memoria de programas no
exceder de 16 K-localizaciones de memoria no voltil para instrucciones y la memoria
RAM ni siquiera llegar a exceder los 5 Kilobytes.
La memoria RAM est destinada al almacenamiento de informacin temporal que ser
utilizada por el procesador para realizar clculos u otro tipo de operaciones lgicas. En el
espacio de direcciones de memoria RAM se ubican adems los registros de trabajo del
procesador y los de configuracin y trabajo de los distintos perifricos del
microcontrolador. Es por ello que en la mayora de los casos, aunque se tenga un espacio de
direcciones de un tamao determinado, la cantidad de memoria RAM de que dispone el
programador para almacenar sus datos es menor que la que puede direccionar el
procesador.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
8
El tipo de memoria utilizada en las memorias RAM de los microcontroladores es SRAM, lo
que evita tener que implementar sistemas de refrescamiento como en el caso de las
computadoras personales, que utilizan gran cantidad de memoria, tpicamente alguna
tecnologa DRAM. A pesar de que la memoria SRAM es ms costosa que la DRAM, es el
tipo adecuado para los microcontroladores porque stos poseen pequeas cantidades de
memoria RAM.
En el caso de la memoria de programas se utilizan diferentes tecnologas, y el uso de una u
otra depende de las caractersticas de la aplicacin a desarrollar, a continuacin se
describen las cinco tecnologas existentes, que mayor utilizacin tienen o han tenido, hasta
el momento de escribir este libro:
ROM de mscara. En este caso no se graba el programa en memoria sino que el
microcontrolador se fabrica con el programa, es un proceso similar al de produccin de los
CD comercial mediante masterizacin.
El costo inicial de producir un circuito de este tipo es alto, porque el diseo y produccin de
la mscara es un proceso costoso, sin embargo, cuando se necesitan varios miles o incluso
cientos de miles de microcontroladores para una aplicacin determinada, como por
ejemplo, algn electrodomstico, el costo inicial de produccin de la mscara y el de
fabricacin del circuito se distribuye entre todos los circuitos de la serie y, el costo final de
sta, es bastante menor que el de sus semejantes con otro tipo de memoria.
TP One Time Programmable. Este tipo de memoria, tambin es conocida como PROM o
simplemente ROM.
Los microcontroladores con memoria OTP se pueden programar una sola vez, con algn
tipo de programador. Se utilizan en sistemas donde el programa no requiera futuras
actualizaciones y para series relativamente pequeas, donde la variante de mscara sea muy
costosa, tambin para sistemas que requieren serializacin de datos, almacenados como
constantes en la memoria de programas.
EPROM Erasable Programmable Read Only Memory. Los microcontroladores con este
tipo de memoria son muy fciles de identificar porque su encapsulado es de cermica y
llevan encima una ventanita de vidrio desde la cual puede verse la oblea de silicio del
microcontrolador.
Se fabrican as porque la memoria EPROM es reprogramable, pero antes debe borrase, y
para ello hay que exponerla a una fuente de luz ultravioleta, el proceso de grabacin es
similar al empleado para las memorias OTP. Al aparecer tecnologas menos costosas y ms
flexibles, como las memorias EEPROM y FLASH, este tipo de memoria han cado en

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
9
desuso, se utilizaban en sistemas que requieren actualizaciones del programa y para los
procesos de desarrollo y puesta a punto.
EEPROM Electrical Erasable Programmable Read Only Memory. Fueron el sustituto
natural de las memorias EPROM, la diferencia fundamental es que pueden ser borradas
elctricamente, por lo que la ventanilla de cristal de cuarzo y los encapsulados cermicos
no son necesarios.
Al disminuir los costos de los encapsulados, los microcontroladores con este tipo de
memoria se hicieron ms baratos y cmodos para trabajar que sus equivalentes con
memoria EPROM. Otra caracterstica destacable de este tipo de microcontrolador es que
fue en ellos donde comenzaron a utilizarse los sistemas de programacin en circuito o ICSP
(In Circuit Serial Progamming) que evitan tener que sacar el microcontrolador de la tarjeta
que lo aloja para hacer actualizaciones al programa.
FLASH. En el campo de las memorias reprogramables para microcontroladores, son el
ltimo avance tecnolgico en uso a gran escala, y han sustituido a los microcontroladores
con memoria EEPROM.
A las ventajas de las memorias FLASH se le adicionan su gran densidad respecto a sus
predecesoras lo que permite incrementar la cantidad de memoria de programas a un costo
muy bajo. Pueden adems ser programadas con las mismas tensiones de alimentacin del
microcontrolador, el acceso en lectura y la velocidad de programacin es superior,
disminucin de los costos de produccin, entre otras. Lo ms habitual es encontrar que la
memoria de programas y datos est ubicada toda dentro del microcontrolador, de hecho,
actualmente son pocos los microcontroladores que permiten conectar memoria de
programas en el exterior del encapsulado. Las razones para estas limitaciones estn dadas
porque el objetivo fundamental es obtener la mayor integracin posible y conectar
memorias externas consume lneas de E/S que son uno de los recursos ms preciados de los
microcontroladores. A pesar de lo anterior existen familias como la INTEL 51 cuyos
microcontroladores tienen la capacidad de ser expandidos en una variada gama de
configuraciones para el uso de memoria de programas externa. En el caso de los PIC, estas
posibilidades estn limitadas slo a algunos microcontroladores de la gama alta, la Figura 5
muestra algunas de las configuraciones para memoria de programa que podemos encontrar
en los microcontroladores. La configuracin (a) es la tpica y podemos encontrarla casi en
el 100% de los microcontroladores. La configuracin (b) es poco frecuente y generalmente
se logra configurando al microcontrolador para sacrificar la memoria de programas interna,
sin embargo el 8031 de INTEL es un microcontrolador sin memoria de programas interna.
La configuracin (c) es la que se encuentra habitualmente en los microcontroladores que
tienen posibilidades de expandir su memoria de programas como algunos PIC de gama alta.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
10

Figura 5. Algunas configuraciones para memoria de programas en
microcontroladores
Cuando se requiere aumentar la cantidad de memoria de datos, lo ms frecuente es colocar
dispositivos de memoria externa en forma de perifricos, de esta forma se pueden utilizar
memorias RAM, FLASH o incluso discos duros como los de las PC, mientras que para los
clculos y dems operaciones que requieran almacenamiento temporal de datos se utiliza la
memoria RAM interna del microcontrolador. Esta forma de expandir la memoria de datos
est determinada, en la mayora de lo casos, por el tipo de repertorio de instrucciones del
procesador y porque permite un elevado nmero de configuraciones distintas, adems del
consiguiente ahorro de lneas de E/S que se logra con el uso de memorias con buses de
comunicacin serie.


Interrupciones
Para entender de una manera ms fcil que son las Interrupciones daremos un ejemplo
cotidiano:
Imagine que est esperando la visita de un amigo, al que llamaremos Juan. Usted y Juan
han acordado que cuando l llegue a su casa esperar pacientemente a que le abra la puerta.
Juan no debe tocar a la puerta porque alguien en la casa duerme y no quiere que le
despierten.
Ahora usted ha decidido leer un libro mientras espera a que Juan llegue a la casa, y para
comprobar si ha llegado, cada cierto tiempo detiene la lectura, marca la pgina donde se
qued, se levanta y va hasta la puerta, abre y comprueba si Juan ha llegado, si ste todava
no est en la puerta, esperar unos minutos, cerrar la puerta y regresar a su lectura
durante algn tiempo.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
11
Como ver este es un mtodo poco eficiente para esperar a Juan porque requiere que deje la
lectura cada cierto tiempo y vaya hasta la puerta a comprobar si l ha llegado, adems debe
esperar un rato si todava no llega. Y por si fuera poco, imagine que Juan no llega nunca
porque se le present un problema, tuvo que cancelar la cita y no pudo avisarle a tiempo, o
peor, que Juan ha llegado a la puerta un instante despus que usted la cerraba. Juan,
respetando lo acordado, espera un tiempo, pero se cansa de esperar a que le abran y decide
marcharse porque cree que ya usted no est en la casa o no puede atenderlo. A este mtodo
de atender la llegada de Juan lo llamaremos encuesta.
Veamos ahora otro mtodo. En esta ocasin simplemente se recuesta en el sof de la sala y
comienza a leer su libro, cuando Juan llegue debe tocar el timbre de la puerta y esperar
unos momentos a que le atiendan. Cuando usted oye sonar el timbre, interrumpe la lectura,
marca la pgina donde se qued y va hasta la puerta para atender a la persona que toca el
timbre. Una vez que Juan o la persona que ha tocado el timbre, se marcha, usted regresa a
su asiento y retoma la lectura justo donde la dej. Este ltimo es un mtodo ms eficiente
que el anterior porque le deja ms tiempo para leer y elimina algunos inconvenientes como
el de que Juan nunca llegue o se marche antes de que usted abra la puerta. Es, en principio,
un mtodo simple pero muy eficaz y eficiente, lo llamaremos atencin por interrupcin.
Los ejemplos anteriores, nos sirven para introducir los dos mtodos de trabajo que existen
para la atencin de procesos en el mundo de los microcontroladores. Estos ejemplos no son
de mi creacin, pero gracias a ellos comprend cmo es que se atiende a los procesos
cuando utilizamos microcontroladores.
El primero de ellos, la encuesta, es un mtodo eficaz, pero poco eficiente porque requiere
realizar lecturas constantes y muchas veces innecesarias del estado del proceso que
queremos atender. Sin embargo, es muy utilizado en la programacin de
microcontroladores porque resulta fcil de aprender, la implementacin de cdigo con este
mtodo es menos compleja y no requiere de hardware especial para llevarla adelante. Por
otra parte, la encuesta, tiene muchas deficiencias que con frecuencia obligan al diseador a
moverse hacia otros horizontes
El mundo est lleno de situaciones; de las cuales no podemos determinar ni cuando, ni
como ni por qu se producen, en la mayora de los casos lo nico que podemos hacer es
enterarnos de que determinada situacin, asociada a un proceso, ha ocurrido. Para ello
seleccionamos alguna condicin o grupo de condiciones que nos indican que el proceso que
nos interesa debe ser atendido, a este fenmeno, en el cual se dan las condiciones que nos
interesa conocer, lo llamaremos evento. En el segundo ejemplo vemos que para atender a
Juan, ste debe tocar el timbre, por tanto, la llegada de Juan es el proceso que debemos
atender y el sonido del timbre es el evento que nos indica que Juan ha llegado.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
12
El mtodo de atencin a procesos por interrupcin, visto desde la ptica del ejemplo que
utilic para mostrarlo, es ms simple que el de la encuesta, pero no es cierto, el mtodo se
complica porque requiere que el microprocesador incorpore circuitos adicionales para
registrar los eventos que le indican que debe atender al proceso asociado y comprender
estos circuitos y su dinmica no es una tarea sencilla.
Los circuitos para la atencin a las interrupciones y todas las tareas que debe realizar el
procesador para atender al proceso que lo interrumpe son bastante complejos y requieren
una visin diferente de la que estamos acostumbrados a tener de nuestro mundo.
Los seres humanos no estamos conscientes de las interrupciones, en nuestro organismo
existen mecanismos que nos interrumpen constantemente, para ello tenemos a nuestro
sistema sensorial, pero no somos conscientes del proceso de interrupcin, aunque s de la
atencin a las interrupciones. Eso es porque incorporamos mecanismos que nos sacan
rpidamente de la tarea que estemos haciendo para atender una situacin que no puede o no
debe esperar mucho tiempo. Bien, esa misma es la idea que se incorpora en los
microprocesadores para atender procesos que no pueden esperar o que no sabemos cuando
deben ser atendidos porque ello depende de determinadas condiciones.
La cosa se complica en la secuencia de acciones a realizar desde el momento en que se
desencadena el proceso de interrupcin, hasta que se ejecuta el programa que lo atiende, y
en la secuencia de acciones posteriores a la atencin. Piense en cuantas cosas debe hacer su
organismo ante una interrupcin, utilicemos el segundo ejemplo para atender la llegada de
Juan. Piense en cuantas cosas su cerebro hace a espaldas de su conciencia, desde el
momento en que suena el timbre hasta que usted se encuentra listo (consciente de que es
probable que Juan ha llegado) para abrir la puerta, y todo lo que su cerebro debe trabajar
para retomar la lectura despus que Juan se ha marchado. Todo eso, excepto abrir la puerta
y atender a Juan, lo hacemos de forma inconsciente porque para ello tenemos sistemas
dedicados en nuestro organismo, pero en el mundo de los microcontroladores debemos
conocer todos esos detalles para poder utilizar los mecanismos de interrupcin.
Los procesos de atencin a interrupciones tienen la ventaja de que se implementan por
hardware ubicado en el procesador, as que es un mtodo rpido de hacer que el procesador
se dedique a ejecutar un programa especial para atender eventos que no pueden esperar por
mecanismos lentos como el de encuesta.
En trminos generales, un proceso de interrupcin y su atencin por parte del procesador,
tiene la siguiente secuencia de acciones.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
13
En el mundo real se produce el evento para el cual queremos que el procesador ejecute un
programa especial, este proceso tiene la caracterstica de que no puede esperar mucho
tiempo antes de ser atendido o no sabemos en que momento debe ser atendido.
El circuito encargado de detectar la ocurrencia del evento se activa, y como consecuencia,
activa la entrada de interrupcin del procesador.
La unidad de control detecta que se ha producido una interrupcin y levanta una bandera
para registrar esta situacin; de esta forma si las condiciones que provocaron el evento
desaparecen y el circuito encargado de detectarlo desactiva la entrada de interrupcin del
procesador, sta se producir de cualquier modo, porque ha sido registrada.
La unidad de ejecucin termina con la instruccin en curso y justo antes de comenzar a
ejecutar la siguiente comprueba que se ha registrado una interrupcin
Se desencadena un proceso que permite guardar el estado actual del programa en ejecucin
y saltar a una direccin especial de memoria de programas, donde est la primera
instruccin de la subrutina de atencin a interrupcin.
Se ejecuta el cdigo de atencin a interrupcin, esta es la parte consciente de todo el
proceso porque es donde se realizan las acciones propias de la atencin a la interrupcin y
el programador juega su papel.
Cuando en la subrutina de atencin a interrupcin se ejecuta la instruccin de retorno, se
desencadena el proceso de restauracin del procesador al estado en que estaba antes de la
atencin a la interrupcin.
Como podemos observar, el mecanismo de interrupcin es bastante complicado, sin
embargo tiene dos ventajas que obligan a su implementacin: la velocidad y su capacidad
de ser asincrnico. Ambas de conjunto permiten que aprovechemos al mximo las
capacidades de trabajo de nuestro procesador.
Los mecanismos de interrupcin no solo se utilizan para atender eventos ligados a procesos
que requieren atencin inmediata sino que se utilizan adems para atender eventos de
procesos asincrnicos.
Las interrupciones son tan eficaces que permiten que el procesador acte como si estuviese
haciendo varias cosas a la vez cuando en realidad se dedica a la misma rutina de siempre,
ejecutar instrucciones una detrs de la otra.



E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
14
PIC16F628

Ya hablamos de la arquitectura del Micro, sus registros e Interrupciones, pues bien
hablemos entonces del PIC.
Centraremos nuestro estudio a esta Familia de Micros, si bien existen el el Mercado una
gran variedad de micros de diferentes Familias y Empresas que los desarrollan y Fabrican
segn sus especificaciones y diseos, nosotros dedicaremos nuestro estudio a la Empresa
MicroChip y especialmente a el verstil 16F628.

Como podemos ver en la figura siguiente este micro consta de 16 pines de mltiple
propsito ms 2 pines de Alimentacin, necesarios en cualquier circuito.


Como se puede ver el micro consta de 2 Puertos, el Puerto A y el Puerto B y a la vez cada
puerto contiene 8 pines que van desde RA0 a RA7 y RB0 a RB7
La alimentacin de estos Circuitos Integrados es de 3.3Volts a 5Volts.


NO USAR UN VOLTAJE SUPERIOR A 5.5 VOLTS, UN VOLTAJE SUPERIOR
PODRIA DAARLO PERMANENTEMENTE




Como se puede ver, cada pin tiene asociado una caracterstica particular, estas caracterstica
son las funciones que pueden o no ser utilizadas por nosotros, es decir, podemos trabajar
con salidas netamente Digitales (0 y 1) o bien utilizar la funcin con la que viene alojada en
el micro con solo habilitarlo por Software

Estas caractersticas son:

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
15
Caracterstica Propiedad
Memoria de programa 1 KBytes)
Memoria SRAM 224 Bytes
Memoria EEPROM 128 Bytes
Pines de E/S 16
Entradas analgicas (ADC) No
Salidas PWM 2
SPI No
I2C No
USART Si
Temporizadores de 8 Bits 2
Temporizadores de 16 Bits 1
Comparadores 2
Oscilador
Frecuencia mxima: 20 MHz
Oscilador interno de 4 MHz.
Nmero de pines 18
Encapsulado PDIP, SOIC, SSOP, QFN





Puertos del PIC 16F628

Como dijimos anteriormente el 16f628 posee 2 puertos con 8 salidas cada una, si bien el
estudio que daremos en este curso es solo digital nombraremos las caractersticas
analgicas y funciones solo para saber el potencial de nuestro Micro.

PUERTO A
RA.0 = AN0 Entrada Comparadora 1

RA.1 = AN1 Entrada Comparadora 2

RA.2 = AN2/Vref Entrada Comparadora 3 - Voltaje de referencia

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
16

RA.3 = AN3/CMP1 Entrada Comparadora 4 - Salida Comparador 1

RA.4 = TOCKI/CMP2 Entrada de Clock para TMR0
______
RA.5 =MCLR/Vpp Master Clear (reset) y Voltaje de programacin

RA.6 = OSC/CLKOUT Oscilador Externo Clock Output

RA.7 = OSC/CLKIN Oscilador Externo Clock Input

PUERTO B
RB.0 = INT Interrupcin Externa
RB.1 = RX/DT Recepcion USART
RB.2 = TX/CK Transmisin USART
RB.3 = CCP1 Captura Comparador
RB.4 = PGM Pin Habilitacin del Programacin del micro
RB.5 = Propsito general
RB.6 = T1OSI/PGD Timmer 1 Oscilador Input Prog. DATA
RB.7 = T1OSO/T1CKI/PGC Timmer 1 Oscilador Output Prog. CLOCK






Lenguajes de Programacin

Bien, avanzaremos en lo que nos interesa, la programacin del micro.
Si bien nos podemos encontrar con varios lenguajes de programacin (C++, Assembler,
BASIC, PIC Basic) el lenguaje que usaremos para esta materia es el BASIC.

Veamos algunos ejemplos

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
17

Basic:
AllDigital
inicio:
If PORTA.0 = 1 Then GOTO inicio

Significara, Si la puerta 0 es igual a 1 entonces ir a Inicio

Assembler:

; Begin
R0L EQU 0x20
R0H EQU 0x21
R1L EQU 0x22
R1H EQU 0x23
R2L EQU 0x24
R2H EQU 0x25
R3L EQU 0x26
R3H EQU 0x27
R4L EQU 0x28
R4H EQU 0x29
R5L EQU 0x2A
R5H EQU 0x2B
ORG 0x0000
BCF PCLATH,3
BCF PCLATH,4
GOTO L0002
ORG 0x0004
RETFIE
L0002:
; 1: AllDigital
MOVLW 0x07
MOVWF 0x1F
; 2: inicio:
L0001:
; 3: If PORTA.0 = 1 Then GOTO inicio
BTFSS 0x05,0
GOTO L0003
GOTO L0001
L0003: MOVLW 0x1F
ANDWF STATUS,F
; End of program
L0004: GOTO L0004
; End of listing
END

Esta claro que en Basic es mucho mas fcil no!, pero para que nos sirve Assembler
entonces?, Como vimos cualquier de los lenguajes nombrados deben terminar en un
lenguaje que el micro entienda (Binario), obviamente que no podramos estar a un nivel de
lenguaje de mquina, es decir, programando o escribiendo en ceros y unos, pero si
acercarnos





E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
18
Lenguaje de Alto y Bajo Nivel

El BASIC es un lenguaje de Alto Nivel, mientras otros como el Assembler son de Bajo
Nivel Qu significa Alto y Bajo Nivel?
Se define como alto nivel aquel lenguaje que est ms cerca de ser comprendido por el
usuario, (Basic, C++, etc.) Al fin y al cabo los dos llegaran al mismo propsito, con
significativas diferencias en cuanto a la eficiencia dada por las instrucciones y ocupacin
de memoria, es un lenguaje intuitivo y consta de palabras o instrucciones fciles de
entender.
Por el otro lado un lenguaje de Bajo Nivel es aquel que esta mas cerca del lenguaje de
Maquina (Binario).
Pero sigue la incgnita, para que me sirve Assembler?
Este lenguaje es muy utilizado en cuestiones donde la velocidad de respuesta, tiempos y
dems cuestiones muy significativas entran en juego, es decir, donde la mnima variacin
de un bit cuenta, no nos referimos a un bit en cuanto a entradas, sino a bit en cada
instruccin o contador del programa (CP) que puede variar en un salto de ciclo a otro en
cuestin de micro segundos.

Pero para el uso que le vamos a dar en nuestro Curso nos es suficiente entender BASIC,
queda a criterio del estudiante ahondar mas sobre el tema y por qu no, programar en
Assembler

Sigamos.

Vimos que un compilador es aquel que traduce nuestro programa a un cdigo el cual es
entendido por nuestro dispositivo (Pc, Micro Controlador,) la eficiencia del compilador
estar dada por el menor recurso utilizado (Ocupacin de Memoria) y el mejor rendimiento
o desempeo para nuestra tarea

Un compilador entonces es un programa informtico que traduce un programa escrito en un
lenguaje de programacin a otro lenguaje de programacin, en nuestros caso ser un
traductor de un lenguaje de alto nivel, a su cdigo mquina absoluto o reubicable
equivalente.

Adems sabemos tambin que un integrado cualquier trabaja con 0 y 1, entonces cualquier
de estos lenguajes indefectiblemente deber terminar en un cdigo BINARIO.


Otro Punto Importante es el QUEMADOR, este Dispositivo sirve para grabar en el Micro
la programacin de la que hablamos anteriormente. Es necesario tanto el Software como el
Hardware para realizar este propsito, en nuestro caso usaremos tanto WINPIC como el IC-
Prog que son los que soportan el circuito JDM Programmer el cual es sencillo de fabricar
Este Dispositivo utiliza el Puerto RS-232 y no requiere alimentacin externa por lo cual lo
hace mas practico. El circuito puede ser consultado desde Internet en la siguiente direccin
http://www.jdm.homepage.dk/newpic.htm

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
19



Pic simulator IDE

Existe una herramienta que nos ayudara a la hora de realizar nuestros proyectos, este
Software es un Simulador que contiene varias herramientas internas como Matriz de Led,
Motores PaP, LCD, Internas RS232, teclado ademas de contar con un programador en
BASIC y un COMPLIADOR que transformara nuestro Proyecto a lenguaje maquina
Este programa ser donde el estudiante har sus simulaciones, la misma cuenta con varios
accesorios para que el estudiante hagas sus pruebas, simulaciones y programas en BASIC.
Con el aprender varias de las instrucciones que usa este excelente programa y podr
realizar proyectos con muy buenos resultados.
Este puede ser descargado desde su Web en la siguiente Direccin

http://www.oshonsoft.com/pic.html
Veamos la presentacin de Software


En la pgina podrn encontrar las instrucciones con las que trabaja este Prctico programa
el cual ser utilizado en nuestros proyectos ya que cuenta con la posibilidad de Simular
antes de quemar nuestro PIC


E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
20
IC-Prog

Ya veremos la programacin y como trabajar sobre el PIC, pero debemos saber que una
herramienta fundamental a la hora de ingresarle la programacin al PIC es el
Quemador.Este quemador no es mas ni menos que una herramienta la cual esta conectada
a una PC y es la encargada de enviarle nuestra programacin en lenguaje maquina (0 y 1)
por medio de Impulsos Elctricos.
Esto se logra con otro Software llamado IC-Prog que puede ser descargado desde su web
http://www.ic-prog.com/

JDM Programmer RS-232

Pero bien, nos falta algo, con que lo vamos a Quemar a nuestro PIC, nos hace falta el
HARDWARE para realizarlo.
Existe una variedad interesante de programadores PIC, por medio de RS232, USB, Puerto
Paralelo, pero todos hacen exactamente lo mismo, ms rpido o ms lento pero todos llegan
al mismo fin, grabar nuestro PIC
El JDM Programmer es un programador que podemos realizar en forma casera con
resultados ptimos
El GTP USB Lite es un poco mas avanzado pero con resultados en cuanto a velocidad y
compatibilidad, ya que las PC de ultima generacin no poseen puerto Serial pero si USB.
Queda a criterio del Alumno hacer uno u otro programador, aqu les presentamos el JDM,
pero no quita que el alumno realice el GTP USB Lite

Circuito del JDM Programmer:


E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
21











El BASIC en PIC Simulator

Como mencionamos anteriormente el lenguaje que vamos a utilizar es el BASIC, ya sea
porque es bastante fcil de entender y adems para nuestros proyectos como se dijo antes,
nos alcanza y sobra.





E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
22
Comportamiento Digital

Vamos a ver tambin el comportamiento digital, la idea es que sepan trabajar primero
sabiendo este tipo de comportamiento en los Micro y luego ir avanzando en la parte
analgica.
De esta forma las salidas sern 0 o 1 es decir, Vcc o Vdd, encender o apagar, pulsado o no
pulsado, entonces trabajaremos entre estos dos valores discretos.

Empecemos

Instrucciones y Variables

Instruccin:
Es un conjunto de datos insertados en una secuencia estructurada o especfica que el
procesador interpreta y ejecuta., es como si alguien no dara una orden y la cumpliramos
tal cual al pie de la letra, de esta forma trabaja un micro, obedeciendo nuestras
instrucciones.
Generalmente una instruccin viene acompaada de una variable, pues bien, que es una
variable.
En programacin, las variables son estructuras de datos que, como su nombre indica,
pueden cambiar de contenido a lo largo de la ejecucin de un programa
Ejemplo:
Instruccin Variable
For A 1 to 100 Setp 1
Donde For es la instruccin y A es la variable Declarada anteriormente

Variable:
Imaginemos a una Variable como una Caja Grande, es esta caja grande puedo meter hasta
255 cajitas de Fsforos, entonces la caja grande ser la variable y las cajitas sern el valor o
la cantidad de cajitas de Fsforos que tengo, pero que pasara si necesito meter 300
Fsforos, Me sirve esta variable?.NO, como lo soluciono, pues fcil, consigo una caja
mas grande, por lo cual esta variable se llamara igual a la primera, pero la diferencia
radicara en el tamao de la caja.
Pues bien, pero por el contrario, que pasara si tengo una caja del tamao de un Galpn para
guardar solo 1 cajita de Fsforos, me serviraSI, pero seria lo Indicado?..Seguramente ya
se darn cuenta por que no, es claro, seria muy costoso y poco practico tener un Galpn
para Guardar una caja de fsforos!!!!!
En el Micro pasara lo Mismo, se desperdiciara Memoria y Recursos para algo que no
tendra sentido.
SIEMPRE SE DEBE SELECCIONAR UN TAMAO DE VARIABLE ACORDE A
EL VALOR QUE TENGA O LLEGUE A TENER LA VARIABLE EN TODO EL
PROGRAMA

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
23
En la programacin (PIC Simulator) las variables pueden ser del orden de un Bit, un Byte,
un Word o un Long que equivalen a:
Bit: valores de 0 a 1
Byte: valores de 0 a 255
Word: valores de 0 a 65535
Long: valores de 0 a 4294967295
En PIC Simulator se le asigna el valor con la Instruccin DIM

Ejemplo:
Dim A as Byte
Dim var as Long
Dim Valor as Bit
A = 200 correcto
Var = 1024 correcto pero poco eficiente
Valor = 20 Incorrecto, solo puede ser 0 o 1

LECTURA DE LA PROGRAMACION

Se deber tener en cuenta que la programacin es leda, salvo casos que nombraremos mas
adelante, de forma secuencial, que quiero decir con esto, que es leda de arriba hacia abajo
y se deber respetar ciertas reglas, un ejemplo seria que no puedo declarar las variables al
final de la programacin o decirle que el micro trabajara de forma Digital en todos sus
pines al final del programa.

ALLDIGITAL

Esta instruccin dejara a nuestro Microcontrolador funcionando con valores discretos, es
decir, si posee entradas comparadoras, pwm, conversores A/D y dems los anulara para
poder utilizarlo como entrada o salidas con valores discretos de 0 y 1 (Vcc y Vdd).
Es importante establecer esto ya que de otra forma podremos obtener resultados
inesperados.-

TRISx

Define el comportamiento de los puertos del Micro, si adopta un valor igual a cero (0) este
Pin ser utilizado como Salida, si por el contrario adopta un valor igual a uno (1) este se
comportara como Entrada. Tener siempre en cuenta que cuando se define un Puerto este
puede ser escrito en Decimal, binario o Hexadecimal, Siendo el Binario el mas fcil de
interpretar
Ejemplo:
TRISA = 200
TRISA = %11001000

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
24
TRISA = 0xC8
En realidad estos tres valores son exactamente igual, pero en binario antecedido por el
smbolo % vemos pin por pin el Puertoveamos

RA.7 RA.6 RA.5 RA.4 RA.3 RA.2 RA.1 RA.0
TRISA = % 1 1 0 0 1 0 0 0
Ent Ent Sal Sal Ent Sal Sal Sal


PORTx

Asigna un valor a la salida del Portx, este puede ser Bit a Bit o puerto Completo
Ejemplo:
PORTA=%01000000
PORTA.6=1

En cualquiera de los dos casos si conectamos un led a la salida RA6 este se encender.
Es importante antes de seguir con las prximas instrucciones que se entienda estas dos
instrucciones y la forma de proceder para energizar una salida o leer una entrada x de
cualquier Port.
Se lo puede hacer de las dos maneras mencionadas, por Puerto General por as decirlo
(PORTA= %XXXXXXXX) o por puerto Individual (PORTA.6=1) obteniendo el mismo
resultado.

WAITMS WaitUs

Esta instruccin hace que el micro espere un tiempo antes de seguir con la prxima
instruccin, este tiempo estar determinado por Mili Segundos en caso de ser WAITMS o
bien Micro Segundos si es WaitUs.
Ejemplo:
Alldigital Declaro todos los pines como digital
TRISA = &00000000 Todos los puertos A como Salida
PORTA.0=1 Enciendo un Led en el puerto RA1
WAITMS 1000 Espero 1 Seg
PORTA.0=0 Apago el Led en RA1

GOTO

Esta Instruccin realiza un salto o bucle como bien dice la palabra GO TO o Ir a, se usa
par apuntar a un destino ya definido siempre finalizndolo a este destino con dos puntos:.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
25
Es decir, siempre que uso la palabra GOTO va precedido del destino, el cual debera esta
indicado en el programa y finalizndolo con :
Ejemplo:
Inicio:
PORTA.0=1 Enciendo un Led en el puerto RA1
WAITMS 1000 Espero 1 Seg
PORTA.0=0 Apago el Led en RA1
WAITMS 1000 Espero 1 Seg
GOTO Inicio Vuelvo a Inicio y repito el bucle Indefinidamente




DIM

Define las variables, en esta instruccin debemos asignarle el tamao que ira a tener nuestra
variable, ya sea un bit, un byte, un Word o un long, a tener en cuenta, una variable es un
nombre, por lo cual algunos caracteres no puede ser usados al igual que nmeros y adems
el valor que tomara esta variable no deber ser nunca mayor que el tamao asignado.
Ejemplo:
DIM var AS Byte
DIM tiempo AS Word
Var = 16
Tiempo = 1024

SYMBOL

Se utiliza para reemplazar una parmetro con un smbolo o nombre, esto nos ayuda en un
programa entender mejor un la lectura
Ejemplo:
SYMBOL led1 = PORTB.0
SYMBOL led2 = PORTB.1
led1 = 0
led2 = 1
Que seria lo mismo que
PORTB.0 = 0
PORTB.1 = 1

IF THEN ELSE
Esta instruccin es un condicionante, es decir, es quien se encargara de devolver cierto
resultado si se cumple tal o cual condicin, podramos traducirlo como: SI esto es asi
ENTONCES realizar esto SINO realizar esto otro


E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
26
Ejemplo:
IF PORTA.6=1 THEN GOTO inicio Si puerto RA6 leo un 1 entonces voy a inicio
GOTO stop Sino voy a Stop

Fjense que ELSE no esta en el programa, esto es porque este o no en el programa sabe que
si la condicin no se cumple salta a la prxima instruccin


Ejercicios

1) Realice segn el siguiente diagrama de flujo el programa correspondiente



2) Realice segn el siguiente diagrama de flujo el programa correspondiente

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
27


3) Resuelva las siguientes condiciones, si la entrada de A2 es igual a 1 encienda las
salidas B7 y B6, si la entrada es igual a 0 encienda solo B7 , si la entrada A3 es
igual a 1 encienda B1, si es igual a 0 apague B1y si la entrada A4 es igual a 1
encienda B3 y B4, si es igual a cero no ejecute ningn comando y deje el puerto B
con todas sus salidas igual a cero.
Deber hacer el diagrama de flujo correspondiente


FOR TO STEP NEXT

Esta instruccin es utilizada como contador donde podemos predefinir Inicio- Fin y los
saltos de paso en paso
Siempre debemos definir con anterioridad una variable para esta funcin, ya que esta
variable ira modificando su valor a lo largo del programa., cabe destacar que esta variable
deber ser por lo menos de un BYTE o mas, de otra forma seria imposible. En cada
iteracin del bucle, la variable va cambiando su valor. Cuando el valor de la variable
alcanza o supera el valor prefijado, el bucle termina y prosigue con la prxima instruccin.
Ejemplo:
DIM a AS BYTE 'Declaro la variable "A" como BYTE
DIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORD
TOTAL = 0 'Asigno "0" a la variable "TOTAL".
FOR a = 1 TO 100 STEP 1 '"A" va de 1 a 100 de 1 en 1
TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
28
NEXT a 'fin del bucle





LOOKUP
La funcin LOOKUP puede ser utilizada para seleccionar un Byte desde una lista de
constantes del mismo tipo, de acuerdo al valor de un ndice (tambin de tipo Byte). El
resultado de la seleccin se almacena (como no!) tambin en una variable tipo byte.
Ejemplo:
DIM cuenta AS BYTE
DIM Var AS BYTE
Cuenta = 3
Var = LOOKUP (25, 35, 55, 70, 85, 100), indice

variable tendr el valor "70" (decimal) al ejecutar este cdigo. El primer elemento de la
lista, recordemos, corresponde al valor "0" de ndice.
Si bien la lista puede contener un mximo de 255 elementos, que es el mximo
direccionable por una variable ndice de tipo byte, hay que asegurarse que el
microcontrolador que estamos empleando tenga memoria suficiente para albergarla






SHIFTLEFT SHIFTRIGHT

Estas dos son funciones que operan a nivel bit que pueden ser utilizadas para "correr" el
contenido de variable a la izquierda o a la derecha. Cada uno de los bits que componen la
variable se desplazan una posicin (a la izquierda o a la derecha, de acuerdo a que funcin
utilicemos). Esto tiene dos consecuencias. En primer lugar, el bit de ms a la izquierda
(SHIFTLEFT) o derecha (SHIFTRIGHT) se pierde. Y el espacio creado en el otro extremo
se completa con un "0".


AllDigital

TRISC = %00000000 Todos los pines como salidas
PORTC = %00000001
goleft:
WAITMS 500
PORTC = ShiftLeft(PORTC, 1)

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
29
If PORTC = %10000000 Then GOTO goright
GOTO goleft
goright:
WAITMS 500
PORTC = ShiftRight(PORTC, 1)
If PORTC = %00000001 Then GOTO goleft
GOTO goright

Lo que hace el programa es muy sencillo: enciende el primer bit del PORTC y
espera durante medio segundo. Luego, desplaza hacia la izquierda el contenido del
byte que representa al PORTC en la memoria del Microcontrolador, y verifica si
esos bits llegaron al extremo. Si es as, se invierte el sentido del desplazamiento.


WHILE WEND
La segunda estructura de control que proporciona PIC BASIC es WHILE - WEND.
Su propsito tambin es la construccin de bucles que se ejecutan un nmero de
veces, y se puede decir que esta a mitad de camino entre la construccin de un
bucle mediante etiquetas y GOTOs y la utilizacin de un FORNEXT. Su
estructura es la siguiente:

WHILE condicin
instruccion1
instruccion2
...
instruccion n
WEND

Mientras que la condicin sea verdadera, el grupo de instrucciones dentro del
cuerpo del WHILE-WEND se ejecuta. Las caractersticas de la condicin son las
mismas que vimos antes para la instruccin IF-THEN-ELSE-ENDIF.

Por supuesto, si no somos cuidadosos al momento de elegir la condicin, puede
darse el caso de que el nmero de repeticiones del bucle sea infinito, y nunca
salgamos de l. De hecho, esta circunstancia se aprovecha en algunos programas
para repetir indefinidamente un grupo de instrucciones. Tambin hay que tener
presente que si la condicin no es cierta al momento de ejecutar la primera vez el
WHILE, el flujo del programa pasara directamente a la instruccin posterior al
WEND y las instrucciones dentro del bucle no se ejecutaran ninguna vez.

No hay mucho ms para decir de WHILE-WEND , solo analizar algunos ejemplos:

Ejemplo 1:

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
30
El siguiente es un bucle infinito. Como dentro del cuerpo del WHILE-WEND no se
cambia el valor de la variable A, esta siempre vale "0" y la condicin del WHILE
nunca es falsa, por lo que se repite eternamente: es un caso similar a los que vimos
en la entrega anterior del tutorial.

DIM A AS BYTE
A = 0
...
WHILE A = 0
instruccion1
instruccion2
...
instruccion n
WEND
...

Ejemplo 2:
Las instrucciones dentro del siguiente WHILE-WEND no se ejecutan nunca, dado
que la condicin siempre es falsa:

DIM A AS BYTE
A = 0
...
WHILE A > 0
instruccion1
instruccion2
...
instruccin n
WEND
...

Ejemplo 3:
Las instrucciones dentro del siguiente WHILE-WEND se ejecutan 20 veces, y al
terminar la variable B contiene la suma de los nmeros del 0 al 20 naturales:

DIM A AS BYTE
DIM A AS BYTE
A = 0
B = 0

WHILE A < 20
A = A + 1 'Incremento la variable A
B = B + A 'Sumo a B el valor de la variable A
WEND



E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
31
Cuando A = 20, se suma su valor a A, y al llegar al WEND el control del programa
se transfiere al WHILE, donde se evala la condicin A < 20, se determina que es
falsa, y el programa pasa el control a la lnea que exista despus del WEND.
Este bucle hace la misma suma que el que realizamos antes con FORNEXT. No
se puede decir que uno sea mejor o peor que el otro: solo son dos formas distintas
de hacer lo mismo, y en cada situacin decidiremos cual nos conviene ms.

GOSUB
Esta instruccin es muy parecida a un GOTO con la diferencia que esta al ejecutarse
realiza un salto (GOTO) a la instruccin que le digamos y cuando termine de
ejecutarla esta retornara a la siguiente instruccin que le sigua a GOSUB.
Es decir, veamos el siguiente ejemplo:

GOSUB alto
Bajo:
PORTA.7=0
Alto:
PORTA.7=1

La instruccin GOSUB realizara un salto a la bandera ALTO poniendo el puerto
A.7 en 1, cuando termine de ejecutar esta instruccin retornara a la instruccin
siguiente a GOSUB el cual es la bandera BAJO poniendo un 0 en el puerto A.7 y
luego seguir con las instrucciones normalmente

HSEROUT / HSERIN

Esta funcin nos permite establecer una comunicacin SERIAL por ejemplo entre el Micro
y una PC mediante el puerto RS232 (Puerto Serial de la PC)

Ejemplo:

AllDigital
TRISA = 255
Dim i As Byte 'declare a variable

inicial:
Hseropen 9600
Hserin i
If i = "c" Then GOTO inicio

inicio:
If PORTA.3 = 1 Then GOTO PORTA31
If PORTA.3 = 0 Then GOTO PORTA30

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
32


PORTA31:
Hserout "Puerto A3=1", Cr, Lf
GOTO inicial
PORTA30:
Hserout "Puerto A3=0",Cr, Lf
GOTO inicial

Con este programa al encender el Micro y estar conectado a un Serial de la PC con un
Software de Comunicacin serial como ser el Hyper Terminal de Windows o Secure CRT
esperara a que se teclee la letra c y luego leer los estados del Puerto A3 y lo mostrara en
Pantalla

Freqout
Esta instruccin hace de nuestro PIC un generador de tono, con solo colocar el Puerto,
Frecuencia y Duracin para que este nos genere un tono,

TRISB.0 = 0
FreqOut PORTB.0, 600, 1000


Ejercicios

1) Enve mediante RS232 a una PC el mensaje Hola Mundo cuando ingrese
desde pantalla la letra C
2) Realice un contador ascendente en binario con salida por puerto B y cuando este
llegue a 255 realizar conteo de forma descendente


Manejo de LCD en PIC

El manejo de los LCD se hace mediante el uso de sentencias DEFINE, que le dicen al
compilador a que pines del Microcontrolador hemos conectado cada uno de los pines del
LCD. La forma de la instruccin DEFINE es la siguiente:
DEFINE parmetro = valor

Donde parmetro es el nombre del parmetro al que le queremos asignar el valor. Los
parmetros disponibles para el manejo de LCD alfanumricos son los siguientes:

LCD_BITS: Define el nmero de bits de la interfaz de datos. Se pueden asignar valores de

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
33
4 u 8, siendo 4 el valor por defecto.

LCD_DREG: Define a que puerto del PIC tenemos conectado el port de datos del LCD.
Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.

LCD_DBIT: Define cual es el primer pin del puerto que usamos para enviar los datos al
LCD cuando seleccionamos un bus de 4 bits. Solo puede ser el 0 (para los pines el 0, 1, 2 y
3) o 4 (para usar los pines 4, 5, 6 y 7). Por defecto se asume 4, y esta instruccin se
ignora para LCD_BITS = 8.

LCD_RSREG: Define a que puerto del PIC tenemos conectado el pin RS del LCD. Los
valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.

LCD_RSBIT: Define a que pin del puerto tenemos conectado el pin RS del LCD. Por
defecto se asume 3.

LCD_EREG: Define a que puerto del PIC tenemos conectado el pin E del LCD. Los
valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.

LCD_EBIT: Define a que pin del puerto tenemos conectado el pin E del LCD. Por defecto
se asume 2.

LCD_RWREG: Define a que puerto del PIC tenemos conectado el pin RW del LCD. Los
valores permitidos son 0, PORTA, PORTB, PORTC, etc. Por defecto se asume 0, que
significa no usamos el pin RW.

LCD_RWBIT: Define a que pin del puerto tenemos conectado el pin RW del LCD. Por
defecto se asume 0, que significa no usamos el pin RW.

LCD_COMMANDUS: Define cuantos microsegundos demora la escritura de un comando
en el display. Por defecto, este valor es de 5000. La mayora de los LCD funcionan bien
con un valor de 2000, lo que hace ms rpidos nuestros programas.

LCD_DATAUS: Define cuantos microsegundos demora la escritura de un dato en el LCD.
Por defecto, este valor es de 100.

LCD_INITMS: Define cuantos microsegundos demora la inicializacin e la electrnica del
LCD. Por defecto, este valor es de 100.

Luego, tenemos una serie de instrucciones que manejan el envo de comandos e
instrucciones al display:

LCDINIT debe utilizarse antes de enviar cualquier comando o dato al LCD. La forma de
esta instruccin es la siguiente:
LCDINIT n

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
34

Donde n es el tipo de cursor que queremos que muestre el display. 0 significa que el
cursor estar oculto, 1 significa que el cursor parpadeara, 2 nos mostrara un cursor
subrayado, y 3 un cursor subrayado y parpadeando.

LCDCMDOUT es la instruccin que enva comandos al LCD. Se emplea de la siguiente
manera:
LCDCMDOUT comando

Donde comando es alguno de los siguientes:

LcdClear: Borra el contenido del LCD.
LcdHome: Lleva el cursor a la primera posicin del primer rengln del LCD.
LcdLine2Home: Lleva el cursor a la primera posicin del segundo rengln del LCD.
LcdLeft: Mueve el cursor una posicin a la izquierda.
LcdRight: Mueve el cursor una posicin a la derecha.
LcdShiftLeft: Desplaza el contenido del LCD una posicin a la izquierda.
LcdShiftRight: Desplaza el contenido del LCD una posicin a la derecha.
LcdLine1Clear: Borra la primera lnea del LCD.
LcdLine2Clear: Borra la segunda lnea del LCD.
LcdLine1Pos(x): Coloca el cursor en la posicin x del primer rengln del LCD. X
puede tener cualquier valor entre 1 y 40
LcdLine2Pos(x): Coloca el cursor en la posicin x del segundo rengln del LCD. X
puede tener cualquier valor entre 1 y 40

LCDOUT enva datos al display. Si son caracteres, simplemente los ponemos entre
comillas a continuacin del comando. Si se trata de mostrar el contenido de una variable, se
escribe la variable (precedida por #) a continuacin del comando. Si se necesitan
imprimir varias variables, se pueden separar por comas.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
35

Un LCD en accin.

A continuacin, un par de ejemplos de cmo se utilizan todas estas instrucciones.
El primero se encarga de mostrar un texto parpadeando en la primera lnea del
display. Intenten deducir como est conectado el LCD al PIC mirando las
instrucciones DEFINE del principio del programa.

DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2

LCDINIT 0 inicializo el LCD sin cursor.

loop:
LCDOUT "www.NeoTeo.com" Muestra el texto
WAITMS 1000 Espero un segundo
LCDCMDOUT LcdClear Borro el display
WAITMS 1000 Espero un segundo
GOTO loop Vuelvo a loop: para repetir indefinidamente.

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
36

El segundo ejemplo muestra como imprimir el contenido de una variable (A) en
el LCD. Concretamente, se muestra un texto en el primer rengln, mientras que en
el segundo se cuentan los nmeros del 65535 al 0 en el segundo.

DEFINE LCD_BITS = 8
DEFINE LCD_DREG = PORTB
DEFINE LCD_DBIT = 0
DEFINE LCD_RSREG = PORTD
DEFINE LCD_RSBIT = 1
DEFINE LCD_EREG = PORTD
DEFINE LCD_EBIT = 3
DEFINE LCD_RWREG = PORTD
DEFINE LCD_RWBIT = 2

DIM A AS WORD
A = 65535

LCDINIT 3 Cursor parpadeando
WAITMS 1000

loop:
LCDOUT "Estoy contando! Texto del primer rengln
LCDCMDOUT LcdLine2Home Paso al Segundo rengln
LCDOUT #A Muestro el valor de A
A = A - 1
WAITMS 250
LCDCMDOUT LcdClear Limpio del display
GOTO loop

Esto es todo por hoy. La semana prxima veremos cmo implementar estos
ejemplos en una placa de expansin para nuestro PIC TRAINER, y tambin como
definir nuestros propios caracteres especiales. Hasta la prxima!



E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
37
Veremos como definir nuestros propios
caracteres.
Estos LCD son ideales para modding.



El HD44780

En muchos casos, la sealizacin de estados de nuestros proyectos mediante diodos
LED resulta insuficiente. Una alternativa muy profesional y econmica (y de fcil
implementacin) es la utilizacin de displays LCD alfanumricos.

Continuando con la serie de notas dedicadas a aprender a programar
microcontroladores, veremos las instrucciones que dispone el lenguaje de
programacin PIC BASIC orientadas al manejo de displays LCD.

Existen en el mercado una enorme variedad de pantallas de cristal liquido, de un
precio accesible, con caractersticas comunes en cuanto a la interfaz y
programacin, gracias que la mayora utiliza para comunicarse con el exterior el
mismo chip de la empresa Hitachi, el HD44780. Esto hace posible que con un
puado de instrucciones podemos manejar desde un sencillo display de una lnea
de 8 caracteres hasta uno de 4 lneas con 80 caracteres.

El aspecto fsico de estas pantallas se puede ver en las fotos que ilustran la nota,
bsicamente son una pequea placa de circuito impreso con un par de integrados
(tipo gota) pegados en una de sus caras, y la pantalla propiamente dicha en la
otra, rodeada de una estructura metlica que la protege. Esta placa casi siempre
dispone de agujeros para poder fijar el conjunto a un chasis o gabinete sin grandes
complicaciones. Desde el punto de vista elctrico, hay un conector (a veces solo
agujeros metalizados donde soldar los cables) que tiene 14 pines en los que no
poseen iluminacin propia (backlite) o 16 en los que si la tienen.

Vista trasera de un LCD 2x16 tpico. Hermoso: un LCD de 4 lneas de 40 caracteres,
color azul.


E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
38
Mediante las seales apropiadas enviadas y recibidas mediante este conector el
display es capaz de representar caracteres, mostrar o esconder un cursor, borrar la
pantalla, etc.


PinOut del LCD HD44780
Descripcin de los pines
Como mencionamos, la gran mayora de los display existentes en el mercado
respetan la misma distribucin de pines. Igualmente, antes de conectar nada,
debemos asegurarnos de que as sea, para no daar de forma permanente el LCD.
Siempre es necesario tener a mano la DataSheet (hoja de datos) del componente
electrnico que queremos usar.

Veamos qu funcin cumple cada uno de los pines de un display LCD genrico:

Pines 1,2 y 3: Estos pines estn dedicados a la alimentacin y contraste del LCD.
Efectivamente, el pin 1 (VSS) es el que se debe conectar al negativo (masa) de la
alimentacin, y el pin 2 (Vdd/Vcc) es el que va unido al positivo (5 voltios). El pin 3
permite el ajuste del contraste del panel. Se puede unir al pin 1 mediante una
resistencia de 220 ohm para obtener un contraste adecuado (pero fijo) o bien
utilizar un potencimetro o preset de 10 KOhm para variar el contraste a gusto.

Pines 4,5,6: Estos pines son de alguna manera los que controlan el funcionamiento
del display. El pin 4, tambin llamado RS (Registration Select) es el que le indica al
controlador interno del LCD que el valor presente en el bus de datos es un
comando (cuando RS=0) o bien un carcter para representar (cuando RS=1).

El pin 5 (R/W por Read/Write o Leer/Escribir) permite decidir si queremos
enviar datos al display (R/W=0) o bien nos interesa leer lo que el display tiene en
su memoria o conocer su estado (R/W=1).

Por ltimo, el pin 6 (E por Enable o habilitado) es el que selecciona el display a
utilizar. Es decir, podemos tener varios LCD conectados a un mismo bus de datos
(pines 7-14) de control, y mediante E seleccionar cual es el que debe usarse en cada
momento.

Pines 7, 8, 9, 10, 11, 12, 13, 14: Estos ocho pines son el bus de datos del
controlador de la pantalla. Llamados DB0-DB7 son los encargados de recibir (o
enviar) los comandos o datos desde o hacia el display. DB0 es el bit de menor peso
y DB7 es el ms significativo.

Por ltimo, los pines 15 y 16 son los que se utilizan para alimentar el (o los)
LEDs de fondo de la pantalla, que brindan la iluminacin (backlight). El pin 15
debe ser conectado a 5 voltios y el 16 al negativo o masa de la fuente. En estas
condiciones, la luz de fondo est encendida a 100% de su brillo. Nuevamente, se

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
39
puede utilizar un potencimetro o preset para ajustar el brillo. Como una nota
curiosa, muy frecuentemente estos dos pines estn ubicados ANTES del pin 1 (ver
esquema). Debemos asegurarnos de cul es su posicin consultando la hoja de
datos del fabricante o la serigrafa que existe sobre la placa del LCD.

Estos display soportan dos modos de trabajo: en uno de ellos reciben en DB0-DB7
los 8 bits del dato, y en el otro, llamado modo de 4 bits reciben los datos en dos
mitades (nibbles) por los pines DB4-DB7, en dos pasos sucesivos. Si bien esto
puede complicar ligeramente la programacin en assembler, en PIC BASIC es
completamente transparente, a la vez que supone un ahorro de 4 pines en el bus de
datos, y esto en microcontroladores con pocos pines de I/O es muy til.

Los pines de un display LCD genrico. De esa forma podemos controlar el contraste
del LCD.

A grandes rasgos, y a pesar de la simplicidad que brinda el disponer de un
mismo integrado especializado en casi todos los modelos de display, la
escritura en estos es relativamente compleja, dado que se deben respetar
protocolos de inicializacin, tiempos entre envo de datos, etc., lo que hace
bastante tediosa su programacin en assembler. Pero PIC BASIC dispone de
un juego de instrucciones especiales para manejar display en modo 8 bits y
en modo 4 bits que nos evitan toda esa complejidad. Veremos cules son y

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
40
algunos ejemplos de uso. La prxima semana realizaremos un mdulo para
el PIC TRAINER y escribiremos varios programas de ejemplo.




Ejemplos en BASIC



Ejemplo 1

Este es el clsico ejemplo Hola Mundo

AllDigital

TRISA = %11111111
TRISB = %00000000

loop:
PORTB.3 = 1
WAITMS 500
PORTB.3 = 0
WAITMS 500
GOTO loop

Ejemplo 2

Con este ejemplo hacemos que lea el estado de un pulsador y lo indique sobre un led a la
salida

AllDigital

TRISA.7 = 1 'Defino PORTA.7 como ENTRADA
TRISA.6 = 0 'Defino PORTA.6 como SALIDA

Symbol pulsador = PORTA.7
Symbol led = PORTA.6

loop:
led = pulsador
GOTO loop


E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
41
Ejemplo 3

Este ejemplo usa la funcin lookup para representa un contador de 7 segmentos de 0 a 9,
observe que en una lnea se resume los dgitos a representar

Dim digito As Byte
Dim mascara As Byte
Inicio:
digito = 0
'Comienzo el bucle principal
loop:
if digito = 9 then GOTO inicio
TRISB = %00000000
mascara = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d,
0x07, 0x7f, 0x6f), digito
PORTB = mascara
WAITMS 1000 'Espero un segundo
digito=digito + 1
GOTO loop
End


Ejemplo 4

Este realiza un contador a la salida del puerto C de 0 a 100

AllDigital
TRISC = 0
Dim a As Byte

For a = 0 To 100
WAITMS 250
PORTC = a
Next a


Ejemplo 5

Estos son ejemplos de contadores, observe cual es la diferencia entre uno y otro

DIM A AS BYTE 'Declaro la variable "A" como BYTE
DIM INICIO AS BYTE 'Declaro la variable "INICIO" como BYTE
DIM FINAL AS BYTE 'Declaro la variable "FINAL" como BYTE
DIM PASO AS BYTE 'Declaro la variable "PASO" como BYTE

E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
42
DIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORD

INICIO = 1 'Asigno "1" a la variable "INICIO".
FINAL = 100 'Asigno "100" a la variable "FINAL".
PASO = 1 'Asigno "1" a la variable "PASO".
TOTAL = 0 'Asigno "0" a la variable "TOTAL".

FOR A = INICIO TO FINAL STEP PASO '"A" va de 1 a 100 de 1 en
1
TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".
NEXT A 'fin del bucle
Y el mismo ejemplo, sin usar STEP:

DIM A AS BYTE 'Declaro la variable "A" como BYTE
DIM TOTAL AS WORD 'Declaro la variable "TOTAL" como WORD

TOTAL = 0 'Asigno "0" a la variable "TOTAL".

FOR A = 1 TO 100 '"A" va de 1 a 100 de 1 en 1
TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL".
NEXT A 'fin del bucle.

Si quisiramos sumar otro grupo de nmeros, bastara con modificar el valor de las
variables INICIO y FINAL.

Hay casos en que es necesario que el valor de la variable de control del bucle se
decremente en lugar de ir aumentando. Un cronometro descendente seria una
aplicacin prctica de este caso. Para lograr esto, se puede usar un valor negativo
para STEP. El siguiente ejemplo cuenta desde 50 hasta 20, de 5 en 5:

DIM A AS BYTE 'Declaro la variable "A" como BYTE

FOR A = 50 TO 20 STEP -5 '"A" va de 50 a 20 de 5 en 5
instruccion1
instruccion2
...
instruccin n
NEXT A 'fin del bucle.

Ejemplo 6

Este programa genera un tono en RB.0 si RA.0 es igual a 1,la frecuencia ser de
6000 hz y durara 100 Ms

AllDigital


E.E.T N 460 Guillermo Lehmann
Departamento de Electrnica


Micro Controladores PIC Curso; 5 B Ao 2010
43
TRISA = 1
loop:
If PORTA.0 = 1 Then Goto inicio
Goto loop
inicio:
TRISB.0 = 0
FreqOut PORTB.0, 6000, 100
Goto loop


Bibliografa:

Revista U Control, Autor Ariel Palazzesi - http://www.ucontrol.com.ar/

Oshon Software, Web - http://www.oshonsoft.com/

MicroPic, Web - http://www.micropic.es/

NeoTeo, Web - http://www.neoteo.com/

Todo PiC, Web - http://www.todopic.com.ar/

S-ar putea să vă placă și