Sunteți pe pagina 1din 59

MANUAL DE PRCTICAS

INTRODUCCIN A MECATRNICA
22/10/2008 JUAN ANTONIO MOLINA TONDOP.

Entrenador para Microcontroladores PIC con PBP.


Qu es un entrenador? La principal aplicacin de un entrenador, es de servir como elemento de soporte a las personas que desean aprender el manejo del microcontrolador PIC (ya sea para los diferentes familias que utiliza el PIC), tambin ayuda a la persona interesada que pueda realizar los mas variados experimentos desde proyectos sencillos hasta los mas variados y complejos. El siguiente manual contiene ejercicios simples que nos permiten adquirir nuevos conocimientos tanto en la programacin y en las conexiones electrnicas (software y hardware). Los ejercicios con los que cuenta el entrenador se encuentran basados en el contenido prctico del programa de la Universidad Politcnica de Chiapas (Ver Anexo A.) incluyendo tambin ciertos temas para poder ir desarrollando tcnicas, habilidades y conocimiento en el campo de la Mecatrnica. En tanto el diseo del hardware contiene los siguientes Mdulos:

Mdulo Fuente de alimentacin (5V, GND y 12V) Modulo de Programacin. Modulo Leds. Modulo de Potencia. Modulo de entrada digital. Modulo de entrada analgica. Modulo RS232. Mdulo USB. Modulo Display de 7 Segmentos. Modulo PWM. Modulo Motor paso a paso. Modulo Servo Motor. Modulo Motor CD. Modulo Teclado. Modulo LCD. Modulo Experimento (Protoboard)

Adems el entrenador contiene lo siguiente: una base con fuente, un apagador, fusible de proteccin, una prctica caja para guardar tus cables, herramientas y dispositivos y una lmpara para iluminacin del entrenador. Para poder realizar un correcto funcionamiento del entrenador necesitamos el siguiente sistema: IBM PC o una computadora compatible. Un puerto USB Windows 98, ME, 2000, NT, XP VISTA Y para su correcto funcionamiento: 1. El entrenador. 2. Programador USB y su correspondiente software. 3. Cable de programacin. 4. Programa editor y compilador (Microcode Studio y PBP)

EXPERIMENTO 1. Qu es un Microcontrolador?
Muchos de nosotros sabemos qu apariencia tiene una computadora. Usualmente tiene teclado, monitor, CPU (Unidad de Procesamiento Central), impresora y mouse. Este tipo de computadoras, como la Mac o PC, son diseadas principalmente para comunicarse con humanos. Manejo de base de datos, anlisis financieros o incluso procesadores de textos, se encuentran todos dentro de la gran caja, que contiene CPU, la memoria, el disco rgido, etc. El verdadero cmputo, sin embargo, tiene lugar dentro de la CPU. Si piensa sobre esto, el nico propsito del monitor, teclado, mouse e incluso la impresora, es conectar a la CPU con el mundo exterior. Pero hay computadoras alrededor de nosotros, corriendo programas y haciendo clculos silenciosamente sin interactuar con ningn humano. Estas computadoras estn en su auto, en el transbordador espacial, en un juguete, e incluso puede haber uno en su secador de pelo. Llamamos a stos dispositivos microcontroladores. Micro porque son pequeos, y controladores, porque controlan mquinas o incluso otros controladores. Los Microcontroladores, por definicin entonces, son diseados para ser conectados ms a mquinas que a personas. Son muy tiles porque se pueden construir mquinas o artefactos, para controlarlo, y luego dejarlo trabajar para usted de manera automtica. El lmite de las aplicaciones para los microcontroladores es la imaginacin.
Microcontrolador. Es un circuito integrado que contiene muchas de las mismas cualidades que una computadora de escritorio, tales como la CPU, la memoria, etc., pero no incluye ningn dispositivo de comunicacin con humanos, como monitor, teclados o mouse. Los microcontroladores son diseados para aplicacin de control de mquinas, ms que para interactuar con humanos.

Cuando creamos dispositivos que tienen un microcontrolador actuando como un cerebro, en muchas formas estamos tratando de imitar cmo acta nuestro cuerpo. Su cerebro necesita cierta informacin para tomar decisiones. Esta informacin es obtenida a travs de varios sensores, como la vista, el odo, el tacto, etc. Estos sensores detectan lo que nosotros llamamos el mundo real o mundo exterior, y envan esa informacin al cerebro para procesamiento. Recprocamente, cuando su cerebro toma una decisin, manda seales a travs de su cuerpo para hacer algo en el mundo exterior. Utilizando las entradas de sus sentidos, y las salidas de sus piernas, brazos, manos, etc., su cerebro se est comunicando e interactuando con el mundo exterior. Esta entrada/decisin o procesamiento/salida es de lo que se tratan los Sistemas y los microcontroladores. Para cada experimento se necesita una PC compatible XP o VISTA, una fuente conectada al entrenador. Partes Requeridas para el experimento 1: (2) LEDs (Diodos emisores de luz) (2) Dos resistores de 330 ohm, watt. Cable de programacin. Cables de conexin. El programa editor de PBP para el PIC

Armelo!
Cualquier sistema microcontrolador, consiste en dos componentes primarios: hardware y software. El hardware es el componente fsico del sistema. El software es la lista de instrucciones que residen dentro del hardware. Nosotros crearemos ahora el hardware que interacte con el mundo exterior, y luego escribiremos un programa de software para controlarlo. Ahora construyamos nuestro circuito. Ver figura 1.1

AL LABORATORIO. En este experimento conectaremos dos diodos emisores de luz (LEDs) al entrenador PIC. Los LEDs son formas especiales de lmparas que por varias razones son fcilmente conectadas a dispositivos microcontroladores. Hay dos cosas muy importantes de recordar cuando conecta LEDs al PIC. La primera es que siempre se debe asegurar que haya una resistencia conectada, como muestra la figura 1.2. En este experimento el resistor debe tener un valor de 330 ohms, watt.

Segundo, est seguro que la polaridad del LED es la correcta. Hay una zona liza en un costado del LED que debera ser conectada como en la figura 1.2, si la polaridad es invertida, el LED no trabaja. El lado liso tambin tiene la pata ms corta del LED.

Figura 1.2: LED en el Protoboard. Muestra el LED y el resistor enchufados en el protoboard. Ninguna conexin ha sido hecha an a las entradas/salidas del BASIC Stamp.

Entendiendo la Protoboard. Es importante entender cmo trabaja el protoboard. El protoboard tiene muchas tiras metlicas que pasan por debajo en fila. Estas tiras conectan los huecos unos a otros; esto hace fcil conectar componentes juntos para construir un circuito elctrico. Para usar el protoboard, las patas del LED y el resistor, sern puestas en los huecos. Estos huecos son hechos de forma que tendrn al componente en su lugar. Cada hueco es conectado a una de las tiras metlicas que corren por debajo de la plaqueta. Usted puede conectar diferentes componentes enchufndolos dentro de nodos comunes.

Figura 1.3: Conexiones del Protoboard. Las lneas negras verticales muestran cmo los huecos estn conectados por debajo de la protoboard. Esto significa que usted no tiene que enchufar dos cables en un mismo hueco, debido a que ese hueco est unido con el de la izquierda o el de la derecha.

Bien, construyamos el circuito! No conecte la fuente de alimentacin an (la batera de 5 volts o el adaptador externo). En las Figuras siguiente 1.4 a) se muestra un diagrama elctrico es un diagrama esquemtico del circuito del microcontrolador PIC16F84 con 2 LEDs de salida y su sistema mnimo (Componentes necesarios para que pueda funcionar correctamente el micro). La Figura 1.4 b) es el mismo circuito, pero dibujado como una foto de cmo se vera el circuito fsico. Realice las conexiones necesarias en el protoboard.

Figura 1.4 a) Diagrama esquemtico del circuito. Fig. 1.4 b) Montaje real del cto. en el proto.

Conecte el programador a la PC:

Programelo!
1. Enchufe un extremo del cable al programador. 2. Enchufe el otro extremo del cable de programacin en un conector del puerto USB disponible en la PC. Listo! Ya hemos creado un circuito (hardware). Pero esto no es nada an. As es que necesitamos... Cuntos de ustedes ya saben escribir un programa de computadora? Si lo ha hecho antes, entonces la primera parte de sta seccin puede ser un repaso. Pero si es nuevo en el tema, no se preocupe, en realidad no es tan difcil. Un programa de computadora no es nada ms que una lista de instrucciones que una computadora ejecuta (o en nuestro caso un microcontrolador). Creamos un programa para el microcontrolador escribindolo en una PC (utilizando el teclado y el monitor), luego descargamos este cdigo a travs del cable de programacin, al microcontrolador. Este programa (o lista de instrucciones), entonces se ejecuta dentro del PIC. Si hemos escrito el programa correctamente, har lo que nosotros esperbamos. Sin embargo, si hemos cometido un error, entonces el dispositivo no trabajar (o trabajar mal), y necesitamos depurarlo. Depurar el programa puede ser una de las experiencias ms estresantes de todo el proceso, por lo tanto, cunto ms cuidadoso es en crear el programa, tericamente ms fcil ser depurarlo. Un debugging es el arte de remover errores (bug). PBP para el PIC, tiene muchos comandos de donde elegir, una lista y descripcin completas de cada uno de stos comandos puede ser obtenida en cada comando usado en stas lecciones, o si lo prefiere est descripto en el apndice B, referencia rpida del PBP. Para ste experimento usaremos slo cuatro comandos. Estos son: OUTPUT, PAUSE, GOTO, Y OUT. Como se mencion arriba, un programa es una lista de instrucciones que son ejecutadas en una secuencia determinada por la estructura del programa en s mismo. Por lo tanto, como escribimos el programa, es muy importante para tener en mente la secuencia de la ejecucin que nosotros deseamos. Por ejemplo, si queremos comprar una gaseosa en una mquina expendedora, nuestro cerebro ejecuta una lista de comandos para realizar esto. Tal vez algo as... 1. Insertar $1.00 en la ranura. 2. Esperar que se encienda la luz verde. 3. Presionar el botn para el tipo de gaseosa. 4. Ver salir la gaseosa. 5. Agarrar la gaseosa. 6. Abrir la gaseosa. 7. Beber la gaseosa. 8. Burp.

Ahora, esto se ve bastante lgico, pero slo porque ya lo hemos hecho antes. Si, sin embargo, su cerebro enva el programa siguiente: 1. Presionar el botn para el tipo de gaseosa. 2. Abrir la gaseosa. 3. Insertar $1.00 en la ranura. 4. Agarrar la gaseosa. 5. Burp 6. Beber la gaseosa. 7. Esperar que se encienda la luz verde. 8. Ver salir la gaseosa. No pasar mucho. Todos los comandos apropiados estn ah, pero en un orden incorrecto. Una vez que usted ha apretado el botn para tipo de gaseosa (botn 1), su cerebro (programa), se colgar o se detendr, porque no puede ejecutar abrir la gaseosa, que es el punto 2, porque no tiene gaseosa que abrir!. Este es un error de programacin (bug). Los humanos podemos modificar nuestro programa cerebral a medida que la situacin transcurra, y podemos, por supuesto imaginarnos cmo obtener la gaseosa. Los microcontroladores, sin embargo, no tienen la capacidad de adaptar y modificar su propio conjunto de instrucciones; ellos son solamente capaces de ejecutar la secuencia exacta de las instrucciones que nosotros les dimos. Bien, suficiente teora, programemos ste microcontrolador para hacer algo! Conecte el programador. Conecte el cable USB a su PC. Enchufe el PIC al programador. Encienda su PC. El software del MicroCode Studio funciona en Windows XP o Vista. De doble click en el icono MicroCode Studio, ahora estar corriendo el programa. Este es un programa que fue creado para ayudarlo a escribir y compilar programas al microcontrolador PIC. La pantalla se ver como en la Figura 1.5:

Figura 1.5: Software del MicroCode Studio. Doble click sobre el icono MicroCode Studio para hacer correr el software. La pantalla que se abre se ver como sta.

La pantalla, excepto por unas pocas palabras en el ttulo, est en blanco. Ac es donde usted crear su programa. Ahora recuerde, vamos a escribir nuestro programa usando un equipo de comunicacin humano (monitor, teclado, etc.), que es parte de su PC El programa que escribiremos, no correr en su PC, sino que ser descargado o enviado al microcontrolador. Una vez que el programa ha sido recibido, el PIC ejecutar las instrucciones exactamente como nosotros las hemos creado. Escriba el siguiente programa en el editor del MicroCode Studio, y se ver como en la figura 1.6:

Figura 1.6: Software del MicroCode Studio. Escriba el cdigo en el editor, y se ver como en sta pantalla

output 0 titilar: high 0 pause 1000 low 0 pause 1000 goto titilar Es necesario recordar que primeramente una vez terminado de escribir el programa se guarde el archivo con el nombre que usted quiera pero que valla relacionado con lo que se esta haciendo y una vez compilado se genera un archivo extensin .HEX que es este archivo que se necesita guardar en el PIC y que el programador requiere para descargarlo a nuestro microcontrolador. Ahora, presione la tecla F9 notara que el programa fue compilado exitosamente, sino le apareci ningn mensaje. Si todo est correcto, nos vamos al software del programador que usted utilice y descargamos el programa al PIC. El primer comando usado es output. Cada seal del pin del PIC puede ser ajustada como entrada o salida. Debido a que nosotros queremos que el microcontrolador encienda y apague un LED, el microcontrolador est manipulando el mundo exterior. Por lo tanto, por definicin, nosotros queremos que B0 sea una salida output.

