You are on page 1of 56

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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 11 - FOR-TO-STEP-NEXT Capitulo 12 - WHILE - END Capitulo 13 - LOOKUP Capitulo 14 - SHIFTLEFT y SHIFTRIGHT Capitulo 15 - MODULOS Usar memoria interna de EEPROM Convertidor Anlogo Digital ADC Usando Interrupciones Comunicacin Serial Utilizando Hardware Interno UART Implementacin UART por Software Comunicacin con Dispositivos I2C Comunicacin con Dispositivos Interfaz Serial Perifrica SPI Interfaz con LCD de Caracteres Interfaz Para LCD Grafica de matriz de puntos 128x64 Interfaz Modulo Interno PWM Interfaz para Servos de Radio Control Interfaz para Motores Stepper Interfaz para Dispositivos 1-Wire Funciones Avanzadas

FORO DE TODO EN ELECTRONICA PAGINA1 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

CAPITULO 01 LA INTERFAZ
Debido a que se trata de un software concebido desde el vamos como un entorno, la integracin entre los diferentes 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 doble clic sobre el se abrir la pantalla principal del programa, que al menos hasta la versin sobre la que se desarrolla este tutorial (la 5.91) esta en ingles:

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

FORO DE TODO EN ELECTRONICA PAGINA2 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


para nuestro proyecto (Microcontroller) y la frecuencia de clock elegida (Clock Frequency).

Todos estos valores pueden ser cambiados, como veremos en el desde la barra de El recuadro que esta inmediatamente debajo del anterior nos estamos corriendo una simulacin de nuestro programa) cual assembler en curso (Last Instruction) y cual ser la siguiente Instruction):

segundo capitulo, men. muestra (cuando es la instruccin a ejecutar (Next

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.

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).

FORO DE TODO EN ELECTRONICA PAGINA3 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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):

CAPITULO 02 - EL MEN PRINCIPAL:


La mayora de las funciones de las que dispone esta herramienta estn agrupadas dentro del men principal de la aplicacin. Es de destacar que todos los mdulos que se pueden invocar desde aqu se abren en ventanas 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:

FORO DE TODO EN ELECTRONICA PAGINA4 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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.

FORO DE TODO EN ELECTRONICA PAGINA5 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Desde Options (Opciones) tenemos acceso a un conjunto de alternativas de configuracin. Dedicaremos 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).

FORO DE TODO EN ELECTRONICA PAGINA6 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Capitulo 03 - Herramientas (primera parte):


PIC SIMULATOR IDE posee una nutrida caja de herramientas. Estas se encuentran agrupadas en la opcin Tools del 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 invocar presionando CTRL-M en cualquier momento. Se lista la memoria completa, cuya extensin depender del microcontrolador que tengamos seleccionado, y se pueden ver tres columnas: direccin (Address), valor en hexadecimal de esa direccin (Hex. Value) y el valor en binario (Binary Value). Al igual que las dems herramientas, existe un check box que permite poner la ventana correspondiente siempre al frente (Always On 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 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.

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

FORO DE TODO EN ELECTRONICA PAGINA7 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


(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 hexadecimal y en binario.

FORO DE TODO EN ELECTRONICA PAGINA8 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

FORO DE TODO EN ELECTRONICA PAGINA12 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Capitulo 04 - Herramientas (Segunda parte):


Las herramientas siguientes son las que podemos usar como "perifricos" del microcontrolador, para simular 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.

FORO DE TODO EN ELECTRONICA PAGINA13 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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.

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.

FORO DE TODO EN ELECTRONICA PAGINA14 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

FORO DE TODO EN ELECTRONICA PAGINA15 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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.

FORO DE TODO EN ELECTRONICA PAGINA16 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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.

La ultima herramienta es una til lista con el valor de cada una presentes en nuestro programa. Recibe el nombre de Watch variables) y es una lista de texto donde en una columna aparece variable en cuestin y en otra su valor. Esta lista se actualiza durante la simulacin.

de las variables Variables (ver el nombre de la constantemente

FORO DE TODO EN ELECTRONICA PAGINA17 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

CAPITULO 05 - SISTEMAS DE NUMERACIN:


Existen muchas maneras de representar un numero. De hecho, en teora es posible hacerlo de infinitas maneras, ya que podemos elegir como base cualquier numero entero. Generalmente, los mas usados en el mundo de la programacin son el sistema decimal, que utiliza como base el numero 10; el sistema binario, que utiliza 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 sucesivas del numero 10. Se utilizan los smbolos del "0" al "9", y el peso de cada cifra esta dado por su posicin, dado que se multiplica por 10 elevado a la posicin en que se encuentra el digito menos uno. Como en todos los sistemas de numeracin, el digito de menos "peso" es el que esta mas a la derecha, y el de mas "peso" el que se encuentra mas a la izquierda. Potencia 10: Valor: de

10^7

10^6

10^5

10^4

10^3 10^2 10^1 10^0 100 10 1

10000000 1000000 100000 10000 1000

Dado que este sistema es el que usamos todo el tiempo, no nos detenemos a pensar en como se construye 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) =

FORO DE TODO EN ELECTRONICA PAGINA18 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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 Byte Word 1 4 8 16 1 0101 00000101 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 Word 00000101 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

FORO DE TODO EN ELECTRONICA PAGINA19 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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. Decimal Binario 1 10 233 255 15280 Algunos ejemplos. 0000 0001 0000 1010 Hexadecinal 1 A E9 FF

11101001
1111 1111

0011 1011 1011 0000 3BB0

Capitulo 06 - Variables:
Vamos a comenzar a ver algo de la programacin en el BASIC incluido en el entorno PIC SIMULATOR IDE, al que en adelante nos referiremos como "BASIC", a secas. La programacin seria prcticamente imposible sin el uso de variables. Podemos hacernos una imagen mental de las variables consistente en una caja en la que podemos guardar algo. Esa caja es una de las muchas que disponemos, y tiene en su frente pegada una etiqueta con su nombre. Estas cajas tienen ciertas particularidades, 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 de la variable. Como su nombre lo indica, y como veremos mas adelante, el contenido de una variable puede ser modificado 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).

FORO DE TODO EN ELECTRONICA PAGINA20 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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: 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

FORO DE TODO EN ELECTRONICA PAGINA21 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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

FORO DE TODO EN ELECTRONICA PAGINA22 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


PORTB.0 = 1 podemos hacer LED1 = 1 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 DIM A = B = B =

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

Capitulo 07 - Operaciones Lgicas y Matemticas:


PIC SIMULATOR IDE dispone de cinco operaciones matemticas bsicas, disponibles para las variables tipo Byte y Word. Estas son la suma (operador +), la sustraccin (operador -), el producto (operador *), el cociente (operador /) y el mdulo (operador MOD) .Por supuesto, el compilador es capaz de combinarlas para obtener operaciones matemticas mas complejas.

DIM DIM DIM A =

A AS WORD B AS WORD X AS WORD 123

FORO DE TODO EN ELECTRONICA PAGINA23 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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 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 = 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 A NOR B A NXOR B

DIM A DIM B A = A PORTB

AS WORD AS WORD OR B = PORTC AND %11110000

Capitulo 08 - Mi primer programa: Un LED parpadeando


Luego de todos estos captulos de introduccin, puramente tericos, vamos a encarar nuestro primer programa. A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila, lo ejecuta y ya, en el mundo de los microcontroladores hay que, previamente, definir el tipo de microcontrolador que se va a 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 a reemplazar al viejo y popular PIC16F84, ya obsoleto. El diagrama circuital que utilizaremos para las primeras practicas es el siguiente:

FORO DE TODO EN ELECTRONICA PAGINA24 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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 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, puedes leer 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 el PIC16F628A.

FORO DE TODO EN ELECTRONICA PAGINA25 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Luego, debemos configurar los bits correspondientes:

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:

