Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Pic Simulator Ide
Manual Pic Simulator Ide
ENTORNO DE DESARROLLO
PIC
SIMULATOR
IDE
PRIMERA PARTE
INTRODUCCIN:
Este documento es un intento de explicar el funcionamiento de una de
las herramientas de desarrollo (a mi entender) mas interesantes para
el aficionado a la programacin de PICs.
Se trata de un entorno de programacin integrado, que adems de
permitir la creacin de programas en lenguaje assembler incorpora un
muy completo BASIC, con soporte para dispositivos 1-wire, LCD,
RS-232 y muchos mas.
Otro aspecto destacable es la inclusin de una gran cantidad de
mdulos de E/S que simulan exactamente lo que esta pasando en
nuestro programa, incluidos un modulo LCD, teclado, osciloscopio,
displays de 7 segmentos entre otros.
La gua o curso se encuentra dividida en aproximadamente 40
captulos, y se pueden ver en www.ucontrol.com.ar . Cada PDF
como este comprende 10 captulos.
El autor del programa es Vladimir Soso, y la web oficial del PIC SIMULATOR IDE es www.oshonsoft.com ,
desde donde puede bajarse una versin demo, mas que suficiente para realizar las practicas propuestas en
este "curso". Adems, el autor ha desarrollado entornos de programacin similares para micros AVR, PIC18,
PIC10F, Z80, etc.
INDICE:
> Capitulo
> Capitulo
> Capitulo
> Capitulo
> Capitulo
> Capitulo
> Capitulo
> Capitulo
> Capitulo
> Capitulo
01
02
03
04
05
06
07
08
09
10
La interfaz
El men principal
Tools (Primera parte)
Tools (Segunda parte)
Sistemas de numeracin
Variables
Operaciones Lgicas y Matemticas
Mi primer programa: Un led parpadeante
Mi segundo programa: Usando un pulsador
IF - THEN - ELSE - ENDIF
2 de 28
Antes de ver en que consiste cada opcin del men principal, vamos a analizar rpidamente cada seccin de
esta pantalla:
En la parte superior, y justo debajo de la barra de men tenemos tres cuadros de texto que nos muestran la
ruta completa hacia el programa que tenemos cargado en el simulador (Program Location), el
microcontrolador que hemos seleccionado para nuestro proyecto (Microcontroller) y la frecuencia de clock
elegida (Clock Frequency).
Todos estos valores pueden ser cambiados, como veremos en el segundo capitulo, desde la barra de men.
El recuadro que esta inmediatamente debajo del anterior nos muestra (cuando estamos corriendo una
simulacin de nuestro programa) cual es la instruccin assembler en curso (Last Instruction) y cual ser la
siguiente a ejecutar (Next Instruction):
Luego tenemos un cuadro con informacin relativa a la ejecucin del programa, en la que vemos instruccin a
instruccin durante todo el tiempo en que estemos corriendo la simulacin, el valor que va tomando el
contador de programa (PC o Program Counter), el registro de trabajo (W Register, por "working") y sobre
la derecha la cantidad de instrucciones simuladas (Instructions Counter), la cantidad de ciclos de reloj
transcurridos (Clock Cycles Counter) y el tiempo de ejecucin que llevara en realidad dicho programa (Real
Time Duration). Cabe aclarar, que como en todo simulador, la relacin entre el tiempo real y el tiempo de
simulacin varia dependiendo de los recursos de nuestro ordenador, y en general los programas simulados
demoran mucho mas tiempo que el real en ejecutarse.
3 de 28
A continuacin, sobre la izquierda, vemos una lista de desplazamiento que contiene el valor de todos los
registros especiales con los que cuenta el microcontrolador elegido. Esta lista varia, por supuesto, con cada
microcontrolador, y en el momento de correr la simulacin va reflejando instruccin a instruccin el valor de
cada timer, puerto, registro de estado, interrupciones, etc. Los valores se muestran en hexadecimal (Hex
Value) y en binario (Binary Value). Cada registro se identifica mediante su direccin (Address) y tambin
por el nombre con el que figura en la hoja de datos (Name).
Por ultimo, y a la derecha del cuadro anterior, tenemos el valor de todos los registros de propsito general
(GPRs, o general purpose register). La lista tiene dos columnas, cada una indicando la direccin del registro
(Addr.) y su valor en hexadecimal (Hex. Value):
[ Volver al ndice ]
4 de 28
separadas, y pueden ser configuradas (como veremos) para que se siten permanentemente delante de las
dems ventanas, de manera que no las perdamos de vista. Este es el men principal:
Como es costumbre en toda aplicacin de windows, la opcin File es la primera del men. Contiene solo dos
comandos: Clear Memory (Limpiar memoria) que se encarga de eliminar de la memoria del simulador el
programa que estuviese cargado, que puede ser invocada mediante las teclas CTRL+R; y Load Program
(Cargar Programa), que nos lleva a un cuadro de dialogo tpico que nos permite seleccionar el archivo HEX que
queremos simular. Esta funcin puede invocarse con CTRL+L.
Dentro de la segunda opcin, Simulation, tenemos tres opciones que se encargan de manejar la simulacin
en curso: Start, Step y Stop. La primera de ellas arranca la simulacin, la segunda se encarga de avanzar
una instruccin (solo esta habilitada cuando en Rate hemos seleccionado el modo paso a paso) y la tercera
detiene la simulacin. Es muy practico utilizar F1, F2 y F3 para invocar estas opciones.
Rate es el submen que determina el modo de ejecucin de la simulacin, brindando 6 posibilidades:
Estas son: Step By Step (paso a paso), Slow (Lenta), Normal (Normal), Fast (Rpida), Extremely Fast
(muy rpida) y Ultimate (No Refresh) que es la mas rpida de todas, pero que no actualiza la pantalla
principal del simulador. Esta opcin resulta muy til para "adelantar" partes del programa que sabemos que no
tienen problemas. Todas pueden ser invocadas con CTRL+F1 a CTRL+F6, tal como se ve en la figura anterior.
Tools es el submen encargado de invocar a cada uno de los mdulos que integran el simulador, y que
veremos en detalle en captulos siguientes. Tal como se ve en la figura, la mayora de ellos se pueden activar
mediante la combinacin de la tecla CTRL y alguna mas.
5 de 28
bastante espacio a cada una de ellas en los captulos correspondientes, pero podemos adelantar que las mas
importantes y que debemos revisar en cada proyecto son Select Microcontroler (seleccionar
microcontrolador) que nos permite elegir el modelo concreto de PIC a utilizar; Change Clock Frecuency
(cambiar frecuencia de clock) y Configuration Bits (bits de configuracin) desde la que se puede elegir la
funcin de algunos pines (Reset o I/O, etc), el tipo de oscilador a usar, etc. La ultima opcin de este submen
permite cambiar los colores de la interfaz (Change Color Theme).
[ Volver al ndice ]
La segunde herramienta disponible recibe el nombre de EEPROM Memory Editor, y como su nombre indica,
nos permite modificar los valores almacenados en la memoria EEPROM del microcontrolador. El contenido de la
EEPROM se lista en 16 columnas numeradas del 0 al 15, y por supuesto, su extensin depende del micro
seleccionado. Haciendo click sobre cualquiera de los valores se puede cambiar su contenido, que se encuentra
en formato hexadecimal.
6 de 28
Hardware Stack Viewer nos permite conocer el valor de cada uno de los niveles del stack (generalmente
llamado pila en espaol). Esto puede resultar til para depurar los programas que tienen muchas subrutinas
anidadas o cuando sospechamos que hay desbordamientos del stack. Adems de ver el nivel de stack (Stack
Level), el contenido en hexadecimal (Hex Value) y en binario (Binary Value), en la parte inferior de la
ventana una etiqueta nos informa de cual es el nivel apuntado en cada paso de la simulacin.
La herramienta Microcontroller View es una de las mas tiles, ya que en una ventana separada (y que como
las dems se puede poner en frente de todas) nos muestra un esquema del micro elegido, con el rotulo
correspondiente a cada pin, y lo mas importante, el estado en cada momento de la simulacin de cada uno. En
caso de ser un pin E/S nos muestra el estado (ON/OFF) que presenta, y si se trata de una referencia de voltaje
muestra el valor asignado. Adems, en cada pin hay un botn que permite cambiar el estado presente en el
(T, supongo que por "toggle", que significa "cambiar"), y los resultados se toman como entradas para la
simulacin.
Existe tambin una vista alternativa del estado de los registros especiales, que pude resultar mas cmoda en
algunos casos. Es la correspondiente a la opcin Alternative SFR Viewer, y muestra en columnas la direccin
en hexa del registro, el nombre "de pila" del mismo (TMR0, PCL, STATUS, etc), y el valor del mismo, en
7 de 28
hexadecimal y en binario.
PIC Disassembler es ni mas ni menos que un desensamblador, que nos brinda un texto con el contenido en
assembler del programa cargado en la memoria del PIC SIMULATOR IDE. Este listado se genera
independientemente del origen del programa, es decir, podemos obtener el cdigo a partir de un archivo ya
compilado con cualquier compilador (con extensin .HEX) o a partir de un .HEX generado con el compilador
BASIC incluido en el paquete. Se muestra, por cada instruccin, la direccin (Address), el opcode y la
instruccin (instruction). Ideal para aprender assembler a partir de instrucciones BASIC, por ejemplo.
El manejador de "puntos de inspeccin" o Breakpoint Manager es una herramienta que permite definir hasta
10 puntos en los que la simulacin se interrumpir (luego podremos reanudar la ejecucin desde ese punto)
para analizar con tranquilidad el estado de los registros, los puertos, etc. Hay un par de opciones adicionales,
como el botn que permite eliminar todos los breakpoints definidos (Clear All Breakpoints) o mantener
siempre en foco el contador de programa (PC o Program Counter). El contenido de la ventana es el cdigo
assembler en el mismo formato que comentamos en la herramienta anterior.
8 de 28
Adems de los diez puntos de parada anteriores, se pueden definir cinco puntos especiales, mediante la
herramienta Special Breakpoints. La diferencia entre esta y la anterior herramienta (y lo que la hace tan
especial) es que en este caso los puntos de inspeccin se fijan mediante una condicin (Break Condition) o
por el estado de algn registro (Register Address). Los botones SET y DEL permiten habilitar y deshabilitar
individualmente cada una de las condiciones.
La herramienta assembler tendr su capitulo propio, por que es aqu donde se escribe el cdigo en dicho
lenguaje para luego compilarlo.
9 de 28
Al igual que el editor de assembler, el BASIC tendr varios captulos dedicados a el, ya que estudiaremos cada
una de las instrucciones disponibles. Podemos adelantar que se trata de un editor bastante decente, con
verificacin de sintaxis y coloreado de palabras reservadas y comentarios, y que la sintaxis del BASIC es
compatible en un 90% con otros BASICs mas populares, como PBP o PROTON. Desde aqu podemos compilar y
cargar en la memoria del simulador el archivo HEX resultante en un solo paso.
10 de 28
[ Volver al ndice ]
11 de 28
las E/S, o analizar su estado. La primera de este grupo es la llamada 8xLED Board que es ni mas ni menos
que un grupo de 8 LEDs virtuales, a los que podemos asignar un puerto y un bit dentro de el, de manera que
se enciendan o apaguen en tiempo real de acuerdo al estado de dichos pines al ejecutar la simulacin.
El Keypad Matrix es ni mas ni menos que un teclado matricial de 4 filas y cuatro columnas que podemos
configurar con total flexibilidad para utilizarlo en nuestros proyectos simulados. Se puede elegir el pin de cada
fila y columna, y dinmicamente, durante la simulacin, el estado de cada tecla. En los ejemplos de los
captulos dedicados a la programacin usaremos esta herramienta a menudo.
El LCD Module es la versin virtual del tpico display LCD con controlador Hitachi que usamos en todos
nuestros proyectos. Es posible configurar completamente su funcionamiento, mediante el botn Setup. Al
presionarlo, la ventana aumenta su tamao y aparecen una serie de cuadros de seleccin desde donde
podremos elegir el numero de filas y columnas del display, el color del mismo, a que puerto estn conectadas
las lneas de datos y si son 4 u 8, y donde estn conectadas (puerto y pin) las lneas RS, R/W y E. Tambin se
pueden configurar los tiempos de delay del display, para que su simulacin sea lo mas fiel posible a la realidad.
12 de 28
Graphical 128x64 LCD Module es el equivalente de la herramienta anterior, pero para simular LCDs grficos
de 128x64 pixeles. Las opciones de configuracin tambin se esconden detrs del botn Setup, y son muy
similares a las ya vistas, incorporndose la posibilidad de configurar el puerto y pin de las lneas CS1 y CS2.
Mediante las herramientas Hardware UART Simulation Interface, Software UART Simulation Interface
y PC's Serial Port Terminal podremos simular una comunicacin va RS-232. Se trata de herramientas muy
completas que tendrn su propio capitulo, por lo que momentneamente nos limitamos a mencionarlas.
13 de 28
Otras dos herramientas sumamente tiles para comprender que esta haciendo en cada momento el
microcontrolador son el osciloscopio (Oscilloscope) de cuatro canales, con posibilidad total de configuracin
de cada uno de ellos, y el Signal Generator (generador de seales) tambin de cuatro canales y con
posibilidad de generar pulsos de periodo y relacin cclica ajustable. Por supuesto, habr captulos en que
haremos uso de ellas.
No poda faltar el modulo con los displays LED de 7 segmentos, presentes en una gran cantidad de proyectos.
En este caso, la herramienta 7-Segment LED Display Panel nos proporciona 4 dgitos completamente
configurables (nuevamente mediante el botn Setup presente en cada uno de ellos), y podemos elegir el pin
al que esta conectada cada uno de los segmentos, si son de nodo o ctodo comn, etc.
14 de 28
La ultima herramienta es una til lista con el valor de cada una de las variables presentes en nuestro
programa. Recibe el nombre de Watch Variables (ver variables) y es una lista de texto donde en una
columna aparece el nombre de la variable en cuestin y en otra su valor. Esta lista se actualiza
constantemente durante la simulacin.
[ Volver al ndice ]
10^6
10^5
10^4
100
10
Dado que este sistema es el que usamos todo el tiempo, no nos detenemos a pensar en como se construye
15 de 28
cada numero, pero cuando leemos el numero "123" en realidad esta "construido" de la siguiente manera:
(1 * 10^2) + (2 * 10^1) + (3 * 10^0) =
(1 * 100) + (2 * 10) + (3 * 1) =
100 + 20 + 3 =
123
Sistema binario:
El sistema binario, el ideal para usar en electrnica debido a que solo posee dos smbolos, el 0 y el 1, que
pueden ser codificados como presencia o ausencia de tensin, utiliza como base el numero 2 en lugar del 10.
En todo lo dems, es exactamente igual al decimal. Si nos parece mas complicado, es solamente por que no
tenemos la suficiente practica con el.
Un numero binario esta construido mediante una secuencia de dgitos binarios (que para abreviar llamamos
"bits"). Muchas veces, se agrupan de diferentes maneras para poder trabajarlos mas cmodamente, y a esas
agrupaciones de les da un nombre, siendo los mas utilizados los siguientes:
Nombre Tamao (bits) Ejemplo
Bit
Nibble
0101
Byte
00000101
Word
16
0000000000000101
Como en cualquier sistema de numeracin, los ceros a la izquierda no modifican el valor del numero
representado. Es muy comn en el sistema binario agregar ceros a la izquierda para completar un agrupacin
de las anteriores. Por ejemplo, si tenemos el numero binario "101" lo podemos escribir de algunas de las
siguientes maneras:
Nibble
0101
Byte
00000101
Word 0000000000000101
Dentro de un byte (la agrupacin de bits mas comn) se numeran los bits que lo componen de acuerdo a la
siguiente convencin:
1) El bit ubicado mas a la derecha es el bit "cero".
2) Cada bit ubicado a su izquierda recibe el numero siguiente
7 6 5 4 3 2 1 0
El bit cero recibe generalmente el nombre de LSB (least significant bit o "bit menos significativo"). De la
misma manera, al ubicado mas a la izquierda se lo llama MSB (most significant bit o "bit mas significativo"). Y
nos referimos a los dems bits intermedios por su numero de bit correspondiente: bit 2, bit 3, etc.
De todo esto podemos deducir que el tipo de dato mas pequeo que podemos manejar es el bit, que solo
puede tener dos valores: 1 o 0. Estos dos estados representan generalmente "encendido" o "apagado",
"verdadero" o "falso", "si" o "no", etc.
Como podemos ver en la tabla de mas arriba, el nibble es la unin de cuatro bits. Dado que 2x2x2x2 = 16,
este es el numero de valores posibles que puede tomar un nibble.
La estructura mas utilizada es el byte, que agrupa 8 bits (o dos nibbles), y que puede tomar valores entre 0 y
255 (2^8 valores posibles). Si tomamos dos bytes y los "pegamos" uno detrs del otro, obtenemos una
palabra (word), que permite 65536 (2^16) valores diferentes.
Sistema hexadecimal:
Si tomamos 16 smbolos para representar los nmeros (en lugar de dos o diez), obtenemos un sistema que se
llama hexadecimal. A los smbolos 0..9 se agregan las letras A, B, C, D, E y F, y es un sistema de numeracin
muy utilizado en programacin. Algunas de sus ventajas son que cada digito de un numero hexadecimal es
exactamente un nibble, o que cada dos dgitos hexadecimales son un byte. Esto proporciona una forma muy
compacta de representar valores.
16 de 28
Decimal Binario
Hexadecinal
0000 0001
10
0000 1010
233
11101001
E9
255
1111 1111
FF
3BB0
Algunos ejemplos.
[ Volver al ndice ]
El tipo "Long" solo esta disponible mediante un modulo opcional al PIC SIMULATOR IDE.
A diferencia de otros BASIC, la declaracin de variables puede ser hecha en cualquier parte del programa, y
todas son consideradas globales, es decir, su valor es accesible desde todas las subrutinas y zonas del
programa. El numero de variables esta lgicamente limitado al monto de memoria RAM disponible en cada
microcontrolador. Las variables las declaramos utilizando la instruccin DIM, como se muestra en los
siguientes ejemplos:
DIM
DIM
DIM
DIM
A
B
X
Y
AS
AS
AS
AS
BIT
BYTE
WORD
LONG
Tambin es posible utilizar vectores, que son una matriz de dimensiones 1xN . Por ejemplo, la sentencia
siguiente:
DIM A(10) AS BYTE
declara un vector (al que nos referiremos algunas veces como "array") de diez elementos del tipo BYTE, que
sern accedidos mediante el uso de subndice (entre parntesis) del 0 al 9.
LA sentencia RESERVE le permite al programador reservar un numero de posiciones de la RAM para su uso en
rutinas en assembler o para el In-Circuit Debugger de MPLAB. Simplemente, si queremos reservar 20 bytes de
RAM, escribimos:
RESERVE 20
Las variables tipo Word, como vimos, estn compuestas por dos bytes. el primero de ellos es llamado byte
"alto" y el otro "bajo", dado que el primero contiene los 8 bits mas significativos. En BASIC podemos acceder
individualmente a cada uno de los bytes que componen un Word mediante las extensiones ".HB" (High byte, o
byte alto) y ".LB" (Low Byte o byte bajo) . Veamos un ejemplo:
17 de 28
DIM A AS BYTE
DIM B AS WORD
A = B.HB
A = B.LB 'Esto es lo mismo que A = B
B.HB = A
B.LB = A
B = A 'Esto tambin borra el byte alto de la variable B
Los bits individuales de cada variable pueden ser accedidos individualmente tambin, simplemente poniendo
como extensin ".n" donde "n" es el numero de bit (1,2, 3, etc. )
DIM
DIM
B =
B =
A.0
A AS BYTE
B AS BIT
A.1
A.7
= A.5
Todos los registros del microcontrolador esta disponibles para usar en los programas BASIC, como si se tratase
de variables del tipo BYTE con el nombre del registro utilizado en las datasheet (PORTA, PORTB, TRISA, etc.).
Por supuesto, se puede acceder a bits individuales de los registros con la tcnica vista prrafos atrs. Algunos
ejemplos:
TRISA.1 = 0
TRISB = 0
PORTA.1 = 1
PORTB = 255
STATUS.RP0 = 1
INTCON.INTF = 0
Existe una "forma corta" de acceder a los bits individuales de cada port, simplemente usando las variables
BASIC tipo byte RA, RB, RC, RD, RE o bien las tipo bit RA0, RA1, RA2, ..., RE6, RE7
RA = 0xFF
RB0 = 1
En BASIC tambin podemos usar punteros. En realidad, cualquier variable definida como tipo BYTE o WORD
pude ser usada como un putero de memoria, usndola como argumento de la funcin POINTER. El valor
contenido por la variable debe tener un valor comprendido entre 0 y 511. Ejemplos:
DIM X AS WORD
DIM Y AS BYTE
X = 0x3F
Y = POINTER(X)
Y = Y + 0x55
X = X - 1
POINTER(X) = Y
Y = 0xAA
X = X - 1
POINTER(X) = Y
Una forma de escribir programas que nos resulten mucho mas fciles de entender es el uso de nombres
simblicos, o SYMBOL. Un "symbol" es una cadena que contiene cdigo, asignado a un nombre. Al momento
de compilar, PIC BASIC hace la "bsqueda y reemplazo" de nuestros smbolos y luego genera el cdigo ASM y
el HEX. Supongamos que tenemos un LED conectado al bit cero del puerto B. Mediante SYMBOL podemos
hacer:
SYMBOL LED1 = PORTB.0
Luego, si queremos encender el LED, en lugar de
PORTB.0 = 1
podemos hacer
LED1 = 1
18 de 28
A AS BIT
B AS BYTE
TRUE
0x55
%01010101
Por supuesto, se pueden asignar nombres a las constantes, usando la instruccin CONST:
DIM A AS WORD
CONST PI = 314
A = PI
Hay tres instrucciones para el manejo individual de bits, que si bien no hacen nada que no se puede resolver
con otras instrucciones o smbolos, ayudan mucho en la lectura del cdigo. Se tratan de HIGH, LOW y
TOGGLE, que ponen el bit en alto, bajo o lo invierten, respectivamente.
Importante: Si el bit implicado como argumento de una de estas instrucciones es un bit de un PORT, el mismo
bit en el TRIS correspondiente es puesto en cero, y dicho pin queda configurado como salida. Algunos
ejemplos:
HIGH PORTB.0
LOW ADCON0.ADON
TOGGLE OPTION_REG.INTEDG
[ Volver al ndice ]
A AS WORD
B AS WORD
X AS WORD
123
A * 234
2
(12345 - B * X) / (A + B)
Es posible calcular races cuadradas (aunque el resultado debe ser entero) con la funcin SQR:
DIM A AS WORD
A = 3600
A = SQR(A)
Para las variables de tipo Bit existen siete operaciones lgicas disponibles. Solo es posible efectuar una
operacin lgica por instruccin (aunque es muy posible que prximas versiones permitan mas flexibilidad.
Este al tanto de las novedades!). Estas operaciones tambin estn disponibles para variables tipo Word o Byte.
Veamos algunos ejemplos:
DIM
DIM
DIM
X =
X =
X =
X =
X =
A AS BIT
B AS BIT
X AS BIT
NOT A
A AND B
A OR B
A XOR B
A NAND B
19 de 28
X = A NOR B
X = A NXOR B
DIM A
DIM B
A = A
PORTB
AS WORD
AS WORD
OR B
= PORTC AND %11110000
[ Volver al ndice ]
Si bien se supone que quien esta leyendo este tutorial tiene una buena idea sobre electrnica y
microcontroladores, igualmente vamos a hacer una muy breve descripcin del circuito.
En primer lugar, vamos a aprovechar el oscilador interno del 16F628A y nos evitaremos el xtal y
condensadores asociados. El puerto B del micro (pines 6 al 13) esta conectado a 8 LEDs mediante 8
resistencias de 220ohms, que tienen como funcin limitar la corriente que circula por los LEDS. Estos sern
nuestras "salidas". Los pines 17 y 18, correspondientes al PORTA.0 y PORTA.1 estn conectados a sendos
pulsadores, que al ser presionados conducen 5V (un "1") al pin respectivo. Cuando estn en reposo, las
resistencias R1 y R2 se encargan de mantener el pin en "0". Por ultimo, el pin 1 (PORTA.2) comanda un
20 de 28
Lo destacable por ahora de esta configuracin es que estamos dejando la memoria (FLASH y EEPROM) sin
proteccin, que el pin RESET se va a comportar como I/O y que usaremos como oscilador el oscilador interno
INTRC.
Una vez hecho esto, arrancamos el edito de BASIC (presionando CTRL-C, por ejemplo), y escribimos el
siguiente cdigo:
21 de 28
22 de 28
PIC SIMULATOR IDE compilara el programa, y cargara el HEX resultante en el simulador. Aparecer el
cuadro de dialogo siguiente, en donde se nos informa entre otras cosas que no han ocurrido errores, el tamao
del programa (69 words), y la ruta a donde se ubicaron los archivos generados.
Si volvemos a la ventana principal del PIC SIMULATOR IDE, y desde "Tools" -> "Microcontroller View"
abrimos la vista del microntrolador, al darle "Start" a la simulacin tendremos algo parecido a lo que sigue:
En la captura se puede apreciar que el pin 6, correspondiente a RB0 esta en "ON". Si esperamos lo suficiente,
veremos como pasa a "OFF", y mas tarde vuelve a "ON", etc. Si queremos esperar menos tiempo, y esto lo
debemos tomar como una regla general al correr simulaciones, podemos disminuir el tiempo indicado en las
instrucciones "WaitMS" a valores iguales a 1, de esta manera la simulacin ser mucho mas gil. Por supuesto,
al momento de llevar el HEX a nuestro microcontrolador en el circuito "real", debemos cambiar a los tiempos
originales y volver a compilar. Caso contrario, el LED permanecera encendido solo una milsima de segundo,
luego apagado el mismo tiempo, etc., por lo que nuestro ojo lo percibira como encendido a medias, incapaz de
discriminar su verdadero estado.
Se podra haber utilizado la instruccin SYMBOL para hacer mas claro el programa. En el siguiente ejemplo,
hemos hecho algunos cambio y obtenido un programa que hace exactamente lo mismo que el anterior, pero
23 de 28
que resulta mas claro de entender, ya que se aproxima algo mas al "lenguaje natural":
El programa BASIC puede descargarse desde [aqu], y el correspondiente archivo HEX desde [aqu] .
[ Volver al ndice ]
Como resulta evidente a simple vista, el programa ejemplo2.bas es muy similar al ejemplo1.bas que vimos en
24 de 28
el capitulo anterior. Las diferencias estn dentro del bucle. La instruccin de la lnea 007 ( PORTB.0 = PORTA.0
) hace que el valor del bit 0 del PORTB tome el valor del bit 0 del PORTA. Que ambos bits sean el cero es solo
una coincidencia, se podran haber elegido otros valores.
Al ejecutarse el programa, cada vez que se accione el pulsador conectado a PORTA.0, ese pin se pondr a
estado alto, ya que la corriente circulara desde +V al pin 17 del PIC por medio del pulsador. Ese "estado alto"
se interpreta dentro del PIC como un "1", y es el valor que se le asigna a PORTB.0 , con lo que el tambin
pasara a estado alto. Eso provocara que el led conectado en ese pin se ilumine.
Cuando soltamos el pulsador, PORTA.0 vuelve a estado bajo, ya que se pone a masa a travs de la resistencia
de 10K, y PORTB.0 har lo propio, apagando el LED.
Nuestro sencillo (sencillsimo!) programa todo lo que hace es "copiar" en el LED el estado del pulsador.
Si presionamos F9 o vamos al men que vemos a continuacin
PIC SIMULATOR IDE compilara el programa, y cargara el HEX resultante en el simulador. Aparecer el
cuadro de dialogo que nos informa que no han ocurrido errores y que el tamao del programa esta vez es de
20 words.
Si volvemos a la ventana principal del PIC SIMULATOR IDE, y desde "Tools" -> "Microcontroller View"
abrimos la vista del microntrolador, al darle "Start" a la simulacin tendremos algo parecido a lo que sigue:
El pin 6, correspondiente a RB0 esta en "OFF" por que el pulsador del pin 17 (RA0) esta en OFF. Si con el
mouse hacemos un click sobre la "T" que esta al lado del pin 17, la vista del microcontrolador pasara al estado
que muestra la imagen siguiente:
25 de 28
Recordemos que el botn "T" significa "cambio" (Toggle) por lo que el estado del pin 17 permanecer en alto
hasta que lo pulsemos otra vez, y el estado del microcontrolador volver a ser el inicial. Como en cualquier
curso, conviene realizar estas practicas, que aunque puedan parecer muy sencillas nos ayudaran a conocer las
herramientas disponibles y "tomar confianza" al programa. Tambin es interesante el realizar cambios en el
programa BASIC, recompilar y analizar los resultados.
El programa BASIC de este capitulo puede descargarse desde [aqu], y el correspondiente archivo HEX desde
[aqu] .
[ Volver al ndice ]
26 de 28
IF PORTA.4 = 1 THEN A = 4
TOTAL = TOTAL + A 'Sumo a "TOTAL" el valor de "A"
Cundo comienza el programa, se declaran dos variables tipo BYTE (que pueden almacenar valores entre 0 y
255), y a TOTAL se le asigna el valor "0" y a "A" el valor "2". Hasta aqu, no hay nada que no hayamos visto
antes.
La lnea siguiente realiza la siguiente tarea: evala si la condicin PORTA.4 = 1 es cierta. En caso de que
efectivamente el valor presente en el bit 4 del PORTA sea "1", se ejecuta la instruccin a continuacin del
THEN, la variable "A" toma el valor "4", y se pasa a la instruccin de abajo. Si PORTA es igual a "0", se pasa a la
instruccin siguiente sin mas.
El valor final de la variable "TOTAL" depende entonces de cual sea el estado de PORTA.4 al momento de hacer
la evaluacin. Si es igual a "1", "TOTAL" tendr un valor de 14 (10 + 4). Si PORTA.4 = 0, "TOTAL" tendr un
valor de 12 (10 + 2).
Veamos algunos ejemplos validos de este caso:
IF
IF
IF
IF
IF
A = B THEN PORTA.0 = 1
B > A THEN A = B
B = 5 THEN A = 0
(A = 0) OR (B = 5) THEN C = 2
PORTA.0 THEN PORTB.3 = 0
CASO 2: Muchas veces, luego de evaluar la condicin necesitamos ejecutar mas de una instruccin. En los
ejemplos vistos en el CASO 1 siempre se ejecutaba una sola instruccin cuando la condicin era cierta. La
manera de ejecutar mltiples sentencias dentro de una estructura IF-THEN implica emplear el ENDIF:
IF condicin THEN
instruccin 1
instruccin 2
...
instruccin n
ENDIF
No varia prcticamente nada respecto del primer caso, solo que esta vez se van a ejecutar todas las
instrucciones que se encuentren entre el THEN y el ENDIF cada vez que condicin sea verdadera.
Veamos un ejemplo. Supongamos el siguiente programa:
DIM
DIM
DIM
DIM
DIM
TOTAL
A = 2
B = 5
C = 1
D = 0
= 0
'Le
'Le
'Le
'Le
IF A = 2 THEN
A = B + (C * D)
TOTAL = A * B
ENDIF
como BYTE
como BYTE
como BYTE
como BYTE
"TOTAL" como BYTE
0 a la variable "TOTAL"
la variable "A"
la variable "B"
la variable "C"
la variable "D"
27 de 28
El ejemplo anterior, la condicin A = 2 es verdadera (puesto que ese es el valor que le asignamos a "A" mas
arriba), por lo que las dos instrucciones dentro del THEN-ENDIF se ejecutaran. Esto hace que TOTAL tome el
valor de 10 (hagan las cuentitas!). Si "A" hubiese tenido otro valor, esas dos sentencias no se ejecutaran y
TOTAL seguira valiendo "0" al terminar el programa.
CASO 3: Hay veces que de acuerdo a la condicin, queremos ejecutar un grupo u otro de instrucciones. Para
eso, utilizamos el ELSE:
IF condicin THEN
instruccinv 1
instruccinv 2
...
instruccinv n
ELSE
instruccinf 1
instruccinf 2
...
instruccinf n
ENDIF
Es decir, si la condicin es verdadera, se ejecutan las sentencias entre THEN y ELSE. Y si la condicin es falsa,
las que estn entre ELSE y ENDIF. "ELSE" puede ser traducido como "en otro caso" o "si no...".
Veamos un ejemplo. Supongamos el siguiente programa:
28 de 28
ENDIF
Las sentencias en color rojo corresponden a una estructura IF-THEN-ELSE-ENDIF y las que estn en azul a la
otra, que se encuentra dentro ("anidada" en) de la primera.
Para descargar los ejemplos en BASIC o los archivos HEX ya compilados pueden
dirigirse a www.ucontrol.com.ar
www.ucontrol.com.ar | Desarrollo de sistemas de automatizacin y control | Pehuaj - Buenos Aires - Argentina
e-mail: arielpalazzesi@gmail.com