Resultado del primer comando: output 0 hace B0 una salida. (Aclaracin: si nosotros buscbamos hacer B1 una salida, el comando debera haber sido output 1). El siguiente tem en el programa titilar:, no es realmente un comando. Es slo una etiqueta, una marca encierto punto del programa. Ahora, el pin B0 como lo llamamos, es una salida. En el mundo de las computadoras, voltajes en stos pines, pueden ser tanto altos o bajos, que significa que pueden tener un voltaje alto o bajo. Otra forma de referirnos a alto y bajo es 1 y 0. 1 significa alto y 0 significa bajo. Piense en una llave de luz en la pared, cuando la llave est en una posicin, la lmpara se enciende, y cuando est en otra posicin, se apaga. Es binaria, hay slo dos combinaciones: encendida o apagada, o 1 o 0. No importa cunto insista, usted nunca podr poner la llave en medio de las dos posiciones. Si queremos encender el LED necesitamos hacer que B0 vaya alto (que tenga un 1). B0 est actuando como un interruptor, que puede ser cambiado a encendido o apagado bajo un control de programa. Este es el propsito para el segundo comando: High 0. Este causar que B0 vaya a nivel alto, lo que hace que el LED se encienda. Tenga en cuenta que los microcontroladores ejecutan su programa muy rpidamente, si apagramos el LED en el siguiente comando, esto pasara demasiado rpido para que pudiramos verlo. Por lo tanto necesitamos aletargar el programa; de sta forma podemos ver si est operando correctamente o no. Es el propsito del siguiente comando: Pause 1000. Este comando hace que el programa espere por 1000 milisegundos, o sea 1 segundo. El siguiente comando es Low 0. Este comando hace que B0 vaya a nivel bajo y apague el LED, debido a que no hay flujo de corriente. A continuacin hacemos una pausa con pause 1000 (otro segundo). El LED est an apagado. Goto (ir) es muy simple de entender. Durante el curso de la ejecucin del programa, cuando el comando goto es encontrado, el programa va a algn punto especfico en el programa. En nuestro ejemplo, le decimos al programa ir a titilar. Donde sea que est titilar, es donde el programa ir. En nuestro programa, la etiqueta titilar est en la segunda lnea. Por lo tanto, cuando la instruccin goto titilar es encontrada, el programa salta hacia la segunda lnea y lo repite nuevamente. (El programa regresa a la segunda lnea cada vez que encuentra el comando goto titilar. Esto es lo que causa que el LED continuamente parpadee. Un buen hbito al que conviene acostumbrarse, es remarremark (comentar) sus programas. Comentar o documentar sus programas, los hace ms fciles de seguir o de depurar si hay algn problema. El apstrofe () es usado para decirle al microcontrolador que ignore la siguiente informacin, es slo para beneficio humano. En otras palabras, cualquier cosa que est

escrita en una lnea del programa despus de un apstrofe, no es parte del cdigo de la instruccin.

Preguntas
1. En qu se diferencia un microcontrolador de una computadora? 2. Cul es la diferencia entre hardware y software? 3. Por qu un microcontrolador es como nuestro cerebro? 4. Qu significa debug (depurar)? 5. El siguiente programa debera encender el LED en B0 por 2 segundos, luego apagarlo por 2 segundos, y luego repetir. Cuntos errores (bugs) hay en el programa y qu correcciones son necesarias? output 0 titilo: out0 = 0 pause 200 out1 = 1 pause 2000 goto titilar Reescriba el programa de la pregunta 5 anterior, para hacer lo siguiente. Cada programa debera ser cargado en el PIC y probado en su protoboard.

Desafio!
1. Haga que ambos LED se enciendan y apaguen parpadeando al mismo tiempo, Cuando termine de hacer el programa, crguelo en la PC (como lo ha hecho antes), y prubelo. 2. Haga encender y apagar los LED alternativamente; en otras palabras, mientras un LED est encendido el otro est apagado, y viceversa. 3. Encienda el primer LED por 2 segundos, luego apguelo. Espere 5 segundos y encienda el segundo LED por 1 segundo y luego apguelo. Espere 3 segundos y repita. 4. Encienda el primer LED por 1.5 segundos, luego apguelo. Espere 2 segundos y luego encienda el segundo LED por 1.5 segundos, Luego apguelo. Espere 2 segundos, luego encienda ambos LED por 0.5 segundos y apguelos por 2 segundos. Repita sta ltima accin de 0.5 segundos encendido y 2 segundos apagado.

Qu aprend?
Complete las siguientes oraciones con las palabras de la lista. Los___________________ estn a nuestro alrededor. Incluso cuando no se ven como una computadora. (Quin alguna vez se imagin que un juguete tendra una computadora incluida en su interior?) Los Microcontroladores consisten de hardware y _____________. Creamos programas en una PC, una computadora que est diseada para interactuar con humanos (con teclado, monitor, etc.) y luego _____________ el programa en un microcontrolador, donde es realmente ________________ (run). Un programa de microcontrolador es solo tan inteligente como el que lo program. Al contrario que el cerebro humano, el programa del microcontrolador no se__________ por s mismo, ni cambiar el orden de las instrucciones del programa. El microcontrolador ejecutar un conjunto de instrucciones en la misma____________ en la que fue creado. Muchos microcontroladores son verstiles y fciles de usar, porque pueden ser reutilizados,______________, y pueden usarse en un sinnmero de productos e innovaciones, desde robots a tostadores

Software ejecutado microcontroladores adaptar re-programados secuencia descargamos

Por qu aprend esto?

La gran versatilidad de los microcontroladores est en que pueden ser programados para controlar cualquier cosa que la mente humana pueda concebir. Aeromodelos, controladores de casas inteligentes o sistemas de coleccin de datos climticos remotos operados por batera, son slo ejemplos. Los microcontroladores deben tener dos componentes trabajando juntos, para que el dispositivo funcione. El primer componente es el hardware (el circuito). Muchas personas pasan su vida diseando hardware para microcontroladores para una infinidad de variedad de productos. El segundo componente es el software. Los programadores se especializan en escribir (cdigo de control) para telfonos celulares, juguetes o incluso equipamiento industrial.

Cmo puedo aplicarlo?

La ventaja de los microcontroladores (y algo que usted puede considerar como una carrera futura) es que el mundo de los dispositivos inteligentes se est expandiendo a una velocidad increble y no muestran ningn signo de disminuir su velocidad. A medida que la tecnologa avanza en todas las reas de nuestras vidas, nos vemos rodeados por un creciente nmero de aparatos avanzados tecnolgicamente. Usted puede ayudar a desarrollarlos y tal vez inventar el prximo gran producto, o simplemente divertirse construyendo cosas; la tecnologa es la misma, slo que aplicada diferente! Mire alrededor suyo y piense cmo podra usar un microcontrolador para crear una luz de seguridad para su bicicleta, las luces del auto, un proyecto de arte que use la luz para interactuar con los espectadores. Piense con sus amigos en un desarrollo para comenzar a fabricar con perspectivas comerciales... Quin sabe?

A continuacin se muestra varios ejemplo para que se practique y aprendan a utilizar diferentes comandos.

ENCENDER Y APAGAR UN LED. Bueno aqu esta el primer ejemplo y el ms sencillo y por donde aprend, prender y apagar un led conectado a portb.0:

Varias formas para hacer lo mismo: inicio: High 0 pause 1000 low 0 pause 1000 goto inicio end TRISB.0=0 inicio: PORTB.0 = 1 pause 1000 PORTB.0 = 0 pause 1000 goto inicio end inicio: TOGGLE PORTB.0 PAUSE 1000 goto inicio end

Inicio: High PORTB.0 pause 1000 low PORTB.0 pause 1000 goto inicio end led var PORTB.0 inicio: high led pause 1000 low led pause 1000 goto inicio end

Cuando se quiera cambiar/conmutar el estado de una lnea que est configurada como salida es ms fcil usar instruccin TOGGLE. Led intermitente en RB0.

SEMAFORO

El cdigo de PBP: otra forma: TRISB=%00000000 inicio: high 0:low 1:low 2:low 3:low 4: high 5 pause 1000 high 0:high 1:low 2:low 3:low 4: high 5 pause 1000 low 0:low 1:high 2:high 3:low 4: low 5 pause 1000 low 0:low 1:high 2:high 3:high 4: low 5 pause 1000 goto inicio end inicio: PORTB = %00100001 pause 1000 PORTB = %00100011 pause 1000 PORTB = %00001100 pause 1000 PORTB = %00011100 pause 1000 goto inicio end

JUEGO DE LUCES

Juego de luces que cuenta en forma binaria de 0 a 255:


i var byte TRISB=0 inicio: for i=0 to 255 PORTB=i pause 50 next I goto inicio end i var byte leds var byte[5] TRISB=0 leds[1]=%10000001 leds[2]=%01000010 leds[3]=%00100100 leds[4]=%00011000 Leds=1 inicio: for i=1 to 4 PORTB=leds pause 100 next I for i=4 to 1 step-1 PORTB=leds pause 100 next i goto inicio end Otra manera de hacerlo: i var byte leds var PORTB TRISB=0 Leds=1 inicio: for i=1 to 7 leds=leds<<1 pause 100 next i for i=1 to 7 leds=leds>>1 pause 100 next i goto inicio end

Juego de luces al estilo AUTO FANTASTICO: i var byte cont var word TRISB=0 inicio: cont=1 for i=1 to 7 PORTB=cont pause 100 cont=cont*2 next i for i=1 to 7 PORTB=cont pause 100 cont=cont/2 next i goto inicio

end

Display En este ejemplo se va a utilizar un display de 7 segmentos y aremos un contador de 0-9 con la fuincion Look Up

vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec,[191,134,219,207,230,237,253,135,255,239],num portb=num pause 500 next vec goto prog END

El mismo contador con un display pero ahora con un vector en el cual almacenaremos los valores correspondientes a cada numero (Para los dos ejemplos el Display es de Anodo Comun)

vec var byte [10] pos var byte vec[0]=191 vec[1]=134 vec[2]=219 vec[3]=207 vec[4]=230 vec[5]=237 vec[6]=253 vec[7]=135 vec[8]=255 vec[9]=239 TRISB=%00000000 loop: for pos=0 to 9 PORTB=vec[pos] pause 500 next goto loop end

Un contador ascendente y descendente

vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec,[191,134,219,207,230,237,253,135,255,239],num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec,[191,134,219,207,230,237,253,135,255,239],num portb=num pause 500 next vec goto prog END

AQUI LES DEJO ALGUNOS EJEMPLOS SENCILLOS DE PWM TRISB=%00000000 PortB=0 cont VAR word X1: forcont=1 to 255 PWM PortB.0,cont,1 Next goto X1 OTRO EJEMPLO a VAR word trisa= %00000000 trisb= %11111111 x1: for a = 1 to 2500 pwmporta.0,a,1 PAUSE 5 next for a = 2500 to 1 step-1 pwm porta.1,a,1 PAUSE 5 next goto x1 'un ancho de pulso en un porcentaje incremental. 'salidas 'entradas

'la salida de pwm esta en el port.0,el ancho de 'pulso sera de cont, el cual representar

'la salida de pwm esta en el port.0,el ancho de pulso sera de dato a, el 'cual representar

EXPERIMENTO 2.

Detectando el Mundo Exterior


Tomar decisiones. Nuestro cerebro lo hace todo el tiempo. Tomamos decisiones basndonos en lo que vemos, omos, tocamos, etc. Como aprendimos en el experimento 1 (qu es un microcontrolador?), los microcontroladores actan como nuestro cerebro. Ellos manipulan el mundo exterior basados en entradas (inputs). El Experimento 2 se centrar en cmo podemos disear un sistema microcontrolado que pueda cambiar sus salidas (outputs), dependiendo de qu tipo de entradas (inputs) digitales detecta. Los microcontroladores son dispositivos programables. Esto quiere decir que contienen una cierta lista de instrucciones (llamada programa o cdigo), que dice qu hay que hacer bajo ciertas circunstancias.
Sensor: Un sensor es un dispositivo de entrada usado para detectar o medir presencia fsica. Los ejemplos incluyen sensores que detectan luz, calor, temperatura, curvamiento y compuestos qumicos (tales como monxido de carbono).

Partes requeridas.
El experimento 2 necesita las siguientes partes:

(1) Un cable de programacin (2) Dos LED (diodos emisores de luz) (2) Dos pulsadores (1) Un PIC16F84 (1)Programador ( 2) Dos resistores de 470 ohm, watt (amarillo, violeta, marrn) (2) Dos resistores de 10k ohm, watt (marrn, negro, naranja) (1) Una batera de 9 volts o adaptador (6) Seis cables conectores (1) Un programa editor de MicroCode Studio Hay una infinita variedad de sensores que podemos conectar al Microcontrolador. Este experimento incluye un pulsador (un tipo de sensor) y un LED (un dispositivo de salida).

Constryalo!

Recuerde que el LED debe ser conectado con el lado liso conectado a los pines de salida P0 y P1. Asegrese que haya una resistencia de 220 ohm en serie con cada LED, y que haya un resistor de 10.000 ohm (10K ohm) conectado al lado alto de cada pulsador (a los 5 volts). Debido a que este experimento usa dos valores diferentes de resistores, y ambos se ven parecidos, cmo los puedo separar?. Leyendo las bandas con el cdigo de colores. Si usted no conoce cmo leer el cdigo, mire el Apndice C para averiguarlo. Escriba el siguiente programa:

Programelo!
Este circuito tiene un tipo de sensor (el pulsador) y un tipo de dispositivo de salida (el LED). Una vez que usted tiene todos los componentes instalados en el rea del prototipo.
TRISB.0=1 inicio: if PORTB.0 = 0 then high 1 else low 1

endif goto inicio end

Ahora, corra el programa. Si su programa est trabajando apropiadamente, el LED debe prender, mientras usted presiona el pulsador. Ahora analicemos paso por paso nuestro programa: Nuestro primer comando, TrisB.0=1 hace el pin B0 una entrada (input). La instruccin High 1, fija el registro de salida de B1 a un valor igual a 1, o alto (high) por lo tanto el LED est encendido. Recuerde del Experimento 1, que un comando como inicio: realmente no es un comando, es una etiqueta (simplemente un marcador o puntero a cierto lugar de su programa). Cuando nuestro programa eventualmente encuentre el comando goto inicio, el programa buscar la etiqueta inicio, saltar hasta ella, y luego continuar ejecutando el programa desde ese punto. El comando if PORTB.0=0 then le dice al microcontrolador que revise el estado del pin llamado B0. Cuando un microcontrolador revisa el estado de un pin en particular, lo que realmente est haciendo es leer el valor digital de ese pin. El campo de la electrnica est generalmente dividido en dos diferentes dominios del tipo de seal Digital y Analgico. Nuestra entrada del pulsador es tanto un 0 o un 1 (abierto o cerrado). Este es un sensor de tipo digital. Medir el nivel del volumen de un amplificador de audio, son ejemplos de entrada analgica. Sensores para ste tipo de aplicacin, convierten una medicin, por ejemplo de 10 cm, a un valor digital que el microcontrolador pueda entender. Exploraremos este mundo fascinante de la Conversin. Analgico a Digital en un experimento futuro. En electrnica digital (binaria), cualquier valor distinto de 0 y 1 es considerado invlido. Por lo tanto, cuando el microcontrolador lee el estado de B0, ver un valor de 0 o 1. Nosotros buscamos que B0 sea un 0. Si (cuando el microcontrolador lo revisa) es un 1, entonces este comando har que B1 se apague, por lo tanto no har nada, y el programa se continuar ejecutando en el siguiente comando (en este caso, goto inicio lo que causa que el programa salte al principio y continuamente revise que B0 se convierta en un 0). Una vez que B0 se convierta en 0 entonces las condiciones para este comando se cumplen y el programa har que B0 se ponga en alto, por lo tanto el led se enciende, luego hace que el programa regrese y revise el estado de B0 nuevamente y repita todo nuevamente. El programa lo ayudar a encontrar errores de sintaxis cuando corra el programa y no se ejecute adecuadamente aparecern los errores indicndoles en que lnea e instruccin se encuentra el error, beber aprenderse la sintaxis de cada instruccin para ir adquiriendo cada vez mayor experiencia para resolver los diferentes errores que se le presente. Revise nuevamente su programa y asegrese que ha escrito todo correctamente. Antes de hacer funcionar este programa, puede usted decir qu va a hacer? El programa tomar una decisin basado en qu botn es presionado. Una vez que cualquier botn es presionado, el programa saltar a la rutina apropiada. El microcontrolador est sensando

una entrada, tomando una decisin, y luego creando una salida. El comando if - then, se fija en la toma una decisin basada en el estado de un pin. Una variable nos permite almacenar cierta pieza de informacin (ingresada ahora), para un anlisis posterior. Las variables deben ser declaradas antes de ser usadas en un programa. Declarar una variable simplemente es una instruccin en su programa que le avisa al microcontrolador el nombre de la variable y qu tan grande es. Escribamos ahora varios programas diferentes en un programa nuevo.

El mismo ejemplo pero esta ves con una resistencia de pull down: TRISB.0=1 inicio: if PORTB.0 = 1 then high 1 else low 1 endif goto inicio end

BOTONES Y LEDS Este tiene dos botones el uno sirve para subir y el otro para bajar:

i var byte cont var word cmcon=7 TRISB=0 TRISA=%00000011 cont=1 PORTB=cont inicio: if PORTA.0=0 then cont=cont*2 PORTB=cont if cont>=256 then cont=1 PORTB=cont endif pause 200 else cont=cont endif if PORTA.1=0 then cont=cont/2 PORTB=cont if cont<=1 then cont=256 endif

end

pause 200 else cont=cont endif goto inicio

Contador con Pulsantes Este es un contador ascendente y descendente....posee dos pulsantes que sirven para subir y bajar el conteo:

vec var byte num VAR BYTE TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 PORTB=64 inicio: if PORTA.0=0 then vec=vec+1 lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA.1=0 then vec=vec-1 lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio

END

CONTADOR CON PULSANTES A diferencia del anterior que el conteo se la hacia cuando se pulsaba aqui es conteo es automatico y los pulsantes sirven para elegir si se quiere que el conteo sea ascendente o descendente...

vecvar byte num VAR BYTE flag var byte TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 flag=1 inicio: if PORTA.0=0 then flag=1 endif if PORTA.1=0 then flag=0 endif if flag=1 then gosub subir endif if flag=0 then gosub bajar endif goto inicio Subir: vec=vec+1 lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num portb=num

if vec>=10 then vec=0 endif pause 200 return Bajar: vec=vec-1 lookup vec,[0,191,134,219,207,230,237,253,135,255,239],num portb=num if vec<=1 then vec=11 endif pause 200 return end

Preguntas
1. Cmo toma una decisin un microcontrolador? 2. Qu es un sensor y por qu un microcontrolador necesita uno? Mencione algunos tipos diferentes de sensores. 3. Defina una variable y describa cmo puede ser usada en un programa. 4. Escriba el cdigo para declarar una variable llamada status. La variable podra valer tanto 0 como 1. 5. Agregue comentarios apropiados al siguiente programa: output portb.0 output portb.1 input porta.0 input porta.1 revisar: if porta.0=0 then titilar if porta.1=0 then dobletitilar goto revisar titilar: low 0 pause 200 high 0 pause 200 goto revisar doble_titilar: low 0 low 1 pause 200 high 0 ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________

high 1 pause 200 goto revisar

____________________________ ____________________________ ____________________________

DESAFIO!

1. Escriba un programa (completo, con comentarios) que haga titilar al LED B0 (cada segundo), mientras est presionado el pulsador P2. Cuando el botn no est presionado, el LED B1 est encendido, pero se apaga cuando el LED B0 est titilando. 2. Escriba un programa que haga titilar ambos LED (cada 1.2 segundos) cuando cualquier pulsador es presionado. Si ningn pulsador es presionado, los LED estn encendidos y si ambos pulsadores son presionados, ambos LED estn apagados. 3. Escriba un programa que haga titilar alternadamente los LED cada segundo, pero solamente despus de que P2 haya sido presionado y liberado, y luego de que P1 sea presionado. Luego, escriba comentarios en su programa mostrando que cambios hara para invertir el orden en que presionara los interruptores. 4. Escriba un programa que haga titilar los LED (cada .2 segundos) cada vez que el pulsador P2 es presionado. Luego, mientras el pulsador P2 est presionado, el LED B1 es apagado cuando el pulsador P1 es presionado (pero el LED B0 an sigue titilando).

QUE APRENDI?

Complete las siguientes oraciones con las palabras de la lista. Microcontroladores necesitan tan _______ para saber que est pasando en el mundo exterior. Usando comandos PBP tales como _____________, nuestro programa puede determinar que tipo de respuesta es la apropiada. Hay una variedad infinita de sensores que pueden ser conectados al PIC. Aunque los interruptores que usamos en este experimento fueron______________ presionndolos, podran fcilmente haber sido los interruptores de las puertas de un ascensor aquellos que evitan que seamos aplastados al cerrarse las puertas. _______________ Son usadas para retener la informacin, permitindole al programa obtener los datos ahora (tal vez de varias entradas diferentes), y ms tarde tomar decisiones en el momento apropiado. Las variables pueden ser _____________, o inicializadas (set up), en 4 tamaos diferentes. Si queremos controlar el estado (alto o bajo) de un_________ en particular, entonces fijamos la variable como un simple bit. Las variables pueden tener hasta 32 caracteres de longitud. Es importante recordar cuando usamos variables, darle un

nombre que tenga relacin con el dato que almacena. La longitud del nombre no tiene influencia en que tan rpido su _________ se ejecuta, pero un nombre muy descriptivo hace mucho ms fcil de ______ su programa. l/0 pin declaradas entradas (o sensores) if in1=0 programa activados debug (depurar) variables La verdadera importancia de los microcontroladores es su habilidad para tomar decisiones basndose en las entradas. Las entradas a los microcontroladores, deben tener un formato digital, pero muchos tipos de situaciones del mundo exterior son analgicas por naturaleza. La tecnologa de los sensores es una de las reas ms desafiantes de la electrnica. Hay cientos de tipos diferentes de sensores en el Transbordador Espacial y en los satlites que l pone en rbita. Mucha gente se especializa en el diseo de sensores que se comunican con microcontroladores. Si a usted le gusta ms trabajar con hardware, en lugar de escribir programas (crear software), ste podra ser un campo muy excitante y an desafiante. Cualquier sistema microcontrolador (o para el caso, computado), depende de las entradas digitales para tomar decisiones correctas. Es importante recordar que las decisiones del microcontrolador son solamente tan buenas como el programa que estn ejecutando, y de la calidad de los sensores de entrada. Cuanto ms mire a su alrededor, ms aplicaciones ver para la tecnologa de sensores y microcontroladores.

CMO PUEDO APLICARLO? Muchas tiendas tienen una especie de timbre en la puerta, que suena cuando uno la atraviesa. Cada vez que el timbre suena, el dueo mira y se fija quin entr. Usando un sensor de proximidad, que detecta la presencia de un objeto, (similar a un botn que est siendo presionado), usted podra detectar cundo alguien atraviesa una puerta. Usando tres sensores, usted podra determinar en qu direccin la estn atravesando. Entonces, usando dos tonos, podramos saber con uno, si alguien est entrando, y con el otro, si alguien est saliendo.

Apndice A:
1. Introduccin a la Ingeniera
1.1 El alumno distinguir el concepto de ingeniera, identificando sus perfiles profesionales y campos ocupacionales Identifique los conceptos de ingeniera 1.1.1 Distingue los conceptos de tcnica, tecnologa, ciencia y disciplina 1.1.2 Distingue las ramas de la ingeniera 1.1.3 Distingue el perfil profesional de un ingeniero 1.1.4 Distingue el campo ocupacional de un ingeniero 1.2 El alumno conceptualizara el trmino de ingeniera y del anlisis del plan de estudios, identificara su programa de formacin y campo ocupacional. 1.2.1 Relacione los antecedentes, conceptos y tendencias de la mecatrnica con la ingeniera 1.2.2 Relacione el programa (plan de estudios) de formacin con el perfil profesional y campo ocupacional 1.2.3 Identifica al menos una funcin, dos competencias y cinco capacidades del ingeniero mecatrnico.

2 Introduccin a los sistemas mecatrnicos

2.1 El alumno identificara los elementos bsicos de un sistema mecatrnico, analizara su funcionamiento al compararlo con las partes de un cuerpo humano 2.1.1 Ejemplifique los conceptos de sistema y sinergia 2.1.2 Identifique los elementos que conforman un sistema mecatrnico 2.1.3 Compare los elementos de un sistema mecatrnico con las partes del cuerpo humano 2.1.4 Distingue un producto y un sistema mecatrnico 2.2 El alumno identificara el funcionamiento y caractersticas bsicas de los elementos que proporcionan informacin del entorno en sistema mecatrnico 2.2.1Identifique el funcionamiento bsico de un elemento de al menos dos tipos de botones pulsadores, tres interruptores y cuatro sensores 2.3 El alumno identificara el funcionamiento y caractersticas de los elementos que ejecutan la accin de control de un sistema mecatrnico 2.3.1 Identifique el funcionamiento de los motores de corriente directa, de corriente alterna, servomotores y a pasos 2.3.2 Identifique el funcionamiento de al menos dos electrovlvulas 2.3.3 Identifique el funcionamiento de al menos dos tipos de lmparas indicadoras y desplegados. 2.4 El alumno identificara el funcionamiento y caractersticas de los elementos que permiten el movimiento a las partes mecnicas de un sistema mecatrnico 2.4.1 Identifique el funcionamiento bsico de un tren de engranes, una banda y polea, una gua lineal, un tornillo auto embalado, una rueda dentada y trinquete y de un sistema de transporte (banda trasportadora) 2.5 El alumno identificara el funcionamiento y caractersticas de los dispositivos que controlan un sistema mecatrnico. 2.5.1 Identifique el funcionamiento bsico de los circuitos digitales basados en compuertas lgicas, dispositivos programables, microprocesadores y microcontroladores 2.5.2 Identifique el funcionamiento bsico de los circuitos de control basados en relevadores y controladores lgicos programables 2.6 El alumno identificara el funcionamiento y caractersticas los dispositivos que acoplan las seales desde y hacia el controlador. 2.6.1 Identifique el funcionamiento bsico de los circuitos acondicionadores de seal y de los circuitos manejadores para actuadores. 2.7 El alumno identificara el funcionamiento y caractersticas de los dispositivos que entregan energa a los sistemas mecatrnicos. 2.7.1 Identifique el funcionamiento bsico de las etapas de una fuente de alimentacin c.d. y c.a.

Apndice B:
REFERENCIA DE DECLARACIONES PBP
@ ASM...ENDASM BRANCH BRANCHL BUTTON CALL CLEAR COUNT DATA DEBUG DISABLE DTMFOUT EEPROM ENABLE END FOR...NEXT FREQOUT GOSUB GOTO HIGH HSERIN HSEROUT I2CREAD
I2CWRITE IF..THEN..ELSE..ENDIF INPUT (LET) LCDOUT LOOKDOWN LOOKDOWN2 LOOKUP LOOKUP2 LOW NAP ON INTERRUPT OUTPUT PAUSE

Inserta una linea de codigo ensamblador Inserta una seccion de codigo ensamblador GOTO computado(equiv. a ON..GOTO) BRANCH fuera de pagina(BRANCH largo) Anti-rebote y auto-repeticion de entrada en el pin especificado Llamada a subrutina de ensamblador Hace cero todas las variables Cuenta el numero de pulsos en un pin Define el contenido inicial en un chip EEPROM Seal asincronica de salida en un pin fijo y baud Deshabilita el procesamiento de ON INTERRUPT Produce tonos en un pin Define el contenido inicial en un chip EEPROM Habilita el procesamiento de ON INTERRUPT Detiene la ejecucion e ingresa en modo de baja potencia Ejecuta declaraciones en forma repetitiva Produce hasta 2 freuencias en un pin Llama a una subrutina BASIC en la etiqueta especificada Continua la ejecucion en la etiqueta especificada Hace alto la salida del pin Entrada serial asincronica(hardware) Salida serial asincronica(hardware) Lee bytes de dispositivo I2C
Graba bytes en dispositivo I2C Ejecuta declaraciones en forma condicional Convierte un pin en entrada Asigna el resultado de una expresion a una variable Muestra caracteres en LCD Busca un valor en una tabla de constantes Busca un valor en una tabla de constantes o variables Obtiene un valor constante de una tabla Obtiene un valor constante o variable de una tabla Hace bajo la salida de un pin Apaga el procesador por un corto periodo de tiempo Ejecuta una subrutina BASIC en un interrupt Convierte un pin en salida Demora (resolucion 1mseg.)

PAUSEUS PEEK POKE POT PULSIN PULSOUT PWM RANDOM RCTIME READ RESUME RETURN REVERSE SERIN SERIN2 SEROUT SEROUT2 SHIFTIN SHIFTOUT SLEEP SOUND STOP SWAP TOGGLE WHILE..WEND WRITE XIN XOUT

Demora (resolucion 1 useg.) Lee un byte del registro Graba un byte en el registro Lee el potenciometro en el pin especificado Mide el ancho de pulso en un pin Genera pulso hacia un pin Salida modulada en ancho de pulso a un pin Genera numero pseudo-aleatorio Mide el ancho de pulso en un pin Lee byte de un chip EEPROM Continua la ejecucion despues de una interrupcion Continua en la declaracion que sigue al ultimo GOSUB Convierte un pin de salida en entrada o uno de entrada en salida Entrada serial asincronica (tipo BS!) Entrada serial asincronica (tipo BS2) Salida serial asincronica (tipo BS1) Salida serial asincronica (tipo BS2) Entrada serial sincronica Salida serial sincronica Apaga el procesador por un periodo de tiempo Genera un tono o ruido blanco en un pin Detiene la ejecucion del programa Intercambia los valores de dos variables Hace salida a un pin y cambia su estado Ejecuta declaraciones mientras la condicion sea cierta Graba bytes a un chip EEPROM Entrada X - 10 Salida X - 10

5.1. @ @ declaracion Cuando se usa al comienzo de una lnea, provee un atajo para insertar una declaracion en lenguaje ensamblador en un programa PBP. Este atajo se puede usar libremente para unir codigo ensamblador con declaraciones PBP. I var byte Rollme var byte For i = 1 to 4 @ rlf _rollme, F: rotar byte a la izquierda una vez next i El atajo @ tambien se puede usar para incluir rutinas en lenguaje ensamblador en otro archivo. Por ejemplo @ Include fp.asm @ resetea a 0 la pgina del registro antes de ejecutar la instruccin en lenguaje ensamblador. La pgina del registro no debe ser alterada usando @ Vea la seccion de programacion del ensamblador para mayor informacion.

5.2. ASM..ENDASM ASM

ENDASM Estas instrucciones le dicen a PBP que el codigo entre estas dos lneas esta en lenguaje ensamblador y no debe ser interpretado como declaraciones PBP. Se puede usar estas dos instrucciones libremente para mezclar cdigo ensamblador con declaraciones PBP. El tamao mximo para una seccin de texto ensamblador es 8 K. Este es el tamao mximo para el fuente actual, incluyendo comentarios, no el cdigo generado. Si el bloque de texto es mayor, divdalo en mltiples secciones ASM... ENDASM o incluyalo en un archivo separado. ASM resetea a 0 el registro de pgina. Debe asegurarse que el registro de pgina sea 0 antes de ENDASM si el cdigo de ensamblador lo ha alterado. Vea la seccin de programacin de ensamblador para ms informacin. ASM Bsf PORTA, 0; setea bit 0 en PORTA Bcf PORTB.0; setea bit 0 en PORTB ENDASM 5.3. BRANCH BRANCH index, [etiqueta {, etiqueta .....}] Causa que el programa salte a una posicin diferente, basada en una variable indexada. Es similar al ON...GOTO de otros BASIC. Index selecciona una etiqueta de una lista .La ejecucion comienza en la etiqueta especificada. Por ejemplo, si Index es 0, el programa salta a la primer etiqueta especificada en la lista, si Index es 1, salta a la segunda y as sucesivamente... Si Index es mayor igual al nmero de etiquetas, no se toma ninguna accin y la ejecucin contina con la declaracin siguiente al BRANCH. Se pueden usar hasta 256 etiquetas en un BRANCH. Etiqueta debe estar en la misma pgina de cdigo que la instruccin BRANCH. Si no est seguro de esto, use BRANCHL. BRANCH B4, [dog, cat, fish] igual que: if B4=0 then dog (goto dog) if B4=1 then cat (goto cat) if B4=2 then fish (goto fish)

5.4. BRANCHL BRANCHL Index, [etiqueta {, etiqueta....}] BRANCHL trabaja en forma similar a BRANCH, haciendo que el programa salte a una localizacin determinada, basndose en una variable indexada. Las principales diferencias son que puede saltar a una etiqueta ubicada en otra pgina de cdigo y que genera un cdigo dos veces mayor en tamao al de BRANCH... Si est seguro que las etiquetas estn en la misma pgina que el BRANCH si el microcontrolador no tiene ms que una pgina de cdigo (2K menos de ROM), use BRANCH para minimizar el uso de memoria. Index selecciona una etiqueta de una lista .La ejecucion comienza en la etiqueta especificada .Por ejemplo, si Index es 0, el programa salta a la primer etiqueta especificada en la lista, si Index es 1, salta a la segunda y as sucesivamente... Si Index es mayor igual al nmero de etiquetas, no se toma ninguna accin y la ejecucin contina con la declaracin siguiente al BRANCHL. Se pueden usar hasta 128 etiquetas en un BRANCHL. BRANCHL B4, [dog, cat, fish] igual que: if B4=0 then dog (goto dog) if B4=1 then cat (goto cat) if B4=2 then fish (goto fish)

5.5. BUTTON BUTTON, Pin, Down, Delay, Rate, Bvar, Action, Etiqueta Lee Pin y opcionalmente ejecuta anti-rebote y auto-repeticin. Pin automticamente se toma como entrada. Pin debe ser una constante, 0 - 15, o una variable que contenga un nmero 0 - 15 (p.ej. B0) un nmero de pin (p.ej. PORTA ,0) Down Estado del pin cuando se oprime el pulsador ( 0 ...1) Contador de ciclos antes de que comience la auto-repeticin (0...255). Si es 0, no se efectua anti-rebote ni auto.repeticin .Si es 255 se eliminan rebotes, pero no auto-repeticin. Valor de auto-repeticin (0..255) Variable con tamao de byte usada internamente para conteo de demoras y repeticiones, Dene ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa. Estado del pulsador a ser actuado. La ejecucin comienza en esta etiqueta si es cierto Action.

Delay

Rate

Bvar

Action Etiqueta

goto notpressed if button not pressed on Pin2 BUTTON PORTB, 2, 0, 100, 10, b2, 0, notpressed BUTTON necesita ser usado dentro de un loop para auto-repeticin para funcionar adecuadamente. BUTTON permite eliminar rebotes, demorando la ejecucin de un programa por un perodo de milisegundos para permitir que los contactos se asienten. La demora por defecto es 10 ms.. Para cambiarlo a otro valor use DEFINE. setea la demora de anti-rebote a 50 ms DEFINE BUTTON_PAUSE 50 BUTTON_PAUSE debe estar en maysculas. En general, es ms fcil leer el estado del pin con un IF. . THEN que usar el comando BUTTON.

IF PORTB, 2 = 1 THEN notpressed

5.6. CALL

CALL etiqueta

Ejecuta la subrutina ensamblador llamada etiqueta. Normalmente se usa GOSUB para ejecutar una subrutina PBP. La principal diferencia entre GOSUB y CALL, es que con sta ltima no se chequea la existencia de etiquetas hasta el momento de ensamblar. Usando CALL se puede acceder a una etiqueta en una seccin de lenguaje ensamblador, lo que es inaccesible mediante PBP. CALL pass ejecuta la subrutina ensamblada, denominada _pass

5.7. CLEAR CLEAR Coloca en cero todos los registros en cada banco. Coloca en cero todas las variables, incluyendo las del sistema.Esto no se hace automticamente al comenzar un programa en PBP, como sucede en BASIC Stamps.Por lo general, las variables deben ser colocadas en un estado inicial apropiado por el programa, y no usando CLEAR. CLEAR Coloca todas las variables en cero

5.8. COUNT COUNT Pin, Period, Var Cuenta el nmero de pulsos en un Pin, durante un perodo Period, y guarda el resultado en Var. Pin es automticamente colocado como entrada. Pin debe ser una constante, 0-15, una variable que contenga un nmero de 0 a 15 (p.ej. B0). un numero de pin. La resolucin de Period est dada en milisegundos. Sigue la frecuencia del oscilador basado en DEFINE OSC. VCOUNT chequea el estado de Pin mediante un loop y cuenta las transiciones de bajo a alto. Con un oscilador de 4 Mhz chequea el estado del pin cada 20 us. Con un oscilador de 20 Mhz chequea el estado cada 4 us. De esto, se infiere que la mayor frecuencia de pulsos que puede ser contada, es de 25 Khz con un oscilador de 4 Mhz y de 125 Khz con un oscilador de 20 Mhz si la frecuencia tiene un ciclo til del 50 % (los tiempos altos son iguales a los bajos). cuenta el nmero de pulsos en Pin1 en 100 ms COUNT PORTB.1, 100, W1 determinar la frecuencia en un Pin COUNT PORTA.2, 1000, W1 contar por 1 segundo Serout PORTB.0, N2400, [W1] 5.9. DATA DATA {@ location,} constante {, constante} Guarda constantes en un chip EEPROM cuando este dispositivo se programa por primera vez. Si se omite el valor opcional location, la primer declaracin de DATA comienza a almacenarse en la direccin 0 y las declaraciones siguientes, en las direcciones siguientes. Si existe un valor location este indica la direccin de comienzo donde se almacenar la informacin. Una etiqueta opcional se le puede asignar a la direccin de comienzo, para futuras referencias del programa. Constante puede ser una constante numrica una sarta de constantes. Solo se guarda el byte menos significativo del valor numrico, excepto que se use el modificador WORD. Las sartas se guardan como bytes consecutivos de valores ASCII. No se agregan terminadores ni se completa el largo. DATA solo funciona con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84 .Dado que el EEPROM es una memoria no-volatil, los datos permanecen intactos an cuando se quite la energa. Los datos se guardan dentro del EEPROM una sola vez en el momento en que se programa el micro controlador, no cada vez que se ejecuta el programa. WRITE se usa para colocar los valores en el EEPROM en el momento de ejecucin. guardar 10,20 y 30 comenzando en la posicin 5 DATA @5, 10, 20, 30 asignar una etiqueta a un word en la prxima ubicacin dlabel DATA word $1234 guarda $34, $12 saltear 4 posiciones y guardar 10 ceros DATA (4), 0 (10) 5.10. DEBUG DEBUG item {, item ...} Envia uno ms items a un pin predefinido con un baud rate predefinido en formato standard asincrnico, usando 8 bits de datos, sin paridad y con 1 bit de parada (stop bit) (8N1) El pin, automticamente se convierte en salida. Si un signo (#) precede a un item, se enva serialmente la representacin ASCII para cada dgito. DEBUG soporta los mismos modificadores de datos que SEROUT2. DEBUG es una de varias funciones seriales asincronicas pre-construidas. Es la ms pequea de las rutinas seriales generadas por software. Puede ser usada para enviar informacin de depuracin (variables, posicin de marcadores, etc).a un programa terminal como HyperTerm. Tambin se puede usar cuando se desee salida serial sobre un pin determinado y con un baud rate determinado. Los pin y baud rate seriales son especificadas usando DEFINEs: Set Debug pin port DEFINE DEBUG_REG PORTB Set Debug pin bit DEFINE DEBUG_BIT 0 Set Debug baud rate DEFINE DEBUG_BAUD 2400 Set Debug mode: 0= cierto, 1= invertido DEFINE DEBUG_MODE 1 DEBUG asume un oscilador de 4 Mhz, cuando est generando su tiempo de bit. Para mantener el tiempo apropiado del baud rate con otros valores de osciladores, asegurese de DEFINE el seteo de OSC al valor de oscilador deseado. En algunos casos, la tasa de transmisin de las instrucciones de DEBUG podran presentar los caracteres demasiado rpidamente al dispositivo receptor. Un DEFINE agrega una demora de caracteres para las transmisiones seriales de salida. Esto permite un tiempo adicional entre los caracteres a medida que son transmitidos. La demora de caracter DEFINE permite un atraso de 1 a 65,535 microsegundos (.001 a 65.535 milisegundos) entre cada carcter transmitido. Por ejemplo, para pausar 1 milisegundo entre la transmisin de cada caracter: DEFINE DEBUG_PACING 1000 Si bien los chips convertidores de nivel RS-232 son comunes y econmicos, gracias a la implementacin de corriente RS-232 y a las excelentes especificaciones I/O del micro PIC; la mayora de las aplicaciones no requieren convertidores de nivel. Se puede usar TTL invertido (DEBUG_MODE =1) Se sugiere un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos).

Enviar el texto B0= seguido por el valor decimal de B0 y un avance de lnea (linefeed) serialmente a la salida DEBUG B0= ,dec B0, 10 5.11. DISABLE DISABLE DISABLE interrumpe el procesamiento siguiente a la instruccin. Pueden ocurrir otras Interrupciones, pero el manipulador de interrupciones del BASIC en el PBP, no se ejecutar hasta que se encuentre un ENABLE. DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador, en lugar de producir cdigo. Vea ON INTERRUPT para ms informacin. DISABLE Deshablita interrupciones en el handler Myint: led = 1 enciende el LED cuando es interrumpido Resume Vuelve al programa principal Enable ENABLE interrumpe despus del handler

5.12. DTMFOUT DTMFOUT Pin, {Onms, Offms,} [Tone {, Tone}] Produce una secuencia DTMF Touch Tone en Pin, Pin automticamente se convierte en salida. Pin debe ser una constante, 0 - 15, una variable que contenga un nmero de 0 a 15 (p.ej. B0) un nmero de pin (p.ej. B0) Onms es el nmero de milisegundos que suena cada tono y Offms es el nmero de milisegundos de pausa entre cada tono .Si no estn especificados, por defecto Onms es 200 ms y Offms es 50 ms. Tones tiene un valor de 0 - 15. Los tonos de 0 - 9 son los mismos que en un teclado telefnico. Tone 10 es la clave *, Tone 11 es la clave #, y los Tones 12 - 15 corresponden a las teclas extendidas A -D. DTMFOUT usa FREQOUT para generar los tonos duales. FREQOUT genera tonos usando una forma de modulacin de ancho de pulso. Los datos en bruto que salen del pin son bastante horribles. Usualmente se necesita algn tipo de filtro para suavizar la seal hasta una forma de onda senoidal quitndole algunas armnicas generadas: DTMFOUT trabaja mejor con un oscilador de 20 Mhz. Tambin puede trabajar con uno de 10 Mhz y an con uno de 4 Mhz, aunque ser muy difcil de filtrar y tendr muy baja amplitud. Cualquier otra frecuencia causar que DTMFOUT genere una frecuencia proporcional al oscilador comparado a 20 Mhz, lo que no ser muy til para enviar touch tones. enviar DTMF tones para 212 en Pin1 DTMFOUT PORTB.1, [ 2, 1, 2 ] 5.13. EEPROM EEPROM {Location,} [constante {, constante ...}] Guarda constantes en un chip EEPROM. Si se omite el valor opcional Location, la primera declaracin se guarda en la direccin 0 del EEPROM y las subsiguientes en las siguientes direcciones del mismo. Si se indica un valor Location, ste indica la direccin de comienzo para guardar los datos. Constante puede ser una constante numrica una sarta de constantes. Solo se guardan los bytes menos significativos de los valores numricos. Las sartas son guardadas como bytes consecutivos d valores ASCII. No se agregan automticamente terminadores, ni se completa el largo. EEPROM solo trabaja con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84. Dado que el EEPROM es una memoria no voltil, los datos permanecern intactos an sin alimentacin. ps datos son guardados en el EEPROM solo una vez, cuando el micro controlador es programado, no cada vez que se ejecuta el programa. Se puede usar WRITE para colocar valores en el EEPROM en el momento de la ejecucin. EEPROM 5, [10, 20, 30] Guardar 10, 20, 30 comenzando en la direccin 5 5.14. ENABLE ENABLE ENABLE interrumpe el procesamiento que fue previamente deshabiliyado con DISABLE, siguiendo a esta instruccin. DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador, en lugar de producir cdigo. Vea ON INTERRUPT para ms informacin. DISABLE Deshablita interrupciones en el handler Myint: led = 1 enciende el LED cuando es interrumpido Resume Vuelve al programa principal Enable ENABLE interrumpe despus del handler 5.15. END END Detiene la ejecucin del proceso y entra en modo de baja potencia .Todos los pins de I/O permanecen en el estado en que se encuentran, END trabaja ejecutando una instruccin SLEEP continua dentro de un loop. Un END, STOP GOTO deben ser colocados al final de un programa para evitar pasar del lmite de la misma u comience nuevamente. END 5.16. FOR... NEXT FOR Count = Start TO End {STEP {-} Inc} {Body} NEXT {Count} El loop FOR... NEXT permite a los programas ejecutar un nmero de declaraciones (Body) un nmero de veces, usando una variable como contador. Debido a su complejidad y versatilidad, es mejor describirla paso a paso. El valor de Start se asigna a la variable ndice, Count, que puede ser una variable de cualquier tipo. Se ejecuta el Body. Body es opcional y puede ser omitido (quizs por un loop de demora). El valor de Inc es sumado a ( restado si se especifica -) Counr. Si no se define una clusula. STEP, se incrementa Count en uno. Si Count no pas End desbord el tipo de variable, la ejecucin vuelve al paso 2). Si el loop necesita contar ms de 255 (Count > 255), se debe usar una variable de tamao word. FOR i=1 TO 10 cuenta de 1 a 10 Serout 0, N2400, [ # i, ] enva cada nmero al pin 0 en forma serial NEXT i vuelve y efecta la prxima cuenta Serout 0, N2400, [10] enva un avance de lnea

FOR B2=20 TO 10 STEP -2 cuenta de 20 a 10 de a 2 Serout 0, N2400, [# B2, ] enva cada nmero al pin0 en forma serial NEXT B2 vuelve y efecta la prxima cuenta Serout 0,N2500,, [ 10 ] enva un avance de lnea 5.17. FREQOUT FREQOUT Pin, Onms, Frequency1 {, Frequency2} Produce la las frecuencias especificadas en el Pin, durante Onms milisegundos. Pin se convierte automticamene en salida. Pin puede ser una constante, 0-15, una variable que contenga un nmero 0 - 15. (p.ej. B0) un nmero de pin (p.ej. PORTA.0). Puede producir una dos frecuencias de 0 a 32767 Hz al mismo tiempo. FREQOUT genera tonos usando una forma de modulacin de ancho de pulso. Los datos en bruto que salen del pin son bastante horribles. Usualmente se necesita algn tipo de filtro para suavizar la seal hasta una forma de onda senoidal quitndole algunas armnicas generadas: FREQOUT trabaja mejor con un oscilador de 20 Mhz. Tambin puede trabajar con uno de 10 Mhz y an con uno de 4 Mhz, aunque ser muy difcil de filtrar y tendr muy baja amplitud. Cualquier otra frecuencia causar que FREQOUT genere una frecuencia proporcional al oscilador comparado a 20 Mhz. FREQOUT PORTB.1, 2000, 1000 Enviar un tono de 1 Khz al Pin1 durante 2 segundos 5.18. GOSUB GOSUB etiqueta Salta a la subrutina indicada en la etiqueta, guardando su direccin de regreso en la pila (stack). A diferencia del GOTO, cuando se llega a un RETURN, la ejecucin sigue con la declaracin siguiente al ltimo GOSUB ejecutado. Se puede usar un nmero ilimitado de subrutinas en un programa y pueden estar anidadas. En otras palabras, las subrutinas pueden llamar a otra subrutina. Cada anidamiento no debe ser mayor de cuatro niveles. GOSUB beep ejecuta la subrutina beep Beep: high 0 enciende el LED conectado a Pin0 Sound 1, [80, 10] hace sonar el parlante conectado a Pin1 Low 0 apaga el LED conectado a Pin0 Return vuelve a la rutina principal 5.19. GOTO GOTO etiqueta La ejecucin del programa contina en la declaracin de la etiqueta. GOTO send salta a la declaracin etiquetada send Send: serout 0, N2400, [ Hi] enva Hi como salida al Pin0 en forma serial 5.20. HIGH HIGH Pin Hace de valor alto el Pin especificado y lo convierte automticamente en salida. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) HIGH 0 convierte Pin0 en salida y lo coloca en valor alto (-5 volt) HIGH PORTA.0 convierte PORTA, Pin0 en salida y lo coloca en valor alto (-5 volt) Led var PORTB. 0 define el pin LED HIGH led convierte el Pin LED en salida y lo coloca en valor alto (-5 volt) Como alternativa, si el pin ya es salida, hay una forma ms rpida y corta de setearlo en valor alto (desde un codigo generado standpoint): PORTB.0 = 1 setea PORTB Pin0 a valor alto. 5.21. HSERIN HSERIN {ParityLabel,} {Timeout, Label,} [Item {. . .}] Recibe uno ms Items de un port serial (de hardware) en dispositivos que soportan comunicaciones seriales asincrnicas por hardware. HSERIN es una de varias funciones seriales asincrnicas pre-construdas. Slo puede ser usada en dispositivos que posean hardware USART. Vea la hoja de datos del dispositivo para informacin de los pin seriales de entrada y otros. Los parametros seriales y el baud-rate son especificados usando DEFINE: coloque el registro receptor en receptor habilitado DEFINE HSER_RCSTA 90h coloque el registro de transmisin en transmisin habilitada DEFINE HSER_TSTA 20h coloque baud rate DEFINE HSER_BAUD 2400 HSERIN asume un oscilador de 4 Mhz cuando calcula el baud rate .Para mantener una relacin de baud rate apropiada con otros valores de oscilador, use DEFINE para especificar el nuevo valor OSC. Timeout y Label pueden ser includos en forma opcional para permitir al programa continuar si un carcter no es recibido dentro de un lmite de tiempo. Timeout est especificado en unidades de 1 milisegundo. El formato por defecto de los datos seriales es 8N1, 8 bits de datos, sin paridad y 1 stop bit. 7E1 (7 bits de datos, paridad par, 1 stop bit) 7 O 1 (7 bits de datos, paridad impar1 stop bit) pueden ser habilitados usando los siguientes DEFINEs: use solo si se desea paridad par DEFINE HSER_EVEN 1 use solo si se desea paridad impar DEFINE HSER_ODD 1 El seteo de paridad igual que todos los DEFINE HSER afectan tanto a HSERIN como a HSEROUT Se puede incluir ParityLabel como opcional en la declaracin. El programa continuar en este punto si se recibe un carcter con error de paridad. Solo debe ser usado si se habilit paridad con un DEFINE anterior. Dado que la recepcin serial se realiza por hardware, no es posible invertir los niveles para eliminar un driver RS - 232. Por esto debe usarse un driver adecuado con HSERIN.

HSERIN soporta los mismos modificadores de datos que SERIN2. Refierase a la seccin de SERIN2 para mayor informacin. HSERIN [B0, dec W1] 5.22. HSEROUT HSEROUT [Item {, Item}] Enva uno ms Items al port serial de hardware en dispositivos que soportan comunicaciones seriales asincrnicas por hardware. HSEROUT es una de varias funciones seriales asincrnicas pre-construdas. Slo puede ser usada en dispositivos que posean hardware USART. Vea la hoja de datos del dispositivo para informacin de los pin seriales de entrada y otros. Los parametros seriales y el baud-rate son especificados usando DEFINE: coloque el registro receptor en receptor habilitado DEFINE HSER_RCSTA 90h coloque el registro de transmisin en transmisin habilitada DEFINE HSER_TSTA 20h coloque baud rate DEFINE HSER_BAUD 2400 HSEROUT asume un oscilador de 4 Mhz cuando calcula el baud rate. Para mantener una relacin de baud rate apropiada con otros valores de oscilador, use DEFINE para especificar el nuevo valor OSC. El formato por defecto de los datos seriales es 8N1, 8 bits de datos, sin paridad y 1 stop bit. 7E1 (7 bits de datos, paridad par, 1 stop bit) 7 O 1 (7 bits de datos, paridad impar, 1 stop bit) pueden ser habilitados usando los siguientes DEFINEs: use solo si se desea paridad par DEFINE HSER_EVEN 1 use solo si se desea paridad impar DEFINE HSER_ODD 1 El seteo de paridad igual que todos los DEFINE HSER afectan tanto a HSERIN como a HSEROUT Dado que la recepcin serial se realiza por hardware, no es posible invertir los niveles para eliminar un driver RS - 232. Por esto debe usarse un driver adecuado con HSEROUT. HSEROUT soporta los mismos modificadores de datos que SEROUT2. Refirase a la seccin de SEROUT2 para mayor informacin. enviar el valor decimal de B0 seguido por un linefeed a travs del USART HSEROUT [dec B0, 10] 5.23. I2CREAD Copyright 2001 microEngineering Labs, Inc.All rights reserved. I2CREAD DataPin, ClockPin, Control, {Address,} [Var {, Var ...}] {. Label} Enva los bytes de Control y opcionalmente los de Address, a travs del ClockPin y el DataPin y guarda los bytes recibidos dentro de Var. ClockPin y dataPin pueden ser constantes, 0-15, una variable que contenga un nmero (p.ej. B0), un nmero de Pin (p.ej. PORTA.0) I2CREAD y I2CWRITE pueden ser usados para leer y grabar datos de un EEPROM serial usando una interfase I2C de 2 cables, como Microchip 24LC01B similar. Esto permite guardar datos en una memoria externa no voltil, para que sean mantenidos an sin energa conectada. Estos comandos funcionan en modo I2C master y tambin son usados para comunicarse con otros dispositivos con interfase I2C, como sensores de temperatura y convertidores A/D. Los 7 bits superiores del byte de Control contienen el cdigo de control junto con la seleccin del chip e informacin adicional de direccin., dependiendo de cada dispositivo .El bit inferior es una bandera interna que indica si es un comando de lectura escritura y no se debe usar. Este formato para el byte de Control es diferente al usado por el PBP original. Asegrese de usar este formato en operaciones PBP I2C. Por ejemplo, cuando comunicamos con un 24LC01B, el cdigo de control es %1010 y no se usa la seleccin de chip, por lo que el byte de Control ser %10100000 $A0. Algunos formatos de Control son:

Dispositivo 24LC01B 24LC02B 24LC04B 24LC08B 24LC16B 24LC32B 24LC65

Capacidad 128 bytes 256 bytes 512 bytes 1 Kbytes 2 Kbytes 4 Kbytes 8 Kbytes

Control %1010xxx0 %1010xxx0 %1010xxb0 %1010xbb0 %1010bbb0 %1010ddd0 %1010ddd0

Tamao direccin 1 byte 1 byte 1 byte 1 byte 1 byte 2 bytes 2 bytes

bbb = bits de seleccin de block (direcciones de orden alto) ddd = bits de seleccin de dispositivo xxx = no importa El tamao de direccin enviado (byte word) es determinado por el tamao de la variable usada. Si se usa una variable con tamao byte se enva una direccin de 8 bits.Si se enva una variable de tamao word, se enva una direccin de 16 bits. Asegrese de usar una variable apropiada al dispositivo a comunicar. Si se especifica Var con tamao word, se leen 2 bytes y se guarda primero el de mayor orden y luego el de orden inferior dentro de Var. Este orden es el inverso al que se osa normalmente con variables. Si se usa la opcin Label, se saltar a ella, si no se recibe un reconocimiento del dispositivo I2C. Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx. Simplemente especifique los nombres de pin de las lneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa.

DEFINE I2C_INTERNAL 1 Vea las hojas de datos de Microchip para ms indormacin. El tiempo de las instrucciones I2C es tal que los dispositivos de velocidad standard (100 Khz) pueden ser accedidos a velocidad de clock de hasta 8 Mhz. Dispositivos rpidos (400 Mhz) pueden ser usados hasta 20 Mhz. Si se desea acceder un dispositivo de velocidad standard a 8 Mhz, se debe usar el siguiente DEFINE en el programa: DEFINE I2C_SLOW 1 El clock I2C y las lneas de datos pueden ser empujados a Vcc con un resistor de 4-7 K de acuerdo al siguiente esquema, ya que ambos trabajan en modo de colector abierto. addr var byte cont con %10100000 addr =17 coloca la direccin en 17 lee datos de la direccin 17 y los deja en B2 I2CREAD PORTA.0, PORTA. 1, cont, addr, [B2] Vea el libro Microchip NON VOLATILE MEMORY PRODUCTS para mayor informacin de este otros dispositivos que pueden ser usados con los comandos I2CREAD y I2CWRITE. 5.24. I2CWRITE I2CWRITE DataPin, ClockPin, Control, {Address,} [Value {, Value ...}] {. Label} Enva los bytes de Control y opcionalmente los de Address, a travs del ClockPin y el DataPin seguidos por Value. ClockPin y DataPin pueden ser constantes, 0-15, una variable que contenga un nmero (p.ej. B0), un nmero de Pin (p.ej. PORTA.0) El tamao de direccin enviado (byte word) es determinado por el tamao de la variable usada. Si se usa una variable con tamao byte se enva una direccin de 8 bits. Si se enva una variable de tamao word, se enva una direccin de 16 bits. Asegrese de usar una variable apropiada al dispositivo a comunicar. Cuando se escribe un EEPROM serial, es necesario esperar 10 ms (dependiendo del dispositivo) para completar la grabacin, antes de intentar comunicarse nuevamente con el dispositivo. Si se intenta un I2CWRITE I2CREAD antes que se complete la grabacin, se ignorar el acceso. Aunque una sola declaracin I2CWRITE puede ser usada para grabar mltiples bytes simultaneamente, se puede violar los requerimientos de tiempo de grabacin para los EEPROM seriales. Algunos permiten grabar mltiples bytes en una pgina simple antes de necesitar una espera. Revise la hoja de datos del dispositivo que est usando. La opcin de grabacin mltiple puede ser til con dispositivos I2C que no deban esperar entre grabaciones. Si se usa la opcin Label, se saltar a ella, si no se recibe un reconocimiento del dispositivo I2C. Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx. Simplemente especifique los nombres de pin de las lneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa. DEFINE I2C_INTERNAL 1 Vea las hojas de datos de Microchip para ms indormacin. El tiempo de las instrucciones I2C es tal que los dispositivos de velocidad standard (100 Khz) pueden ser accedidos a velocidad de clock de hasta 8 Mhz. Dispositivos rpidos (400 Mhz) pueden ser usados hasta 20 Mhz. Si se desea acceder un dispositivo de velocidad standard a 8 Mhz, se debe usar el siguiente DEFINE en el programa: DEFINE I2C_SLOW 1 Vea el siguiente comando I2CREAD addr var byte cont con %10100000 addr =17 coloca la direccin en 17 enva el byte 6 a la direccin 17 I2CWRITE PORTA. 0, PORTA.1, con, addr, [6] Pause 10 espera 10 ms que se complete la grabacin addr =1 coloca la direccin en 1 enva el byte en B2 a la direccin 1 I2CWRITE PORTA.0, PORTA.1, cont, addr, [B2 ] Pause 10 espera 10 ms que se complete la grabacin 5.25 IF...THEN IF Comp {AND/OR Comp ...} THEN Label IF Comp {AND/OR Comp ...} THEN Declaracin ELSE Declatacin ENDIF Efecta una ms comparaciones. Cada trmino Comp puede relacionar una variable con una constante otra variable e incluye uno de los operadores listados anteriormente. IF... THEN evala la comparacin en trminos de CIERTO o FALSO. Si lo considera cierto, se ejecuta la operacin posterior al THEN. Si lo considera falso, no se ejecuta la operacin posterior al THEN. Las comparaciones que dan 0 se consideran falso. Cualquier otro valor es cierto. Todas las comparaciones son sin signo, ya que PBP solo soporta operaciones sin signo. Asegurese de usar parntesis para especificar el orden en que se deben realizar las operaciones. De otra manera, la prioridad de los operadores lo determina y el resultado puede no ser el esperado. IF...THEN puede operar de dos maneras. De una forma, el THEN en un IF... THEN es esencialmente un GOTO. Si la condicin es cierta, el programa ir hacia la etiqueta que sigue al THEN. Si la condicin es falsa, el programa va a continuar hacia la prxima lnea despus del IF...THEN. Otra declaracin no puede ser puesta despus del THEN; sino que debe ser una etiqueta. If Pin0 = 0 Then pushd si el botn conectado al pin 0 es oprimido (0), salta a la etiqueta pushd If B0 >=40 Then old si el valor en la variable B0 es mayor igual a 40, salta a old If PORTB.0 Then itson si PORTB, pin 0 es alto (1), salta a itson If (B0 = 10) AND (B1 = 20) Then loop En la segunda forma, IF...THEN puede ejecutar condicionalmente un grupo de declaraciones que sigan al THEN. Las declaraciones deben estar seguidas por un ELSE o un ENDIF para completar la estructura.

If B0 <> 10 Then B0 = B0 + 1 B1 = B1 - 1 Endif If B0 = 20 Then led = 1 Else led = 0 Endif

5.26. INPUT INPUT Pin. Convierte el Pin especificado en una entrada. Pin debe ser una constante, 0-15, o una variable que contenga un nmero 0-15 (p. ejj., B0) o el nombre de un pin (p. ej., PORTA.0). INPUT 0 convierte el Pin0 en entrada INPUT PORTA.0 convierte el PORTA, pin 0 en entrada En forma alternativa, el pin puede ser colocado como entrada de una forma ms rpida y corta (desde un cdigo generado standpoint): TRISB.0 =1 Setea el PORTB, pin 0 como entrada Todos los pins en un port pueden ser colocados como entradas seteando el registro TRIS completo de una sola vez: TRISB = %11111111 Setea todo el PORTB como entrada 5.27. {LET} {LET} Var = Value Asigna un Value a una Variable. El Value puede ser una constante, otra variable o el resultado de una expresin. Refirase a la seccin previa acerca de operadores para ms informacin. La palabra clave LET, por s misma, es opcional. LET B0 = B1 * B2 + B3 B0 = Sqr W1 5.28. LCDOUT LCDOUT Item {, Item...} Muestra Items en un visor de cristal lquido inteligente (LCD). PBP soporta mdulos LCD con un controlador Hitachi 44780 o equivalente. Estos LCD, usualmente, tienen un cabezal de 14 o 16 pins simples o duales en un extremo. Si el signo (#) est colocado antes de un Item, la representacin ASCII para cada dgito es enviada al LCD. LCDOUT tambin puede usar cualquiera de los modificadores usados con SEROUT2. Vea la seccin de SEROUT2 para ms informacin. Un programa debe esperar, por lo menos, medio segundo antes de enviar el primer comando a un LCD. Puede tomar bastante tiempo a un LCD arrancar. Los comandos son enviados al LCD, enviando un $FE seguido por el comando. Algunos comandos tiles se muestran en la siguiente tabla:

Comando $FE, 1 $FE, 2 $FE, $0C $FE, $0E $FE, $0F $FE, $10 $FE, $14 $FE, $C0

Operacin Limpia visor Vuelve a inicio (comienzo de la primera lnea) Cursor apagado Subrayado del cursor activo Parpadeo del cursor activo Mueve cursor una posicin hacia la izquierda Mueve cursor una posicin hacia la derecha Mueve cursor al comienzo de la segunda lnea

Note que hay un comando para mover el cursor al comienzo de la segunda lnea en un visor de dos lneas. Para muchos LCD, los caracteres y lneas mostrados no son consecutivos en la memoria del visor - puede haber un salto entre las localizaciones. Para muchos visores 16x2, la primera lnea comienza en $0 y la segunda, en $40. El comando: LCDOUT $FE, $C0 Hace que el visor comience a escribir caracteres en el principio de la segunda lnea. Los visores 16x1 usualmente estn formateados como visores de 8x2, con un salto entre las locaciones de memoria para los primeros y segundos caracteres de 8. Los visores de 4 lneas, tambin tienen un mapa de memoria no ordenado. Vea la hoja de datos para el dispositivo LCD, en particular el que usted est usando, para las locaciones de memoria de caracter y comandos adicionales. LCDOUT $FE, 1, Hello limpia el visor y muestra Hello LCDOUT B0, #B1 El LCD puede estar conectado al micro Pic, usando un bus de 4 bit o uno de 8 bit. Si se usa un bus de 8 bit, todos los 8 bits deben estar en un port. Si se usa un bus de 4 bit, debe estar conectado o a los 4 bit inferiores o a los 4 bit superiores de un port. Enable y Register Select deben estar conectados a algn pin del port. R/W debe estar colocado a tierra, ya que el comando de LCDOUT solamente es de grabacin. PBP supone que el LCD est conectado a pins especficos, a menos que se le diga de otra manera. Asume que el LCD va a ser usado con un bus de 4 bits, con las lneas de data DB4 - DB7 conectadas en el micro Pic a PORTA.0 - PORTA.3, Register Select a PORTA.4 y Enable a PORTB.3. Adems, inicializa el LCD como un visor de dos lneas. Para cambiar este seteo, coloque uno o ms de los siguientes DEFINEs, todos en maysculas, en el comienzo de su programa PBP:

Setea el port de datos LCD DEFINE LCD_DREG PORTB Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit DEFINE LCD_DBIT 0 Setea el port LCD Register Select DEFINE LCD_RSREG PORTB Setea el bit LCD Register Select DEFINE LCD_RSBIT 4 Setea el port LCD Enable DEFINE LCD_EREG PORTB Setea el bit LCD Enable DEFINE LCD_EBIT 5 Setea el tamao del bus LCD (4 o 8 bits) DEFINE LCD_BITS 4 Setea el numero de lineas en el LCD DEFINE LCD_LINES 2 Este seteo, le dir a PBP que hay conectado un LCD de 2 lneas en modo de 4 bit con el bus de datos en los 4 bit inferiores de PORTB, Register Select en el PORTB.4, y Enable en el PORTB.5. El siguiente esquema muestra una forma de conectar un LCD a un micro Pic: 5.29. LOOKDOWN LOOKDOWN Search, [Constant {, Constant...}], Var La declaracin LOOKDOWN busca en una lista de 8 bit los valores Constant que coincidan con un valor Search. Si se encuentra, el ndice de la constante es guardado en Var as, si el valor es el primero de la lista, Var = 0. Si es el segundo, Var = 1 y as, sucesivamente. Si no se encuentra, no se toma ninguna accin y Var permanece sin cambios. La lista de constantes puede ser una mezcla de constantes numricas y sartas. Cada carcter en una sarta es tratado como una constante separada con el valor del carcter ASCII. Las variables de array con ndice variable no pueden ser usadas en LOOKDOWN, aunque variables de array con ndice constantes son permitidas. Serin 1, N2400, B0 Obtiene un carcter hexadecimal de pin1 en forma serial LOOKDOWN B0, [0123456789ABCDEF], B1 Convierte el carcter hexadecimal en B0 a un valor decimal B1 Serout 0, N2400, [#B1] Enva un valor decimal a pin0 en forma serial 5.30. LOOKDOWN2 LOOKDOWN2 Search, {Test} [Value {, Value...}], Var La declaracin LOOKDOWN2 busca un valor Search en una lista de Values. Si lo encuentra, el ndice de la constante es guardado en Var as, si el valor es el primero de la lista, Var = 0. Si es el segundo, Var = 1 y as, sucesivamente. Si no se encuentra, no se toma ninguna accin y Var permanece sin cambios. El parmetro opcional Test puede ser usado para efectuar una busqueda distinta a la igualdad (=).Por ejemplo, se puede buscar el primer Value que sea mayor que el parmetro Search usando (> ), Si no se indica nada, se asume (=). La lista de Values puede ser una mezcla de constantes numricas y sartas en 16 bits y variables. Cada carcter en una sarta es tratado como una constante separada con el valor del carcter ASCII. No se pueden usar expresiones en una lisia de Values, aunque pueden ser usadas como valor Search Las variables de array con ndice variable no pueden ser usadas en LOOKDOWN2, aunque variables de array con ndice constantes son permitidas. LOOKDOWN2 genera un cdigo 3 veces ms grande que LOOKDOWN. Si la lista consiste solamente de constantes y sartas de 8 bits, use LOOKDOWN. LOOKDOWN2 W0, [512, W1, 1024], B0 LOOKDOWN2 W0, < [10, 100, 1000], B0 5.31. LOOKUP LOOKUP Index, [Constant {, Constant...}], Var LOOKUP puede ser usado para obtener valores de una tabla de constantes de 8 bits, Si Index es cero, Var toma el valor de la primer Constant. Si Index es 1, Var toma el valor de la segunda Constant y as sucesivamente. Si Index es mayor igual que el nmero de entradas en la lista de constantes, no se toma ninguna accin y Var permanece sin cambios. La lista de constantes puede ser una mezcla de constantes numricas y sartas. Cada carcter en una sarta es tratado como una constante separada con el valor del carcter ASCII. Las variables de array con ndice variable no pueden ser usadas en LOOKUP, aunque variables de array con ndice constantes son permitidas. For B0=0 to 5 cuenta de 0 a 5 LOOKUP B0, [Hello ], B1 obtiene el carcter B0 de la sarta y lo deja en B1 Serout 0, N2400, [B1] enva el carcter en B1 al Pin0 en forma Serial Next B0 va al segundo carcter

5.32. LOOKUP2 LOOKUP2 Index, [Value [, Value...}], Var LOOKUP2 puede ser usado para obtener entradas de una tabla de Values, Si Index es cero, Var toma el valor del primer Value. Si Index es 1, Var toma el valor del segundo Value y as sucesivamente. Si Index es mayor igual que el nmero de entradas en la lista, no se toma ninguna accin y Var permanece sin cambios. La lista de Values puede ser una mezcla de constantes numricas y sartas en 16 bits y variables. Cada carcter en una sarta es tratado como una constante separada con el valor del carcter ASCII. No se pueden usar expresiones en una lisia de Values, aunque pueden ser usadas como valor Index Las variables de array con ndice variable no pueden ser usadas en LOOKUP2, aunque variables de array con ndice constantes son permitidas. LOOKUP2 genera un cdigo 3 veces ms grande que LOOKUP. Si la lista consiste solamente de constantes y sartas de 8 bits, use LOOKUP. LOOKUP2 B0, [256, 512, 1024], W1

5.33. LOW LOW Pin

Coloca el pin especificado en valor bajo y automticamente lo convierte en salida. Pin puede ser una xonstante, 0-15, +o una variable que contenga un nmero 0-15 (p.ej. B0) un nombre de pin (p.ej. PORTA.0) LOW 0 Coloca el Pin9 en salida y nivel bajo (9 volt) LOW PORTA. 0 Coloca PORTA.0 como salida y en nivel bajo (0 volt) Led var PORTB. 0 define un pin LED LOW led coloca el pin LED como salida y en valor bajo (0 volt) Si el pin ya es una salida, es ms rpido corto usar un cdigo ya generado: PORTB.0 = 0 coloca en nivel bajo el pin0 de PORTB 5.34. NAP NAP Period Coloca al micro controlador en modo de baja potencia por perodos de tiempo reducidos. Durante este NAP, se reduce al mnimo el consumo de energa. Los perodos indicados son solo aproximados, porque el tiempo se deriva del Watchdog Timer que est controlado por R/C y puede variar de chip a chip y tambin con la temperatura. Como NAP usa el Watchdog Timer es independiente de la frecuencia del oscilador. Period 0 1 2 3 4 5 6 7 Demora (aprox.) en milisegundos 18 36 72 144 288 576 1152 2304

NAP 7 pausa en baja potencia por aprox. 2, 3 segundos

5.35. ON INTERRUPT ON INTERRUPT GOTO Label Permite el manejo de las interrupciones del micro controlador por medio de una subrutina PBP. Existen dos formas de manejar interrupciones usando PBP. La primera es escribir una subrutina de interrupcin en LEnguaje ensamblador. Esta es la forma de manejar interrupciones con la menor latencia y el menor overhead .Este mtodo se discute ms adelante, en la seccin avanzada. El segundo mtodo es escribir un handler (manejador) de interrupciones PBP. Es similar a una subrutina PBP, pero termina con un RESUME. Cuando ocurre una interrupcin, se marca con una bandera. Cuando la ejecucin de la declaracin PBP que se estaba ejecutando termina, el programa salta al handler de interrupciones indicado en Label. Una vez que termina el trabajo del handler, una declaracin RESUME enva el programa de vuelta a donde estaba cuando ocurri la interrupcin, tomando todo como lo dej. DISABLE y ENABLE permiten que distintas secciones de un programa PBP se ejecuten sin la posibilidad de ser interrumpidas. El lugar ms notorio para usar DISABLE es justo antes del actual handler de interrupciones. O el handler puede ser colocado antes que la declaracin ON INTERRUPT ya que la bandera de interrupciones no se chequea antes del primer ON INTERRUPT en un programa. Latencia es el tiempo entre el pedido de interrupcin y el momento en que se ingresa en el handler de interrupciones. Como las declaraciones de PBP no son reentrantes (p.ej. no se puede ejecutar una declaracin mientras se est ejecutando una anterior), puede existir una latencia considerable hasta que se ingrese a la rutina de interrupciones. PBP no ingresar al handler BASIC de interrupciones hasta que haya terminado de ejecutar la declaracin en curso. Si la declaracin es PAUSE SERIN, puede demorarse bastante hasta que sea reconocida la interrupcin. Se debe disear el programa tomando en cuenta esta latencia. Si esta es inaceptable y las interrupciones deben ser manejados ms rapidamente, se debe usar una rutina en lenguaje ensamblador. Overhead es otro tema. ON INTERRUPT agregar una instruccin despus de cada declaracin, para chequear si ocurre no una interrupcin. DISABLE elimina la posibilidad de usar esta instruccin y ENABLE la habilita. Normalmente, las instrucciones adicionales no son un problema, pero programas largos en pequeas computadoras si lo son. Se puede usar ms de un ON INTERRUPT en un programa: ON INTERRUPT GOTO myint el handler de interrupciones es myint INTCON = %10010000 habilita la interrupcin RB0 ........ DISABLE deshabilita las interrupciones en el Handler Myint: led=1 enciende el LED con una interrupcin RESUME vuelve al programa principal ENABLE habilita las interrupciones despus del Handler Para deshabilitar permanentemente las interrupciones ( hasta que se necesiten), una vez que se us ON INTERRUPT, coloque INTCON en $80 INTCON = $80 5.36. OUTPUT OUTPUT Pin Convierte el pin especificado en salida... Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) OUTPUT 0 convierte pin 0 en salida OUTPUT PORTA.0 convierte PORTA pin 0 en salida En forma alternativa, el pin puede ser convertido en salida de una manera ms rpida y corta (con un cdigo generado standpoint).

TRISB.0 = 0 setea PORTB pin 0 como salida Tofos los pins de un port pueden ser seteados simultaneamente como salida usando el registro TRIS completo: TRISB = %00000000 setea todos los pins de PORTB como salidas 5.37. PAUSE PAUSE Period Detiene el programa por Period milisegundos .Period tiene 16 bit, por lo que los retardos pueden ser de hasta 65.535 milisegundos. (Un poco ms de 1 minuto). No coloca el micro controlador en modo de baja potencia como las otras funcion de retardo (NAP y SLEEP). Inclusive, consume mayor potencia, pero es ms exacto. Tiene la misma precisin que el clock. PAUSE asume la frecuencia de 4 Mhz del oscilador. Si se usa un oscilador de otra frecuencia, se debe indicar usando el comando DEFINE OSC. Vea la seccin sobre velocidad para mayores detalles. PAUSE 1000 demora de 1 segundo 5.38. PAUSEUS PAUSEUS Period Detiene el programa por Period milisegundos. Period tiene 16 bit, por lo que los retardos pueden ser de hasta 65.535 milisegundos. No coloca el micro controlador en modo de baja potencia como las otras funciones de retardo (NAP y SLEEP). Inclusive, consume mayor potencia, pero es ms exacto. Tiene la misma precisin que el clock. PAUSE tiene un nmero mnimo de ciclos para operar. Como depende de la frecuencia del oscilador, no es posible obtener demoras menores a un nmero mnimo de microsegundos usando PAUSEUS. Para obtener demoras precisas, menores que esto use una rutina ensambladora tipo ASM...ENDASM. La tabla siguiente muestra el nmero mnimo de microsegundos obtenible para una determinada frecuencia de oscilador. OSC 3(3.58) 4 8 10 12 16 20 Demora mnima 20us 24us 12us 8us 7us 5us 3us

PAUSEUS asume la frecuencia de 4 Mhz del oscilador. Si se usa un oscilador de otra frecuencia, se debe indicar usando el comando DEFINE OSC. Vea la seccin sobre velocidad para mayores detalles. PAUSEUS 1000 demora de 1 segundo 5.39. PEEK PEEK Address, Var Lee el registro del micro controlador en la direccin Address especificada y guarda la lectura en Var. Opciones especiales del microPIC, como convertidores A/D y ports adicionales pueden ser ledos usando PEEK. PEEK y POKE permiten acceso directo a los registros del microPIC incluyendo PORTA, PORTB, PORTC, PORTD, PORTE y sus registros asociados de direccin de datos (TRIS). PEEK y POKE operan en todos los bits de un registro simultaneamente. Cuando se hace un POKE de datos a PORTA, se actualiza el port completo, no solamente un bit individual. PEEK, PORTA, B0 toma el estado actual de PORTA y lo coloca en B0 PBP puede acceder directamente a registros y bits sin necesidad de utilizar PEEK y POKE. Se recomienda usar el acceso directo y no PEEK y POKE. B0 = PORTA toma el estado actual de PORTA y lo coloca en B0 5.40. POKE POKE Address, Value Graba Value en el registro del micro controlador en la direccin Address especificada. Opciones especiales del microPIC, como convertidores A/D y ports adicionales pueden ser ledos usando PEEK. POKE $85, 0 graba 0 en el registro 85 hexadecimal (setea todo PORTA como salidas) PBP puede acceder directamente a registros y bits sin necesidad de utilizar PEEK y POKE. Se recomienda usar el acceso directo y no PEEK y POKE. TRISA = 0 setea todo PORTA como salidas) PORTA.0 = 1 setea alto el bit 0 de PORTA 5.41. POT POT Pin, Scale, Var Lee un potencimetro ( otro dispositivo resistivo) en Pin. Pin puede ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) La resistencia se mide tomando el tiempo de descarga de un capacitor a travs de un resistor (5 K a 50 K). Scale se usa para ajustar distintas constantes RC. Para constantes RC grandes, Scale debe ser baja (valor mnmo 1). Para constantes RC pequeas, Scale debe ser mxima (255). Si el valor de Scale es correcto, Var debe ser cero para mnma resistencia y 255 para mxima resistencia. Desafortunadamente, Scale debe ser determinada en forma experimental. Para sto, coloque el dispositivo a medir en mxima resistencia y midalo con Scale=255. En estas condiciones, Var tendr un valor apropiado de Scale. (Este es el mismo tipo de proceso que efecta la opcin ALT-P en BS1). POT, 3, 255, B0 lee el potencimetro en pin 3 para determinar Scale Serout 0, N2400, [#B0] envia el valor del potenciometro en forma serial al pin 0 5.42. PULSIN PULSIN Pin, State, Var

Mide el ancho del pulso en Pin. Si State es cero se mide el ancho de un pulso bajo. Si State es uno, se mide el ancho de un pulso alto. El ancho medido se coloca en Var. Si el flanco del pulso no llega, el ancho del pulso es demasiado grande para ser medido, Var=0. Si se usa una variable de 8 bit, solo se usan los bits menos significativos de la medicin de 16 bits. Pin puede ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) La resolucin de PULSIN depende de la frecuencia del oscilador. Si se usa un oscilador de 4 Mhz, el ancho de pulso se obtiene en incrementos de 10 us. Si se usa un oscilador de 20 Mhz, el ancho de pulso tendr una resolucin de 2 us. Definir un valor de OSC no tiene efectos sobre PULSIN. La resolucin siempre cambia con la velocidad del oscilador en uso. mide el pulso alto en pin 4 guardado en W3 PULSIN PORTB.4, 1, W3 5.43. PULSEOUT PULSEOUT Pin, Period Genera un pulso en Pin, con un Period especificado. El pulso se genera activando dos veces el pin, por lo que la polaridad del pulso depende del estado inicial del pin. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) La resolucin de PULSOUT depende de la frecuencia del oscilador. Si se usa un oscilador de 4 Mhz, el Period del pulso generado estar en incrementos de 10 us .Si se usa un oscilador de 20 Mhz, Period una resolucin de 2 us .Definir un valor de OSC no tiene efectos sobre PULSOUT. La resolucin siempre cambia con la velocidad del oscilador en uso. envia un pulso de 1 mseg.a pin 5 (a 4 Mhz) PULSOUT PORTB.5, 100

5.44. PWM PWM Pin, Duty, Cycle Enva un tren de pulsos modulados en ancho a Pin. Cada ciclo de PWM est compuesto de 256 pasos. El ciclo til Duty para cada ciclo vara de 0 (0%) a 255 (100%= .El ciclo PWM es repetido Cycle veces. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) Cycle depende de la frecuencia del oscilador. Con un oscilador de 4 Mhz, cada Cycle ser de aproximadamente 5 mseg. De largo. Con un oscilador de 20 Mhz el largo aproximado ser de 1 mseg. Definir un valor de OSC no tiene efecto sobre PWM. El tiempo de Cycle siempre cambia con la velocidad del oscilador en uso. Pin se convierte en salida justo antes de la generacin del pulso y vuelve a ser entrada, cuando cesa. La salida de PWM en un pin tiene mucho ruido, y no tiene forma de onda cuadrada. Es necesario usar algn tipo de filtro para convertirla en algo til. Un circuito R/C se puede usar como un simple convertidor D/A. PWM PORTB.7, 127, 100 enva una seal PWM con un ciclo til del 50% al pin 7, durante 100 ciclos

5.45. RANDOM RANDOM Var Efecta una iteracin pseudo-aleatoria en Var. Var debe ser una variable de 16 bit. No se pueden usar variables de array con ndice variable, pero se permite usar variables de array con ndice constante. Var se usa tanto como origen, como para guardar el resultado. El algoritmo pseudo-aleatorio usado tiene un paso de 65535 (el nico nmero que no produce es el cero). RANDOM W4 coloca un nmero aleatorio en W4

5.46. RCTIME RCTIME Pin, State, Var. Mide el tiempo que un Pin permanece en un estado State determinado Bsicamente es la mitad de un PULSIN. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) RCTIME puede usarse para leer un potencimetro ( cualquier dispositivo resistivo). La resistencia puede ser medida descargando un capacitor a travs de un resistor (5 K a 50 K) y midiendo el tiempo de carga ( viceversa). La resolucin de RCTIME depende de la frecuencia del oscilador. Si se usa un oscilador de 4 Mhz, el tiempo estar en incrementos de 10 us. Si se usa un oscilador de 20 Mhz, el tiempo tendr una resolucin de 2 us. Definir un valor de OSC no tiene efectos sobre PULSOUT. La resolucin siempre cambia con la velocidad del oscilador en uso. Si el pin no cambia de estado, se devuelve 0 Low PORTB.3 descarga el capacitor para comenzar Pause 10 descarga por 10 mseg. RCTIME PORTB.3, 0, W0 lee el potencimetro en pin 3