FORO DE TODO EN ELECTRONICA PAGINA26 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Vamos a analizarlo lnea por lnea para entender su funcionamiento: La lnea 001 utiliza la sentencia AllDigital para convertir todos los pines del micro en pines de E/S. Esto equivale a deshabilitar los comparadores, conversores A/D y todos los mdulos que pudiese tener nuestro microcontrolador. No es la nica manera de hacer esto, pero si la mas sencilla desde el punto de vista del programador BASIC. Las lneas 003 y 004 convierten todos los pines del puerto A en entradas ( TRISA = %11111111 ) y los del puerto B en salidas ( TRISB = %00000000 ). El "%" indica que el numero que viene a continuacin esta en binario. Se podra haber escrito, por ejemplo TRISB = 0 y hubiera sido lo mismo. Personalmente me gusta esta 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 para enviar 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 microcontrolador habr 5V. Esta tensin har que circule una corriente a travs de la resistencia limitadora y el LED1, haciendo que 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. La duracin de la pausa esta dada por el numero que sigue a la instruccin, en este caso 500 milisegundos, o medio segundo. Luego, en 009, otra vez se vuelve a poner en 0 el pin 6, mediante PORTB.0 = 0 , lo que provoca que ese pin se ponga a 0V, y no haya mas circulacin de corriente a travs de la resistencia y del LED, con lo que este se apaga.

FORO DE TODO EN ELECTRONICA PAGINA27 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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

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:

FORO DE TODO EN ELECTRONICA PAGINA28 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

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 que resulta mas claro de entender, ya que se aproxima algo mas al "lenguaje natural":

FORO DE TODO EN ELECTRONICA PAGINA29 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

El programa BASIC puede descargarse desde [aqu], y el correspondiente archivo HEX desde [aqu] .

Capitulo 09 - Mi segundo programa: Usando un pulsador


En la segunda practica del lenguaje BASIC veremos como leer una entrada del PIC. Utilizaremos el mismo esquema que vimos antes, y el programa que mostramos a continuacin:

FORO DE TODO EN ELECTRONICA PAGINA30 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


Como resulta evidente a simple vista, el programa ejemplo2.bas es muy similar al ejemplo1.bas que vimos en 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:

FORO DE TODO EN ELECTRONICA PAGINA31 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

l 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:

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] .

Capitulo 10 - IF - THEN - ELSE ENDIF


En cualquier programa medianamente complejo que queramos realizar, seguramente necesitaremos en algn punto tomar alguna decisin basndonos en el estado de una entrada o en el valor de una variable. PIC BASIC 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 de este 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 se cumple la condicin, entonces ejecuto la instruccin"

FORO DE TODO EN ELECTRONICA PAGINA32 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


La "condicin" es una expresin lgica que puede ser verdadera o falsa. En caso de ser verdadera, la instruccin a continuacin del THEN ser 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" 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

En el ultimo ejemplo la condicin PORTA.0 equivale a PORTA.0 = 1.

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 ...

FORO DE TODO EN ELECTRONICA PAGINA33 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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 A AS BYTE 'Declaro la variable "A" B AS BYTE 'Declaro la variable "B" C AS BYTE 'Declaro la variable "C" D AS BYTE 'Declaro la variable "D" TOTAL AS BYTE 'Declaro la variable = 0 'Le 'Le 'Le 'Le 'Le asigno el valor asigno el valor 2 a asigno el valor 5 a asigno el valor 1 a asigno el valor 0 a como BYTE como BYTE como BYTE como BYTE "TOTAL" como BYTE

TOTAL A = 2 B = 5 C = 1 D = 0

0 a la variable "TOTAL" la variable "A" la variable "B" la variable "C" la variable "D"

IF A = 2 THEN A = B + (C * D) TOTAL = A * B ENDIF 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: ALLDIGITAL 'Voy a usar todos los pines como E/S.

FORO DE TODO EN ELECTRONICA PAGINA34 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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 instrucciones se ejecutan. Si es verdadera, A usadas. Caso contrario se ejecutan A = 0 independientemente de cual haya sido el caso, que se encuentre a continuacin del ENDIF. = 1 determina que bloque de = 4 y TOTAL = TOTAL + 5 son y TOTAL = TOTAL + 15. Luego, el programa sigue con la sentencia

Por ultimo, tenemos que saber que es posible "anidar" instrucciones IF-THENELSE-ENDIF, con lo que se pueden tomar decisiones verdaderamente complejas. Por supuesto, tenemos que ser cautos en el uso de esta caracterstica ya que debido a limitaciones en el tamao de la pila y cantidad de memoria disponible del PIC podemos 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 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.

Capitulo 11 - FOR - TO - STEP NEXT


As como la toma de decisiones que vimos en el capitulo anterior esta presente en casi todos nuestros programas, las estructuras que permiten repetir un grupo de instrucciones un numero determinado de veces tambin son indispensables. En PIC SIMULATOR IDE hay dos de ellas. Veremos en este capitulo la primera, FOR - TO - STEP - NEXT. Esta estructura necesita una variable (tipo Byte o Word) para funcionar. En cada iteracin del bucle, la variable va cambiando su valor. Cuando el valor de la variable alcanza o supera el valor prefijado, el bucle termina. La forma del bucle es la siguiente:

FORO DE TODO EN ELECTRONICA PAGINA35 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


FOR variable = valor_inicial TO valor_final STEP paso instruccion1 instruccion2 ... instruccionn NEXT variable Veamos un ejemplo concreto. Supongamos que queremos sumar los nmeros del 1 al 100. El programa quedara como sigue: DIM A AS BYTE DIM TOTAL AS WORD TOTAL = 0 'Declaro la variable "A" como BYTE 'Declaro la variable "TOTAL" como WORD 'Asigno "0" a la variable "TOTAL".

FOR A = 1 TO 100 STEP 1 '"A" va de 1 a 100 de 1 en 1 TOTAL = TOTAL + A 'Sumo "A" al valor de "TOTAL". NEXT A 'fin del bucle. Hemos declarado la variable A como BYTE, ya que su valor va a mantenerse en el rango 0..255. Para TOTAL utilizamos una variable tipo WORD, ya que la suma va a superar el valor mximo de un BYTE. (Recordemos que WORD permite valores en el rango 0..65535) El bucle se ejecuta 100 veces, la primera de ellas A vale 1, la segunda 2, la tercera 3, hasta la ultima en la que vale 100. Ese incremento (1 por ves) esta dado por el valor a continuacin del STEP. En los casos como este en que STEP vale 1, puede omitirse, como veremos en ejemplos posteriores. TOTAL comienza valiendo 0 (se le asigna ese valor fuera del bucle) y en cada iteracin se le suma el valor que tenga A en ese momento. De esa manera, TOTAL va tomando los valores 1, 3, 6, 10, .... 5050. Tanto valor_inicial como valor_final y paso pueden ser variables. El siguiente trozo de cdigo hace lo mismo que el anterior, pero usa variables: DIM DIM DIM DIM DIM A AS BYTE INICIO AS BYTE FINAL AS BYTE PASO AS BYTE TOTAL AS WORD 'Declaro 'Declaro 'Declaro 'Declaro 'Declaro 'Asigno 'Asigno 'Asigno 'Asigno la la la la la variable variable variable variable variable "A" como BYTE "INICIO" como BYTE "FINAL" como BYTE "PASO" como BYTE "TOTAL" como WORD

INICIO = 1 FINAL = 100 PASO = 1 TOTAL = 0

"1" a "100" "1" a "0" a

la variable "INICIO". a la variable "FINAL". la variable "PASO". la variable "TOTAL".

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

FORO DE TODO EN ELECTRONICA PAGINA36 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


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

Hay casos en que es necesario que el valor de la variable de control del bucle se decremente en lugar de ir aumentando. En ese caso, se puede usar un valor negativo para STEP. El siguiente ejemplo cuenta desde 50 hasta 20, de 5 en 5: DIM A AS BYTE 'Declaro la variable "A" como BYTE

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

