Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MicroControladores PIC 16f628a
MicroControladores PIC 16f628a
Micro Controladores
PIC 16F628A
Arquitectura, Lenguajes de Programacin, Pic Simulator, El
Basic, Instrucciones, Manejo de LCD, Puerto Serie
Curso; 5 B Ao 2010
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
Curso; 5 B Ao 2010
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
Micro Controladores PIC
Curso; 5 B Ao 2010
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
Curso; 5 B Ao 2010
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.
Micro Controladores PIC
Curso; 5 B Ao 2010
Curso; 5 B Ao 2010
Curso; 5 B Ao 2010
Curso; 5 B Ao 2010
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.
Micro Controladores PIC
Curso; 5 B Ao 2010
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.
Curso; 5 B Ao 2010
10
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.
Micro Controladores PIC
Curso; 5 B Ao 2010
11
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.
Curso; 5 B Ao 2010
12
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.
Curso; 5 B Ao 2010
13
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.
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:
Micro Controladores PIC
Curso; 5 B Ao 2010
14
Caracterstica
Propiedad
Memoria de programa
1 KBytes)
Memoria SRAM
224 Bytes
Memoria EEPROM
128 Bytes
Pines de E/S
16
No
Salidas PWM
SPI
No
I2C
No
USART
Si
Temporizadores de 8 Bits
Temporizadores de 16 Bits
Comparadores
Oscilador
Nmero de pines
18
Encapsulado
PUERTO A
RA.0 = AN0
Entrada Comparadora 1
RA.1 = AN1
Entrada Comparadora 2
RA.2 = AN2/Vref
Curso; 5 B Ao 2010
15
RA.3 = AN3/CMP1
RA.4 = TOCKI/CMP2
______
RA.5 =MCLR/Vpp
RA.6 = OSC/CLKOUT
RA.7 = OSC/CLKIN
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
RB.5 =
Propsito general
RB.6 = T1OSI/PGD
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
Micro Controladores PIC
Curso; 5 B Ao 2010
16
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
Curso; 5 B Ao 2010
17
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 ICProg 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
Micro Controladores PIC
Curso; 5 B Ao 2010
18
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
Curso; 5 B Ao 2010
19
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/
Curso; 5 B Ao 2010
20
Curso; 5 B Ao 2010
21
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
Micro Controladores PIC
Curso; 5 B Ao 2010
22
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
Micro Controladores PIC
Curso; 5 B Ao 2010
23
TRISA = 0xC8
En realidad estos tres valores son exactamente igual, pero en binario antecedido por el
smbolo % vemos pin por pin el Puertoveamos
TRISA
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:.
Micro Controladores PIC
Curso; 5 B Ao 2010
24
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
Micro Controladores PIC
Curso; 5 B Ao 2010
25
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
Curso; 5 B Ao 2010
26
NEXT a
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)
Micro Controladores PIC
Curso; 5 B Ao 2010
28
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:
Micro Controladores PIC
Curso; 5 B Ao 2010
29
Curso; 5 B Ao 2010
30
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
Micro Controladores PIC
Curso; 5 B Ao 2010
31
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
Curso; 5 B Ao 2010
32
Curso; 5 B Ao 2010
33
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.
Curso; 5 B Ao 2010
34
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.
Micro Controladores PIC
Curso; 5 B Ao 2010
35
Curso; 5 B Ao 2010
36
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.
Curso; 5 B Ao 2010
37
Curso; 5 B Ao 2010
38
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.
Curso; 5 B Ao 2010
39
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
Micro Controladores PIC
Curso; 5 B Ao 2010
40
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
DIM
DIM
DIM
Curso; 5 B Ao 2010
41
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
Micro Controladores PIC
Curso; 5 B Ao 2010
42
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/
Curso; 5 B Ao 2010
43