5.47. READ READ Address, Var Lee el EEPROM incorporado en la direccin Address, y guarda el resultado en Var. Esta instruccin solo puede ser usada con un microPIC que tenga un EEPROM incorporado como el PIC16F84 PIC16C84 READ 5, B2 coloca en B2 el valor de la direccin 5 del EEPROM

5.48. RESUME RESUME {Label} Vuelve al lugar del programa que se abandon, despus que termina de procesarse una interrupcin. RESUME es similar a RETURN, pero es usado al final de un handler de interrupciones PBP. Si se usa el Label opcional, la ejecucin del programa va a continuar en este Label y no donde estaba el programa cuando ocurri la interrupcin .En este caso, cualquier otra direccin de retorno, no ser accesible. Vea ON INTERRUPT para mayor informacin. Clockint: seconds=seconds+1 cuenta tiempo RESUME vuelve al programa despus de la Interrupcin error: high errorled enciende el led de error RESUME restart vuelve a algun otro lugar

5.49. RETURN RETURN Vuelve desde una subrutina. Retoma la ejecucin en la declaracin que sigue al GOSUB que llam la subrutina. Gosub sub1 va a la subrutina denominada sub1

... sub1: serout 0, N2400, [Lunch] envia Lunch al pin 0 en forma serial RETURN vuelve al programa principal despues del gosub