De la misma manera que ocurra con IF-THEN-ELSE-ENDIF, pueden anidarse diferentes bucles FOR-TO-STEP-NEXT , uno dentro de otro: FOR variable1 = valor_inicial1 TO valor_final1 STEP paso1 FOR variable2 = valor_inicial2 TO valor_final2 STEP paso2 instruccion1 instruccion2 ... instruccionn NEXT variable2 NEXT variable1 La nica condicin es que un bucle este completamente dentro del otro. El siguiente anidamiento dara un error en el compilador: FOR variable1 = valor_inicial1 TO valor_final1 STEP paso1 FOR variable2 = valor_inicial2 TO valor_final2 STEP paso2 instruccion1 instruccion2 ... instruccionn NEXT variable1 NEXT variable2 Para terminar, veamos el siguiente cdigo: AllDigital TRISB = 0 Dim a As Byte For a = 0 To 15 PORTB = a Next a

FORO DE TODO EN ELECTRONICA PAGINA37 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


compilado y corriendo sobre el simulador. Cuenta desde 0 a 15 y muestra el valor sobre el puerto B en binario.

Capitulo 12 - WHILE WEND


La segunda estructura de control que proporciona PIC BASIC es WHILE - WEND. Y su estructura es la siguiente: WHILE condicin instruccion1 instruccion2 ... instruccionn 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 en el capitulo 10 para IF-THEN-ELSE-ENDIF. Por supuesto, si no somos cuidadosos al momento de elegir la condicin, puede darse el caso de que el numero de repeticiones del bucle sea infinito, y nunca salgamos de el. 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 mas para decir de WHILE-WEND , solo analizar algunos ejemplos:

Ejemplo 1: El siguiente es un bucle infinito. Como dentro del cuerpo del WHILEWEND no se cambia el valor de la variable A, esta siempre vale "0" y la condicin del WHILE nunca es falsa, por lo que se repite eternamente: DIM A AS BYTE A = 0 ... WHILE A = 0 instruccion1 instruccion2 ... instruccionn WEND ...

Ejemplo 2: Las instrucciones dentro del siguiente WHILE-WEND no se ejecutan nunca, dado que la condicion siempre es falsa:
DIM A AS BYTE A = 0 ... WHILE A > 0 instruccion1

FORO DE TODO EN ELECTRONICA PAGINA38 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


instruccion2 ... instruccionn WEND ...

Ejemplo 3: Las instrucciones dentro del siguiente WHILE-WEND se ejecutan 10


veces, y al terminar la variable B contiene la suma de los nmeros del 0 al 10 naturales: DIM DIM A = B = A AS BYTE A AS BYTE 0 0

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

Cuando A = 10, se suma su valor a A, y al llegar al WEND el control del programa se transfiere al WHILE, donde se evala la condicin A < 10, se determina que es falsa, y el programa pasa el control a la lnea que exista despus del WEND.

Capitulo 13 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. La forma de la funcin LOOKUP es la siguiente: variable = LOOKUP(byte0, byte1, ..., byteN), indice Veamos un ejemplo sencillo: DIM indice AS BYTE DIM variable AS BYTE indice = 3 variable = 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 indice. Si bien la lista puede contener un mximo de 255 elementos, que es el mximo direccionable por una variable indice de tipo byte, hay que asegurarse que el microcontrolador que estamos empleando tenga memoria suficiente para albergarla. El segundo ejemplo, extrado de la propia ayuda del PIC SIMULATOR IDE, nos muestra como manejar un display LED de siete segmentos conectado al puerto B:

FORO DE TODO EN ELECTRONICA PAGINA39 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Dim digito As Byte Dim mascara As Byte 'Comienzo el bucle principal loop: TRISB = %00000000 For digito = 0 To 9 mascara = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), digito PORTB = mascara WaitUs 10 'esta demora debe ser mayor si no es una simulacin! Next digito Goto loop Este es el aspecto que muestra el simulador cuando ejecutamos el programa anterior. Debemos asegurarnos de que uno de los dgitos LED este configurado como conectado al puerto PORTB, tal como se ve en la imagen:

FORO DE TODO EN ELECTRONICA PAGINA40 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


Si algunas o todas las constantes de la lista son valores ASCII, se puede hacer mas corta y legible la misma utilizando como parte de ella una cadena de caracteres, como se ve a continuacin.

MASK = LOOKUP("ABCDEFGHIJK"), INDEX "A" seria el valor que tendra MASK cuando INDEX vale "0", y "K" cuando INDEX tenga el valor "10". Por ultimo, en caso de que el valor de INDEX sea mayor a la cantidad de argumentos de la lista, el valor de la variable (en este ejemplo MASK) no cambia.

Capitulo 14 - SHIFTLEFT y SHIFTRIGHT


SHIFTLEFT y SHIFTRIGHT son funciones 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 mas a la izquierda (SHIFTLEFT) o derecha (SHIFTRIGHT) se pierde. Y el espacio creado en el otro extremo se completa con un "0".

El siguiente ejemplo muestra como utilizar estas funciones en un programa: TRISB = 0x00 PORTB = %00000011 goleft: WaitUs 5 'esta demora debe ser PORTB = ShiftLeft(PORTB, 1) If PORTB = %11000000 Then Goto Goto goleft goright: WaitUs 5 'esta demora debe ser PORTB = ShiftRight(PORTB, 1) If PORTB = %00000011 Then Goto Goto goright

mayor si no es una simulacin! goright

mayor si no es una simulacin! goleft

Lo que hace el programa es muy sencillo: enciende los dos primeros bits del PORTB, espera un tiempo, los desplaza hacia la izquierda, si esos bits llegaron al extremo de la variable tipo byte que es el PORTB, se invierte el sentido del desplazamiento. La siguiente animacin flash ilustra el efecto, tal como se puede ver en el simulador:

FORO DE TODO EN ELECTRONICA PAGINA41 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Capitulo 15 - MODULOS Usar memoria interna de EEPROM


Tener acceso a la memoria de los datos de EEPROM puede ser programado usando READ y WRITE declaraciones. La primera discusin es la direccin de un octeto en memoria de EEPROM y puede ser una constante o una variable del octeto. La segunda discusin es los datos se leen o se escriben que (para la declaracin READ debe ser una variable del octeto). Se sugiere para mantener interrupciones inhabilitadas durante la ejecucin de
DIM A AS BYTE DIM B AS BYTE A = 10 READ A, B WRITE 11, B

Convertidor Analogo a Digital


Usar el mdulo DE ANALGICO A DIGITAL interno del convertidor La declaracin de ADCIN est disponible como ayuda para el convertidor DE ANALGICO A DIGITAL interno. Su primera argumento es nmero de canal del ADC y la segundo argumento es una variable que ser utilizada para almacenar el resultado de la conversin DE ANALGICO A DIGITAL. La declaracin de ADCIN utiliza dos parmetros ADC_CLOCK y ADC_SAMPLEUS que tengan valores prefijados 3 y 20. Estos valores prefijados pueden ser el usar cambiante DEFINEN directorio. El parmetro de ADC_CLOCK determina la opcin para la fuente del reloj del ADC (el rango est 0-3 o 0-7 dependiendo del dispositivo usado). Sistemas de parmetro de ADC_SAMPLEUS el tiempo deseado de la adquisicin del ADC en los microsegundos (0-255). La declaracin de ADCIN presupone que el pin correspondiente est configurado como entrada anloga (TRIS, registro ADCON1 y en el registro de algunos dispositivos ANSEL). Aqu est un ejemplo:
DIM V(5) AS BYTE DIM VM AS WORD DIM I AS BYTE DEFINE ADC_CLOCK = 3 DEFINE ADC_SAMPLEUS = 50 TRISA = 0xFF TRISB = 0 ADCON1 = 0 FOR I = 0 TO 4 ADCIN 0, V(I) NEXT I VM = 0 FOR I = 0 TO 4 VM = VM + V(I) NEXT I VM = VM / 5 PORTB = VM.LB

