PIC SIMULATOR IDE - Curso en Español Parte 1 - Manual

download PIC SIMULATOR IDE - Curso en Español Parte 1 - Manual

of 28

Transcript of PIC SIMULATOR IDE - Curso en Español Parte 1 - Manual

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    1/28

    28

    ENTORNO DE DESARROLLO

    PICSIMULATORIDE

    PRIMERA PARTE

    INTRODUCCIN:Este documento es un intento de explicar el funcionamiento de una delas herramientas de desarrollo (a mi entender) mas interesantes parael 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 unmuy completo BASIC, con soporte para dispositivos 1-wire, LCD,RS-232 y muchos mas.Otro aspecto destacable es la inclusin de una gran cantidad demdulos de E/S que simulan exactamente lo que esta pasando ennuestro programa, incluidos un modulo LCD, teclado, osciloscopio,displays de 7 segmentos entre otros.

    La gua o curso se encuentra dividida en aproximadamente 40captulos, y se pueden ver en www.ucontrol.com.ar . Cada PDFcomo este comprende 10 captulos.

    El autor del programa es Vladimir Soso, y la web oficial del PIC SIMULATOR IDEes 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 01 - La interfaz>Capitulo 02 - El men principal>Capitulo 03 - Tools (Primera parte)>Capitulo 04 - Tools (Segunda parte)>Capitulo 05 - Sistemas de numeracin>Capitulo 06 - Variables>Capitulo 07 - Operaciones Lgicas y Matemticas> Capitulo 08 - Mi primer programa: Un led parpadeante> Capitulo 09 - Mi segundo programa: Usando un pulsador

    > Capitulo 10 - IF - THEN - ELSE - ENDIF

    > Capitulo 01 - La interfaz:Debido a que se trata de un software concebido desde el vamos como un entorno, la integracin entre losdiferentes mdulos que lo componen es completa y sin problemas.Una vez instalado el programa, el icono que lo representa aparecer en nuestro escritorio, y haciendo dobleclic sobre el se abrir la pantalla principal del programa, que al menos hasta la versin sobre la que sedesarrolla este tutorial (la 5.91) esta en ingles:

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    2/28

    28

    Antes de ver en que consiste cada opcin del men principal, vamos a analizar rpidamente cada seccin deesta 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), elmicrocontrolador que hemos seleccionado para nuestro proyecto (Microcontroller) y la frecuencia de clockelegida (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 unasimulacin de nuestro programa) cual es la instruccin assembler en curso (Last Instruction) y cual ser lasiguiente a ejecutar (Next Instruction):

    Luego tenemos un cuadro con informacin relativa a la ejecucin del programa, en la que vemos instruccin ainstruccin durante todo el tiempo en que estemos corriendo la simulacin, el valor que va tomando elcontador de programa (PCo Program Counter), el registro de trabajo (W Register, por "working") y sobrela derecha la cantidad de instrucciones simuladas (Instructions Counter), la cantidad de ciclos de relojtranscurridos (Clock Cycles Counter) y el tiempo de ejecucin que llevara en realidad dicho programa (RealTime Duration). Cabe aclarar, que como en todo simulador, la relacin entre el tiempo real y el tiempo desimulacin varia dependiendo de los recursos de nuestro ordenador, y en general los programas simuladosdemoran mucho mas tiempo que el real en ejecutarse.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    3/28

    28

    A continuacin, sobre la izquierda, vemos una lista de desplazamiento que contiene el valor de todos losregistros especiales con los que cuenta el microcontrolador elegido. Esta lista varia, por supuesto, con cadamicrocontrolador, y en el momento de correr la simulacin va reflejando instruccin a instruccin el valor decada 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 tambinpor 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 ]

    > Capitulo 02 - El men principal:La mayora de las funciones de las que dispone esta herramienta estn agrupadas dentro del men principal dela aplicacin. Es de destacar que todos los mdulos que se pueden invocar desde aqu se abren en ventanas

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    4/28

    28

    separadas, y pueden ser configuradas (como veremos) para que se siten permanentemente delante de lasdems ventanas, de manera que no las perdamos de vista. Este es el men principal:

    Como es costumbre en toda aplicacin de windows, la opcin Filees la primera del men. Contiene solo doscomandos: Clear Memory (Limpiar memoria) que se encarga de eliminar de la memoria del simulador elprograma 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 quequeremos simular. Esta funcin puede invocarse con CTRL+L.Dentro de la segunda opcin, Simulation, tenemos tres opciones que se encargan de manejar la simulacinen curso: Start, Stepy Stop. La primera de ellas arranca la simulacin, la segunda se encarga de avanzaruna instruccin (solo esta habilitada cuando en Ratehemos seleccionado el modo paso a paso) y la terceradetiene la simulacin. Es muy practico utilizar F1, F2 y F3 para invocar estas opciones.Ratees 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 pantallaprincipal del simulador. Esta opcin resulta muy til para "adelantar" partes del programa que sabemos que notienen 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 queveremos en detalle en captulos siguientes. Tal como se ve en la figura, la mayora de ellos se pueden activarmediante la combinacin de la tecla CTRL y alguna mas.

    Desde Options (Opciones) tenemos acceso a un conjunto de alternativas de configuracin. Dedicaremos

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    5/28

    28

    bastante espacio a cada una de ellas en los captulos correspondientes, pero podemos adelantar que las masimportantes y que debemos revisar en cada proyecto son Select Microcontroler (seleccionarmicrocontrolador) 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 lafuncin de algunos pines (Reset o I/O, etc), el tipo de oscilador a usar, etc. La ultima opcin de este submenpermite cambiar los colores de la interfaz (Change Color Theme).

    [ Volver al ndice ]

    > Capitulo 03 - Herramientas (primera parte):PIC SIMULATOR IDE posee una nutrida caja de herramientas. Estas se encuentran agrupadas en la opcinToolsdel men principal, y a continuacin veremos en que consiste cada una de ellas.La primera es el visor de la memoria de programa (Program Memory Viewer), modulo que podemos invocarpresionando CTRL-M en cualquier momento. Se lista la memoria completa, cuya extensin depender delmicrocontrolador que tengamos seleccionado, y se pueden ver tres columnas: direccin (Address), valor enhexadecimal de esa direccin (Hex. Value) y el valor en binario (Binary Value). Al igual que las demsherramientas, existe un check box que permite poner la ventana correspondiente siempre al frente (AlwaysOn Top).

    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 laEEPROM se lista en 16 columnas numeradas del 0 al 15, y por supuesto, su extensin depende del microseleccionado. Haciendo click sobre cualquiera de los valores se puede cambiar su contenido, que se encuentraen formato hexadecimal.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    6/28

    28

    Hardware Stack Viewernos permite conocer el valor de cada uno de los niveles del stack (generalmentellamado pila en espaol). Esto puede resultar til para depurar los programas que tienen muchas subrutinasanidadas o cuando sospechamos que hay desbordamientos del stack. Adems de ver el nivel de stack (StackLevel), el contenido en hexadecimal (Hex Value) y en binario (Binary Value), en la parte inferior de laventana una etiqueta nos informa de cual es el nivel apuntado en cada paso de la simulacin.

    La herramienta Microcontroller Viewes una de las mas tiles, ya que en una ventana separada (y que comolas dems se puede poner en frente de todas) nos muestra un esquema del micro elegido, con el rotulocorrespondiente 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 voltajemuestra 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 lasimulacin.

    Existe tambin una vista alternativa del estado de los registros especiales, que pude resultar mas cmoda enalgunos casos. Es la correspondiente a la opcin Alternative SFR Viewer, y muestra en columnas la direccinen hexa del registro, el nombre "de pila" del mismo (TMR0, PCL, STATUS, etc), y el valor del mismo, en

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    7/28

    28

    hexadecimal y en binario.

    PIC Disassembleres ni mas ni menos que un desensamblador, que nos brinda un texto con el contenido enassembler del programa cargado en la memoria del PIC SIMULATOR IDE. Este listado se generaindependientemente del origen del programa, es decir, podemos obtener el cdigo a partir de un archivo yacompilado con cualquier compilador (con extensin .HEX) o a partir de un .HEX generado con el compiladorBASIC incluido en el paquete. Se muestra, por cada instruccin, la direccin (Address), el opcode y lainstruccin (instruction). Ideal para aprender assembler a partir de instrucciones BASIC, por ejemplo.

    El manejador de "puntos de inspeccin" o Breakpoint Manageres una herramienta que permite definir hasta10 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 mantenersiempre en foco el contador de programa (PCo Program Counter). El contenido de la ventana es el cdigoassembler en el mismo formato que comentamos en la herramienta anterior.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    8/28

    28

    Adems de los diez puntos de parada anteriores, se pueden definir cinco puntos especiales, mediante laherramienta Special Breakpoints. La diferencia entre esta y la anterior herramienta (y lo que la hace tanespecial) es que en este caso los puntos de inspeccin se fijan mediante una condicin (Break Condition) opor el estado de algn registro (Register Address). Los botones SETy DELpermiten habilitar y deshabilitarindividualmente cada una de las condiciones.

    La herramienta assembler tendr su capitulo propio, por que es aqu donde se escribe el cdigo en dicholenguaje para luego compilarlo.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    9/28

    28

    Al igual que el editor de assembler, el BASICtendr varios captulos dedicados a el, ya que estudiaremos cadauna de las instrucciones disponibles. Podemos adelantar que se trata de un editor bastante decente, converificacin de sintaxis y coloreado de palabras reservadas y comentarios, y que la sintaxis del BASIC escompatible en un 90% con otros BASICs mas populares, como PBP o PROTON. Desde aqu podemos compilar ycargar en la memoria del simulador el archivo HEX resultante en un solo paso.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    10/28

    28

    [ Volver al ndice ]

    > Capitulo 04 - Herramientas (Segunda parte):

    Las herramientas siguientes son las que podemos usar como "perifricos" del microcontrolador, para simular

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    11/28

    28

    las E/S, o analizar su estado. La primera de este grupo es la llamada 8xLED Boardque es ni mas ni menosque un grupo de 8 LEDs virtuales, a los que podemos asignar un puerto y un bit dentro de el, de manera quese enciendan o apaguen en tiempo real de acuerdo al estado de dichos pines al ejecutar la simulacin.

    El Keypad Matrixes ni mas ni menos que un teclado matricial de 4 filas y cuatro columnas que podemosconfigurar con total flexibilidad para utilizarlo en nuestros proyectos simulados. Se puede elegir el pin de cadafila y columna, y dinmicamente, durante la simulacin, el estado de cada tecla. En los ejemplos de loscaptulos 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 todosnuestros proyectos. Es posible configurar completamente su funcionamiento, mediante el botn Setup. Alpresionarlo, la ventana aumenta su tamao y aparecen una serie de cuadros de seleccin desde dondepodremos elegir el numero de filas y columnas del display, el color del mismo, a que puerto estn conectadaslas lneas de datos y si son 4 u 8, y donde estn conectadas (puerto y pin) las lneas RS, R/W y E. Tambin sepueden configurar los tiempos de delay del display, para que su simulacin sea lo mas fiel posible a la realidad.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    12/28

    28

    Graphical 128x64 LCD Modulees el equivalente de la herramienta anterior, pero para simular LCDs grficosde 128x64 pixeles. Las opciones de configuracin tambin se esconden detrs del botn Setup, y son muysimilares 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 Interfacey PC's Serial Port Terminalpodremos simular una comunicacin va RS-232. Se trata de herramientas muycompletas que tendrn su propio capitulo, por lo que momentneamente nos limitamos a mencionarlas.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    13/28

    28

    Otras dos herramientas sumamente tiles para comprender que esta haciendo en cada momento elmicrocontrolador son el osciloscopio (Oscilloscope) de cuatro canales, con posibilidad total de configuracinde cada uno de ellos, y el Signal Generator (generador de seales) tambin de cuatro canales y conposibilidad de generar pulsos de periodo y relacin cclica ajustable. Por supuesto, habr captulos en queharemos 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 completamenteconfigurables (nuevamente mediante el botn Setuppresente en cada uno de ellos), y podemos elegir el pinal que esta conectada cada uno de los segmentos, si son de nodo o ctodo comn, etc.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    14/28

    28

    La ultima herramienta es una til lista con el valor de cada una de las variables presentes en nuestroprograma. Recibe el nombre de Watch Variables (ver variables) y es una lista de texto donde en unacolumna aparece el nombre de la variable en cuestin y en otra su valor. Esta lista se actualizaconstantemente durante la simulacin.

    [ Volver al ndice ]

    > Capitulo 05 - Sistemas de numeracin:Existen muchas maneras de representar un numero. De hecho, en teora es posible hacerlo de infinitasmaneras, ya que podemos elegir como base cualquier numero entero. Generalmente, los mas usados en elmundo de la programacin son el sistema decimal, que utiliza como base el numero 10; el sistema binario, queutiliza como base el numero 2; y el hexadecimal, que utiliza el numero 16 como base.

    Sistema Decimal:Como su nombre lo indica, el sistema decimal toma como base para construir los nmeros potencias sucesivasdel numero 10. Se utilizan los smbolos del "0" al "9", y el peso de cada cifra esta dado por su posicin, dadoque se multiplica por 10 elevado a la posicin en que se encuentra el digito menos uno. Como en todos lossistemas de numeracin, el digito de menos "peso" es el que esta mas a la derecha, y el de mas "peso" el quese encuentra mas a la izquierda.

    Potencia de 10: 10^7 10^6 10^5 10^4 10^3 10^2 10^1 10^0

    Valor: 10000000 1000000 100000 10000 1000 100 10 1

    Dado que este sistema es el que usamos todo el tiempo, no nos detenemos a pensar en como se construye

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    15/28

    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, quepueden 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 notenemos 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 esasagrupaciones de les da un nombre, siendo los mas utilizados los siguientes:

    Nombre Tamao (bits) Ejemplo

    Bit 1 1

    Nibble 4 0101

    Byte 8 00000101

    Word 16 0000000000000101

    Como en cualquier sistema de numeracin, los ceros a la izquierda no modifican el valor del numerorepresentado. Es muy comn en el sistema binario agregar ceros a la izquierda para completar un agrupacinde las anteriores. Por ejemplo, si tenemos el numero binario "101" lo podemos escribir de algunas de lassiguientes 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 lasiguiente 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 lamisma manera, al ubicado mas a la izquierda se lo llama MSB(most significant bit o "bit mas significativo"). Ynos 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 solopuede 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 nibblees 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 y255 (2^8 valores posibles). Si tomamos dos bytes y los "pegamos" uno detrs del otro, obtenemos unapalabra (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 sellama hexadecimal. A los smbolos 0..9 se agregan las letras A, B, C, D, E y F, y es un sistema de numeracinmuy utilizado en programacin. Algunas de sus ventajas son que cada digito de un numero hexadecimal esexactamente un nibble, o que cada dos dgitos hexadecimales son un byte. Esto proporciona una forma muycompacta de representar valores.

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    16/28

    28

    Decimal Binario Hexadecinal

    1 0000 0001 1

    10 0000 1010 A

    233 11101001 E9

    255 1111 1111 FF

    15280 0011 1011 1011 0000 3BB0

    Algunos ejemplos.

    [ Volver al ndice ]

    > Capitulo 06 - Variables:Vamos a comenzar a ver algo de la programacin en el BASIC incluido en el entorno PIC SIMULATOR IDE, alque en adelante nos referiremos como "BASIC", a secas.La programacin seria prcticamente imposible sin el uso de variables. Podemos hacernos una imagen mentalde las variables consistente en una caja en la que podemos guardar algo. Esa caja es una de las muchas quedisponemos, y tiene en su frente pegada una etiqueta con su nombre. Estas cajas tienen ciertasparticularidades, que hace que solo se puedan guardar en ellas determinados tipos de objetos.

    En esta analoga, cada caja es una variable, su contenido es el valor que adopta, y la etiqueta es el nombre dela variable. Como su nombre lo indica, y como veremos mas adelante, el contenido de una variable puede sermodificado a lo largo del programa.

    El BASIC tenemos distintos tipos de variable, segn el dato que puedan almacenar:

    - Bit (un bit de longitud, almacena 0 o 1 nicamente)- Byte (un byte de longitud, almacena nmeros enteros entre 0 y 255)- Word (dos bytes de longitud, almacena nmeros enteros entre 0 y 65,535)- Long (cuatro dos bytes de longitud, almacena nmeros enteros entre 0 y 4,294,967,295)

    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 delprograma. El numero de variables esta lgicamente limitado al monto de memoria RAM disponible en cadamicrocontrolador. Las variables las declaramos utilizando la instruccin DIM, como se muestra en lossiguientes ejemplos:

    DIM A AS BIT

    DIM B AS BYTE

    DIM X AS WORD

    DIM Y AS LONG

    Tambin es posible utilizar vectores, que son una matriz de dimensiones 1xN . Por ejemplo, la sentenciasiguiente:

    DIM A(10) AS BYTE

    declara un vector (al que nos referiremos algunas veces como "array") de diez elementos del tipo BYTE, quesern 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 enrutinas en assembler o para el In-Circuit Debugger de MPLAB. Simplemente, si queremos reservar 20 bytes deRAM, 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 accederindividualmente a cada uno de los bytes que componen un Word mediante las extensiones ".HB" (High byte, obyte alto) y ".LB" (Low Byte o byte bajo) . Veamos un ejemplo:

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    17/28

    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 poniendocomo extensin ".n" donde "n" es el numero de bit (1,2, 3, etc. )

    DIM A AS BYTE

    DIM B AS BIT

    B = A.1

    B = A.7

    A.0 = A.5

    Todos los registros del microcontrolador esta disponibles para usar en los programas BASIC, como si se tratasede 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. Algunosejemplos:

    TRISA.1 = 0

    TRISB = 0

    PORTA.1 = 1PORTB = 255

    STATUS.RP0 = 1

    INTCON.INTF = 0

    Existe una "forma corta" de acceder a los bits individuales de cada port, simplemente usando las variablesBASIC 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 WORDpude ser usada como un putero de memoria, usndola como argumento de la funcin POINTER. El valorcontenido por la variable debe tener un valor comprendido entre 0 y 511. Ejemplos:

    DIM X AS WORDDIM 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 nombressimblicos, o SYMBOL. Un "symbol" es una cadena que contiene cdigo, asignado a un nombre. Al momentode 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 podemoshacer:

    SYMBOL LED1 = PORTB.0

    Luego, si queremos encender el LED, en lugar de

    PORTB.0 = 1

    podemos hacer

    LED1 = 1

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    18/28

    28

    que es mucho mas claro y fcil de leer.Las constantes (valores que usamos en nuestro programa, y que, por ejemplo, asignamos a las variables)pueden ser escritas en decimal (directamente el valor), en hexadecimal (anteponiendo "0x" o posponiendo "H"al valor) o en binario (anteponiendo "%" al valor). Por ejemplo:

    DIM A AS BIT

    DIM B AS BYTE

    A = TRUE

    B = 0x55

    B = %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 resolvercon otras instrucciones o smbolos, ayudan mucho en la lectura del cdigo. Se tratan de HIGH, LOW yTOGGLE, 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 mismobit en el TRIS correspondiente es puesto en cero, y dicho pin queda configurado como salida. Algunosejemplos:

    HIGH PORTB.0

    LOW ADCON0.ADON

    TOGGLE OPTION_REG.INTEDG

    [ Volver al ndice ]

    > Capitulo 07 - Operaciones Lgicas y Matemticas:PIC SIMULATOR IDEdispone de cinco operaciones matemticas bsicas, disponibles para las variables tipoByte y Word. Estas son la suma (operador +), la sustraccin (operador -), el producto (operador *), elcociente (operador /) y el mdulo (operador MOD) .Por supuesto, el compilador es capaz de combinarlas para

    obtener operaciones matemticas mas complejas.DIM A AS WORD

    DIM B AS WORD

    DIM X AS WORD

    A = 123

    B = A * 234

    X = 2

    X = (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 unaoperacin 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 A AS BIT

    DIM B AS BIT

    DIM X AS BIT

    X = NOT A

    X = A AND B

    X = A OR B

    X = A XOR B

    X = A NAND B

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    19/28

    28

    X = A NOR B

    X = A NXOR B

    DIM A AS WORD

    DIM B AS WORD

    A = A OR B

    PORTB = PORTC AND %11110000

    [ Volver al ndice ]

    > Capitulo 08 - Mi primer programa: Un LED parpadeandoLuego de todos estos captulos de introduccin, puramente tericos, vamos a encarar nuestro primerprograma. A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila, lo ejecuta yya, en el mundo de los microcontroladores hay que, previamente, definir el tipo de microcontrolador que se vaa utilizar, cual va a ser su frecuencia de clock, como va a ser el circuito en que se va a utilizar el mismo, etc.

    Para estas practicas, utilizaremos un PIC16F628A, uno de los mas difundidos y que mas o menos viene areemplazar al viejo y popular PIC16F84, ya obsoleto. El diagrama circuital que utilizaremos para las primeraspracticas es el siguiente:

    Si bien se supone que quien esta leyendo este tutorial tiene una buena idea sobre electrnica ymicrocontroladores, 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 ycondensadores asociados. El puerto B del micro (pines 6 al 13) esta conectado a 8 LEDs mediante 8resistencias de 220ohms, que tienen como funcin limitar la corriente que circula por los LEDS. Estos sernnuestras "salidas". Los pines 17 y 18, correspondientes al PORTA.0 y PORTA.1 estn conectados a sendospulsadores, que al ser presionados conducen 5V (un "1") al pin respectivo. Cuando estn en reposo, lasresistencias R1 y R2 se encargan de mantener el pin en "0". Por ultimo, el pin 1 (PORTA.2) comanda un

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    20/28

    28

    parlante mediante un transistor, para hacer alguna prueba con sonidos.

    El circuito debe alimentarse con 5v bien filtrados y regulados. Si no sabes como construir una fuente, puedesleer algo sobre el tema aqu.

    Volviendo a nuestro programa, vamos a escribir el "hola mundo" de los microcontroladores: encender un LED.

    El primer paso es, desde el men "Opciones" -> "Select Microcontroller", elegir elPIC16F628A.

    Luego, debemos configurar los bits correspondientes:

    Lo destacable por ahora de esta configuracin es que estamos dejando la memoria (FLASH y EEPROM) sinproteccin, que el pin RESET se va a comportar como I/O y que usaremos como oscilador el oscilador internoINTRC.

    Una vez hecho esto, arrancamos el edito de BASIC (presionando CTRL-C, por ejemplo), y escribimos elsiguiente cdigo:

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    21/28

    28

    Vamos a analizarlo lnea por lnea para entender su funcionamiento:

    La lnea 001 utiliza la sentencia AllDigitalpara convertir todos los pines del micro en pines de E/S. Estoequivale a deshabilitar los comparadores, conversores A/D y todos los mdulos que pudiese tener nuestromicrocontrolador. No es la nica manera de hacer esto, pero si la mas sencilla desde el punto de vista delprogramador BASIC.

    Las lneas 003 y 004 convierten todos los pines del puerto A en entradas ( TRISA = %11111111 ) y los delpuerto B en salidas ( TRISB = %00000000). El "%" indica que el numero que viene a continuacin esta enbinario. Se podra haber escrito, por ejemplo TRISB = 0y hubiera sido lo mismo. Personalmente me gustaesta manera, ya que "veo" el estado de cada pin. Por supuesto, es valido activar como entrada algunos pines,y como salidas otros, haciendo algo parecido a TRISB = %11000111.

    En la lnea 006 encontramos una "etiqueta" ( loop: ). Esta no hace nada, solo sirve como referencia paraenviar el flujo del programa a esa lnea desde otro lugar, mediante la sentencia "Goto".

    La lnea 007 pone en "1" el pin correspondiente a PORTB.0, de manera que en el pin 6 del microcontroladorhabr 5V. Esta tensin har que circule una corriente a travs de la resistencia limitadora y el LED1, haciendoque este se encienda, ya que el ctodo se encuentra conectado a 0V.

    En 008 tenemos la sentencia WaitMs 500 . WaitMs se encarga de hacer una pausa en milisegundos. Laduracin de la pausa esta dada por el numero que sigue a la instruccin, en este caso 500 milisegundos, omedio segundo.

    Luego, en 009, otra vez se vuelve a poner en 0 el pin 6, mediante PORTB.0 = 0, lo que provoca que ese pinse ponga a 0V, y no haya mas circulacin de corriente a travs de la resistencia y del LED, con lo que este seapaga.

    En 010 se hace nuevamente una pausa de medio segundo, y por ultimo, la lnea Goto Loop hace que el

    programa contine en la lnea 006 (que es donde esta la etiqueta Loop).

    El programa se repite indefinidamente, encendiendo el LED medio segundo, apagndolo otro medio segundo.

    Si presionamos F9 o vamos al men que vemos a continuacin

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    22/28

    28

    PIC SIMULATOR IDE compilara el programa, y cargara el HEX resultante en el simulador. Aparecer elcuadro de dialogo siguiente, en donde se nos informa entre otras cosas que no han ocurrido errores, el tamaodel 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 lodebemos tomar como una regla general al correr simulaciones, podemos disminuir el tiempo indicado en lasinstrucciones "WaitMS" a valores iguales a 1, de esta manera la simulacin ser mucho mas gil. Por supuesto,al momento de llevar el HEXa nuestro microcontrolador en el circuito "real", debemos cambiar a los tiemposoriginales 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 dediscriminar su verdadero estado.

    Se podra haber utilizado la instruccin SYMBOLpara 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

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    23/28

    28

    que resulta mas claro de entender, ya que se aproxima algo mas al "lenguaje natural":

    El programa BASICpuede descargarse desde [aqu], y el correspondiente archivo HEXdesde [aqu].

    [ Volver al ndice ]

    > Capitulo 09 - Mi segundo programa: Usando un pulsadorEn la segunda practica del lenguaje BASICveremos como leer una entrada del PIC. Utilizaremos el mismoesquema que vimos antes, y el programa que mostramos a continuacin:

    Como resulta evidente a simple vista, el programa ejemplo2.bases muy similar al ejemplo1.basque vimos en

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    24/28

    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 PORTBtome el valor del bit 0 del PORTA. Que ambos bits sean el cero es solouna 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 aestado 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 tambinpasara a estado alto. Eso provocara que el led conectado en ese pin se ilumine.

    Cuando soltamos el pulsador, PORTA.0vuelve a estado bajo, ya que se pone a masa a travs de la resistencia

    de 10K, y PORTB.0har 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 elcuadro de dialogo que nos informa que no han ocurrido errores y que el tamao del programa esta vez es de20 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 RB0esta en "OFF" por que el pulsador del pin 17 (RA0) esta en OFF. Si con elmouse hacemos un click sobre la "T" que esta al lado del pin 17, la vista del microcontrolador pasara al estadoque muestra la imagen siguiente:

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    25/28

    28

    Recordemos que el botn "T" significa "cambio" (Toggle) por lo que el estado del pin 17 permanecer en altohasta que lo pulsemos otra vez, y el estado del microcontrolador volver a ser el inicial. Como en cualquiercurso, conviene realizar estas practicas, que aunque puedan parecer muy sencillas nos ayudaran a conocer lasherramientas disponibles y "tomar confianza" al programa. Tambin es interesante el realizar cambios en elprograma BASIC, recompilar y analizar los resultados.

    El programa BASICde este capitulo puede descargarse desde [aqu], y el correspondiente archivo HEXdesde[aqu].

    [ Volver al ndice ]

    > Capitulo 10 - IF - THEN - ELSE - ENDIFEn cualquier programa medianamente complejo que queramos realizar, seguramente necesitaremos en algnpunto tomar alguna decisin basndonos en el estado de una entrada o en el valor de una variable. PICBASIC incorpora instrucciones que nos permiten este tipo de comportamiento, siendo la mas sencilla y

    frecuentemente utilizada la sentencia IF - THEN - ELSE - ENDIF.Existen varias formas de utilizar esta instruccin. Comenzaremos con los casos mas sencillos y a lo largo deeste capitulo iremos agregando complejidad hasta ver todas las posibilidades.

    CASO 1:El caso mas simple es el siguiente:

    IF condicin THEN instruccin

    "IF" significa "SI....", y "THEN" significa "LUEGO" o "ENTONCES". El caso anterior puede leerse como "SI secumple la condicin, entonces ejecuto la instruccin"

    La "condicin" es una expresin lgica que puede ser verdadera o falsa. En caso de ser verdadera, lainstruccin a continuacin del THENser ejecutada. En caso de la condicin sea falsa, el programa seguir su

    ejecucin con la instruccin siguiente al "IF - THEN".

    Veamos un ejemplo. Supongamos el siguiente programa:

    ALLDIGITAL 'Voy a usar todos los pines como E/S.

    TRISA = %11111111 'Todo el PORTA como entradas

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

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

    TOTAL = 10 'Le asigno el valor 10 a la variable "TOTAL"

    A = 2 'Le asigno el valor 2 a la variable "A"

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    26/28

    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 y255), y a TOTALse le asigna el valor "0" y a "A" el valor "2". Hasta aqu, no hay nada que no hayamos vistoantes.

    La lnea siguiente realiza la siguiente tarea: evala si la condicinPORTA.4 = 1 es cierta. En caso de queefectivamente el valor presente en el bit 4 del PORTA sea "1", se ejecuta la instruccin a continuacin delTHEN, la variable "A" toma el valor "4", y se pasa a la instruccin de abajo. Si PORTAes igual a "0", se pasa a lainstruccin siguiente sin mas.

    El valor final de la variable "TOTAL" depende entonces de cual sea el estado de PORTA.4al momento de hacerla evaluacin. Si es igual a "1", "TOTAL" tendr un valor de 14 (10 + 4). Si PORTA.4 = 0, "TOTAL" tendr unvalor de 12 (10 + 2).

    Veamos algunos ejemplos validos de este caso:

    IF A = B THEN PORTA.0 = 1

    IF B > A THEN A = B

    IF B = 5 THEN A = 0

    IF (A = 0) OR (B = 5) THEN C = 2IF PORTA.0 THEN PORTB.3 = 0

    En el ultimo ejemplo la condicinPORTA.0 equivale aPORTA.0 = 1.

    CASO 2:Muchas veces, luego de evaluar la condicin necesitamos ejecutar mas de una instruccin. En losejemplos vistos en el CASO 1siempre se ejecutaba una sola instruccin cuando la condicin era cierta. Lamanera de ejecutar mltiples sentencias dentro de una estructuraIF-THENimplica 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 lasinstrucciones que se encuentren entre el THENy el ENDIFcada vez que condicinsea verdadera.

    Veamos un ejemplo. Supongamos el siguiente programa:

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

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

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

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

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

    TOTAL = 0 'Le asigno el valor 0 a la variable "TOTAL"

    A = 2 'Le asigno el valor 2 a la variable "A"

    B = 5 'Le asigno el valor 5 a la variable "B"

    C = 1 'Le asigno el valor 1 a la variable "C"

    D = 0 'Le asigno el valor 0 a la variable "D"

    IF A = 2 THEN

    A = B + (C * D)

    TOTAL = A * B

    ENDIF

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    27/28

    28

    El ejemplo anterior, la condicin A = 2es verdadera (puesto que ese es el valor que le asignamos a "A" masarriba), por lo que las dos instrucciones dentro del THEN-ENDIFse ejecutaran. Esto hace que TOTALtome elvalor de 10 (hagan las cuentitas!). Si "A" hubiese tenido otro valor, esas dos sentencias no se ejecutaran yTOTALseguira valiendo "0" al terminar el programa.

    CASO 3:Hay veces que de acuerdo a la condicin, queremos ejecutar un grupo u otro de instrucciones. Paraeso, 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 THENy ELSE. Y si la condicin es falsa,

    las que estn entre ELSEy ENDIF. "ELSE" puede ser traducido como "en otro caso" o "si no...".

    Veamos un ejemplo. Supongamos el siguiente programa:

    ALLDIGITAL 'Voy a usar todos los pines como E/S.

    TRISA = %11111111 'Todo el PORTA como entradas

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

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

    TOTAL = 10 'Le asigno el valor 10 a la variable "TOTAL"

    A = 2 'Le asigno el valor 2 a la variable "A"

    IF PORTA.4 = 1 THEN

    A = 4

    TOTAL = TOTAL + 5

    ELSE

    A = 0

    TOTAL = TOTAL + 15

    ENDIF

    El ejemplo anterior, la condicin PORTA.4 = 1 determina que bloque de instrucciones se ejecutan. Si esverdadera, A = 4 y TOTAL = TOTAL + 5 son usadas. Caso contrario se ejecutanA = 0 yTOTAL = TOTAL +15. Luego, independientemente de cual haya sido el caso, el programa sigue con la sentencia que se encuentrea continuacin del ENDIF.

    Por ultimo, tenemos que saber que es posible "anidar" instrucciones IF-THEN-ELSE-ENDIF, con lo que sepueden tomar decisiones verdaderamente complejas. Por supuesto, tenemos que ser cautos en el uso de estacaracterstica ya que debido a limitaciones en el tamao de la pila y cantidad de memoria disponible del PICpodemos ocasionar un desborde y el programa colapsara. Este seria un ejemplo de un anidamiento:

    IF PORTB.1 = 1 THEN

    IF A = 2 THEN

    A = B + (C * D)

    TOTAL = A * B

    ELSE

    A = 0

    ENDIF

    ELSE

    A = 19

  • 8/12/2019 PIC SIMULATOR IDE - Curso en Espaol Parte 1 - Manual

    28/28

    ENDIF

    Las sentencias en color rojo corresponden a una estructura IF-THEN-ELSE-ENDIF y las que estn en azul a laotra, que se encuentra dentro ("anidada" en) de la primera.

    Para descargar los ejemplos en BASIC o los archivos HEX ya compilados puedendirigirse a www.ucontrol.com.ar

    www.ucontrol.com.ar | Desarrollo de sistemas de automatizacin y control | Pehuaj - Buenos Aires - Argentinae-mail: [email protected]