5.50. REVERSE: REVERSE Pin Si Pin es entrada, lo convierte en salida. Si es salida, lo convierte en entrada. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) Output 4 convierte pin 4 en salida REVERSE 4 cambia pin 3 a entrada

5.51. SERIN: SERIN Pin, Mode, {Timeout, Label,} {[Qual...],} {Item...} Recibe uno ms Items en Pin, en formato standard asincrnico, usando 8 bit de datos, sin paridad y un stop bit (8N1). SERIN es similar al comando Serin de BS1 con el agregado de Timeout. Pin automaticamente se convierte en entrada. Pin puede ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) Los nombres Mode (p.ej. T2400) estn definidos en el archivo MODEDEFS.BAS. Para usarlos, agregue la lnea: Include modedefs.bas al comienzo del programa PBP. BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS. No lo incluya, si ya est usando alguno de estos archivos. Los nmeros Mode pueden ser usados sin incluir este archivo. Mode T2400 T1200 T9600 T300 N2400 N1200 N9600 N300 Mode N 0 1 2 3 4 5 6 7 Baud rate 2400 1200 9600 300 2400 1200 9600 300 FALSO State CIERTO

Timeout y Label son opciones que pueden ser includas para permitir al programa continuar si no se recibe un carcter durante un cierto tiempo. Timeout est especificado en unidades de 1 milisegundo. La lista de Items de datos a ser recibida puede estar precedida por uno ms calificadores encerrados entre corchetes. SERIN debe recibir estos bytes en un orden exacto, antes de recibir los datos. Si algn byte recibido no concuerda con el byte siguiente de la secuencia de calificacin, el proceso de calificacin comienza nuevamente (p.ej. el prximo hyte recibido es comparado con el primer Item de la lista de calificacin). Un Qualifier puede ser constante, variable una sarta de constantes. Cada carcter de una sarta es tratado como un calificador individual. Una vez que se completan los calificadores, SERIN comienza a guardar datos en la variable asociada con cada Item. Si el nombre de variable es nico, el valor del carcter ASCII recibido es guardado en la variable .Si la variable es precedida por el signo #. SERIN convierte un valor decimal en ASCII y guarda el resultado en esa variable. Todos los no-dgitos recibidos antes del primer dgito del valor decimal son ignorados y descartados. El carcter no-dgito que termina el valor decimal tambin se descarta. Aunque los chips convertidores de nivel RS-232 son comunes y baratos, las excelentes especificaciones de I/O de los microPIC permiten ejecutar muchas aplicaciones sin usar convertidores de nivel. Ms an, se pueden usar entradas invertidas (N300...N9600) junto con un resistor limitador de corriente. SERIN 1, N2400, [A], B0 espera hasta que el carcter A sea recibido en forma serial en el pin 1 y coloca el prximo carcter en B0