FORO DE TODO EN ELECTRONICA PAGINA42 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Usando interrupciones
La rutina de la interrupcin se debe poner como el resto de subprogramas despus de la declaracin END. Debe comenzar con ON INTERRUPCIN y terminar con la declaracion RESUMEN. Si las operaciones aritmticas, los rdenes o algunas otras declaraciones complejas se utilizan en rutina de la interrupcin, entonces EXCEPTO la declaracin SAVE SYSTEM debe ser colocado a la derecha despus de la declaracin ON INTERRUPT para ahorrar el contenido de los registros usados por el sistema. ENABLE y DISABLE las declaraciones puede ser utilizado en programa principal controlar el bit de GIE en registro de INTCON. La declaracin RESUME fijar el bit de GIE que permitir nuevas interrupciones. Por ejemplo:

DIM A AS BYTE A = 255 TRISA = 0 PORTA = A INTCON.INTE = 1 ENABLE END ON INTERRUPT A = A - 1 PORTA = A INTCON.INTF = 0 RESUME DIM T AS WORD T = 0 TRISA = 0xFF ADCON1 = 0 TRISB = 0 OPTION_REG.T0CS = 0 INTCON.T0IE = 1 ENABLE loop: ADCIN 0, PORTB GOTO loop END ON INTERRUPT SAVE SYSTEM T = T + 1 INTCON.T0IF = 0 RESUME

Comunicacin Serial utilizando el hardware interno UART


La comunicacin serial tiene soporte tanto para hardware y software, Las declaraciones de HSEROPEN, HSEROUT, HSERIN y HSERGET se pueden utilizar con los dispositivos de PIC que tienen hardware interno UART. La declaracin de HSEROPEN configura el modulo interno UART. Las velocidades permitidas son: 300, 600, 1200, FORO DE TODO EN ELECTRONICA PAGINA43 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 56000 y 57600. Si se omite la velocidad el UART, este es configurado para la velocidad 9600. Es posible utilizar la declaracin de HSEROPEN ms de una vez en el programa, por ejemplo para cambiar velocidad seleccionada. Si el parmetro ALLOW_ALL_BAUDRATES se fija a 1 usando el comando DEFINE, con esto todas las velocidades en la gama 100-57600 ser permitidas. La declaracin de HSEROUT se utiliza para la transmisin serial. La declaracin de HSEROUT puede tener discusiones mltiples separadas por ,. Puedes utilizar secuencias, la palabra clave del LF para carcter de avance de lnea o palabra clave para el retorno del carro - secuencia de CRLF del avance de lnea, constante y variable. Si se utiliza el signo # antes de que el nombre de una variable entonces su representacin decimal se enve al puerto serial. La declaracin de HSERIN se puede utilizar para cargar una lista de las variables de un Byte o Word con los valores recibidos en puerto serial. Esta declaracin esperar hasta que el nmero requerido de Bytes se recibe en puerto serial. La declaracin de HSERGET tiene un argumento que deba ser una variable de un Byte. Si hay un carcter que espera en el almacenador intermediario de la recepcin que ser cargado en la variable, si no 0 valores sern cargados. Aqu estn algunos ejemplos:
DIM I AS BYTE HSEROPEN 38400 WAITMS 1000 FOR I = 20 TO 0 STEP -1 HSEROUT "Number: ", #I, CrLf WAITMS 500 NEXT I

DIM I AS BYTE HSEROPEN 19200 loop: HSERIN I HSEROUT "Number: ", #I, CrLf GOTO loop

DIM I AS BYTE HSEROPEN 19200 loop: HSERGET I IF I > 0 THEN HSEROUT "Number: ", #I, CrLf WAITMS 50 ENDIF GOTO loop

Implementacion UART por Software


En todos los dispositivos PIC se puede implementar la comunicacin serial por medio de software se puede poner en ejecucin con declaraciones de SEROUT y de SERIN. FORO DE TODO EN ELECTRONICA PAGINA44 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA La primer argumento de ambas declaraciones debe ser uno de los pines del microcontrolador, mientras que el segundo argumento es velocidad: 300, 600, 1200, 2400, 4800, 9600 o 19200. Usar velocidades ms altas con frecuencia de reloj baja poda causar errores de trama. Para SEROUT la declaracin entonces sigue la lista de las discusiones que se enviarn al puerto serial. Puedes utilizar secuencias, la palabra clave del LF para carcter de avance de lnea o palabra clave para el retorno del carro - secuencia de CRLF del avance de lnea, constante y variable. Si se utiliza el signo # antes de que el nombre de una variable entonces su representacin decimal ser enviada a travs del puerto serial. La declaracin de SEROUT utiliza el parmetro de SEROUT_DELAYUS que se puede declarar con el comando DEFINE y tiene valor prefijado de 1000 microsegundos. Esto define intervalo de retrazo antes de que un carcter se enve realmente al puerto y se utiliza para aumentar la confiabilidad de la rutina del software SEROUT. Para SERIN la declaracin entonces sigue la lista de las variables de Byte o Word que se cargarn con los valores recibidos en puerto serial. Esta declaracin esperar hasta que el nmero requerido de octetos se recibe en puerto serial. Para la interfaz en serie con los niveles invertidos de la lgica hay declaraciones de SERININV y de SEROUTINV disponibles. Algunos ejemplos:
DEFINE SEROUT_DELAYUS = 5000 SEROUT PORTC.6, 1200, "Hello world!", CrLf

DIM I AS BYTE loop: SERIN PORTC.7, 9600, I SEROUT PORTC.6, 9600, "Number: ", #I, CrLf GOTO loop

Comunicacin I2C con dispositivos externos


La comunicacin de I2C se puede poner en ejecucin en programas bsicos usando declaraciones de I2CWRITE y de I2CREAD. El primer argumento de ambas declaraciones debe ser el pin del microcontrolador que est conectado con la lnea de SDA del dispositivo externo de I2C. El segundo argumento de ambas declaraciones debe ser el pin del microcontrolador que est conectado con la lnea de la LCC. Mientras que el tercer argumento de ambas declaraciones debe ser direccin llamada variable, Byte o un valor llamado SLAVE ADDREES. Su formato se describe en el datasheet del dispositivo usado. Por ejemplo, porque EEPROMs de la familia 24C (con las entradas de la direccin de dispositivo conectadas con la tierra) el valor 0xA0 podria ser utilizado para el slave address. Ambas declaraciones tomarn control sobre el bit 0 del slave address durante la comunicacin. Adelante la discusin de ambas declaraciones debe ser una variable del octeto o de la palabra (sta depende del dispositivo usado) que contiene la direccin de la localizacin FORO DE TODO EN ELECTRONICA PAGINA45 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA que ser alcanzada. Si un valor constante se utiliza para el parmetro de la direccin debe estar en gama del valor del octeto. (La quinto) discusin pasada de la declaracin de I2CWRITE es un octeto constante o la variable que sern escritos a la direccin especificada, y para la declaracin de I2CREAD debe ser una variable del octeto para almacenar el valor que ser ledo en la direccin especificada. Se permite utilizar ms de uno discusin de los datos. Para los dispositivos de I2C que no lo hacen discusin de la direccin de los datos de apoyo hay forma corta de declaraciones de I2C (I2CWRITE1 e I2CREAD1) disponibles donde la discusin de la direccin del esclavo se sigue con unas o ms discusiones de los datos directamente. Para algn I2C que los dispositivos auxiliares l son necesarios hacer retrasa para cerciorarse de que el dispositivo es listo responder a la declaracin de I2CREAD. Para ese propsito hay el parmetro de I2CREAD_DELAYUS que se puede fijar cerca DEFINE directorio y tiene valor prefijado de 0 microsegundos. Tambin, para dispositivos ms lentos de I2C, puede ser que sea necesario utilizar impulsos de reloj ms largos. Eso se puede hacer fijando usar del parmetro de I2CCLOCK_STRETCH DEFINE directorio. Este parmetro fijar factor del estiramiento del reloj. Su valor prefijado es 1. Aqu est un ejemplo combinado con el mdulo y 24C64 EEPROM del LCD (SDA conect con RC2; LCC conectada con RC3):

DEFINE LCD_BITS = 8 DEFINE LCD_DREG = PORTB DEFINE LCD_DBIT = 0 DEFINE LCD_RSREG = PORTD DEFINE LCD_RSBIT = 1 DEFINE LCD_EREG = PORTD DEFINE LCD_EBIT = 3 DEFINE LCD_RWREG = PORTD DEFINE LCD_RWBIT = 2 DIM ADDR AS WORD DIM DATA AS BYTE SYMBOL SDA = PORTC.2 SYMBOL SCL = PORTC.3 LCDINIT 3 WAITMS 1000 FOR ADDR = 0 TO 31 LCDCMDOUT LcdClear DATA = 255 - ADDR I2CWRITE SDA, SCL, 0xA0, ADDR, DATA LCDOUT "Write To EEPROM" LCDCMDOUT LcdLine2Home LCDOUT "(", #ADDR, ") = ", #DATA WAITMS 1000 NEXT ADDR FOR ADDR = 0 TO 31 LCDCMDOUT LcdClear I2CREAD SDA, SCL, 0xA0, ADDR, DATA LCDOUT "Read From EEPROM" LCDCMDOUT LcdLine2Home LCDOUT "(", #ADDR, ") = ", #DATA WAITMS 1000 NEXT ADDR

FORO DE TODO EN ELECTRONICA PAGINA46 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

SOPORTE PARA COMUNICACION SPI (SERIAL PERIPHERAL INTERFACE)


Antes de las declaraciones relacionadas con el uso de SPI, interfaz SPI se debe crear usando DEFINE directivas. Hay ocho disponibles para definir los parmetros de la conexin de SCK, SDI, la organizacin de desarrollo de normas y (opcionalmente) CS lneas: SPI_SCK_REG - define el puerto donde SCK est conectado a la lnea SPI_SCK_BIT - define el pin SCK cuando est conectado a la lnea SPI_SDI_REG - define el puerto IDE que se conecta a la lnea SPI_SDI_BIT - define el pin IDE que se conecta a la lnea SPI_SDO_REG - define a la organizacin de desarrollo de normas puerto donde est conectado a la lnea. SPI_SDO_BIT - define a la organizacin de desarrollo de normas pin donde se conecta a la lnea SPI_CS_REG - define el puerto en el CS est conectado a la lnea SPI_CS_BIT - define el pin CS cuando est conectado a la lnea

Los ajustes se supone activa-Reloj de la lnea de alta y baja de activo-ChipSelect lnea. Que se puede cambiar por asignar el valor 1. SPICLOCK_INVERT y/o SPICS_INVERT parmetros de DEFINE directiva. For slower SPI devices, podra ser necesario utilizar ms tiempo de reloj pulsos. El valor por defecto de reloj tramo factor (1) se puede cambiar mediante el establecimiento de parmetros PICLOCK_STRETCH. SPIPREPARE declaracin (sin argumentos) preparar interfaz SPI lneas de comunicacin. SPICSON y SPICSOFF declaraciones activar / desactivar la ChipSelect lnea de la interfaz. Un byte se pueden enviar a la SPI perifricos utilizando declaracion SPISEND. Para recibir un byte se utiliza la declaracion SPIRECEIVE. Para enviar el nmero especificado de bits esta la declaracin SPISENDBITS. Su primer argumento debe ser el nmero de bits que se enviarn [1-8], y el segundo argumento es un byte variable o constante. Aqu est un ejemplo de utilizacin de orden eeprom 25C040 SPI:

AllDigital Define SPI_CS_REG = PORTC Define SPI_CS_BIT = 0 Define SPI_SCK_REG = PORTC Define SPI_SCK_BIT = 3 Define SPI_SDI_REG = PORTC Define SPI_SDI_BIT = 4 Define SPI_SDO_REG = PORTC Define SPI_SDO_BIT = 5 SPIPrepare Define LCD_BITS = 8

FORO DE TODO EN ELECTRONICA PAGINA47 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


Define LCD_DREG = PORTD Define LCD_DBIT = 0 Define LCD_RSREG = PORTE Define LCD_RSBIT = 0 Define LCD_RWREG = PORTE Define LCD_RWBIT = 1 Define LCD_EREG = PORTE Define LCD_EBIT = 2 Define LCD_READ_BUSY_FLAG = 1 Lcdinit Dim addr As Byte Dim data As Byte For addr = 0 To 10 data = 200 - addr SPICSOn SPISend 0x06 SPICSOff SPICSOn SPISend 0x02 SPISend addr SPISend data SPICSOff Lcdcmdout LcdClear Lcdout "Write To EEPROM" Lcdcmdout LcdLine2Home Lcdout "(", #addr, ") = ", #data WaitMs 500 Next addr For addr = 0 To 10 SPICSOn SPISend 0x03 SPISend addr SPIReceive data SPICSOff Lcdcmdout LcdClear Lcdout "Read From EEPROM" Lcdcmdout LcdLine2Home Lcdout "(", #addr, ") = ", #data WaitMs 500 Next addr

El Siguiente ejemplo para una memoria 93C86 EEPROM:


AllDigital Define SPI_CS_REG = PORTC Define SPI_CS_BIT = 0 Define SPICS_INVERT = 1 Define SPI_SCK_REG = PORTC Define SPI_SCK_BIT = 3 Define SPI_SDI_REG = PORTC Define SPI_SDI_BIT = 4 Define SPI_SDO_REG = PORTC Define SPI_SDO_BIT = 5 SPIPrepare Define Define Define Define LCD_BITS = 8 LCD_DREG = PORTD LCD_DBIT = 0 LCD_RSREG = PORTE

FORO DE TODO EN ELECTRONICA PAGINA48 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


Define LCD_RSBIT = 0 Define LCD_RWREG = PORTE Define LCD_RWBIT = 1 Define LCD_EREG = PORTE Define LCD_EBIT = 2 Define LCD_READ_BUSY_FLAG = 1 Lcdinit Dim addr As Byte Dim data As Byte SPICSOn SPISendBits 6, %100110 SPISendBits 8, %00000000 SPICSOff For addr = 0 To 10 data = 200 - addr SPICSOn SPISendBits 6, %101000 SPISendBits 8, addr SPISend data SPICSOff SPICSOn SPISend 0x00 SPICSOff Lcdcmdout LcdClear Lcdout "Write To EEPROM" Lcdcmdout LcdLine2Home Lcdout "(", #addr, ") = ", #data WaitMs 500 Next addr For addr = 0 To 10 SPICSOn SPISendBits 6, %110000 SPISendBits 8, addr SPIReceive data SPICSOff Lcdcmdout LcdClear Lcdout "Read From EEPROM" Lcdcmdout LcdLine2Home Lcdout "(", #addr, ") = ", #data WaitMs 500 Next addr

INTERFAZ PARA LCD


Bsica compilador tambin cuenta con el apoyo de mdulos basados en LCD HD44780 o compatible chip controlador. Antes de utilizar las declaraciones relacionadas con LCD, el usuario debe configurar la interfaz utilizando LCD DEFINE directivas. Aqu est la lista de parmetros disponibles: LCD_BITS Define el numero de lineas de Datos (Los valores disponibles son 4 y 8 si no se especifica el valor es 4) LCD_DREG Define el puerto de las lineas de datos si no se especifica el puerto es el

FORO DE TODO EN ELECTRONICA PAGINA49 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA LCD_DBIT Define la posicin en el puerto de las lineas de datos si se utiliza la opcion de 4 bit de datos. Si no se especifica la configuaracion es 0 a 4. Es ignorado con la interfaz de 8 bits. LCD_RSREG Define el Puerto donde se conectara la linea RS de la LCD si no se especifica este parmetro se toma como el PORTB LCD_RSBIT Define del puerto donde se conectara la linea RS (si no se especifica sera el pin 3). LCD_RSREG - define el puerto RS cuando est conectado a la lnea (por defecto es PORTB) LCD_RSBIT - define el pin RS cuando est conectado a la lnea (por defecto es 3) LCD_EREG - define el puerto donde E es conectado a la lnea (por defecto es PORTB) LCD_EBIT - define el pin donde E es conectado a la lnea (por defecto es 2) LCD_RWREG - define el puerto en el R / W est conectado a la lnea (se pone a 0 si no se utilizan; 0 es el valor predeterminado) LCD_RWBIT - donde se define el pin R / W est conectado a la lnea (se pone a 0 si no se utilizan; 0 es el valor predeterminado) LCD_COMMANDUS - define la demora despus de LCDCMDOUT declaracin (valor por defecto es 5000) LCD_DATAUS - define la demora despus de LCDOUT declaracin (valor por defecto es 100) LCD_INITMS - define el retraso de LCDINIT declaracin (valor por defecto es 100)