5.52. SERIN2 SERIN2 DataPin {FlowPin}, Mode, {ParityLabel,} {Timeout, Label,} [Item...] Recibe uno ms Items en el Pin especificado en formato standard asincrnico. SERIN2 es similar al comando Serin de BS2. DataPin es colocado como entrada en forma automtica. FlowPin es opcional y es automticamente colocado como salida. DataPin y FlowPin pueden ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) El pin opcional de control de flujo FlowPin, puede ser includo para ayudar a que los datos no desborden la capacidad del receptor. Si se usa, FlowPin es automticamente habilitado para permitir la transmisin de cada carcter. Este estado habilitado es determinado por la polaridad del dato especificado en Mode. Mode se usa para especificar el baud rate y los parmetros de operacin de la transferencia serial. Los 13 bits de menor orden seleccionan el baud rate. Bit 13 selecciona paridad no paridad. Bit 14 selecciona nivel cierto invertido. Bit 15 no se usa. Los bits de baud rate especifican el el tiempo de bit en microsegundos -20. Para encontrar un valor dado, use la ecuacin: (1000000/bayd)-20 Algunos baud rate standard se muestran en la tabla siguiente: Baud rate 300 600 1200 Bits 0 - 12 3313 1646 813

2400 4800 9600 19200

396 188 84 32

Bit 13 selecciona paridad par (bit13=1) sin paridad (bit13=0). Normalmente, las transmisiones seriales son 8N1 (8 bit de datos, sin paridad ,1 stop bit). Si se selecciona paridad, los datos son recibidos como 7E1 (7 bit de datos, paridad par ,1 stop bit). Bit 14 selecciona el nivel de los pins de datos y de control de flujo. Si bit 14=0, se reciben los datos en forma normal, para usar con los drivers RS-232 .Si bit 14=1, los datos se reciben invertidos. Esto se puede usar para evitar usar drivers RS-232. Algunos ejemplos de Mode son: Mode = 84 (9600 baud, sin paridad, cierto), Mode = 16780 (2400 baud, sin paridad, invertido), Mode = 27889 (300 baud, paridad par invertido). Si se incluye ParityLabel, se saltar a la etiqueta indicada si se recibe un carcter con error de paridad. Solo debe ser usado con paridad par seleccionada (bit 13=1) En forma opcional se puede incluir Timeout y Label para permitir que el programa contine si no se recibe un carcter dentro de un cierto tiempo. Timeout se especifica en unidades de 1 milisegundo. SERIN2 soporta distintos modificadores, que pueden ser combinados entre s, dentro de una declaracin SERIN2 para obtener distintos formatos. Modificador BIN {1..16} DEC{1..5} HEX{1..4} SKIP n STR ArrayVar{} WAIT () WAITSTRArrayVar{ } Operacin Recibe digitos binarios Recibe digitos decimales Recibe digitos hexadecimales Saltea n caracteres recibidos Recibe una sarta de n caracteres ,opcionalmente terminada en el carcter c Espera por una secuencia de caracteres Espera por una sarta de caracteres