Los tres ltimos parmetros pueden ser fijados a los valores ms bajos cuando se utiliza el mdulo LCD integrada simulador. Si R / W se conecta a la lnea de microcontroladores y LCD_READ_BUSY_FLAG parmetro se pone a 1 usando DEFINE directiva, entonces estos parmetros demora ser ignorado por el compilador y el momento correcto ser ejecutado por la lectura de la situacin de la bandera ocupado en la pantalla LCD. LCDINIT declaracin debe ser colocado en el programa antes de cualquier de las declaraciones LCDOUT (utilizada para el envo de datos) y LCDCMDOUT (utilizada para el envo de comandos). La constante numerica argumento de LCDINIT se utiliza para definir el tipo de cursor: 0 = no cursor (por defecto), 1 = parpadeo, 2 = subrayar, 3 = + subrayar parpadear.

LCDOUT y LCDCMDOUT declaraciones pueden tener mltiples argumentos separados por ','. Strings, constantes y variables se pueden utilizar como argumentos de LCDOUT declaracin. Si el signo '#' se utiliza antes de que el nombre de una variable entonces su representacin decimal se enva al mdulo LCD. Constantes y variables se pueden utilizar como argumentos de LCDCMDOUT declaracin y las siguientes palabras clave tambin estn disponibles:

FORO DE TODO EN ELECTRONICA PAGINA50 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA LcdClear, LcdHome, LcdLine2Home, LcdDisplayOn, LcdDisplayOff, LcdCurOff, LcdCurBlink, LcdCurUnderline, LcdCurBlinkUnderline, LcdLeft, LcdRight, LcdShiftLeft, LcdShiftRight, LcdLine1Clear, LcdLine2Clear, LcdLine1Pos () () Y LcdLine2Pos. Argumento de LcdLine1Pos y LcdLine2Pos () () puede ser un nmero en el rango (140) o variable de tipo Byte de datos. El valor que figura en la variable que debe ser de la mismo tipo. LcdDisplayOn y LcdDisplayOff se convertir el cursor off. Cursor relacionados simblico comandos pueden ser utilizados como argumentos de LCDINIT. He aqu algunos ejemplos:
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 LcdCurBlink loop: LCDOUT "Hello world!" WAITMS 1000 LCDCMDOUT LcdClear WAITMS 1000 GOTO loop

DEFINE LCD_BITS = 8 DEFINE LCD_DREG = PORTB DEFINE LCD_DBIT = 0 DEFINE LCD_RSREG = PORTD DEFINE LCD_RSBIT = 1 DEFINE LCD_EREG = PORTD DEFINE LCD_EBIT = 3 DEFINE LCD_RWREG = PORTD DEFINE LCD_RWBIT = 2 DIM A AS WORD A = 65535 LCDINIT 3 WAITMS 1000 loop: LCDOUT "I am counting!" LCDCMDOUT LcdLine2Home LCDOUT #A A = A - 1 WAITMS 250 LCDCMDOUT LcdClear GOTO loop

Las declaraciones relacionadas LCD tendr control sobre TRIS registros relacionados con los pines utilizados para interfaz LCD, pero si usted utiliza los pines PORTA PORTE en los dispositivos con A / D Converter Mdulo entonces debe tomar el control sobre el registro ADCON1 utilizado para fijar las patillas como digital I / O. Usted puede configurar hasta ocho caracteres definidos por el usuario que se utilizar en FORO DE TODO EN ELECTRONICA PAGINA51 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA la pantalla LCD. Esto se puede hacer fcilmente con LCDDEFCHAR declaracin. El primer argumento de esta declaracin es el nmero, caractersticas y tiene que estar en la gama 0-7. Siguiente 8 argumentos formulario 8-char patrn de la lnea (de arriba abajo) y debe estar en el rango 0-31 (5-bits de ancho). Estos 8 caracteres de usuario se asignan a los cdigos char 0-7 y 8-15 y puede visualizarse mediante LCDOUT declaracin. Despus de la declaracin LCDDEFCHAR cursor estar en posicin INICIO. Por ejemplo: LCDDEFCHAR 0, 10, 10, 10, 10, 10, 10, 10, 10 LCDDEFCHAR 1, %11111, %10101, %10101, %10101, %10101, %10101, %10101, %11111 LCDOUT 0, 1, "Hello!", 1, 0 Para los LCD con cuatro lneas de caracteres adicionales simblico LCDCMDOUT declaracin de los argumentos se pueden utilizar: LcdLine3Home, LcdLine4Home, LcdLine3Clear, LcdLine4Clear, LcdLine3Pos y LcdLine4Pos () (). Argumento de LcdLine3Pos y LcdLine4Pos () () puede ser un nmero en el rango (1-40) o variable de tipo Byte de datos. El valor que figura en la variable que debe ser de la misma gama. Antes de utilizar estos elementos de idioma, valores correctos determinar LCD tipo debe ser asignado a LCD_LINES y LCD_CHARS parmetros usando DEFINE directivas.
DEFINE LCD_LINES = 4 DEFINE LCD_CHARS = 16 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 3 loop: LCDCMDOUT LcdClear LCDCMDOUT LcdLine1Home LCDOUT "This is line 1" LCDCMDOUT LcdLine2Home LCDOUT "This is line 2" LCDCMDOUT LcdLine3Home LCDOUT "This is line 3" LCDCMDOUT LcdLine4Home LCDOUT "This is line 4" WAITMS 1000 LCDCMDOUT LcdLine1Clear LCDCMDOUT LcdLine2Clear LCDCMDOUT LcdLine3Clear LCDCMDOUT LcdLine4Clear LCDCMDOUT LcdLine1Pos(1) LCDOUT "Line 1" LCDCMDOUT LcdLine2Pos(2) LCDOUT "Line 2" LCDCMDOUT LcdLine3Pos(3) LCDOUT "Line 3" LCDCMDOUT LcdLine4Pos(4) LCDOUT "Line 4"

FORO DE TODO EN ELECTRONICA PAGINA52 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


WAITMS 1000 GOTO loop

INTERFAZ PARA LCD GRAFICA DE MATRIZ DE PUNTOS


La interfaz grfica LCD con matriz de puntos de resolucin 128x64 controlada por KS0107 o compatible con el apoyo a la siguiente lista de elementos en Lenguaje Basic: GLCDINIT, GLCDCLEAR, GLCDPSET, GLCDPRESET, GLCDPOSITION, GLCDWRITE, GLCDCLEAN, GLCDOUT, GLCDIN, GLCDCMDOUT. Antes de utilizar las declaraciones relacionadas con los LCD grfica, el usuario debe configurar la interfaz grfica con el mdulo LCD utilizando DEFINE directivas. Aqu est la lista de parmetros disponibles: GLCD_DREG - define el puerto cuando las lineas de datos (tiene que ser un puerto de 8 bits) GLCD_RSREG - define el puerto RS cuando est conectado a la lnea GLCD_RSBIT - define el pin RS cuando est conectado a la lnea GLCD_EREG - define el puerto donde E es conectado a la lnea GLCD_EBIT - define el pin donde E es conectado a la lnea GLCD_RWREG - define el puerto en el R / W est conectado a la lnea GLCD_RWBIT - donde se define el pin R / W est conectado a la lnea GLCD_CS1REG - define el puerto donde CS1 est conectado a la lnea GLCD_CS1BIT - define el pin donde CS1 est conectado a la lnea GLCD_CS2REG - define el puerto donde CS2 est conectado a la lnea GLCD_CS2BIT - define el pin donde CS2 est conectado a la lnea