Una variable precedida por BIN va a recibir la representacin ASCII de su valor binario... Por ejemplo, si est especificado BIN B0 y se recibe 1000, B0 ser 8. Una variable precedida por DEC va a recibir la representacin ASCII de su valor decimal...Por ejemplo, si est especificado DEC B0 y se recibe 123, B0 ser 123. Una variable precedida por HEX va a recibir la representacin ASCII de su valor hexadecimal... Por ejemplo, si est especificado HEX B0 y se recibe FE, B0 ser 254. SKIP seguido por un contador, va a saltear esa cantidad de caracteres en el flujo de datos. Por ejemplo, SKIP 4 saltear 4 caracteres. STR seguido por una variable de array, un contador y un carcter opcional de finalizacin, va a recibir una sarta de caracteres. La longitud de la sarta est determinada por el contador cuando se encuentre el carcter opcional. La lista de items de datos a ser recibidos, puede estar precedida por uno ms calificadores entre parentesis despus del WAIT. SERIN2 debe recibir estos bytes en un orden exacto, antes de recibir los datos. Si algn byte recibido no concuerda con el prximo en la secuencia de calificacin, recomienza el proceso de calificacin. (p.ej. el el prximo byte recibido se compara con el primer item en la lista de calificadores) Un Qualifier puede ser constante, variable una sarta de constantes, Cada carcter de una sarta es tratado como un calificador individual. WAUTSTR puede ser usado como WAIT anteriormente, para forzar a SERIN2 a esperar por una sarta de caracteres de un determinado largo, antes de seguir adelante. Una vez que los calificadores WAIT y WAITSTR estn cumplimentados, SERIN comienza a guardar los datos en las variables asociadas con cada Item. Si se usa solo el nombre de la variable, se guarda el valor del carcter ASCII. Si la variable est precedida por BIN, DEC HEX, SERIN2 convierte un valor binario, decimal hexadecimal en su equivalente ASCII y guarda el resultado en esa variable. Todos los no-dhitos recibidos antes que el primer digito del valor decimal es ignorado y descartado. El carcter no-digito que termina el valor tambin es descartado. BIN, DEC y HEX pueden estar seguidos por un nmero. Reciben tantos digitos como hay en la entrada. Sin embargo, si un nmero sigue a un modificador, SERIN2 siempre recibir ese nmero de dgitos, salteando dgitos adicionales si es necesario. SERIN2 asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit. Para mantener los valores de baud rate adecuados con otro oscilador, asegrese de usar DEFINE OSC con el nuevo valor de oscilador. Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementacin de corriente RS-232 y las excelentes especificaciones de I/O del microPIC, no se requieren convertidores de nivel en muchas aplicaciones. Se puede usar TTL invertido (Mode bit14 = 1) .Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos). espera hasta que el carcter A sea recibido en forma serial en Pin1 y Pone el prximo carcter en B0 SERIN2 1, 16780, [wait (A), B0] saltea 2 caracteres y toma un nmero decimal de 4 dgitos SERIN2 PORTA. 1, 84, [skip 2, dec4 B0] SERIN2 PORTA.1.0, 84, 100, tlabel, [wait (x, b0), str ar]

5.53. SEROUT SEROUT Pin, Mode, [Item [, Item...}] Enva uno ms Items a Pin, en formato standard asincrnico usando 8 bits de datos, sin paridad y 1 stop bit (8N1). SEROUT es similar al comando Serout de BS1. Pin es automticamente colocado como salida. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) Los nombres Mode (p.ej. T2400) estn definidos en el archivo MODEDEFS.BAS. Para usarlos, agregue la lnea: Include modedefs.bas al comienzo de su programa PBP. BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS. No lo incluya, si ya est usando uno de ellos .Los nmeros Mode pueden ser usados sin incluir este archivo.

Mode T2400 T1200 T9600 T300 N2400 N1200 N9600 N300 OT2400 OT1200 OT9600 OT300 ON2400 ON1200 ON9600 ON300

Mode N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Baud rate 2400 1200 9600 300 2400 1200 9600 300 2400 1200 9600 300 2400 1200 9600 300

Estado LLEVADO A CIERTO

LLEVADO A INVERTIDO

ABIERTO CIERTO

ABIERTO INVERTIDO

SEROUT soporta 3 tipos distintos de datos, que pueden ser combinados libremente dentro de una declaracin SEROUT. Una sarta de constantes es enviada como una sarta de caracteres literales. Un valor numrico (constante variable) va a enviar el correspondiente carcter ASCII. Ms an, 13 es retorno de carro (Carriage Return CR) y 10 es avance de lnea (Line Feed LF). Un valor numrico precedido por el signo # va a enviar la representacin ASCII de su valor decimal. Por ejemplo, si W0=123, entonces #W0 ( #123) va a enviar 1, 2, 3. SEROUT asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit .Para mantener los valores de baud rate adecuados con otro oscilador, asegrese de usar DEFINE OSC con el nuevo valor de oscilador. En algunos casos, los rangos de transmisin de SEROUT pueden presentar los caracteres demasiado rpidamente en el dispositivi receptor. Un DEFINE agrega tiempo entre caracteres en la transmisin de salida. Esto permite un tiempo adicional entre caracteres a medida que son transmitidos. Se puede lograr una demora entre cada carcter transmitido de 1 a 65535 microsegundos (.001 a 65,535 milisegundos). Por ejemplo, para pausar 1 milisegundo entre cada carcter transmitido: DEFINE CHAR_PACING 1000 Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementacin de corriente RS-232 y las excelentes especificaciones de I/O del microPIC, no se requieren convertidores de nivel en muchas aplicaciones. Se puede usar TTL invertido (N300... N9600). Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos). SEROUT 0, N2400, [#B0, 10] enva el valor ASCII de B0, seguido por un LF al pin 0, en forma serial 5.54. SEROUT2 SEROUT2 DataPin {FlowPin}, Mode, {Pace,} {Timeout, Label,} [Item...] Enva uno ms Items al Pin especificado en formato standard asincrnico. SEROUT2 es similar al comando Serout de BS2. DataPin es colocado como salida en forma automtica. FlowPin es opcional y es automticamente colocado como entrada. DataPin y FlowPin pueden ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) El pin opcional de control de flujo FlowPin, puede ser includo para ayudar a que los datos no desborden la capacidad del receptor. Si se usa, los datos seriales no sern enviados hasta que FlowPin est en el estado adecuado... Este estado es determinado por la polaridad del dato especificado en Mode. Como opcin se puede incluir Timeout y Label para permitir continuar al programa si el FlowPin no cambia al estado de habilitacin dentro de un cierto tiempo. Timeout esta especificado en unidades de 1 milisegundo.

En algunos casos, los rangos de transmisin de SEROUT2 pueden presentar los datos demasiado rpidamente al dispositivo receptor. Puede no desearse usar un pin extra para control de flujo. La opcin Pace se puede usar para agregar tiempo entre cada carcter durante la transmisin. La demora puede ser de 1 a 65535 milisegundos entre cada carcter transmitido. Mode se usa para especificar el baud rate y los parmetros de operacin de la transferencia serial. Los 13 bits de menor orden seleccionan el baud rate. Bit 13 selecciona paridad no paridad. Bit 14 selecciona nivel cierto invertido. Bit 15 selecciona si est abierto no. Los bits de baud rate especifican el el tiempo de bit en microsegundos -20. Para encontrar un valor dado, use la ecuacin: (1000000/bayd)-20 Algunos baud rate standard se muestran en la tabla siguiente: Baud rate 300 600 1200 2400 4800 9600 19200 Bits 0 - 12 3313 1646 813 396 188 84 32

Bit 13 selecciona paridad par (bit13=1) sin paridad (bit13=0). Normalmente, las transmisiones seriales son 8N1 (8 bit de datos, sin paridad ,1 stop bit). Si se selecciona paridad, los datos son enviados como 7E1 (7 bit de datos, paridad par, 1 stop bit). Bit 14 selecciona el nivel de los pins de datos y de control de flujo. Si bit 14=0, se envian los datos en forma normal, para usar con los drivers RS-232. Si bit 14=1, los datos se envian invertidos. Esto se puede usar para evitar usar drivers RS-232 Bit 15 selecciona si el pin de datos est siempre con carga (bit15=0) si queda abierto en uno de los estados (bit15=1). El modo abierto puede usarse para conectar varios dispositivos juntos en el mismo bus serial. Algunos ejemplos de Mode son: Mode = 84 (9600 baud, sin paridad, cierto, con carga), Mode = 16780 (2400 baud, sin paridad, invertido, con carga), Mode = 60657 (300 baud, paridad parinvertido, abierto). SEROUT2 soporta distintos modificadores, que pueden ser combinados entre s, dentro de una declaracin SEROUT2 para obtener distintos formatos.

Modificador {I}{S}BIN {1..16} {I}{S}DEC{1..5} {I}{S}HEX{1..4} REP c n STR ArrayVar{}

Operacin Envia digitos binarios Envia digitos decimales Envia digitos hexadecimales Envia el caracter c repetido n veces Envia una sarta de n caracteres

Una sarta de constantes es enviada como una sarta de caracteres literales. Un valor numrico (constante variable) va a enviar el correspondiente carcter ASCII .Ms an, 13 es retorno de carro (Carriage Return CR) y 10 es avance de lnea (Line Feed LF). Un valor numrico precedido por BIN va a enviar la representacin ASCII de su valor binario... Por ejemplo, si B0=8, entonces BIN B0 va a enviar 1000 Un valor numrico precedido por DEC va a enviar la representacin ASCII de su valor decimal... Por ejemplo, si B0=123, entonces DEC B0 va a enviar123 Un valor numrico precedido por HEX va a enviar la representacin ASCII de su valor hexadecimal... Por ejemplo, si B0=254, entonces HEX B0 envia FE. REP seguido por un carcter y un contador, va a repetir el carcter la cantidad de veces que indique el contador. Por ejemplo, REP 0 4 enviar 0000 STR seguido por una variable de array, y un contador opcional, va a enviar una sarta de caracteres. La longitud de la sarta est determinada por el contador cuando se encuentre un carcter 0 en la sarta. BIN, DEC y HEX pueden estar precedidos, seguidos por varios parmetros opcionales. Si alguno de ellos est precedido por una I (por indicado). La salida estar precedida por alguno de los smbolos %, #, $ para indicar que el valor siguiente es binario, decimal hexadecimal. Si alguno est precedido por una s (por signo), la salida estar precedida por - , si el bit de alto orden del dato est alto. Esto permite la transmisin de nmeros negativos. Recuerde que todas las operaciones u comparaciones de PBP son sin signo. Sin embargo, las matemticas sin signo pueden llevar a resultados con signo. Por ejemplo, B0 = 9 - 10. El resultado de DEC B0 ser 255. Enviando sDEC B0 dara -1, dado que se enva el bit de alto orden. BIN, DEC y HEX tambin pueden estar acompaados de un nmero. Normalmente, estos modificadores muestran exactamente tantos dgitos como sean necesarios (sin enviar los ceros a la izquierda).Sin embargo, si un npumero sigue a un modificador, SEROUT2 siempre ese nmero de dgitos, agregando tantos ceros al comienzo, como sea necesario. Adems, ajusta cualquier bit extra de orden superior.P.ej. BIN6 8 sera enviado como 001000 y BIN2 8 como 00. Se puede usar cualquier combinacin de modificadores simultneamente .P.ej. ISDEC4 B0. Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementacin de corriente RS-232 y las excelentes especificaciones de I/O del microPIC, no se requieren convertidores de nivel en muchas aplicaciones. Se puede usar TTL invertido (N300... N9600). Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos). enva el valor ASCII de B0, seguido por un LF al pin 0, en forma serial a 2400 baud

SEROUT2 0, 16780, [dec B0, 10] enva B0 = 0 seguido por el valor binario de B0, a PORTA pin1, en forma serial, a 9600 baud SEROUT2 PORTA.1, 84, [B0=0, ihex4 B0] 5.55. SHIFTIN SHIFTIN DataPin, ClockPin, Mode, [Var {}...] El ClockPin, desplaza en forma sincrnica los bits en DataPin y guarda los bytes recibidos en Var. ClockPin y DataPin pueden ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) (en forma opcional) especifica el nmero de bits a ser desplazado. Si no se especifica, se desplazan 8 bits, independientemente del tipo de variable. Los nombres Mode (p.ej. MSBPRE) estn definidos en el archivo MODEDEFS.BAS. Para usarlos, agregue la lnea: Include modedefs.bas al comienzo de su programa PBP. BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS. No lo incluya, si ya est usando uno de ellos. Los nmeros Mode pueden ser usados sin incluir este archivo. Mode MSBPRE LSBPRE MSBPOST LSBPOST SHIFTIN 0, 1, MSBPRE, [B0] Mode N 0 1 2 3 Operacin Primero desplaza datos en el bit superior ,lee datos antes de mandar clock Primero desplaza datos en el bit inferior , lee datos antes de mandar clock Primero desplaza datos en el bit superior ,lee datos despus de mandar clock Primero desplaza datos en el bit inferior , lee datos despus de mandar clock

5.56. SHIFTOUT SHIFTOUT DataPin, ClockPin, Mode, [Var {}...] Desplaza en forma sincrnica el contenido de Var sobre DataPin y ClockPin. ClockPin y DataPin pueden ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) (en forma opcional) especifica el nmero de bits a ser desplazado. Si no se especifica, se desplazan 8 bits, independientemente del tipo de variable. Los nombres Mode (p.ej. LSBFIRST) estn definidos en el archivo MODEDEFS.BAS. Para usarlos, agregue la lnea: Include modedefs.bas al comienzo de su programa PBP. BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS. No lo incluya, si ya est usando uno de ellos. Los nmeros Mode pueden ser usados sin incluir este archivo. Mode LSBFIRST MSBFIRST Mode N 0 1 Operacin Primero desplaza datos del bit inferior Primero desplaza datos del bit superior

SHIFTOUT 0, 1, MSBFIRST, [B0] SHIFTOUT PORTA.1, PORTA.2, 1, [wordvar 4] 5.57. SLEEP SLEEP Period Coloca al micro controlador en modo de baja potencia por Period segundos. Period tiene 16 bit, por lo que los retardos pueden ser de hasta 65535 segundos (aprox. 18 horas). SLEEP usa el WatchDog Timer, por lo que es independiente de la frecuencia del oscilador utilizado. La granulacin es aproximadamente 2.3 segundos y puede variar de acuerdo al dispositivo y la temperatura. Esta variacin es distinta a la de BASIC Stamp. Se necesit este cambio, porque cuando el micro PIC pone a cero (resetea) el WatchDog Timer, tambin pone valores predefinidos en los registros internos. Estos valores pueden diferir de los esperados por su programa. Ejecutando el comando SLEEP sin calibrar, este paso se deja de lado. SLEEP 60 duerme por aprox. 1 minuto 5.58. SOUND SOUND Pin, [Note, Duration {, Note, Duration...}] Gebera un tono y/o ruido blanco en el Pin especificado. Pin es automticamente colocado como salida. Pin puede ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) Note 0 es silencio. Nte 1-127 son tonos. Notes 128-255 son ruido blanco. Los tonos y el ruido blanco estn en una escala ascendente (p.ej. 1 y 128 son las frecuencias menores 129 y 266 las mayores). Note 1 es aprox. 78,74 Hz y Note 127 es aproz. 10000 Hz. Duration es 0-255 y determina el largo de la nota, en incrementos de 12 milisegundos. Note y Duration no necesitan ser constantes. SOUND entrega como salida ondas cuadradas con nivel TTL. Gracias a las caractersticas del micro PIC, se puede manejar un parlante a travs de un capacitor -El valor del capacitor debe ser determinado enfuncin de las frecuencias a usar y la carga del parlante. Parlantes piezo elctricos pueden ser conectados directamente. SOUND PORTB.7, 1[100, 10, 50, 10] enva 2 sonidos consecutivos a pin7 5.59. STOP STOP Detiene la ejecucin del programa, ejecutando un loop sin fin, No coloca al micro controlador en modo de baja potencia. El micro controlador trabaja igual que siempre. STOP enva el programa a va muerta 5.60. SWAP SWAP Variable, Variable Intercambia los valores de dos variables. Normalmente intercambiar los valores de dos variables es un proceso tedioso. SWAP lo hace con una sola declaracin, sin variables intermedias. Puede ser usado con variables de bit, vyte y word. Variables de array con ndice variable no son permitidas, pero s variables de array con ndice constante. Temp = B0 anteriormente B0=B1 B1=Tem

SWAP B0, B1 ahora 5.61. TOGGLE TOGGLE Pin Invierte el estado del Pin especificado. Pin es automticamente colocado como salida. Pin puede ser una constante, 0 - 15, una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) Low 0 comienza Pin0 como bajo TOGGLE 0 cambia a alto el estado del pin 0 5.62. WHILE...WEND WHILE Condition Statement WEND Ejecuta las declaraciones Statement en forma repetida, mientras la condicin Condition sea cierta. Cuando Condition deja de ser cierta, la ejecucin contina con la declaracin siguiente al WEND. Condition puede ser cualquier expresin de comparacin. I=1 WHILE i < = 10 Serout 0, N2400, [No: #i, 13, 10] WEND 5.63. WRITE WRITE Address, Value Graba valores Value en el EEPROM incorporado en la direccin Address especificada... Esta instruccin solo puede ser usada con un microPIC que tenga un EEPROM incorporado como el PIC16F84 PIC16C84 Es usado para colocar datos en el EEPROM durante el momento de la ejecucin. Para grabar datos en el EEPROM durante la programacin, se usan las declaraciones DATA y EEPROM. Cada WRITE se auto regula en tiempo y toma aproximadamente 10 milisegundos ejecutarlo en un microPIC WRIT 5, B0 enva el valor de B0 al EEPROM pin 5

5.64. XIN XIN DataPin, ZeroPin, {Timeout, Label,} [Var {,...}] Recibe datos X-10 y guarda el House Code y el Key Code en Var. XIN se usa para recibir informacin de dispositivos X-10. Los mdulos X-10 estn disponibles en muchos lugares y de distintos proveedores. Se requiere una interfase para conectar el micro controlador a la lnea de AC. Se necesita un TW-523 para comunicaciones de dos vas para trabajar con XIN. Este dispositivo tiene la interfase a la lnea de alimentacin y asla el micro controlador de la lnea de AC. Como X-10 est patentado, esta interfase tambin cubre el licenciamiento. DataPin es automticamente convertido en entrada para recibir datos de la interfase X-10. ZeroPin es automticamente convertido en entrada para recibir el tiempo de cruce por cero de la interfase X-10. Ambos pins pueden ser llevados a 5 volt con resistores de 4.7 K. DataPin y ZeroPin pueden ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) En forma opcional se pueden incluir Timeout y Label para permitir continuar el programa, si no se reciben datos en un lapso de tiempo determinado... Timeout est especificado en medios ciclos de la lnea de AC (aprox. 8.33 milisegundos). XIN solamente procesa datos en el momento en que la lnea de AC pasa por cero (en ese momento recibe ZeroPin). Si no hay transiciones en esta lnea, XIN esperar que las haya. Si Var tiene tamao de word, cada cdigi House Code recibido, se guarda en el byte superior del word. Cada cdigo Key Code recibido se guarda en el byte inferior del word. Si Var es un byte, solo se guarda el Key Code. El Hpuse Code es un nmero 0-15, que corresponde al juego House Code del mdulo X-10 de A a P. El Key Code puede ser el nmero de un mdulo especfico de X-10 la funcin que debe ser realizada por un mdulo. En la prctica, primero se enva un comando especificando el nmero de mdulo X-10, seguido por un comando especificando la funcin deseada. Algunas funciones operan en todos los mdulos, por lo que el nmero de mdulo es innecesario. Los ejemplos posteriores ayudarn a clarificar el tema. Key Code 0-15 corresponden a nmeros de mdulo 1-16. XOUT despus lista las funciones y la informacin de conexionado. Housekey var word obtiene datos X-10 loop: XIN PORTA.2, PORTA.0, [housekey] muestra los datos X-10 en un LCD Lcdout $fe, 1,House=, #housekey.byte1,Key=, #housekey.byte0 Goto loop por siempre chequea por datos X-10, si no hay va a nodata XIN PORTA.2, PORTA.0, 1, nodata, [housekey] 5.65. XOUT XOUT DataPin, ZeroPin, [HouseCode KeyCode {} {,...}] Env+ia un HoseCode seguido por un KeyCode, repetidos un nmero Repeat de veces en formato X-10. Si no se usa Repeat se asume 2 veces como mnimo. Repeat usualmente se usa con los comandos Bright y Dim. XOUT se usa para enviar informacin de control a dispositivos X-10. Los mdulos X-10 estn disponibles en muchos lugares y de distintos proveedores. Se requiere una interfase para conectar el micro controlador a la lnea de AC. Se necesita un TW-523 para comunicaciones de dos vas, un PL-513 para enviar solamente, para trabajar con XIN. Estos dispositivos tienen la interfase a la lnea de alimentacin y aslan el micro controlador de la lnea de AC. Como X-10 est patentado, esta interfase tambin cubre el licenciamiento. DataPin es automticamente convertido en salida para enviar datos a la interfase X-10. ZeroPin es automticamente convertido en entrada para recibir el tiempo de cruce por cero de la interfase X-10 .Ambos pins pueden ser llevados a 5 volt con resistores de 4.7K. DataPin y ZeroPin pueden ser una constante, 0 - 15 una variable que contenga un nmero de 0-15 (p.ej. B0) un nmero de Pin (p.ej. PORTA.0) XOUT solamente procesa datos en el momento en que la lnea de AC pasa por cero (en ese momento recibe ZeroPin). Si no hay transiciones en esta lnea, XIN esperar que las haya. El Hpuse Code es un nmero 0-15, que corresponde al juego House Code del mdulo X-10 de A a P. El HouseCode apropiado debe ser enviado como parte de cada comando.

El Key Code puede ser el nmero de un mdulo especfico de X-10 la funcin que debe ser realizada por un mdulo. En la prctica, primero se enva un comando especificando el nmero de mdulo X-10, seguido por un comando especificando la funcin deseada. Algunas funciones operan en todos los mdulos, por lo que el nmero de mdulo es innecesario. Los ejemplos posteriores ayudarn a clarificar el tema. Key Code 0-15 corresponden a nmeros de mdulo 1-16. Los nombres Keycode (funciones) (p.ej. uniton) estn definidos en el archivo MODEDEFS.BAS. Para usarlos, agregue la lnea: Include modedefs.bas al comienzo de su programa PBP. BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS. No lo incluya, si ya est usando uno de ellos. Los nmeros KeyCode pueden ser usados sin incluir este archivo.

KeyCode unitOn UnitOff UnitsOff LightsOn LightsOff Bright Dim

KeyCode N %10010 %11010 %11100 %10100 %10000 %10110 %11110

Operacin Enciende el mdulo Apaga el mdulo Apaga todos los mdulos Enciende mdulos de luz Apaga mdulos de luz Ms brillo al ndulo de luz Menos brillo al mdulo de luz

Conectarse a la interfase X-10 requiere 4 conexiones. La salida de la interfase X-10 (cruce por cero y datos) es a colector abierto y necesita un resistor de aprox. 4.7 K conectado a 5 volt. La tabla siguiente muestra el xonexionado: Cable N 1 2 3 4 Color del cable Negro Rojo Verde Amarillo Conexin Salida cruce por cero Comun cruce por cero Comn transmisin X-10 Entrada transmisin X-10

TW-523 Cable N 1 2 3 4 house var unit var byte byte Color del cable Negro Rojo Verde Amarillo Conexin Salida cruce por cero Comun cruce por cero Salida recepcin X-10 Entrada transmisin X-10

Include modedefs, bas house=0 unit=8 coloca 0 en house (A) coloca 8 en unit (9)

XOUT PORTA.1, PORTA.0, [house unit, house unitOn] enciende unit 8 en house 0 XOUT PORTA.1, PORTA.0, [house lightsOff] XOUT PORTA.1, PORTA.0, [house0] loop XOUT PORTA.1 PORTA.0, [house] pause10000 XOUT PORTA.1 PORTA.0, [house] pause 10000 espera 10 segundos goto loop espera 10 segundos apaga todas las luces en house 0 parpadea la luz 0 cada 10 segundos

Apndice C: Leyendo el Cdigo de Colores de los Resistores Leyendo el Cdigo de Colores de los Resistores
La mayora de los tipos comunes de resistores tienen bandas de colores que indican su valor. Los resistores que usaremos en esta serie de experimentos son normalmente 1/4 watt, de carbn, con una tolerancia del 5%. Si se fija en la secuencia de bandas observar que una de las bandas (en un extremo) es dorada. sta es la cuarta banda, y el color dorado significa que tiene una tolerancia del 5%. Las primeras tres bandas nos dicen el valor, medido en ohms. A mayor valor, menor es el flujo de corriente a travs del resistor (a un voltaje dado). Los valores de los colores son los siguientes: negro 0 marrn 1 rojo 2 naranja 3 amarillo 4 verde 5 azul 6 violeta 7 gris 8 blanco 9 Para determinar el valor del resistor, mire el primer color, determine su valor de la lista de arriba y escrbalo. Haga lo mismo con la segunda banda. La tercer banda es la cantidad de ceros a agregar. Por ejemplo: Un resistor tiene las siguientes bandas de color: Banda 1. = rojo Banda 2. = violeta Banda 3. = amarillo Banda 4. = dorado

Mirando la lista de arriba vemos que el rojo vale 2. As que escribimos: 2. Violeta tiene un valor de 7. As que escribimos: 27 Amarillo tiene un valor de 4. As que escribimos: 27 y cuatro ceros o 270.000. Este resistor tiene un valor de 270,000 ohms (o 270k) y una tolerancia del 5%.

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