La declaracion GLCDINIT debe ser colocado en algn lugar al comienzo del programa bsico antes de cualquier otra declaracion relacionada con el modulo Grafico LCD. Las declaraciones relacionadas con el modulo Grafico LCD tendr control sobre TRIS registros relacionados con las clavijas utilizadas para LCD de interfaz, pero si utiliza los pines de los puertos donde esten los Modulos A / D y / o mdulos de la comparacin, debe tomar el control Durante el registro correspondiente (s) (ADCON1, ANSEL, CMCON) para ajustar las pines utilizadas como digital I / O.

La declaracion GLCDCLEAR Limpiar todo la LCD. Se puede utilizar con un argumento opcional constante en el rango 0-255, que se pondrn en cada byte posicin en la pantalla (128x64 grfica muestra internaly se divide en dos mitades de 64x64; ambas mitades se dividen en ocho 64x8 horizontal de las pginas, cada pgina Tiene su nmero abordar en el rango 0-15; pgina en esquina superior izquierda tiene el nmero 0; pgina en esquina inferior izquierda tiene el nmero 7; pgina en esquina superior derecha tiene el nmero 8; pgina en esquina inferior derecha tiene el nmero 15 ; Cada pgina ha dirigido 64 byte posiciones con nmeros en el rango 0-63; posicin cada byte tiene 8 bits, la ms alta es poco LSB y el MSB es algo inferior). Por ejemplo:
GLCDINIT loop:

FORO DE TODO EN ELECTRONICA PAGINA53 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


GLCDCLEAR 0xAA WAITMS 1000 GLCDCLEAR 0x55 WAITMS 1000 GOTO loop

Las declaraciones GLCDPSET y GLCDPRESET se utilizan para activar y desactivar uno de los puntos en la pantalla grfica. El primer argumento es la coordenada horizontal y debe ser un byte de datos de tipo variable o constante en el rango 0-127. El segundo argumento es la coordenada vertical y debe ser un byte de datos de tipo variable o constante en el rango 0-63. El punto en la esquina superior izquierda de la pantalla es el origen de coordenadas 0,0. Por ejemplo:

DIM I AS BYTE DIM J AS BYTE GLCDINIT FOR I = 0 TO 127 FOR J = 0 TO 63 GLCDPSET I, J NEXT J NEXT I

La declaracion GLCDCLEAN se utiliza para borrar una seccin de la pgina en la pantalla. Tiene tres argumentos. El primer argumento direccin de la pgina es y debe ser un byte de datos de tipo variable o constante en el rango 0-15. El segundo argumento es el primer byte posicin en la pgina que se limpien y que debe ser un byte de datos de tipo variable o constante en el rango 0-63. El tercer argumento es el ltimo byte posicin en la pgina que se limpien y que debe ser un byte de datos de tipo variable o constante en el rango 0-63. Si los dos ltimos argumentos se omiten toda la pgina se borrar. Por ejemplo:
DIM I AS BYTE GLCDINIT GLCDCLEAR 0xFF FOR I = 0 TO 15 GLCDCLEAN I WAITMS 500 NEXT I

La declaracion GLCDPOSITION se utiliza para hacer frente a un byte posicin en la pantalla. Se debe utilizar antes de cualquiera de las declaraciones GLCDWRITE, GLCDIN, GLCDOUT y GLCDCMDOUT. El primer argumento direccin de la pgina es y debe ser un byte de datos de tipo variable o constante en el rango 0-15. El segundo argumento es el objetivo byte posicin en la pgina y debe ser un byte de datos de tipo variable o constante en el rango 0-63. Si el segundo argumento es omitido, la posicin cero byte se utiliza. La declaracion GLCDWRITE se utiliza para escribir texto en la pantalla. Se comenzar a escribir a partir de la posicin actual de byte en la pantalla. Debe ser utilizada con cuidado, porque cuando el byte posicin (63) de la pgina que se alcance, la escritura continuar desde la posicin de byte 0 quedndose en la misma pgina. El ancho de cada carcter escrito es de 5 posiciones ms un byte byte posicin clara. Despus de la declaracin se ejecuta el actual byte posicin ser al final del texto escrito. FORO DE TODO EN ELECTRONICA PAGINA54 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA GLCDWRITE declaracin puede tener varios argumentos separados por ','. Cuerdas, constantes y variables byte se puede utilizar como sus argumentos. Constantes y de los valores de las variables se interpretan como cdigos ASCII. Si '#' signo se utiliza antes de que el nombre de una variable (byte o palabra tipo de datos) entonces su representacin decimal est escrito. Por ejemplo:
DIM I AS BYTE GLCDINIT FOR I = 0 TO 15 GLCDPOSITION I, 0 GLCDWRITE "Page: ", #I WAITMS 250 NEXT I

La declaracion GLCDOUT se utiliza para escribir el valor de la variable o constante byte a byte de la actual posicin en la pantalla. La actual posicin de byte se aumentan en uno. GLCDIN declaracin leer el valor de la posicin actual de byte en la pantalla y ponerla en el byte variable especificada como argumento. GLCDCMDOUT declaracin se utiliza para enviar comandos de bajo nivel a la grfica LCD. Su argumento puede ser una constante o variable de tipo byte de datos. Todos estos tres estados se puede utilizar con mltiples argumentos separados por ','.

UTILIZANDO EL MODULO INTERNO PWM


Interna mdulos PWM (con mayor precisin: los modos PWM de los mdulos CCP) se convierten en la utilizacin PWMON declaracin. Esta declaracin tiene dos argumentos. 1. El primer argumento es el mdulo nmero, y debe ser una constante en la gama 1-3. 2. El segundo argumento se utiliza para la seleccin del modo. El modulo interno PWM se puede utilizar en tres diferentes frecuencias de salida para cada ciclo de trabajo de cuatro resoluciones de apoyo de PWMON declaracin (de 10 bits, 9 bits, 8-bits y 7 bits). As, el mdulo PWM se puede activar con PWMON declaracin en 12 modalidades. Aqu est la lista de todos los modos en 4MHz frecuencia de reloj (de otras frecuencias de reloj, los valores deben ser ajustados proporcionalmente): mode mode mode mode mode mode mode mode mode mode mode mode 1: 10-bit, 244Hz 2: 10-bit, 977Hz 3: 10-bit, 3906Hz 4: 9-bit, 488Hz 5: 9-bit, 1953Hz 6: 9-bit, 7813Hz 7: 8-bit, 977Hz 8: 8-bit, 3906Hz 9: 8-bit, 15625Hz 10: 7-bit, 1953Hz 11: 7-bit, 7813Hz 12: 7-bit, 31250Hz

FORO DE TODO EN ELECTRONICA PAGINA55 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA El mdulo PWM inicialmente se comenz con el ciclo de 0, por lo que la produccin se mantendr de baja hasta que el ciclo de trabajo se cambia. PWM mdulo se puede apagar con PWMOFF declaracin. Solamente tiene un argumento - mdulo nmero. El ciclo de trabajo de la seal PWM se puede cambiar con PWMDUTY declaracin. Su primer argumento es el mdulo nmero. El segundo argumento es el ciclo y puede ser una constante en el rango 0-1023 o byte o palabra variable de tipo de datos. El usuario debe tener cuidado de usar el buen valor para todos los rangos de los modos PWM (01023 de 10 bits de resolucin, 0-511 para el 9 de bits de resolucin, 0-255 de 8 bits de resolucin y 0-127 de 7-bit de resolucin ). Aqu est un ejemplo ejemplo:

DIM duty AS BYTE PWMON 1, 9 loop: ADCIN 0, duty PWMDUTY 1, duty GOTO loop

INTERFAZ PARA SERVOS RADIO CONTROL (R/C)


Para escribir aplicaciones de interfaz de servos R / C hay dos declaraciones: SERVOIN y SERVOOUT. Servo R / C es controlado por un tren de pulsos (15-20 pulsos por segundo), cuya longitud define la posicin del brazo de servo. La duracin de los pulsos vlido est en el rango de 1-2ms. Estos dos estados tienen dos argumentos. 1. El primer argumento de los dos estados es el microcontrolador pin cuando el servo o se recibe la seal de transmisin. Por SERVOIN declaracin de que la clavija debe ser previamente configuracin como un pin de entrada y de la declaracin SERVOOUT pin debe ser la configuracin de la produccin. 2. El segundo argumento de SERVOIN declaracin debe ser una variable Byte cuando la duracin del pulso se guardarn. Los pulsos se miden en unidades de 10us, por lo que es posible medir los pulsos en el rango de 0.01-2.55ms. El valor almacenado en la variable de servos normales debera estar en el rango 100-200. El segundo argumento de la SERVOOUT declaracin debe ser un Byte variable o constante que determina la duracin de los impulsos generados. Para un funcionamiento adecuado de la meta servo SERVOOUT declaracin debe ser ejecutado 15-20 veces durante un segundo. Aqu hay un ejemplo de la servo operacin inversa:
DIM length AS BYTE TRISB.0 = 1 TRISB.1 = 0 loop: SERVOIN PORTB.0, length IF length < 100 THEN length = 100 IF length > 200 THEN length = 200 length = length - 100 length = 100 - length length = length + 100 SERVOOUT PORTB.1, length GOTO loop

FORO DE TODO EN ELECTRONICA PAGINA56 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA

Interfaz para Motor Stepper


Antes de utilizar las declaraciones de pasos relacionados con el motor, y su conexin deseada unidad modo se debe crear usando la directiva DEFINE. Hay ocho disponibles para definir los parmetros de la conexin de A, B, C y D bobinas: 1. 2. 3. 4. 5. 6. 7. 8. STEP_A_REG - define el puerto donde se conecta la bobina A STEP_A_BIT - define el pin de una bobina cuando est conectado STEP_B_REG - define el puerto donde B est conectada a la bobina STEP_B_BIT - define el pin donde B est conectada a la bobina STEP_C_REG - define el puerto donde C est conectada a la bobina STEP_C_BIT - define el pin donde C bobina est conectado STEP_D_REG - define el puerto donde D bobina est conectado STEP_D_BIT - define el pin de una bobina cuando est conectado

Bobinas A y C son en realidad parte de una sola bobina con conexin comn. Lo mismo es vlido para B, D bobina y conexiones. Tambin hay STEP_MODE parmetro utilizado para definir el modo de conducir. Si se pone a 1 (por defecto) ser el motor impulsado por completo el modo de paso. El valor 2 se debe utilizar para el modo de medio paso. La primera declaracin de base que se debe utilizar es STEPHOLD. Se utilizan las clavijas como configurar los productos y tambin energizar AyB bobinas para fijar el rotor en su posicin inicial. Para mover el rotor en sentido horario y en sentido direcciones hay STEPCW y STEPCCW declaraciones disponibles. Su primer argumento es el nmero de rotor medidas que se llevarn a cabo y que pueden ser de tipo Byte de datos constante o variable. El segundo argumento define la demora entre pasos consecutivos expresada en microsegundos por un Byte o Word tipo de datos constante o variable. Si se utiliza STEPCW declaracin resultados rotor en movimiento en direccin a continuacin la configuracin de la conexin para el B y D bobinas deben intercambiar. He aqu dos ejemplos (el segundo ejemplo se utiliza retrasos adecuados para la simulacion):

AllDigital ADCON1 = 0x0E Define STEP_A_REG = PORTB Define STEP_A_BIT = 7 Define STEP_B_REG = PORTB Define STEP_B_BIT = 6 Define STEP_C_REG = PORTB Define STEP_C_BIT = 5 Define STEP_D_REG = PORTB Define STEP_D_BIT = 4 Define STEP_MODE = 2 WaitMs 1000 StepHold WaitMs 1000 Dim an0 As Word loop: Adcin 0, an0

FORO DE TODO EN ELECTRONICA PAGINA57 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


an0 = an0 * 60 an0 = an0 + 2000 StepCW 1, an0 Goto loop

AllDigital Define STEP_A_REG = PORTB Define STEP_A_BIT = 7 Define STEP_B_REG = PORTB Define STEP_B_BIT = 6 Define STEP_C_REG = PORTB Define STEP_C_BIT = 5 Define STEP_D_REG = PORTB Define STEP_D_BIT = 4 Define STEP_MODE = 2 WaitUs 300 StepHold WaitUs 1000 loop: StepCCW 16, 300 WaitUs 1000 StepCW 24, 300 WaitUs 1000 Goto loop

INTERFAZ PARA DISPOSITIVO 1-WIRE


Antes de utilizar 1-WIRE relacionados con declaraciones, el usuario debe definir el pin cuando el dispositivo est conectado a utilizando la directiva DEFINE. Disponible parmetros son 1WIRE_REG y 1WIRE_BIT. Por ejemplo:
DEFINE 1WIRE_REG = PORTB DEFINE 1WIRE_BIT = 0

Secuencia de inicializacin puede realizarse por 1WIREINIT declaracin. Puede haber un argumento opcional (Variable Bit tipo de datos) que se pone a 0 si la presencia del dispositivo se ha detectado y el valor de 1 si no hay un dispositivo en la lnea. Individual bits (de tiempo) pueden ser enviados y recibidos a partir del dispositivo mediante las declaraciones 1WIRESENDBIT y 1WIREGETBIT. Ambas declaraciones puede tener varios argumentos - lista separada por comas de Bit tipo de datos de variables (o de bit constantes para 1WIRESENDBIT declaracin). Las declaraciones 1WIRESENDBYTE y 1WIREGETBYTE se puede utilizar para enviar y recibir a los bytes del dispositivo. Ambas declaraciones puede tener varios argumentos - lista separada por comas de las variables de tipo de datos Byte (Byte o constantes para 1WIRESENDBYTE declaracin). Aqu est un ejemplo para medir la temperatura utilizando DS18S20 dispositivo:

DIM finish AS BIT DIM temp AS BYTE DIM sign AS BYTE 1WIREINIT

FORO DE TODO EN ELECTRONICA PAGINA58 - goslock

MANUAL PIC SIMULATOR IDE FORO DE TODO EN ELECTRONICA


1WIRESENDBYTE 0xCC, 0x44 WAITMS 1 loop: 1WIREGETBIT finish IF finish = 0 THEN GOTO loop 1WIREINIT 1WIRESENDBYTE 0xCC, 0xBE 1WIREGETBYTE temp, sign

Este ejemplo puede ser muy corto mediante dos declaraciones de alto nivel especifico en BASIC DS18S20. DS18S20START declaracin iniciar una sola conversin de temperatura. Segn la hoja de datos del dispositivo de conversin se completar en en la mayora de 750ms. Despus de ese perodo, el valor medido puede ser ledo por DS18S20READT declaracin en la que requiere de dos variables de tipo Byte de datos como argumentos. El primer argumento contendr el valor de temperatura de 0,5 grados centgrados en las unidades (por ejemplo, el valor 100 representa la temperatura de 50 grados). El segundo argumento contendr el valor 0x00 si la temperatura es positivo y valor 0xFF si es negativo. Por ejemplo: DIM temp AS BYTE DIM sign AS BYTE DS18S20START WAITMS 1000 DS18S20READT temp, sign

FUNCIONES AVANZADAS
La directiva STARTFROMZERO se utiliza en el compilador se inicia el programa de cero programa de ubicacin de memoria flash (reset vector) y utilizar el programa de la memoria disponible. Interrupcin de la rutina si se utilizan, deben ejecutarse mediante el uso de cdigo ensamblador. El compilador tambin dejar el control de registro PCLATH al usuario suponiendo que todo el cdigo est en la misma pgina de la memoria del programa. Esta caracterstica avanzada se puede utilizar en el desarrollo de aplicaciones del gestor de arranque, por ejemplo.

FORO DE TODO EN ELECTRONICA PAGINA59 - goslock

You might also like