Entrenador Para Micro Control Ad Or Con PBP

Entrenador para Microcontroladores PIC con PBP.

¿Qué es un entrenador? La principal aplicación 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), también 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 programación y en las conexiones electrónicas (software y hardware). Los ejercicios con los que cuenta el entrenador se encuentran basados en el contenido práctico del programa de la Universidad Politécnica de Chiapas (Ver Anexo A.) incluyendo también ciertos temas para poder ir desarrollando técnicas, habilidades y conocimiento en el campo de la Mecatrónica. En tanto el diseño del hardware contiene los siguientes Módulos: •

• • • • • •
• • •

• • • • •

Módulo Fuente de alimentación (5V, GND y 12V) Modulo de Programación. Modulo Leds. Modulo de Potencia. Modulo de entrada digital. Modulo de entrada analógica. Modulo RS232. Módulo 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)

Además el entrenador contiene lo siguiente: una base con fuente, un apagador, fusible de protección, una práctica caja para guardar tus cables, herramientas y dispositivos y una lámpara para iluminación 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 programación. 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 diseñadas principalmente para comunicarse con humanos. Manejo de base de datos, análisis financieros o incluso procesadores de textos, se encuentran todos dentro de la “gran caja”, que contiene CPU, la memoria, el disco rígido, etc. El verdadero “cómputo”, sin embargo, tiene lugar dentro de la CPU. Si piensa sobre esto, el único propósito 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 cálculos silenciosamente sin interactuar con ningún humano. Estas computadoras están 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 pequeños, y controladores, porque controlan máquinas o incluso otros controladores. Los Microcontroladores, por definición entonces, son diseñados para ser conectados más a máquinas que a personas. Son muy útiles porque se pueden construir máquinas o artefactos, para controlarlo, y luego dejarlo trabajar para usted de manera automática. El límite de las aplicaciones para los microcontroladores es la imaginación.
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 ningún dispositivo de “comunicación con humanos”, como monitor, teclados o mouse. Los microcontroladores son diseñados para aplicación de control de máquinas, más que para interactuar con humanos.

Cuando creamos dispositivos que tienen un microcontrolador actuando como un “cerebro”, en muchas formas estamos tratando de imitar cómo actúa nuestro cuerpo. Su cerebro necesita cierta información para tomar decisiones. Esta información es obtenida a través de varios sensores, como la vista, el oído, el tacto, etc. Estos sensores detectan lo que nosotros llamamos el “mundo real” o mundo exterior, y envían esa información al cerebro para “procesamiento”. Recíprocamente, cuando su cerebro toma una decisión, manda señales a través 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/decisión 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 programación. Cables de conexión. 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 físico del sistema. El software es la lista de instrucciones que residen dentro del hardware. Nosotros crearemos ahora el hardware que interactúe 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 lámparas que por varias razones son fácilmente 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 debería ser conectada como en la figura 1.2, si la polaridad es invertida, el LED no trabaja. El lado liso también tiene la pata más corta del LED.

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

4 a) Diagrama esquemático del circuito. esto hace fácil conectar componentes juntos para construir un circuito eléctrico. Fig. Bien. Para usar el protoboard.Entendiendo la Protoboard. En las Figuras siguiente 1. La Figura 1. Estos huecos son hechos de forma que tendrán al componente en su lugar.4 a) se muestra un diagrama eléctrico es un diagrama “esquemático” del circuito del microcontrolador PIC16F84 con 2 LED’s de salida y su sistema mínimo (Componentes necesarios para que pueda funcionar correctamente el micro). Figura 1.4 b) Montaje real del cto. debido a que ese hueco está unido con el de la izquierda o el de la derecha. ¡construyamos el circuito! No conecte la fuente de alimentación aún (la batería de 5 volts o el adaptador externo). 1. El protoboard tiene muchas tiras metálicas que pasan por debajo en fila. Figura 1.4 b) es el mismo circuito. Estas tiras conectan los huecos unos a otros. Realice las conexiones necesarias en el protoboard. serán puestas en los huecos. Esto significa que usted no tiene que enchufar dos cables en un mismo hueco. .3: Conexiones del Protoboard. pero dibujado como una foto de cómo se vería el circuito físico. en el proto. Las líneas negras verticales muestran cómo los huecos están conectados por debajo de la protoboard. Cada hueco es conectado a una de las tiras metálicas que corren por debajo de la plaqueta. Es importante entender cómo trabaja el protoboard. Usted puede conectar diferentes componentes enchufándolos dentro de nodos comunes. las patas del LED y el resistor.

al microcontrolador. 2. cuánto más cuidadoso es en crear el programa. Para éste experimento usaremos sólo cuatro comandos. es muy importante para tener en mente la secuencia de la ejecución que nosotros deseamos. entonces el dispositivo no trabajará (o trabajará mal).Conecte el programador a la PC: ¡Programelo! 1. Estos son: OUTPUT. Abrir la gaseosa. entonces la primera parte de ésta sección puede ser un repaso. ¡Listo! Ya hemos creado un circuito (“hardware”). 2.. Enchufe un extremo del cable al programador. no se preocupe.. Pero esto no es nada aún. 7. Creamos un programa para el microcontrolador escribiéndolo en una PC (utilizando el teclado y el monitor). si queremos comprar una gaseosa en una máquina expendedora. ¿Cuántos de ustedes ya saben escribir un programa de computadora? Si lo ha hecho antes. Como se mencionó arriba. Ver salir la gaseosa. PAUSE. y necesitamos depurarlo. en realidad no es tan difícil. si hemos cometido un error. un programa es una lista de instrucciones que son ejecutadas en una secuencia determinada por la estructura del programa en sí mismo. referencia rápida del PBP. una lista y descripción completas de cada uno de éstos comandos puede ser obtenida en cada comando usado en éstas lecciones. teóricamente más fácil será depurarlo.. luego descargamos este “código” a través del cable de programación. GOTO. hará lo que nosotros esperábamos. Y OUT. Agarrar la gaseosa. 4. Este programa (o lista de instrucciones).. Presionar el botón para el tipo de gaseosa. Tal vez algo así. Un “debugging” es el arte de remover errores (bug). 6. Beber la gaseosa. nuestro cerebro ejecuta una lista de comandos para realizar esto. entonces se “ejecuta” dentro del PIC. Insertar $1. Por ejemplo. Depurar el programa puede ser una de las experiencias más estresantes de todo el proceso. Esperar que se encienda la luz verde. Así es que necesitamos. Pero si es nuevo en el tema. Por lo tanto.00 en la ranura. 3. Sin embargo. Un programa de computadora no es nada más que una lista de instrucciones que una computadora ejecuta (o en nuestro caso un microcontrolador). Si hemos escrito el programa correctamente. tiene muchos comandos de donde elegir. o si lo prefiere está descripto en el apéndice B. 1. 8. Enchufe el otro extremo del cable de programación en un conector del puerto USB disponible en la PC. Burp. PBP para el PIC. 5. como escribimos el programa. . por lo tanto.

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

Debido a que nosotros queremos que el microcontrolador encienda y apague un LED. El primer comando usado es “output”.6: Software del MicroCode Studio.). el microcontrolador está manipulando el “mundo exterior”. Por lo tanto. nos vamos al software del programador que usted utilice y descargamos el programa al PIC. vamos a escribir nuestro programa usando un equipo de “comunicación humano” (monitor. por definición. sino le apareció ningún mensaje. no correrá en su PC. nosotros queremos que B0 sea una salida “output”. teclado. sino que será descargado o enviado al microcontrolador. el PIC ejecutará las instrucciones exactamente como nosotros las hemos creado. Acá es donde usted creará su programa. Cada señal del pin del PIC puede ser ajustada como “entrada” o “salida”. y se verá como en la figura 1. . está en blanco.6: Figura 1. Ahora. etc. Escriba el código en el editor. Escriba el siguiente programa en el editor del MicroCode Studio. Si todo está correcto. 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 extensión . Ahora recuerde.HEX que es este archivo que se necesita guardar en el PIC y que el programador requiere para descargarlo a nuestro microcontrolador.La pantalla. Una vez que el programa ha sido recibido. excepto por unas pocas palabras en el título. que es parte de su PC El programa que escribiremos. presione la tecla “F9” notara que el programa fue compilado exitosamente.

El apóstrofe (‘) es usado para decirle al microcontrolador que ignore la siguiente información. El LED está aún apagado. o “1” o “0”. Es el propósito del siguiente comando: “Pause 1000”. Este comando hace que B0 vaya a nivel bajo y apague el LED. Este causará que B0 vaya a nivel alto. No importa cuánto insista. es donde el programa irá. de ésta forma podemos ver si está operando correctamente o no. el comando debería haber sido “output 1”). pueden ser tanto “altos” o “bajos”. voltajes en éstos pines. esto pasaría demasiado rápido para que pudiéramos verlo. (Aclaración: si nosotros buscábamos hacer B1 una salida. lo que hace que el LED se encienda. Es binaria. debido a que no hay flujo de corriente. Piense en una llave de luz en la pared. cuando la instrucción “goto titilar” es encontrada. En nuestro ejemplo. no es realmente un comando. B0 está actuando como un interruptor. y cuando está en otra posición. En el mundo de las computadoras. El siguiente comando es ”Low 0”. una marca encierto punto del programa. es “remarremark” (comentar) sus programas. que puede ser cambiado a encendido o apagado bajo un control de programa. A continuación hacemos una pausa con “pause 1000” (otro segundo). cuando el comando “goto” es encontrado. Si queremos encender el LED necesitamos hacer que B0 vaya alto (que tenga un 1). si apagáramos el LED en el siguiente comando. Ahora. Un buen hábito al que conviene acostumbrarse. Tenga en cuenta que los microcontroladores ejecutan su programa muy rápidamente. el pin B0 como lo llamamos. Este es el propósito para el segundo comando: “High 0”. es sólo para beneficio humano. “1” significa alto y “0” significa bajo. Por lo tanto necesitamos “aletargar” el programa. hay sólo dos combinaciones: encendida o apagada. le decimos al programa “ir a titilar”. “Goto” (ir) es muy simple de entender. se apaga. Donde sea que esté “titilar”. la etiqueta “titilar” está en la segunda línea. El siguiente ítem en el programa “titilar:”. En nuestro programa. el programa “va” a algún punto específico en el programa.Resultado del primer comando: “output 0” hace B0 una salida. cuando la llave está en una posición. el programa salta hacia la segunda línea y lo repite nuevamente. la lámpara se enciende. que significa que pueden tener un voltaje alto o bajo. los hace más fáciles de seguir o de depurar si hay algún problema. En otras palabras. Este comando hace que el programa espere por 1000 milisegundos. Por lo tanto. Otra forma de referirnos a alto y bajo es “1 y 0”. (El programa regresa a la segunda línea cada vez que encuentra el comando “goto titilar”. Esto es lo que causa que el LED continuamente parpadee. es una salida. Es sólo una etiqueta. Comentar o documentar sus programas. cualquier cosa que esté . o sea 1 segundo. Durante el curso de la ejecución del programa. usted nunca podrá poner la llave “en medio” de las dos posiciones.

luego apáguelo. y pruébelo. Encienda el primer LED por 2 segundos. 3. Encienda el primer LED por 1.5 segundos.5 segundos y apáguelos por 2 segundos. Cuando termine de hacer el programa. luego apáguelo. 2. luego apagarlo por 2 segundos. Luego apáguelo. ¿Cuántos 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. cárguelo en la PC (como lo ha hecho antes).escrita en una línea del programa después de un apóstrofe. 4. Espere 2 segundos. Haga encender y apagar los LED alternativamente. para hacer lo siguiente. ¿Cuál es la diferencia entre hardware y software? 3. en otras palabras.5 segundos. Espere 3 segundos y repita. ¿Por qué un microcontrolador es como nuestro cerebro? 4. Repita ésta última acción de 0. luego encienda ambos LED por 0. ¡Desafio! 1. Espere 5 segundos y encienda el segundo LED por 1 segundo y luego apáguelo. ¿En qué se diferencia un microcontrolador de una computadora? 2. ¿Qué significa “debug” (depurar)? 5. Haga que ambos LED se enciendan y apaguen parpadeando al mismo tiempo. no es parte del código de la instrucción. Espere 2 segundos y luego encienda el segundo LED por 1. y viceversa. y luego repetir. El siguiente programa debería encender el LED en B0 por 2 segundos. Cada programa debería ser cargado en el PIC y probado en su protoboard. mientras un LED está encendido el otro está apagado. Preguntas 1.5 segundos encendido y 2 segundos apagado. .

para que el dispositivo funcione. Muchas personas pasan su vida diseñando hardware para microcontroladores para una infinidad de variedad de productos. Al contrario que el cerebro humano. Incluso cuando no se ven como una computadora. el programa del microcontrolador no se__________ por sí mismo. y pueden usarse en un sinnúmero de productos e innovaciones. El primer componente es el hardware (el circuito). El segundo componente es el software. 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. donde es realmente ________________ (“run”). Aeromodelos. etc.) y luego _____________ el programa en un microcontrolador. una computadora que está diseñada para interactuar con humanos (con teclado. El microcontrolador ejecutará un conjunto de instrucciones en la misma____________ en la que fue creado. Los microcontroladores deben tener dos componentes trabajando juntos. (¿Quién alguna vez se imaginó que un juguete tendría una computadora incluida en su interior?) Los Microcontroladores consisten de hardware y _____________. Los programadores se especializan en escribir (código de control) para teléfonos celulares. porque pueden ser reutilizados. juguetes o incluso equipamiento industrial. Muchos microcontroladores son versátiles y fáciles de usar. . Creamos programas en una PC.¿Qué aprendí? Complete las siguientes oraciones con las palabras de la lista.______________. son sólo ejemplos. monitor. controladores de casas inteligentes o sistemas de colección de datos climáticos remotos operados por batería. Los___________________ están a nuestro alrededor. ni cambiará el orden de las instrucciones del programa. Un programa de microcontrolador es solo tan inteligente como el que lo programó.

sólo que aplicada diferente! Mire alrededor suyo y piense cómo podría usar un microcontrolador para crear una luz de seguridad para su bicicleta. …¿Quién sabe? A continuación se muestra varios ejemplo para que se practique y aprendan a utilizar diferentes comandos. las luces del auto. o simplemente divertirse construyendo cosas. ¡la tecnología es la misma. A medida que la tecnología avanza en todas las áreas de nuestras vidas. .. Usted puede ayudar a desarrollarlos y tal vez inventar el próximo “gran producto”.. nos vemos rodeados por un creciente número de aparatos avanzados tecnológicamente. un proyecto de arte que use la luz para interactuar con los espectadores.¿Cómo 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 increíble y no muestran ningún signo de disminuir su velocidad. Piense con sus amigos en un desarrollo para comenzar a fabricar con perspectivas comerciales.

Bueno aquí esta el primer ejemplo y el más sencillo y por donde aprendí.0 = 0 pause 1000 goto inicio end inicio: TOGGLE PORTB.0 pause 1000 goto inicio end led var PORTB. . prender y apagar un led conectado a portb.0 = 1 pause 1000 PORTB. Led intermitente en RB0.0 PAUSE 1000 goto inicio end Inicio: High 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 inicio: high led pause 1000 low led pause 1000 goto inicio end Cuando se quiera cambiar/conmutar el estado de una línea que esté configurada como salida es más fácil usar instrucción TOGGLE.0 pause 1000 low PORTB.ENCENDER Y APAGAR UN LED.

SEMAFORO El código 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 .

237.253.135.255.239].230.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.num portb=num pause 500 next vec goto prog END .134.207.219.

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 .

219.253.[191.135.255.num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.135.239].num portb=num pause 500 next vec goto prog END .230.253.207.255.230.237.134.219.239].Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.134.237.207.[191.

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

tocamos. ¼ watt (amarillo. calor. naranja) (1) Una batería 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. violeta. Nuestro cerebro lo hace todo el tiempo. Detectando el Mundo Exterior Tomar decisiones. Los ejemplos incluyen sensores que detectan luz. etc. oímos. Este experimento incluye un pulsador (un tipo de sensor) y un LED (un dispositivo de salida). ¼ watt (marrón. Esto quiere decir que contienen una cierta lista de instrucciones (llamada programa o código). dependiendo de qué tipo de entradas (inputs) digitales detecta. .EXPERIMENTO 2. Sensor: Un sensor es un dispositivo de entrada usado para detectar o medir presencia física. marrón) (2) Dos resistores de 10k ohm. curvamiento y compuestos químicos (tales como monóxido de carbono). Los microcontroladores son dispositivos programables. El Experimento 2 se centrará en cómo podemos diseñar un sistema microcontrolado que pueda cambiar sus salidas (outputs). que dice qué hay que hacer bajo ciertas circunstancias. El experimento 2 necesita las siguientes partes: (1) Un cable de programación (2) Dos LED (diodos emisores de luz) (2) Dos pulsadores (1) Un PIC16F84 (1)Programador ( 2) Dos resistores de 470 ohm. Ellos manipulan el mundo exterior basados en “entradas” (inputs). temperatura. Partes requeridas. los microcontroladores actúan como nuestro cerebro. negro. Como aprendimos en el experimento 1 (¿qué es un microcontrolador?). Tomamos decisiones basándonos en lo que vemos.

Leyendo las bandas con el código de colores. y ambos se ven parecidos.¡Constrúyalo! Recuerde que el LED debe ser conectado con el lado liso conectado a los pines de salida P0 y P1.0 = 0 then high 1 else low 1 . Debido a que este experimento usa dos valores diferentes de resistores.000 ohm (10K ohm) conectado al “lado alto” de cada pulsador (a los 5 volts). TRISB. Escriba el siguiente programa: ¡Programelo! Este circuito tiene un tipo de sensor (el pulsador) y un tipo de dispositivo de salida (el LED). Si usted no conoce cómo leer el “código”. mire el Apéndice C para averiguarlo. y que haya un resistor de 10.0=1 inicio: if PORTB. Asegúrese que haya una resistencia de 220 ohm en serie con cada LED. Una vez que usted tiene todos los componentes instalados en el área del prototipo. ¿cómo los puedo separar?.

Revise nuevamente su programa y asegúrese que ha escrito todo correctamente. por lo tanto no hará nada. cualquier valor distinto de 0 y 1 es considerado inválido. Cuando un microcontrolador revisa el estado de un pin en particular. convierten una medición. Si su programa está trabajando apropiadamente. Ahora analicemos paso por paso nuestro programa: Nuestro primer comando. El comando “if PORTB. luego hace que el programa regrese y revise el estado de B0 nuevamente y “repita todo nuevamente”. saltará hasta ella. verá un valor de 0 o 1. Medir el nivel del volumen de un amplificador de audio. Recuerde del Experimento 1. La instrucción High 1. corra el programa. El campo de la electrónica está generalmente dividido en dos diferentes dominios “del tipo de señal” –Digital y Analógico. Por lo tanto. entonces este comando hará que B1 se apague. Este es un sensor de tipo digital. El programa lo ayudará a encontrar errores de sintaxis cuando corra el programa y no se ejecute adecuadamente aparecerán los errores indicándoles en que línea e instrucción se encuentra el error. el programa saltará a la rutina apropiada. ¿puede usted decir qué va a hacer? El programa “tomará una decisión” basado en qué botón es presionado. y luego continuará ejecutando el programa desde ese punto. lo que realmente está haciendo es leer el valor digital de ese pin. Exploraremos este mundo fascinante de la Conversión.endif goto inicio end Ahora.0=1 hace el pin B0 una entrada (“input”). fija el registro de salida de B1 a un valor igual a “1”. y el programa se continuará ejecutando en el siguiente comando (en este caso. es una etiqueta (simplemente un marcador o puntero a cierto lugar de su programa). Sensores para éste tipo de aplicación. Si (cuando el microcontrolador lo revisa) es un “1”. TrisB. Cuando nuestro programa eventualmente encuentre el comando “goto inicio”. Nuestra entrada del pulsador es tanto un “0” o un “1” (abierto o cerrado). o “alto” (high) por lo tanto el LED está encendido. mientras usted presiona el pulsador. por lo tanto el led se enciende. El microcontrolador está sensando . cuando el microcontrolador lee el estado de B0. Nosotros buscamos que B0 sea un “0”. a un valor digital que el microcontrolador pueda entender. 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.0=0 then ” le dice al microcontrolador que revise el estado del pin llamado “B0”. por ejemplo de 10 cm. el LED debe prender. Una vez que cualquier botón es presionado. Antes de hacer funcionar este programa. En electrónica digital (binaria). beberá aprenderse la sintaxis de cada instrucción para ir adquiriendo cada vez mayor experiencia para resolver los diferentes errores que se le presente. Analógico a Digital en un experimento futuro. “goto inicio” – lo que causa que el programa salte al principio y continuamente revise que B0 se convierta en un “0”). que un comando como “inicio:” realmente no es un comando. son ejemplos de entrada analógica. el programa buscará la etiqueta “inicio”.

then”. Una variable nos permite almacenar cierta pieza de información (ingresada ahora). tomando una decisión. Declarar una variable simplemente es una instrucción en su programa que le avisa al microcontrolador el nombre de la variable y qué tan grande es. para un análisis posterior. Las variables deben ser “declaradas” antes de ser usadas en un programa. se fija en la toma una decisión basada en el estado de un pin. Escribamos ahora varios programas diferentes en un programa nuevo. y luego creando una salida.una entrada. El comando “if . .

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

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.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.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.219..135.207.0=0 then vec=vec+1 lookup vec.[0.207.135.191.237.134.237.134.255.230.253.[0..253.191.num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio .1=0 then vec=vec-1 lookup vec.219.239].255.239].num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA..230.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.

END .

239].num portb=num .253..230.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.135.255.[0.237.134.207.. vecvar byte num VAR BYTE flag var byte TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 flag=1 inicio: if PORTA.191.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.219.0=0 then flag=1 endif if PORTA.

237.191.135.207.230.255.if vec>=10 then vec=0 endif pause 200 return Bajar: vec=vec-1 lookup vec.239].219.134.253.[0.num portb=num if vec<=1 then vec=11 endif pause 200 return end .

Preguntas 1. 5.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 ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ .1 revisar: if porta. La variable podría valer tanto “0” como “1”. ¿Cómo toma una decisión un microcontrolador? 2.0 output portb. Defina una variable y describa cómo puede ser usada en un programa. 4. Escriba el código para declarar una variable llamada “status”.1 input porta. ¿Qué es un sensor y por qué un microcontrolador necesita uno? Mencione algunos tipos diferentes de sensores.0 input porta. 3.0=0 then titilar if porta. Agregue comentarios apropiados al siguiente programa: output portb.

Si ningún pulsador es presionado. en 4 tamaños diferentes. Usando comandos PBP tales como “_____________”. Las variables pueden ser _____________. con comentarios) que haga titilar al LED B0 (cada ½ segundo). mientras el pulsador P2 está presionado. Las variables pueden tener hasta 32 caracteres de longitud. los LED están encendidos y si ambos pulsadores son presionados. Luego.2 segundos) cuando cualquier pulsador es presionado. podrían fácilmente haber sido los interruptores de las puertas de un ascensor – aquellos que evitan que seamos aplastados al cerrarse las puertas. ambos LED están apagados. pero se apaga cuando el LED B0 está titilando. el LED B1 está encendido. Escriba un programa que haga titilar ambos LED (cada 1. entonces fijamos la variable como un simple “bit”. o inicializadas (“set up”). escriba comentarios en su programa mostrando que cambios haría para invertir el orden en que presionaría los interruptores. Es importante recordar cuando usamos variables. el LED B1 es apagado cuando el pulsador P1 es presionado (pero el LED B0 aún sigue titilando). y luego de que P1 sea presionado. _______________ Son usadas para retener la información. Luego. nuestro programa puede determinar que tipo de respuesta es la apropiada. Si queremos controlar el estado (alto o bajo) de un_________ en particular. pero solamente después de que P2 haya sido presionado y liberado. Escriba un programa que haga titilar los LED (cada . Escriba un programa que haga titilar alternadamente los LED cada ½ segundo. Hay una variedad infinita de sensores que pueden ser conectados al PIC. Cuando el botón no está presionado. Microcontroladores necesitan tan _______ para saber que está pasando en el “mundo exterior”. y más tarde tomar decisiones en el momento apropiado. 2. Aunque los interruptores que usamos en este experimento fueron______________ presionándolos. Escriba un programa (completo. 4. permitiéndole al programa obtener los datos ahora (tal vez de varias entradas diferentes).2 segundos) cada vez que el pulsador P2 es presionado. darle un . mientras esté presionado el pulsador P2.high 1 pause 200 goto revisar ____________________________ ____________________________ ____________________________ ¡DESAFIO! 1. 3. ¿QUE APRENDI? Complete las siguientes oraciones con las palabras de la lista.

deben tener un formato digital. en lugar de escribir programas (crear software).nombre que tenga relación con el dato que almacena. computado). 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 basándose en las entradas. pero un nombre “muy descriptivo” hace mucho más fácil de ______ su programa. Hay cientos de tipos diferentes de sensores en el Transbordador Espacial y en los satélites que él pone en órbita. pero muchos tipos de situaciones del “mundo exterior” son analógicas por naturaleza. Cuanto más mire a su alrededor. Si a usted le gusta más trabajar con “hardware”. Es importante recordar que las decisiones del microcontrolador son solamente tan buenas como el programa que están ejecutando. La longitud del nombre no tiene influencia en que tan rápido su _________ se ejecuta. éste podría ser un campo muy excitante y aún desafiante. Cualquier sistema microcontrolador (o para el caso. más aplicaciones verá para la tecnología de sensores y microcontroladores. . La tecnología de los sensores es una de las áreas más desafiantes de la electrónica. y de la calidad de los sensores de entrada. Mucha gente se especializa en el diseño de sensores que se comunican con microcontroladores. depende de las entradas digitales para tomar decisiones correctas. Las entradas a los microcontroladores.

usted podría detectar cuándo alguien atraviesa una puerta. Cada vez que el timbre suena. . podríamos saber con uno. si alguien está entrando. que suena cuando uno la atraviesa. (similar a un botón que está siendo presionado). usted podría determinar en qué dirección la están atravesando. Usando un sensor de proximidad. Entonces. el dueño mira y se fija quién entró. si alguien está saliendo. Usando tres sensores. usando dos tonos.¿CÓMO PUEDO APLICARLO? Muchas tiendas tienen una especie de “timbre” en la puerta. que detecta la presencia de un objeto. y con el otro.

1. tres interruptores y cuatro sensores 2.5.1. 2.6.7. 2. y c.2 Identifique el funcionamiento de al menos dos electroválvulas 2.1 Identifique el funcionamiento básico de los circuitos digitales basados en compuertas lógicas.1. de corriente alterna.1. dispositivos programables.1 Identifique el funcionamiento básico de los circuitos acondicionadores de señal y de los circuitos manejadores para actuadores.3 Compare los elementos de un sistema mecatrónico con las partes del cuerpo humano 2.1 El alumno identificara los elementos básicos de un sistema mecatrónico. microprocesadores y microcontroladores 2.7 El alumno identificara el funcionamiento y características de los dispositivos que entregan energía a los sistemas mecatrónicos. una banda y polea.4 Distingue el campo ocupacional de un ingeniero 1. 2 Introducción a los sistemas mecatrónicos 2.1 Identifique el funcionamiento básico de las etapas de una fuente de alimentación c.1. una guía lineal.4.3.2.4 El alumno identificara el funcionamiento y características de los elementos que permiten el movimiento a las partes mecánicas de un sistema mecatrónico 2.1 Identifique el funcionamiento básico de un tren de engranes.2 Relacione el programa (plan de estudios) de formación con el perfil profesional y campo ocupacional 1.3. identificando sus perfiles profesionales y campos ocupacionales Identifique los conceptos de ingeniería 1.3 Identifica al menos una función. dos competencias y cinco capacidades del ingeniero mecatrónico.5.1 El alumno distinguirá el concepto de ingeniería.4 Distingue un producto y un sistema mecatrónico 2.1. Introducción a la Ingeniería 1. 2.2 Distingue las ramas de la ingeniería 1.5 El alumno identificara el funcionamiento y características de los dispositivos que controlan un sistema mecatrónico.2 Identifique los elementos que conforman un sistema mecatrónico 2. tecnología. servomotores y a pasos 2.6 El alumno identificara el funcionamiento y características los dispositivos que acoplan las señales desde y hacia el controlador. ciencia y disciplina 1.1 Ejemplifique los conceptos de sistema y sinergia 2.1Identifique el funcionamiento básico de un elemento de al menos dos tipos de botones pulsadores. un tornillo auto embalado.3 El alumno identificara el funcionamiento y características de los elementos que ejecutan la acción de control de un sistema mecatrónico 2.1.2 El alumno identificara el funcionamiento y características básicas de los elementos que proporcionan información del entorno en sistema mecatrónico 2.2 El alumno conceptualizara el término de ingeniería y del análisis del plan de estudios. 2.1 Distingue los conceptos de técnica.2.2. una rueda dentada y trinquete y de un sistema de transporte (banda trasportadora) 2. identificara su programa de formación y campo ocupacional.3.3 Distingue el perfil profesional de un ingeniero 1. 2. conceptos y tendencias de la mecatrónica con la ingeniería 1.1.d.3 Identifique el funcionamiento de al menos dos tipos de lámparas indicadoras y desplegados.1 Relacione los antecedentes.a. .2.1.2 Identifique el funcionamiento básico de los circuitos de control basados en relevadores y controladores lógicos programables 2.1 Identifique el funcionamiento de los motores de corriente directa. analizara su funcionamiento al compararlo con las partes de un cuerpo humano 2.Apéndice A: 1.

THEN..ELSE..) .Apéndice B: REFERENCIA DE DECLARACIONES PBP @ ASM..NEXT FREQOUT GOSUB GOTO HIGH HSERIN HSEROUT I2CREAD I2CWRITE IF. 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 Señal 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......ENDASM BRANCH BRANCHL BUTTON CALL CLEAR COUNT DATA DEBUG DISABLE DTMFOUT EEPROM ENABLE END FOR.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.

Por ejemplo @ Include “fp. 5. @ @ declaracion Cuando se usa al comienzo de una línea.10 Salida X .10 5. Este atajo se puede usar libremente para unir codigo ensamblador con declaraciones PBP. provee un atajo para insertar una declaracion en lenguaje ensamblador en un programa PBP. ASM.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. 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.asm “ @ resetea a 0 la página del registro antes de ejecutar la instrucción en lenguaje ensamblador.) 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 ..1.ENDASM ASM .WEND WRITE XIN XOUT Demora (resolucion 1 useg. I var byte Rollme var byte For i = 1 to 4 @ rlf _rollme..2. La página del registro no debe ser alterada usando @ Vea la seccion de programacion del ensamblador para mayor informacion.

La ejecucion comienza en la etiqueta especificada . setea bit 0 en PORTA Bcf PORTB. pero no auto-repetición. Si no está seguro de esto. La ejecución comienza en esta etiqueta si es cierto Action. Se pueden usar hasta 128 etiquetas en un BRANCHL. 0. El tamaño máximo para una sección de texto ensamblador es 8 K. . Vea la sección de programación de ensamblador para más información. Este es el tamaño máximo para el fuente actual. [etiqueta {.. Pin automáticamente se toma como entrada. Pin. Delay Rate Bvar Action Etiqueta ´ goto notpressed if button not pressed on Pin2 BUTTON PORTB. 10. setea bit 0 en PORTB ENDASM 5.. Dene ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa. [dog... no el código generado. ASM Bsf PORTA... si Index es 1. Etiqueta debe estar en la misma página de código que la instrucción BRANCH..15.5. [etiqueta {.Por ejemplo. 0 . el programa salta a la primer etiqueta especificada en la lista. b2. Action. no se efectua anti-rebote ni auto. PORTA ... 0. use BRANCH para minimizar el uso de memoria. Index selecciona una etiqueta de una lista . Para cambiarlo a otro valor use DEFINE. use BRANCHL. Se puede usar estas dos instrucciones libremente para mezclar código ensamblador con declaraciones PBP.La ejecucion comienza en la etiqueta especificada. En general. 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.repetición . THEN que usar el comando BUTTON. ASM resetea a 0 el registro de página. haciendo que el programa salte a una localización determinada. Es similar al ON. etiqueta. notpressed BUTTON necesita ser usado dentro de un loop para auto-repetición para funcionar adecuadamente.ej... Si es 0. 2. basándose en una variable indexada. Delay. Si Index es mayor ó igual al número de etiquetas. es más fácil leer el estado del pin con un IF. Se pueden usar hasta 256 etiquetas en un BRANCH.15 (p.. si Index es 0. basada en una variable indexada.. salta a la segunda y así sucesivamente. Si Index es mayor ó igual al número de etiquetas. el programa salta a la primer etiqueta especificada en la lista.. Index selecciona una etiqueta de una lista . 0.3. Rate. ... BUTTON permite eliminar rebotes.255) Variable con tamaño de byte usada internamente para conteo de demoras y repeticiones.0) Down Estado del pin cuando se oprime el pulsador ( 0 . salta a la segunda y así sucesivamente. Bvar. Valor de auto-repetición (0.1) Contador de ciclos antes de que comience la auto-repetición (0..Si es 255 se eliminan rebotes. si Index es 1...0.}] BRANCHL trabaja en forma similar a BRANCH. Etiqueta Lee Pin y opcionalmente ejecuta anti-rebote y auto-repetición.ej. [dog. Por ejemplo. Estado del pulsador a ser actuado. BUTTON BUTTON.ENDASM Estas instrucciones le dicen a PBP que el codigo entre estas dos líneas esta en lenguaje ensamblador y no debe ser interpretado como declaraciones PBP. 100.}] Causa que el programa salte a una posición diferente. BRANCH B4. 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. Pin debe ser una constante. incluyendo comentarios. o una variable que contenga un número 0 . cat. divídalo en múltiples secciones ASM. etiqueta . Las principales diferencias son que puede saltar a una etiqueta ubicada en otra página de código y que genera un código dos veces mayor en tamaño al de BRANCH.GOTO de otros BASIC. no se toma ninguna acción y la ejecución continúa con la declaración siguiente al BRANCHL. demorando la ejecución de un programa por un período de milisegundos para permitir que los contactos se asienten. si Index es 0. ENDASM o incluyalo en un archivo separado.4.. ´setea la demora de anti-rebote a 50 ms DEFINE BUTTON_PAUSE 50 BUTTON_PAUSE debe estar en mayúsculas.. Down. La demora por defecto es 10 ms. cat. Debe asegurarse que el registro de página sea 0 antes de ENDASM si el código de ensamblador lo ha alterado. no se toma ninguna acción y la ejecución continúa con la declaración siguiente al BRANCH.. BRANCHL BRANCHL Index. B0) ó un número de pin (p. BRANCHL B4.255). BRANCH BRANCH index.. Si está seguro que las etiquetas están en la misma página que el BRANCH ó si el microcontrolador no tiene más que una página de código (2K ó menos de ROM). Si el bloque de texto es mayor.

ó una variable que contenga un número de 0 a 15 (p. Coloca en cero todas las variables.7. 10. constante} Guarda constantes en un chip EEPROM cuando este dispositivo se programa por primera vez. Constante puede ser una constante numérica ó una sarta de constantes. 2 = 1 THEN notpressed 5. Pin debe ser una constante. 100. se infiere que la mayor frecuencia de pulsos que puede ser contada.1.} constante {. Normalmente se usa GOSUB para ejecutar una subrutina PBP. 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.. item . para pausar 1 milisegundo entre la transmisión de cada caracter: DEFINE DEBUG_PACING 1000 Si bien los chips convertidores de nivel RS-232 son comunes y económicos. CALL CALL etiqueta Ejecuta la subrutina ensamblador llamada etiqueta.Esto no se hace automáticamente al comenzar un programa en PBP. Si un signo (#) precede a un item. denominada _pass 5. la primer declaración de DATA comienza a almacenarse en la dirección 0 y las declaraciones siguientes. la mayoría de las aplicaciones no requieren convertidores de nivel. sin paridad y con 1 bit de parada (stop bit) (8N1)… El pin. N2400. De esto..9. para futuras referencias del programa. 30 ´ asignar una etiqueta a un word en la próxima ubicación dlabel DATA word $1234 ´ guarda $34. como sucede en BASIC Stamps.} Envia uno ó más items a un pin predefinido con un baud rate predefinido en formato standard asincrónico.2. Si se omite el valor opcional location.535 milisegundos) entre cada carácter transmitido. DEBUG soporta los mismos modificadores de datos que SEROUT2. B0).ej. VCOUNT chequea el estado de Pin mediante un loop y cuenta las transiciones de bajo a alto. W1 ´ determinar la frecuencia en un Pin COUNT PORTA. Esto permite un tiempo adicional entre los caracteres a medida que son transmitidos. 1000. es que con ésta última no se chequea la existencia de etiquetas hasta el momento de ensamblar. cuando está generando su tiempo de bit. posición de marcadores. ´ guardar 10.535 microsegundos (. Si existe un valor location este indica la dirección de comienzo donde se almacenará la información. Solo se guarda el byte menos significativo del valor numérico. etc). no cada vez que se ejecuta el programa. Un DEFINE agrega una demora de caracteres para las transmisiones seriales de salida. Una etiqueta opcional se le puede asignar a la dirección de comienzo. en las direcciones siguientes.8. Con un oscilador de 4 Mhz chequea el estado del pin cada 20 us.Por lo general. Puede ser usada para enviar información de depuración (variables. Los datos se guardan dentro del EEPROM una sola vez en el momento en que se programa el micro controlador. 0 (10) 5. la tasa de transmisión de las instrucciones de DEBUG podrían presentar los caracteres demasiado rápidamente al dispositivo receptor. La resolución de Period está dada en milisegundos. excepto que se use el modificador WORD. 20. las variables deben ser colocadas en un estado inicial apropiado por el programa. los datos permanecen intactos aún cuando se quite la energía. W1 contar por 1 segundo Serout PORTB. WRITE se usa para colocar los valores en el EEPROM en el momento de ejecución. 1= invertido DEFINE DEBUG_MODE 1 DEBUG asume un oscilador de 4 Mhz. Usando CALL se puede acceder a una etiqueta en una sección de lenguaje ensamblador. asegurese de DEFINE el seteo de OSC al valor de oscilador deseado. Pin es automáticamente colocado como entrada. 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). Por ejemplo. La demora de caracter DEFINE permite un atraso de 1 a 65. DATA DATA {@ location. CALL pass ´ ejecuta la subrutina ensamblada. incluyendo las del sistema. DEBUG DEBUG item {. COUNT COUNT Pin. Con un oscilador de 20 Mhz chequea el estado cada 4 us. DATA solo funciona con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84 . se envía serialmente la representación ASCII para cada dígito.0. automáticamente se convierte en salida. CLEAR ´ Coloca todas las variables en cero 5. Es la más pequeña de las rutinas seriales generadas por software. La principal diferencia entre GOSUB y CALL.6. Las sartas se guardan como bytes consecutivos de valores ASCII. En algunos casos. 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).Dado que el EEPROM es una memoria no-volatil. y guarda el resultado en Var. Sigue la frecuencia del oscilador basado en DEFINE OSC.IF PORTB.´ cuenta el número de pulsos en Pin1 en 100 ms COUNT PORTB. .10. [W1] 5.20 y 30 comenzando en la posición 5 DATA @5. También se puede usar cuando se desee salida serial sobre un pin determinado y con un baud rate determinado. gracias a la implementación de corriente RS-232 y a las excelentes especificaciones I/O del micro PIC. Var Cuenta el número de pulsos en un Pin. durante un período Period.ó un numero de pin. Para mantener el tiempo apropiado del baud rate con otros valores de osciladores. No se agregan terminadores ni se completa el largo.001 a 65. 0-15. DEBUG es una de varias funciones seriales asincronicas pre-construidas.a un programa terminal como HyperTerm. lo que es inaccesible mediante PBP. usando 8 bits de datos. CLEAR CLEAR Coloca en cero todos los registros en cada banco. y no usando CLEAR. Period. $12 ´ saltear 4 posiciones y guardar 10 ceros DATA (4).

STEP. EEPROM EEPROM {Location..} [constante {. se incrementa Count en uno..Todos los pins de I/O permanecen en el estado en que se encuentran. Si se omite el valor opcional Location.ej. END trabaja ejecutando una instrucción SLEEP continua dentro de un loop. [ # i. Dado que el EEPROM es una memoria no volátil. FOR. cuando el micro controlador es programado. Constante puede ser una constante numérica ó una sarta de constantes. y los Tones 12 . 20. 1. Pin automáticamente se convierte en salida.12. Si Count no pasó End ó desbordó el tipo de variable.15 corresponden a las teclas extendidas A -D. Count. Los datos en bruto que salen del pin son bastante horribles. Debido a su complejidad y versatilidad. siguiendo a esta instrucción. STOP ó GOTO deben ser colocados al final de un programa para evitar pasar del límite de la misma u comience nuevamente. 30 comenzando en la dirección 5 5. que puede ser una variable de cualquier tipo. DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador. Vea ON INTERRUPT para más información.” “] ´ envía cada número al pin 0 en forma serial NEXT i ´ vuelve y efectúa la próxima cuenta Serout 0.Si no están especificados. NEXT FOR Count = Start TO End {STEP {-} Inc} {Body} NEXT {Count} El loop FOR. Tones tiene un valor de 0 . DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador. DISABLE ‘Deshablita interrupciones en el handler Myint: led = 1 ‘enciende el LED cuando es interrumpido Resume ‘Vuelve al programa principal Enable ‘ENABLE interrumpe después del handler 5.15. usando una variable como contador. DISABLE DISABLE DISABLE interrumpe el procesamiento siguiente a la instrucción. Pueden ocurrir otras Interrupciones. constante . También puede trabajar con uno de 10 Mhz y aún con uno de 4 Mhz.dec B0. ni se completa el largo. Cualquier otra frecuencia causará que DTMFOUT genere una frecuencia proporcional al oscilador comparado a 20 Mhz. B0) ó un número de pin (p. en lugar de producir código. la primera declaración se guarda en la dirección 0 del EEPROM y las subsiguientes en las siguientes direcciones del mismo. N2400. Se ejecuta el Body. pero el manipulador de interrupciones del BASIC en el PBP. [ 2. DTMFOUT DTMFOUT Pin.16. B0) Onms es el número de milisegundos que suena cada tono y Offms es el número de milisegundos de pausa entre cada tono . Ñps datos son guardados en el EEPROM solo una vez. lo que no será muy útil para enviar touch tones. Las sartas son guardadas como bytes consecutivos d valores ASCII. END END Detiene la ejecución del proceso y entra en modo de baja potencia .}] Guarda constantes en un chip EEPROM.. FOR i=1 TO 10 ´ cuenta de 1 a 10 Serout 0. Si no se define una cláusula. los datos permanecerán intactos aún sin alimentación..11. Un END. 30] ´ Guardar 10. Solo se guardan los bytes menos significativos de los valores numéricos. Tone}] Produce una secuencia DTMF Touch Tone en Pin. no cada vez que se ejecuta el programa. la ejecución vuelve al paso 2). El valor de Inc es sumado a (ó restado si se especifica “-“) Counr..14. Si el loop necesita contar más de 255 (Count > 255). Si se indica un valor Location. éste indica la dirección de comienzo para guardar los datos. 10 5. N2400. El valor de Start se asigna a la variable índice. en lugar de producir código. DTMFOUT usa FREQOUT para generar los tonos duales.1. se debe usar una variable de tamaño word. Tone 10 es la clave *. ENABLE ENABLE ENABLE interrumpe el procesamiento que fue previamente deshabiliyado con DISABLE. DISABLE ‘Deshablita interrupciones en el handler Myint: led = 1 ‘enciende el LED cuando es interrumpido Resume ‘Vuelve al programa principal Enable ‘ENABLE interrumpe después del handler 5.} [Tone {. Tone 11 es la clave #.15. [10] ´ envía un avance de línea . Usualmente se necesita algún tipo de filtro para suavizar la señal hasta una forma de onda senoidal quitándole algunas armónicas generadas: DTMFOUT trabaja mejor con un oscilador de 20 Mhz.ej. FREQOUT genera tonos usando una forma de modulación de ancho de pulso. 0 . ó una variable que contenga un número de 0 a 15 (p. ´ enviar DTMF tones para 212 en Pin1 DTMFOUT PORTB. Los tonos de 0 . [10. aunque será muy difícil de filtrar y tendrá muy baja amplitud. Offms. Se puede usar WRITE para colocar valores en el EEPROM en el momento de la ejecución. Body es opcional y puede ser omitido (quizás por un loop de demora). por defecto Onms es 200 ms y Offms es 50 ms. Pin debe ser una constante.9 son los mismos que en un teclado telefónico. 2 ] 5.13.. es mejor describirla paso a paso.15. EEPROM 5. Vea ON INTERRUPT para más información. 20. no se ejecutará hasta que se encuentre un ENABLE. NEXT permite a los programas ejecutar un número de declaraciones (Body) un número de veces. EEPROM solo trabaja con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84. No se agregan automáticamente terminadores. END 5. {Onms.´ Enviar el texto “B0=” seguido por el valor decimal de B0 y un avance de línea (linefeed) serialmente a la salida DEBUG “B0=” .

Pin0 en salida y lo coloca en valor alto (-5 volt) Led var PORTB.ej. durante Onms milisegundos. paridad par. (p. Label. Por esto debe usarse un driver adecuado con HSERIN. las subrutinas pueden llamar a otra subrutina.0) HIGH 0 ´ convierte Pin0 en salida y lo coloca en valor alto (-5 volt) HIGH PORTA. Pin puede ser una constante.15. El programa continuará en este punto si se recibe un carácter con error de paridad. Timeout está especificado en unidades de 1 milisegundo. Onms.17.18. En otras palabras.Para mantener una relación de baud rate apropiada con otros valores de oscilador. Cualquier otra frecuencia causará que FREQOUT genere una frecuencia proporcional al oscilador comparado a 20 Mhz. Frequency2} Produce la ó las frecuencias especificadas en el Pin. PORTA. use DEFINE para especificar el nuevo valor OSC. 0 ´ define el pin LED HIGH led ´ convierte el Pin LED en salida y lo coloca en valor alto (-5 volt) Como alternativa. 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 transmisión en transmisión habilitada DEFINE HSER_TSTA 20h ´ coloque baud rate DEFINE HSER_BAUD 2400 HSERIN asume un oscilador de 4 Mhz cuando calcula el baud rate . 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 declaración.} [Item {. HSERIN HSERIN {ParityLabel. Dado que la recepción serial se realiza por hardware. GOSUB beep ´ ejecuta la subrutina beep Beep: high 0 ´ enciende el LED conectado a Pin0 Sound 1. 1 stop bit) ó 7 O 1 (7 bits de datos. [# B2. . HIGH HIGH Pin Hace de valor alto el Pin especificado y lo convierte automáticamente en salida. aunque será muy difícil de filtrar y tendrá muy baja amplitud.232. 1000 ´ Enviar un tono de 1 Khz al Pin1 durante 2 segundos 5.FOR B2=20 TO 10 STEP -2 ´ cuenta de 20 a 10 de a 2 Serout 0. A diferencia del GOTO. guardando su dirección de regreso en la pila (stack). cuando se llega a un RETURN.20.} {Timeout. Pin se convierte automáticamene en salida. 10] ´ hace sonar el parlante conectado a Pin1 Low 0 ´ apaga el LED conectado a Pin0 Return ´ vuelve a la rutina principal 5. la ejecución sigue con la declaración siguiente al último GOSUB ejecutado.0 ´ convierte PORTA. 7E1 (7 bits de datos. GOTO send ´ salta a la declaración etiquetada send Send: serout 0. [ ” Hi”] ´ envía “Hi” como salida al Pin0 en forma serial 5. FREQOUT PORTB. Solo debe ser usado si se habilitó paridad con un DEFINE anterior.1. no es posible invertir los niveles para eliminar un driver RS . 8 bits de datos. También puede trabajar con uno de 10 Mhz y aún con uno de 4 Mhz. Cada anidamiento no debe ser mayor de cuatro niveles.21. El formato por defecto de los datos seriales es 8N1. GOSUB GOSUB etiqueta Salta a la subrutina indicada en la etiqueta. 2000. ó una variable que contenga un número 0 .0). 0 . Se puede usar un número ilimitado de subrutinas en un programa y pueden estar anidadas. 5. Timeout y Label pueden ser incluídos en forma opcional para permitir al programa continuar si un carácter no es recibido dentro de un límite de tiempo. Pin puede ser una constante.0 = 1 ´ setea PORTB Pin0 a valor alto.ej. ““] ´ envía cada número al pin0 en forma serial NEXT B2 ´ vuelve y efectúa la próxima cuenta Serout 0. Sólo puede ser usada en dispositivos que posean hardware USART. [ 10 ] ´ envía un avance de línea 5. . . 0-15. si el pin ya es salida.N2500. sin paridad y 1 stop bit.15.ej. Usualmente se necesita algún tipo de filtro para suavizar la señal hasta una forma de onda senoidal quitándole algunas armónicas generadas: FREQOUT trabaja mejor con un oscilador de 20 Mhz. FREQOUT genera tonos usando una forma de modulación de ancho de pulso. [80. N2400.. Vea la hoja de datos del dispositivo para información de los pin seriales de entrada y otros. FREQOUT FREQOUT Pin. HSERIN es una de varias funciones seriales asincrónicas pre-construídas. GOTO GOTO etiqueta La ejecución del programa continúa en la declaración de la etiqueta. Puede producir una ó dos frecuencias de 0 a 32767 Hz al mismo tiempo.19. N2400. B0) ó un número de pin (p.}] Recibe uno ó más Items de un port serial (de hardware) en dispositivos que soportan comunicaciones seriales asincrónicas por hardware. Frequency1 {. Los datos en bruto que salen del pin son bastante horribles.ej. B0) ó un número de Pin (p. ó una variable que contenga un número de 0-15 (p. hay una forma más rápida y corta de setearlo en valor alto (desde un codigo generado standpoint): PORTB. PORTA.

Los 7 bits superiores del byte de Control contienen el código de control junto con la selección del chip e información adicional de dirección. Vea la hoja de datos del dispositivo para información de los pin seriales de entrada y otros. Para mantener una relación de baud rate apropiada con otros valores de oscilador. 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 transmisión en transmisión habilitada DEFINE HSER_TSTA 20h ´ coloque baud rate DEFINE HSER_BAUD 2400 HSEROUT asume un oscilador de 4 Mhz cuando calcula el baud rate. I2CREAD DataPin.23. no es posible invertir los niveles para eliminar un driver RS . HSEROUT soporta los mismos modificadores de datos que SEROUT2. Esto permite guardar datos en una memoria externa no volátil. Si se usa la opción Label. 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 Tamaño dirección 1 byte 1 byte 1 byte 1 byte 1 byte 2 bytes 2 bytes bbb = bits de selección de block (direcciones de orden alto) ddd = bits de selección de dispositivo xxx = no importa El tamaño de dirección enviado (byte ó word) es determinado por el tamaño de la variable usada. si no se recibe un reconocimiento del dispositivo I2C.HSERIN soporta los mismos modificadores de datos que SERIN2. ó un número de Pin (p. Label} Envía los bytes de Control y opcionalmente los de Address. cuando comunicamos con un 24LC01B. 8 bits de datos. ´ enviar el valor decimal de B0 seguido por un linefeed a través del USART HSEROUT [dec B0. se envía una dirección de 16 bits. Item}] Envía uno ó más Items al port serial de hardware en dispositivos que soportan comunicaciones seriales asincrónicas por hardware.. para que sean mantenidos aún sin energía conectada. Refierase a la sección de SERIN2 para mayor información. PORTA.Si se envía una variable de tamaño word. use DEFINE para especificar el nuevo valor OSC. Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx.} [Var {.All rights reserved. I2CREAD Copyright ©2001 microEngineering Labs.ej. Asegúrese de usar una variable apropiada al dispositivo a comunicar.El bit inferior es una bandera interna que indica si es un comando de lectura ó escritura y no se debe usar. Sólo puede ser usada en dispositivos que posean hardware USART. Refiérase a la sección de SEROUT2 para mayor información. a través del ClockPin y el DataPin y guarda los bytes recibidos dentro de Var. Inc. paridad impar. 1 stop bit) ó 7 O 1 (7 bits de datos.232. por lo que el byte de Control será %10100000 ó $A0. dependiendo de cada dispositivo . una variable que contenga un número (p. sin paridad y 1 stop bit. . Var . HSEROUT HSEROUT [Item {.22. Si se especifica Var con tamaño word. Control. Estos comandos funcionan en modo I2C master y también son usados para comunicarse con otros dispositivos con interfase I2C. 0-15. HSEROUT es una de varias funciones seriales asincrónicas pre-construídas. Por ejemplo. paridad par. Este formato para el byte de Control es diferente al usado por el PBP original. HSERIN [B0.. se saltará a ella. como Microchip 24LC01B ó similar. ClockPin. ClockPin y dataPin pueden ser constantes.0) I2CREAD y I2CWRITE pueden ser usados para leer y grabar datos de un EEPROM serial usando una interfase I2C de 2 cables. 10] 5. 7E1 (7 bits de datos. {Address. como sensores de temperatura y convertidores A/D. se leen 2 bytes y se guarda primero el de mayor orden y luego el de orden inferior dentro de Var. 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 recepción serial se realiza por hardware.ej. Por esto debe usarse un driver adecuado con HSEROUT.. el código de control es %1010 y no se usa la selección de chip. B0). Asegúrese de usar este formato en operaciones PBP I2C.}] {. El formato por defecto de los datos seriales es 8N1. dec W1] 5. Simplemente especifique los nombres de pin de las líneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa. Este orden es el inverso al que se osa normalmente con variables. Si se usa una variable con tamaño byte se envía una dirección de 8 bits.

Asegúrese de usar una variable apropiada al dispositivo a comunicar. 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.. Si se desea acceder un dispositivo de velocidad standard a 8 Mhz.24. Cualquier otro valor es cierto.} THEN Label IF Comp {AND/OR Comp . Label} Envía los bytes de Control y opcionalmente los de Address. Aunque una sola declaración I2CWRITE puede ser usada para grabar múltiples bytes simultaneamente.1. [6] Pause 10 ´ espera 10 ms que se complete la grabación addr =1 ´ coloca la dirección en 1 ´ envía el byte en B2 a la dirección 1 I2CWRITE PORTA.0 Then itson ‘si PORTB.. Si se usa la opción Label.1. Las comparaciones que dan 0 se consideran falso.. la prioridad de los operadores lo determina y el resultado puede no ser el esperado.. . PORTA... PORTA. 0-15. PORTA. Cuando se escribe un EEPROM serial. ClockPin y DataPin pueden ser constantes. Dispositivos rápidos (400 Mhz) pueden ser usados hasta 20 Mhz.. 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 líneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa. De una forma.. Value . 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. 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 líneas de datos pueden ser empujados a Vcc con un resistor de 4-7 K de acuerdo al siguiente esquema. IF. Si se envía una variable de tamaño word.THEN puede ejecutar condicionalmente un grupo de declaraciones que sigan al THEN.. ClockPin.. se ignorará el acceso.ej. salta a la etiqueta pushd If B0 >=40 Then old ‘si el valor en la variable B0 es mayor ó igual a 40. Asegurese de usar paréntesis para especificar el orden en que se deben realizar las operaciones. Si la condición es falsa.} [Value {.. I2CWRITE I2CWRITE DataPin.. addr var byte cont con %10100000 addr =17 ´ coloca la dirección en 17 ´ lee datos de la dirección 17 y los deja en B2 I2CREAD PORTA. Las declaraciones deben estar seguidas por un ELSE o un ENDIF para completar la estructura. Si lo considera falso. antes de intentar comunicarse nuevamente con el dispositivo. THEN evalúa la comparación en términos de CIERTO o FALSO. addr. con. cont. DEFINE I2C_INTERNAL 1 Vea las hojas de datos de Microchip para más indormación. si no se recibe un reconocimiento del dispositivo I2C. no se ejecuta la operación posterior al THEN. {Address. ó un número de Pin (p. el programa irá hacia la etiqueta que sigue al THEN. B0). ya que ambos trabajan en modo de colector abierto.0. If Pin0 = 0 Then pushd ‘si el botón conectado al pin 0 es oprimido (0). sino que debe ser una etiqueta. es necesario esperar 10 ms (dependiendo del dispositivo) para completar la grabación. Todas las comparaciones son sin signo.} THEN Declaración ELSE Declatación ENDIF Efectúa una ó más comparaciones..}] {. una variable que contenga un número (p. Cada término Comp puede relacionar una variable con una constante ú otra variable e incluye uno de los operadores listados anteriormente. THEN es esencialmente un GOTO.DEFINE I2C_INTERNAL 1 Vea las hojas de datos de Microchip para más indormación. Otra declaración no puede ser puesta después del THEN. Si se usa una variable con tamaño byte se envía una dirección de 8 bits.0) El tamaño de dirección enviado (byte ó word) es determinado por el tamaño de la variable usada.THEN. addr. Control. La opción de grabación múltiple puede ser útil con dispositivos I2C que no deban esperar entre grabaciones. cont.0. 1. salta a itson If (B0 = 10) AND (B1 = 20) Then loop En la segunda forma.. 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 dirección en 17 ´ envía el byte 6 a la dirección 17 I2CWRITE PORTA.THEN puede operar de dos maneras. Si la condición es cierta. pin 0 es alto (1). a través del ClockPin y el DataPin seguidos por Value.. Dispositivos rápidos (400 Mhz) pueden ser usados hasta 20 Mhz. PORTA. De otra manera. [B2 ] Pause 10 ´ espera 10 ms que se complete la grabación 5. Revise la hoja de datos del dispositivo que esté usando. el programa va a continuar hacia la próxima línea después del IF. el THEN en un IF.ej.25 IF. Si se intenta un I2CWRITE ó I2CREAD antes que se complete la grabación.. IF. 5.. Algunos permiten grabar múltiples bytes en una página simple antes de necesitar una espera. IF. [B2] Vea el libro Microchip “NON VOLATILE MEMORY PRODUCTS” para mayor información de este ú otros dispositivos que pueden ser usados con los comandos I2CREAD y I2CWRITE.THEN IF Comp {AND/OR Comp . 0. salta a old If PORTB. se saltará a ella. addr. Si lo considera cierto. se ejecuta la operación posterior al THEN.. ya que PBP solo soporta operaciones sin signo. se puede violar los requerimientos de tiempo de grabación para los EEPROM seriales. se envía una dirección de 16 bits.

inicializa el LCD como un visor de dos líneas. LCDOUT también puede usar cualquiera de los modificadores usados con SEROUT2.1 Endif If B0 = 20 Then led = 1 Else led = 0 Endif 5. Además.3. usando un bus de 4 bit o uno de 8 bit. B0) o el nombre de un pin (p. LCDOUT $FE. ya que el comando de LCDOUT solamente es de grabación. Estos LCD. 1..PORTA. $0C $FE. 2 $FE. Los visores 16x1 usualmente están formateados como visores de 8x2. todos los 8 bits deben estar en un port. 1 $FE. R/W debe estar colocado a tierra. El Value puede ser una constante. Los visores de 4 líneas. Vea la hoja de datos para el dispositivo LCD. coloque uno o más de los siguientes DEFINEs. $0E $FE.If B0 <> 10 Then B0 = B0 + 1 B1 = B1 . Enable y Register Select deben estar conectados a algún pin del port. PORTA.0). la representación ASCII para cada dígito es enviada al LCD. también tienen un mapa de memoria no ordenado.28. La palabra clave LET. INPUT INPUT Pin. Register Select a PORTA. Si se usa un bus de 4 bit.0 ‘convierte el PORTA. Para cambiar este seteo. Refiérase a la sección previa acerca de operadores para más información. por lo menos. LCDOUT LCDOUT Item {. $C0 Hace que el visor comience a escribir caracteres en el principio de la segunda línea.} Muestra Items en un visor de cristal líquido inteligente (LCD).26. Para muchos LCD. en particular el que usted esté usando. Convierte el Pin especificado en una entrada. Si el signo (#) está colocado antes de un Item. ejj. o una variable que contenga un número 0-15 (p. con las líneas de data DB4 . LET B0 = B1 * B2 + B3 B0 = Sqr W1 5. enviando un $FE seguido por el comando. es opcional. Para muchos visores 16x2..0 . $10 $FE. Asume que el LCD va a ser usado con un bus de 4 bits. Un programa debe esperar. INPUT 0 ‘convierte el Pin0 en entrada INPUT PORTA. usualmente. con un salto entre las locaciones de memoria para los primeros y segundos caracteres de 8. El comando: LCDOUT $FE. Si se usa un bus de 8 bit. en el comienzo de su programa PBP: .4 y Enable a PORTB. tienen un cabezal de 14 o 16 pins simples o duales en un extremo. por sí misma. {LET} {LET} Var = Value Asigna un Value a una Variable. Item.3. ej. “Hello” ‘limpia el visor y muestra “Hello” LCDOUT B0.. PBP soporta módulos LCD con un controlador Hitachi 44780 o equivalente.puede haber un salto entre las localizaciones. la primera línea comienza en $0 y la segunda. Vea la sección de SEROUT2 para más información. otra variable o el resultado de una expresión. debe estar conectado o a los 4 bit inferiores o a los 4 bit superiores de un port. Los comandos son enviados al LCD. 0-15. todos en mayúsculas. medio segundo antes de enviar el primer comando a un LCD..27. Algunos comandos útiles se muestran en la siguiente tabla: Comando $FE. el pin puede ser colocado como entrada de una forma más rápida y corta (desde un código generado standpoint): TRISB. #B1 El LCD puede estar conectado al micro Pic.0 =1 ‘Setea el PORTB. $C0 Operación Limpia visor Vuelve a inicio (comienzo de la primera línea) Cursor apagado Subrayado del cursor activo Parpadeo del cursor activo Mueve cursor una posición hacia la izquierda Mueve cursor una posición hacia la derecha Mueve cursor al comienzo de la segunda línea Note que hay un comando para mover el cursor al comienzo de la segunda línea en un visor de dos líneas. $0F $FE. Pin debe ser una constante.DB7 conectadas en el micro Pic a PORTA. en $40. a menos que se le diga de otra manera. Puede tomar bastante tiempo a un LCD arrancar. los caracteres y líneas mostrados no son consecutivos en la memoria del visor . $14 $FE. 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. pin 0 en entrada En forma alternativa. para las locaciones de memoria de caracter y comandos adicionales. PBP supone que el LCD está conectado a pins específicos.

no se toma ninguna acción y Var permanece sin cambios. {Test} [Value {.. Si no se encuentra. Si la lista consiste solamente de constantes y sartas de 8 bits. B1 ´ obtiene el carácter B0 de la sarta y lo deja en B1 Serout 0. LOW LOW Pin . Si Index es 1.30. La lista de constantes puede ser una mezcla de constantes numéricas y sartas. La lista de constantes puede ser una mezcla de constantes numéricas y sartas. Si la lista consiste solamente de constantes y sartas de 8 bits. aunque pueden ser usadas como valor Index Las variables de array con índice variable no pueden ser usadas en LOOKUP2. 512. no se toma ninguna acción y Var permanece sin cambios. el índice de la constante es guardado en Var así. use LOOKDOWN. B0 5. Value. Var = 0. El parámetro opcional Test puede ser usado para efectuar una busqueda distinta a la igualdad (“=”). aunque variables de array con índice constantes son permitidas. N2400. < [10. Si Index es mayor ó igual que el número de entradas en la lista.. B0 ´ Obtiene un carácter hexadecimal de pin1 en forma serial LOOKDOWN B0. aunque pueden ser usadas como valor Search Las variables de array con índice variable no pueden ser usadas en LOOKDOWN2.4. LOOKUP2 genera un código 3 veces más grande que LOOKUP. Si Index es mayor ó igual que el número de entradas en la lista de constantes.5. aunque variables de array con índice constantes son permitidas. Var La declaración LOOKDOWN busca en una lista de 8 bit los valores Constant que coincidan con un valor Search.29. Var LOOKUP puede ser usado para obtener valores de una tabla de constantes de 8 bits. Var La declaración LOOKDOWN2 busca un valor Search en una lista de Values. Var toma el valor del primer Value. Cada carácter en una sarta es tratado como una constante separada con el valor del carácter ASCII. Si es el segundo. 1024]. LOOKUP LOOKUP Index. aunque variables de array con índice constantes son permitidas. Var toma el valor del segundo Value y así sucesivamente. use LOOKUP. [Constant {. Las variables de array con índice variable no pueden ser usadas en LOOKUP. Si no se encuentra. Constant.32. [512. 1024]. Var toma el valor de la primer Constant.. [#B1] ´ Envía un valor decimal a pin0 en forma serial 5. LOOKUP2 B0. se puede buscar el primer Value que sea mayor que el parámetro Search usando (“> “ ).‘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 tamaño 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. [256.}]. For B0=0 to 5 ´ cuenta de 0 a 5 LOOKUP B0. aunque variables de array con índice constantes son permitidas. 1000].Por ejemplo. Cada carácter en una sarta es tratado como una constante separada con el valor del carácter ASCII. N2400.31. sucesivamente.. no se toma ninguna acción y Var permanece sin cambios. N2400. [“0123456789ABCDEF”]. Var LOOKUP2 puede ser usado para obtener entradas de una tabla de Values. LOOKDOWN2 genera un código 3 veces más grande que LOOKDOWN. W1 5. [Constant {. Si se encuentra.}]. El siguiente esquema muestra una forma de conectar un LCD a un micro Pic: 5. B1 ´ Convierte el carácter hexadecimal en B0 a un valor decimal B1 Serout 0. 100. si el valor es el primero de la lista.}].33. Var = 1 y así. Serin 1. Register Select en el PORTB. LOOKDOWN2 W0. Si es el segundo. se asume (“=”). LOOKDOWN2 LOOKDOWN2 Search. W1. sucesivamente. Si Index es cero. Cada carácter en una sarta es tratado como una constante separada con el valor del carácter ASCII. y Enable en el PORTB.. Value. Var = 1 y así. Var toma el valor de la segunda Constant y así sucesivamente.. B0 LOOKDOWN2 W0. La lista de Values puede ser una mezcla de constantes numéricas y sartas en 16 bits y variables. si el valor es el primero de la lista. Constant. Si Index es cero. Si no se indica nada. no se toma ninguna acción y Var permanece sin cambios. Cada carácter en una sarta es tratado como una constante separada con el valor del carácter ASCII. [Value [. Var = 0. Si lo encuentra. le dirá a PBP que hay conectado un LCD de 2 líneas en modo de 4 bit con el bus de datos en los 4 bit inferiores de PORTB. el índice de la constante es guardado en Var así. [“Hello “]. La lista de Values puede ser una mezcla de constantes numéricas y sartas en 16 bits y variables. LOOKUP2 LOOKUP2 Index. LOOKDOWN LOOKDOWN Search.}]. [B1] ´ envía el carácter en B1 al Pin0 en forma Serial Next B0 ´ va al segundo carácter 5.. Si Index es 1. Las variables de array con índice variable no pueden ser usadas en LOOKDOWN. No se pueden usar expresiones en una lisia de Values. No se pueden usar expresiones en una lisia de Values..

el pin puede ser convertido en salida de una manera más rápida y corta (con un código generado standpoint).. O el handler puede ser colocado antes que la declaración ON INTERRUPT ya que la bandera de interrupciones no se chequea antes del primer ON INTERRUPT en un programa. para chequear si ocurre ó no una interrupción. ON INTERRUPT agregará una instrucción después de cada declaración.0 ´ convierte PORTA pin 0 en salida En forma alternativa. las instrucciones adicionales no son un problema... OUTPUT OUTPUT Pin Convierte el pin especificado en salida.ej. +o una variable que contenga un número 0-15 (p. Pin puede ser una xonstante. DISABLE elimina la posibilidad de usar esta instrucción y ENABLE la habilita. Latencia es el tiempo entre el pedido de interrupción y el momento en que se ingresa en el handler de interrupciones. B0) ó un nombre de pin (p. B0) ó un número de Pin (p. Los períodos indicados son solo aproximados. La primera es escribir una subrutina de interrupción en LEnguaje ensamblador.ej. PORTA. Normalmente.ej. ó una variable que contenga un número de 0-15 (p.ej. Overhead es otro tema. DISABLE ´ deshabilita las interrupciones en el Handler Myint: led=1 ´ enciende el LED con una interrupción RESUME ´ vuelve al programa principal ENABLE ´ habilita las interrupciones después del Handler Para deshabilitar permanentemente las interrupciones (ó hasta que se necesiten).. 0 ´ Coloca PORTA. Como NAP usa el Watchdog Timer es independiente de la frecuencia del oscilador.Este método se discute más adelante..34. se marca con una bandera. Pin puede ser una constante.0) OUTPUT 0 ´ convierte pin 0 en salida OUTPUT PORTA. porque el tiempo se deriva del Watchdog Timer que está controlado por R/C y puede variar de chip a chip y también con la temperatura.. Durante este NAP. se reduce al mínimo el consumo de energía. PBP no ingresará al handler BASIC de interrupciones hasta que haya terminado de ejecutar la declaración en curso. 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. en la sección avanzada. DISABLE y ENABLE permiten que distintas secciones de un programa PBP se ejecuten sin la posibilidad de ser interrumpidas.) en milisegundos 18 36 72 144 288 576 1152 2304 NAP 7 ´ pausa en baja potencia por aprox.ej. puede existir una latencia considerable hasta que se ingrese a la rutina de interrupciones. NAP NAP Period Coloca al micro controlador en modo de baja potencia por períodos de tiempo reducidos. PORTA. tomando todo como lo dejó. 0-15. es más rápido corto usar un código ya generado: PORTB. Period 0 1 2 3 4 5 6 7 Demora (aprox. 3 segundos 5. pero programas largos en pequeñas computadoras si lo son. El segundo método es escribir un handler (manejador) de interrupciones PBP. se debe usar una rutina en lenguaje ensamblador. el programa salta al handler de interrupciones indicado en Label. coloque INTCON en $80 INTCON = $80 5. ON INTERRUPT ON INTERRUPT GOTO Label Permite el manejo de las interrupciones del micro controlador por medio de una subrutina PBP. Se puede usar más de un ON INTERRUPT en un programa: ON INTERRUPT GOTO myint ´ el handler de interrupciones es myint INTCON = %10010000 ´ habilita la interrupción RB0 .0) LOW 0 ´ Coloca el Pin9 en salida y nivel bajo (9 volt) LOW PORTA. Cuando ocurre una interrupción. una vez que se usó ON INTERRUPT. una declaración RESUME envía el programa de vuelta a donde estaba cuando ocurrió la interrupción. Existen dos formas de manejar interrupciones usando PBP. Si la declaración es PAUSE ö SERIN..0 = 0 ´ coloca en nivel bajo el pin0 de PORTB 5.Coloca el pin especificado en valor bajo y automáticamente lo convierte en salida. Como las declaraciones de PBP no son reentrantes (p. no se puede ejecutar una declaración mientras se está ejecutando una anterior).0 como salida y en nivel bajo (0 volt) Led var PORTB. Esta es la forma de manejar interrupciones con la menor latencia y el menor overhead . El lugar más notorio para usar DISABLE es justo antes del actual handler de interrupciones. Cuando la ejecución de la declaración PBP que se estaba ejecutando termina. Una vez que termina el trabajo del handler. Si esta es inaceptable y las interrupciones deben ser manejados más rapidamente. pero termina con un RESUME.35. Es similar a una subrutina PBP.. 2.36. . puede demorarse bastante hasta que sea reconocida la interrupción. 0 .. Se debe diseñar el programa tomando en cuenta esta latencia.15.

Var debe ser cero para mínma resistencia y 255 para máxima resistencia.38. Var Lee el registro del micro controlador en la dirección Address especificada y guarda la lectura en Var. PORTD. PEEK PEEK Address.Period tiene 16 bit. (Un poco más de 1 minuto). OSC 3(3. PORTE y sus registros asociados de dirección de datos (TRIS). 0 . Scale se usa para ajustar distintas constantes RC. TRISA = 0 ´ setea todo PORTA como salidas) PORTA. PEEK. PEEK y POKE permiten acceso directo a los registros del microPIC incluyendo PORTA. POT POT Pin. Scale debe ser determinada en forma experimental. Var Lee un potenciómetro (ú otro dispositivo resistivo) en Pin. 3. PORTA. consume mayor potencia. 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. Para ésto. PEEK y POKE operan en todos los bits de un registro simultaneamente. La tabla siguiente muestra el número mínimo de microsegundos obtenible para una determinada frecuencia de oscilador. pero es más exacto. consume mayor potencia. Si el valor de Scale es correcto. como convertidores A/D y ports adicionales pueden ser leídos usando PEEK. PAUSEUS 1000 demora de 1 segundo 5. como convertidores A/D y ports adicionales pueden ser leídos usando PEEK. Scale. Vea la sección sobre velocidad para mayores detalles. no solamente un bit individual. Desafortunadamente.535 milisegundos. PAUSE tiene un número mínimo de ciclos para operar. B0 ´ lee el potenciómetro en pin 3 para determinar Scale Serout 0. Para constantes RC grandes. Vea la sección sobre velocidad para mayores detalles. Inclusive. se actualiza el port completo. se debe indicar usando el comando DEFINE OSC.535 milisegundos. Opciones especiales del microPIC. Opciones especiales del microPIC.0 = 1 ´ setea alto el bit 0 de PORTA 5. N2400. se debe indicar usando el comando DEFINE OSC.39. State. 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. No coloca el micro controlador en modo de baja potencia como las otras funciones de retardo (NAP y SLEEP). PULSIN PULSIN Pin. Scale debe ser máxima (255).40. Cuando se hace un POKE de datos a PORTA. Tiene la misma precisión que el clock. por lo que los retardos pueden ser de hasta 65. coloque el dispositivo a medir en máxima resistencia y midalo con Scale=255. PAUSE 1000 demora de 1 segundo 5. Pin puede ser una constante. Tiene la misma precisión que el clock..0) La resistencia se mide tomando el tiempo de descarga de un capacitor a través de un resistor (5 K a 50 K). POKE POKE Address. Si se usa un oscilador de otra frecuencia. PORTC. (Este es el mismo tipo de proceso que efectúa la opción ALT-P en BS1).42. PORTA. Para constantes RC pequeñas. Inclusive. B0 = PORTA toma el estado actual de PORTA y lo coloca en B0 5. PORTB. Si se usa un oscilador de otra frecuencia.37. POT. Period tiene 16 bit. Value Graba Value en el registro del micro controlador en la dirección Address especificada. Como depende de la frecuencia del oscilador. No coloca el micro controlador en modo de baja potencia como las otras funcion de retardo (NAP y SLEEP).41. Scale debe ser baja (valor mínmo 1).ENDASM.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. B0) ó un número de Pin (p. Se recomienda usar el acceso directo y no PEEK y POKE. PAUSEUS PAUSEUS Period Detiene el programa por Period milisegundos. POKE $85.15 ó una variable que contenga un número de 0-15 (p. Se recomienda usar el acceso directo y no PEEK y POKE. 255. Var tendrá un valor apropiado de Scale. por lo que los retardos pueden ser de hasta 65. PAUSE asume la frecuencia de 4 Mhz del oscilador. no es posible obtener demoras menores a un número mínimo de microsegundos usando PAUSEUS. Para obtener demoras precisas. [#B0] ´ envia el valor del potenciometro en forma serial al pin 0 5.ej. menores que esto use una rutina ensambladora tipo ASM. En estas condiciones. pero es más exacto.58) 4 8 10 12 16 20 Demora mínima 20us 24us 12us 8us 7us 5us 3us PAUSEUS asume la frecuencia de 4 Mhz del oscilador.. PAUSE PAUSE Period Detiene el programa por Period milisegundos . Var .ej.TRISB.

0 . W0 ´lee el potenciómetro en pin 3 5. Cycle Envía un tren de pulsos modulados en ancho a Pin.ej. Var. PWM PORTB. El ancho medido se coloca en Var.43. Si se usa un oscilador de 20 Mhz. Pin puede ser una constante. pero es usado al final de un handler de interrupciones PBP. Duty.15. Pin puede ser una constante. durante 100 ciclos 5. RCTIME RCTIME Pin. como para guardar el resultado. Pin se convierte en salida justo antes de la generación del pulso y vuelve a ser entrada. Un circuito R/C se puede usar como un simple convertidor D/A.45. Si State es uno.3 ´ descarga el capacitor para comenzar Pause 10 ´ descarga por 10 mseg. Si se usa una variable de 8 bit. RCTIME PORTB. RESUME RESUME {Label} Vuelve al lugar del programa que se abandonó. Period Genera un pulso en Pin.ej. Si se usa un oscilador de 4 Mhz. B2 ´ coloca en B2 el valor de la dirección 5 del EEPROM 5. State. se devuelve 0 Low PORTB. el Period del pulso generado estará en incrementos de 10 us .15.ej.0) RCTIME puede usarse para leer un potenciómetro (ó cualquier dispositivo resistivo).44. pero se permite usar variables de array con índice constante. Esta instrucción solo puede ser usada con un microPIC que tenga un EEPROM incorporado como el PIC16F84 ó PIC16C84 READ 5.0) La resolución de PULSOUT depende de la frecuencia del oscilador. Mide el tiempo que un Pin permanece en un estado State determinado Básicamente es la mitad de un PULSIN. Var se usa tanto como origen.47. no será accesible. ´envia un pulso de 1 mseg. No se pueden usar variables de array con índice variable. El algoritmo pseudo-aleatorio usado tiene un paso de 65535 (el único número que no produce es el cero).a pin 5 (a 4 Mhz) PULSOUT PORTB. PORTA. Con un oscilador de 20 Mhz el largo aproximado será de 1 mseg.ej. y guarda el resultado en Var.Si se usa un oscilador de 20 Mhz.0) Cycle depende de la frecuencia del oscilador. PORTA. el tiempo estará en incrementos de 10 us. El ciclo útil Duty para cada ciclo varía de 0 (0%) a 255 (100%= . PORTA. el tiempo tendrá una resolución de 2 us. Cada ciclo de PWM está compuesto de 256 pasos. después que termina de procesarse una interrupción. 0 . ó una variable que contenga un número de 0-15 (p. RANDOM RANDOM Var Efectúa una iteración pseudo-aleatoria en Var. Si se usa un oscilador de 4 Mhz. Var=0. Con un oscilador de 4 Mhz. De largo. 1. cualquier otra dirección de retorno. Gosub sub1 ´ va a la subrutina denominada sub1 . por lo que la polaridad del pulso depende del estado inicial del pin. Si se usa un oscilador de 20 Mhz. La resolución siempre cambia con la velocidad del oscilador en uso. solo se usan los bits menos significativos de la medición de 16 bits. el ancho de pulso se obtiene en incrementos de 10 us. La resolución de RCTIME depende de la frecuencia del oscilador. Var Lee el EEPROM incorporado en la dirección Address. 100 ´ envía una señal PWM con un ciclo útil del 50% al pin 7. Clockint: seconds=seconds+1 ´cuenta tiempo RESUME ´vuelve al programa después de la Interrupción error: high errorled ´enciende el led de error RESUME restart ´ vuelve a algun otro lugar 5. ó el ancho del pulso es demasiado grande para ser medido. B0) ó un número de Pin (p.Mide el ancho del pulso en Pin.15 ó una variable que contenga un número de 0-15 (p. se mide el ancho de un pulso alto. RESUME es similar a RETURN. Es necesario usar algún tipo de filtro para convertirla en algo útil. Definir un valor de OSC no tiene efectos sobre PULSOUT.El ciclo PWM es repetido Cycle veces. Si se usa el Label opcional. 0.15. B0) ó un número de Pin (p. 127. ´ mide el pulso alto en pin 4 guardado en W3 PULSIN PORTB. ó una variable que contenga un número de 0-15 (p. Var debe ser una variable de 16 bit. Retoma la ejecución en la declaración que sigue al GOSUB que llamó la subrutina.ej. 0 . RETURN RETURN Vuelve desde una subrutina. el ancho de pulso tendrá una resolución de 2 us. la ejecución del programa va a continuar en este Label y no donde estaba el programa cuando ocurrió la interrupción .5. La resolución siempre cambia con la velocidad del oscilador en uso. Definir un valor de OSC no tiene efectos sobre PULSIN.7. Si el flanco del pulso no llega. ó una variable que contenga un número de 0-15 (p. PORTA. RANDOM W4 ´coloca un número aleatorio en W4 5. Si el pin no cambia de estado. READ READ Address. W3 5.46. Period una resolución de 2 us . El pulso se genera activando dos veces el pin. 0 . Pin puede ser una constante. y no tiene forma de onda cuadrada. 100 5. con un Period especificado. Si se usa un oscilador de 4 Mhz. B0) ó un número de Pin (p. cada Cycle será de aproximadamente 5 mseg.ej. El tiempo de Cycle siempre cambia con la velocidad del oscilador en uso.Definir un valor de OSC no tiene efectos sobre PULSOUT. Pin puede ser una constante.48.0) La resolución de PULSIN depende de la frecuencia del oscilador.ej.49.4. B0) ó un número de Pin (p. La resolución siempre cambia con la velocidad del oscilador en uso. Vea ON INTERRUPT para mayor información. PULSEOUT PULSEOUT Pin. Definir un valor de OSC no tiene efecto sobre PWM.En este caso. La resistencia puede ser medida descargando un capacitor a través de un resistor (5 K a 50 K) y midiendo el tiempo de carga (ó viceversa). cuando cesa. La salida de PWM en un pin tiene mucho ruido.ej. PWM PWM Pin.3. Si State es cero se mide el ancho de un pulso bajo.

el valor del carácter ASCII recibido es guardado en la variable .. Mode.12 3313 1646 813 . Una vez que se completan los calificadores. Para usarlos. Pin puede ser una constante. Los bits de baud rate especifican el el tiempo de bit en microsegundos -20. el próximo hyte recibido es comparado con el primer Item de la lista de calificación). Para encontrar un valor dado. Mode se usa para especificar el baud rate y los parámetros de operación de la transferencia serial.ej.50. SERIN: SERIN Pin. [“A”]. en formato standard asincrónico. FlowPin es automáticamente habilitado para permitir la transmisión de cada carácter.. lo convierte en salida. Label.N9600) junto con un resistor limitador de corriente.15.BAS. Si algún byte recibido no concuerda con el byte siguiente de la secuencia de calificación. B0) ó un número de Pin (p..ej.ej. DataPin es colocado como entrada en forma automática.].Si la variable es precedida por el signo #. N2400. Bit 15 no se usa. SERIN 1.. SERIN convierte un valor decimal en ASCII y guarda el resultado en esa variable. Cada carácter de una sarta es tratado como un calificador individual. REVERSE: REVERSE Pin Si Pin es entrada.BAS y BS2DEFS. ó una variable que contenga un número de 0-15 (p. use la ecuación: (1000000/bayd)-20 Algunos baud rate standard se muestran en la tabla siguiente: Baud rate 300 600 1200 Bits 0 . BS1DEFS.ej. PORTA. Un Qualifier puede ser constante. usando 8 bit de datos.0) El pin opcional de control de flujo FlowPin. El carácter no-dígito que termina el valor decimal también se descarta. SERIN2 es similar al comando Serin de BS2.15 ó una variable que contenga un número de 0-15 (p. SERIN2 SERIN2 DataPin {FlowPin}. 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 incluídas para permitir al programa continuar si no se recibe un carácter durante un cierto tiempo. puede ser incluído para ayudar a que los datos no desborden la capacidad del receptor. Bit 14 selecciona nivel cierto ó invertido. La lista de Items de datos a ser recibida puede estar precedida por uno ó más calificadores encerrados entre corchetes. agregue la línea: Include “modedefs. se pueden usar entradas invertidas (N300. Label..0) Output 4 ´ convierte pin 4 en salida REVERSE 4 ´ cambia pin 3 a entrada 5.} Recibe uno ó más Items en Pin.} {[Qual.ej. {ParityLabel. B0) ó un número de Pin (p. el proceso de calificación comienza nuevamente (p. si ya está usando alguno de estos archivos. antes de recibir los datos. Los 13 bits de menor orden seleccionan el baud rate.. variable ó una sarta de constantes. N2400.51. SERIN comienza a guardar datos en la variable asociada con cada Item. DataPin y FlowPin pueden ser una constante.0) Los nombres Mode (p. Bit 13 selecciona paridad ó no paridad. Más aún. {Timeout. Los números Mode pueden ser usados sin incluir este archivo. PORTA.} {Timeout. 0 . Aunque los chips convertidores de nivel RS-232 son comunes y baratos.ej. B0 ´ espera hasta que el carácter “A” sea recibido en forma serial en el pin 1 y coloca el próximo carácter en B0 5. Pin automaticamente se convierte en entrada.. Timeout está especificado en unidades de 1 milisegundo.} [Item.} {Item. SERIN es similar al comando Serin de BS1 con el agregado de Timeout. las excelentes especificaciones de I/O de los microPIC permiten ejecutar muchas aplicaciones sin usar convertidores de nivel.. FlowPin es opcional y es automáticamente colocado como salida.BAS. 0 . sin paridad y un stop bit (8N1). ó una variable que contenga un número de 0-15 (p.BAS ya incluyen MODEDEFS..ej. lo convierte en entrada.15. Este estado habilitado es determinado por la polaridad del dato especificado en Mode. PORTA.bas” al comienzo del programa PBP.. Todos los no-dígitos recibidos antes del primer dígito del valor decimal son ignorados y descartados.. Si el nombre de variable es único.52. No lo incluya. B0) ó un número de Pin (p. T2400) están definidos en el archivo MODEDEFS. [“Lunch”] ´ envia “Lunch” al pin 0 en forma serial RETURN ´ vuelve al programa principal despues del gosub 5. Si se usa. Pin puede ser una constante.ej.] Recibe uno ó más Items en el Pin especificado en formato standard asincrónico. 0 . SERIN debe recibir estos bytes en un orden exacto. Mode. Si es salida. sub1: serout 0.

str ar] .. el el próximo byte recibido se compara con el primer item en la lista de calificadores)… Un Qualifier puede ser constante. Por ejemplo. Una variable precedida por HEX va a recibir la representación ASCII de su valor hexadecimal. variable ó una sarta de constantes. Normalmente. Por ejemplo. SKIP seguido por un contador. para usar con los drivers RS-232 .. Reciben tantos digitos como hay en la entrada. SERIN2 asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit. SERIN2 convierte un valor binario. [wait (”A”).1 stop bit). sin paridad.Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos).5} HEX{1. antes de seguir adelante. Se puede usar TTL invertido (Mode bit14 = 1) . Algunos ejemplos de Mode son: Mode = 84 (9600 baud. b0). B0 será 254. si está especificado HEX B0 y se recibe “FE”. decimal ó hexadecimal en su equivalente ASCII y guarda el resultado en esa variable. que pueden ser combinados entre sí. Si algún byte recibido no concuerda con el próximo en la secuencia de calificación. 1. Si bit 14=0. asegúrese de usar DEFINE OSC con el nuevo valor de oscilador.ej. [skip 2. (p. un contador y un carácter opcional de finalización. DEC ö HEX. si está especificado BIN B0 y se recibe “ 1000”. paridad par invertido). si está especificado DEC B0 y se recibe “123”. tlabel. dec4 B0] SERIN2 PORTA.Si bit 14=1.16} DEC{1. antes de recibir los datos. 84. Si se usa solo el nombre de la variable. B0 será 123. Cada carácter de una sarta es tratado como un calificador individual. Esto se puede usar para evitar usar drivers RS-232. Si se selecciona paridad. paridad par . Sin embargo. va a saltear esa cantidad de caracteres en el flujo de datos. Modificador BIN {1. 100. se guarda el valor del carácter ASCII.1 stop bit). DEC y HEX pueden estar seguidos por un número. B0 será 8.. SKIP 4 salteará 4 caracteres. las transmisiones seriales son 8N1 (8 bit de datos.. invertido). WAUTSTR puede ser usado como WAIT anteriormente. si un número sigue a un modificador... se reciben los datos en forma normal. los datos son recibidos como 7E1 (7 bit de datos. cierto). SERIN2 debe recibir estos bytes en un orden exacto. SERIN2 siempre recibirá ese número de dígitos. se saltará a la etiqueta indicada si se recibe un carácter con error de paridad.4} SKIP n STR ArrayVar{} WAIT () WAITSTRArrayVar{ } Operación Recibe digitos binarios Recibe digitos decimales Recibe digitos hexadecimales Saltea n caracteres recibidos Recibe una sarta de n caracteres .Por ejemplo. Una vez que los calificadores WAIT y WAITSTR están cumplimentados. dentro de una declaración SERIN2 para obtener distintos formatos.. SERIN2 soporta distintos modificadores. para forzar a SERIN2 a esperar por una sarta de caracteres de un determinado largo. Para mantener los valores de baud rate adecuados con otro oscilador. 16780. Mode = 16780 (2400 baud. Todos los no-díhitos recibidos antes que el primer digito del valor decimal es ignorado y descartado. La lista de items de datos a ser recibidos. ´ espera hasta que el carácter “A” sea recibido en forma serial en Pin1 y Pone el próximo carácter en B0 SERIN2 1. Mode = 27889 (300 baud. salteando dígitos adicionales si es necesario. Si se incluye ParityLabel. recomienza el proceso de calificación. Timeout se especifica en unidades de 1 milisegundo. Bit 14 selecciona el nivel de los pins de datos y de control de flujo. B0] ´ saltea 2 caracteres y toma un número decimal de 4 dígitos SERIN2 PORTA. Una variable precedida por DEC va a recibir la representación ASCII de su valor decimal.. no se requieren convertidores de nivel en muchas aplicaciones. va a recibir una sarta de caracteres. STR seguido por una variable de array. SERIN” comienza a guardar los datos en las variables asociadas con cada Item.1. los datos se reciben invertidos. 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 continúe si no se recibe un carácter dentro de un cierto tiempo.2400 4800 9600 19200 396 188 84 32 Bit 13 selecciona paridad par (bit13=1) ó sin paridad (bit13=0). puede estar precedida por uno ó más calificadores entre parentesis después del WAIT. La longitud de la sarta está determinada por el contador ó cuando se encuentre el carácter opcional. 84. [wait (“x”.opcionalmente terminada en el carácter c Espera por una secuencia de caracteres Espera por una sarta de caracteres Una variable precedida por BIN va a recibir la representación ASCII de su valor binario. Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementación de corriente RS-232 y las excelentes especificaciones de I/O del microPIC. sin paridad . BIN.0. sin paridad. El carácter no-digito que termina el valor también es descartado. Si la variable está precedida por BIN. Por ejemplo..

Por ejemplo. DataPin es colocado como salida en forma automática. No lo incluya. . SEROUT 0. 10] ´ envía el valor ASCII de B0. SEROUT2 SEROUT2 DataPin {FlowPin}. 13 es retorno de carro (Carriage Return ó CR) y 10 es avance de línea (Line Feed ó LF).54.Los números Mode pueden ser usados sin incluir este archivo. PORTA.15. los datos seriales no serán enviados hasta que FlowPin esté en el estado adecuado.ej. 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 declaración SEROUT.. Como opción se puede incluir Timeout y Label para permitir continuar al programa si el FlowPin no cambia al estado de habilitación dentro de un cierto tiempo. Item. seguido por un LF al pin 0.5.0) El pin opcional de control de flujo FlowPin. Label. Mode. Mode. Pin es automáticamente colocado como salida.BAS.BAS ya incluyen MODEDEFS. Este estado es determinado por la polaridad del dato especificado en Mode. asegúrese de usar DEFINE OSC con el nuevo valor de oscilador.001 a 65. SEROUT asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit ...ej. PORTA. SEROUT2 es similar al comando Serout de BS2. en formato standard asincrónico usando 8 bits de datos. ”2”.. Una sarta de constantes es enviada como una sarta de caracteres literales.ej. [Item [.535 milisegundos). Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos). en forma serial 5. entonces #W0 (ó #123) va a enviar “1”. B0) ó un número de Pin (p. ”3”. Timeout esta especificado en unidades de 1 milisegundo. si ya está usando uno de ellos . FlowPin es opcional y es automáticamente colocado como entrada.Para mantener los valores de baud rate adecuados con otro oscilador. Se puede usar TTL invertido (N300. Un valor numérico precedido por el signo # va a enviar la representación ASCII de su valor decimal.} {Timeout.bas” al comienzo de su programa PBP. T2400) están definidos en el archivo MODEDEFS. N9600). Se puede lograr una demora entre cada carácter transmitido de 1 a 65535 microsegundos (. Un DEFINE agrega tiempo entre caracteres en la transmisión de salida.] Envía uno ó más Items al Pin especificado en formato standard asincrónico. SEROUT SEROUT Pin. Un valor numérico (constante ó variable) va a enviar el correspondiente carácter ASCII.BAS.BAS y BS2DEFS. En algunos casos. Por ejemplo.ej..15 ó una variable que contenga un número de 0-15 (p. N2400. si W0=123. no se requieren convertidores de nivel en muchas aplicaciones. Pin puede ser una constante. puede ser incluído para ayudar a que los datos no desborden la capacidad del receptor. los rangos de transmisión de SEROUT pueden presentar los caracteres demasiado rápidamente en el dispositivi receptor. DataPin y FlowPin pueden ser una constante. {Pace.53.0) Los nombres Mode (p. agregue la línea: Include “modedefs. 0 . SEROUT es similar al comando Serout de BS1. Esto permite un tiempo adicional entre caracteres a medida que son transmitidos. para pausar 1 milisegundo entre cada carácter transmitido: DEFINE CHAR_PACING 1000 Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementación de corriente RS-232 y las excelentes especificaciones de I/O del microPIC... ó una variable que contenga un número de 0-15 (p. B0) ó un número de Pin (p. [#B0. Más aún.} [Item. Si se usa.. BS1DEFS.ej. sin paridad y 1 stop bit (8N1). Para usarlos.}] Envía uno ó más Items a Pin. 0 .

en forma serial a 2400 baud . Por ejemplo. seguido por un LF al pin 0. Bit 13 selecciona paridad ó no paridad. y un contador opcional. Sin embargo. Puede no desearse usar un pin extra para control de flujo. #. estos modificadores muestran exactamente tantos dígitos como sean necesarios (sin enviar los ceros a la izquierda). Mode se usa para especificar el baud rate y los parámetros de operación de la transferencia serial. si un npumero sigue a un modificador. Bit 15 selecciona si está abierto ó no.. Los bits de baud rate especifican el el tiempo de bit en microsegundos -20. abierto). Modificador {I}{S}BIN {1.. paridad par. Recuerde que todas las operaciones u comparaciones de PBP son sin signo. con carga).. Bit 14 selecciona nivel cierto ó invertido. entonces HEX B0 envia “FE”. BIN. como sea necesario. Por ejemplo.5} {I}{S}HEX{1.P. Mode = 60657 (300 baud. ó seguidos por varios parámetros opcionales. los datos se envian invertidos. Normalmente. Mode = 16780 (2400 baud. B0 = 9 . BIN. ´ envía el valor ASCII de B0.. N9600). 13 es retorno de carro (Carriage Return ó CR) y 10 es avance de línea (Line Feed ó LF).Sin embargo. Además. la salida estará precedida por “. decimal ó hexadecimal. si el bit de alto orden del dato está alto. si B0=123. si B0=8... La longitud de la sarta está determinada por el contador ó cuando se encuentre un carácter 0 en la sarta. 1 stop bit). con carga). DEC y HEX también pueden estar acompañados de un número. Si alguno de ellos está precedido por una I (por indicado). Se puede usar TTL invertido (N300. La salida estará precedida por alguno de los símbolos %.“. SEROUT2 soporta distintos modificadores. Si bit 14=0. BIN6 8 sería enviado como “001000” y BIN2 8 como “00”. use la ecuación: (1000000/bayd)-20 Algunos baud rate standard se muestran en la tabla siguiente: Baud rate 300 600 1200 2400 4800 9600 19200 Bits 0 . Un valor numérico (constante ó variable) va a enviar el correspondiente carácter ASCII . invertido. Un valor numérico precedido por BIN va a enviar la representación ASCII de su valor binario.ej. los datos son enviados como 7E1 (7 bit de datos.. $ para indicar que el valor siguiente es binario. sin paridad. Por ejemplo. La opción Pace se puede usar para agregar tiempo entre cada carácter durante la transmisión.12 3313 1646 813 396 188 84 32 Bit 13 selecciona paridad par (bit13=1) ó sin paridad (bit13=0). Normalmente.16} {I}{S}DEC{1.10. Si bit 14=1. va a repetir el carácter la cantidad de veces que indique el contador. SEROUT2 siempre ese número de dígitos.. las matemáticas sin signo pueden llevar a resultados con signo. no se requieren convertidores de nivel en muchas aplicaciones. Bit 14 selecciona el nivel de los pins de datos y de control de flujo. paridad parinvertido. entonces BIN B0 va a enviar “1000” Un valor numérico precedido por DEC va a enviar la representación ASCII de su valor decimal.P. El resultado de DEC B0 será “255”. Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos). dentro de una declaración SEROUT2 para obtener distintos formatos. Por ejemplo.4} REP c n STR ArrayVar{} Operación 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.Más aún. REP seguido por un carácter y un contador. DEC y HEX pueden estar precedidos. Para encontrar un valor dado. las transmisiones seriales son 8N1 (8 bit de datos. agregando tantos ceros al comienzo. para usar con los drivers RS-232. los rangos de transmisión de SEROUT2 pueden presentar los datos demasiado rápidamente al dispositivo receptor. ajusta cualquier bit extra de orden superior. Por ejemplo. se envian los datos en forma normal. Enviando sDEC B0 daría “-1”. sin paridad. entonces DEC B0 va a enviar”123” Un valor numérico precedido por HEX va a enviar la representación ASCII de su valor hexadecimal.ej. ISDEC4 B0. si B0=254.. va a enviar una sarta de caracteres. cierto.En algunos casos. La demora puede ser de 1 a 65535 milisegundos entre cada carácter transmitido.. dado que se envía el bit de alto orden. Algunos ejemplos de Mode son: Mode = 84 (9600 baud. Si alguno está precedido por una s (por signo). Los 13 bits de menor orden seleccionan el baud rate. 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). Si se selecciona paridad. El modo abierto puede usarse para conectar varios dispositivos juntos en el mismo bus serial. Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementación de corriente RS-232 y las excelentes especificaciones de I/O del microPIC. Esto permite la transmisión de números negativos. sin paridad . Se puede usar cualquier combinación de modificadores simultáneamente . REP “0”´ 4 enviará “0000” STR seguido por una variable de array.1 stop bit). que pueden ser combinados entre sí..

60. Parlantes piezo eléctricos pueden ser conectados directamente.ej. 1[100. sin variables intermedias.55. en forma serial. Temp = B0 ´ anteriormente B0=B1 B1=Tem . SOUND SOUND Pin. PORTA. MSBPRE.74 Hz y Note 127 es aproz. ihex4 B0] 5. 0 . LSBFIRST) están definidos en el archivo MODEDEFS. en incrementos de 12 milisegundos. 10.BAS y BS2DEFS. por lo que es independiente de la frecuencia del oscilador utilizado. Los nombres Mode (p. Note y Duration no necesitan ser constantes. Pin es automáticamente colocado como salida.0) (en forma opcional) especifica el número de bits a ser desplazado. Note 1 es aprox. B0) ó un número de Pin (p. agregue la línea: Include “modedefs. 0 .0) (en forma opcional) especifica el número de bits a ser desplazado.ej. Mode. Nte 1-127 son tonos. [B0] SHIFTOUT PORTA.BAS.lee datos antes de mandar clock Primero desplaza datos en el bit inferior . Pin puede ser una constante.bas” al comienzo de su programa PBP. 50. Ejecutando el comando SLEEP sin calibrar. pero sí variables de array con índice constante.SEROUT2 0. B0) ó un número de Pin (p. Notes 128-255 son ruido blanco.ej. Mode. [wordvar 4] 5. [Note.56. BS1DEFS. 1 y 128 son las frecuencias menores 129 y 266 las mayores).ej. lee datos después de mandar clock 5. porque cuando el micro PIC pone a cero (resetea) el WatchDog Timer. SLEEP 60 ´ duerme por aprox.0) Note 0 es silencio.}] Gebera un tono y/o ruido blanco en el Pin especificado. Puede ser usado con variables de bit.ej. No lo incluya. desplaza en forma sincrónica los bits en DataPin y guarda los bytes recibidos en Var. SLEEP SLEEP Period Coloca al micro controlador en modo de baja potencia por Period segundos. SOUND PORTB. MSBFIRST. Mode MSBPRE LSBPRE MSBPOST LSBPOST SHIFTIN 0.BAS. a PORTA pin1. Los tonos y el ruido blanco están en una escala ascendente (p. SWAP lo hace con una sola declaración.. ClockPin. La granulación es aproximadamente 2. B0) ó un número de Pin (p.BAS ya incluyen MODEDEFS. SLEEP usa el WatchDog Timer. lee datos antes de mandar clock Primero desplaza datos en el bit superior . 10000 Hz. Estos valores pueden diferir de los esperados por su programa. si ya está usando uno de ellos. se puede manejar un parlante a través de un capacitor -El valor del capacitor debe ser determinado enfunción de las frecuencias a usar y la carga del parlante. Period tiene 16 bit. se desplazan 8 bits. si ya está usando uno de ellos. Note. agregue la línea: Include “modedefs. 10] ´envía 2 sonidos consecutivos a pin7 5.. STOP STOP Detiene la ejecución del programa. Variables de array con índice variable no son permitidas. 1. BS1DEFS. SHIFTIN SHIFTIN DataPin. Esta variación es distinta a la de BASIC Stamp. SOUND entrega como salida ondas cuadradas con nivel TTL.ej.BAS ya incluyen MODEDEFS.ej. No coloca al micro controlador en modo de baja potencia. Si no se especifica. [“B0=0”. PORTA.3 segundos y puede variar de acuerdo al dispositivo y la temperatura.] Desplaza en forma sincrónica el contenido de Var sobre DataPin y ClockPin. también pone valores predefinidos en los registros internos..58. 1. SHIFTOUT SHIFTOUT DataPin. ClockPin y DataPin pueden ser una constante. Variable Intercambia los valores de dos variables. 10] ´ envía “B0 = 0” seguido por el valor binario de B0.1. ejecutando un loop sin fin. 18 horas). Duration {. 0 . Mode LSBFIRST MSBFIRST Mode N° 0 1 Operación Primero desplaza datos del bit inferior Primero desplaza datos del bit superior SHIFTOUT 0. Duration. 16780. ó una variable que contenga un número de 0-15 (p. por lo que los retardos pueden ser de hasta 65535 segundos (aprox. PORTA.lee datos después de mandar clock Primero desplaza datos en el bit inferior . ClockPin y DataPin pueden ser una constante.15. a 9600 baud SEROUT2 PORTA.BAS.bas” al comienzo de su programa PBP.57. ClockPin.ej. vyte y word. El micro controlador trabaja igual que siempre. MSBPRE) están definidos en el archivo MODEDEFS. Si no se especifica. 84. Se necesitó este cambio.BAS y BS2DEFS. Para usarlos. Para usarlos. [B0] Mode N° 0 1 2 3 Operación Primero desplaza datos en el bit superior .15 ó una variable que contenga un número de 0-15 (p.ej.] El ClockPin. No lo incluya. Duration es 0-255 y determina el largo de la nota. 1. PORTA. Gracias a las características del micro PIC. Los números Mode pueden ser usados sin incluir este archivo. STOP ´ envía el programa a vía muerta 5. ó una variable que contenga un número de 0-15 (p...BAS.. [Var {}. 1 minuto 5. Los nombres Mode (p.59. [dec B0. 78. [Var {}. se desplazan 8 bits. independientemente del tipo de variable. este paso se deja de lado.15.7.2. Los números Mode pueden ser usados sin incluir este archivo. independientemente del tipo de variable. SWAP SWAP Variable. Normalmente intercambiar los valores de dos variables es un proceso tedioso.1.

Como X-10 está patentado. Los ejemplos posteriores ayudarán a clarificar el tema. mientras la condición Condition sea cierta. XIN se usa para recibir información de dispositivos X-10.SWAP B0. Los módulos X-10 están disponibles en muchos lugares y de distintos proveedores. El Hpuse Code es un número 0-15. B1 ´ahora 5.ej. WRITE WRITE Address.0) Low 0 ´ comienza Pin0 como bajo TOGGLE 0 ´ cambia a alto el estado del pin 0 5. primero se envía un comando especificando el número de módulo X-10. DataPin es automáticamente convertido en salida para enviar datos a la interfase X-10. B0) ó un número de Pin (p.62.. WHILE.15 ó una variable que contenga un número de 0-15 (p. Key Code 0-15 corresponden a números de módulo 1-16. #housekey. 0 . solo se guarda el Key Code. Cada WRITE se auto regula en tiempo y toma aproximadamente 10 milisegundos ejecutarlo en un microPIC WRIT 5.. Si no hay transiciones en esta línea.. por lo que el número de módulo es innecesario.. I=1 WHILE i < = 10 Serout 0. Si Var tiene tamaño de word. Pin puede ser una constante. que corresponde al juego House Code del módulo X-10 de A a P. Los módulos X-10 están disponibles en muchos lugares y de distintos proveedores. ZeroPin es automáticamente convertido en entrada para recibir el tiempo de cruce por cero de la interfase X-10. XOUT después lista las funciones y la información de conexionado.65.2. esta interfase también cubre el licenciamiento. XOUT se usa para enviar información de control a dispositivos X-10. Este dispositivo tiene la interfase a la línea de alimentación y aísla el micro controlador de la línea de AC.}] Env+ia un HoseCode seguido por un KeyCode. Algunas funciones operan en todos los módulos. Si no se usa Repeat se asume 2 veces como mínimo.33 milisegundos). se usan las declaraciones DATA y EEPROM. Cuando Condition deja de ser cierta.. cada códigi House Code recibido. 8.}] Recibe datos X-10 y guarda el House Code y el Key Code en Var. Value Graba valores Value en el EEPROM incorporado en la dirección Address especificada. El Key Code puede ser el número de un módulo específico de X-10 ó la función que debe ser realizada por un módulo. esta interfase también cubre el licenciamiento. Esta instrucción 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 ejecución. ó un PL-513 para enviar solamente. Pin es automáticamente colocado como salida. 0 . repetidos un número Repeat de veces en formato X-10. Se requiere una interfase para conectar el micro controlador a la línea de AC. Timeout está especificado en medios ciclos de la línea de AC (aprox. XIN solamente procesa datos en el momento en que la línea de AC pasa por cero (en ese momento recibe ZeroPin).”Key=”. PORTA.byte0 Goto loop ´ por siempre ´ chequea por datos X-10.} [Var {. Se necesita un TW-523 para comunicaciones de dos vías para trabajar con XIN. 0 . ZeroPin.61.byte1. N2400. Cada código Key Code recibido se guarda en el byte inferior del word. si no hay va a nodata XIN PORTA. #housekey.0.. Label. nodata. Housekey var word ´ obtiene datos X-10 loop: XIN PORTA. PORTA. PORTA.0. En la práctica. [“No:” #i. El Hpuse Code es un número 0-15.7 K. XIN XIN DataPin. PORTA. 1. que corresponde al juego House Code del módulo X-10 de A a P. [HouseCode KeyCode {} {.Ambos pins pueden ser llevados a 5 volt con resistores de 4. 1..64.15.0) En forma opcional se pueden incluir Timeout y Label para permitir continuar el programa.WEND WHILE Condition Statement WEND Ejecuta las declaraciones Statement en forma repetida.ej.15 ó una variable que contenga un número de 0-15 (p.. PORTA. Repeat usualmente se usa con los comandos Bright y Dim. Condition puede ser cualquier expresión de comparación. seguido por un comando especificando la función deseada. la ejecución continúa con la declaración siguiente al WEND.. Como X-10 está patentado. DataPin y ZeroPin pueden ser una constante. El HouseCode apropiado debe ser enviado como parte de cada comando.. DataPin y ZeroPin pueden ser una constante. XIN esperará que las haya. DataPin es automáticamente convertido en entrada para recibir datos de la interfase X-10. Ambos pins pueden ser llevados a 5 volt con resistores de 4.”House=”.2. [housekey] ´ muestra los datos X-10 en un LCD Lcdout $fe. [housekey] 5. Si no hay transiciones en esta línea. Estos dispositivos tienen la interfase a la línea de alimentación y aíslan el micro controlador de la línea de AC.. XOUT XOUT DataPin.ej. B0) ó un número de Pin (p.ej.63. Si Var es un byte. si no se reciben datos en un lapso de tiempo determinado. Para grabar datos en el EEPROM durante la programación.0) XOUT solamente procesa datos en el momento en que la línea de AC pasa por cero (en ese momento recibe ZeroPin). Se requiere una interfase para conectar el micro controlador a la línea de AC.ej.7K. Se necesita un TW-523 para comunicaciones de dos vías. 13. XIN esperará que las haya. B0 ´ envía el valor de B0 al EEPROM pin 5 5. {Timeout. TOGGLE TOGGLE Pin Invierte el estado del Pin especificado. B0) ó un número de Pin (p. ó una variable que contenga un número de 0-15 (p. para trabajar con XIN. 10] WEND 5. ZeroPin.. .ej. se guarda en el byte superior del word. ZeroPin es automáticamente convertido en entrada para recibir el tiempo de cruce por cero de la interfase X-10 .

ej. Key Code 0-15 corresponden a números de módulo 1-16.0. No lo incluya. Los ejemplos posteriores ayudarán a clarificar el tema.BAS ya incluyen MODEDEFS.BAS y BS2DEFS. house unitOn] ´ enciende unit 8 en house 0 XOUT PORTA. [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 . PORTA.0. [house] pause10000 XOUT PORTA. KeyCode unitOn UnitOff UnitsOff LightsOn LightsOff Bright Dim KeyCode N° %10010 %11010 %11100 %10100 %10000 %10110 %11110 Operación Enciende el módulo Apaga el módulo Apaga todos los módulos Enciende módulos de luz Apaga módulos de luz Más brillo al nódulo de luz Menos brillo al módulo de luz Conectarse a la interfase X-10 requiere 4 conexiones. En la práctica.BAS.1.1. PORTA. agregue la línea: Include “modedefs. por lo que el número de módulo es innecesario. primero se envía un comando especificando el número de módulo X-10.1. [house lightsOff] XOUT PORTA. Los números KeyCode pueden ser usados sin incluir este archivo. La tabla siguiente muestra el xonexionado: Cable N° 1 2 3 4 Color del cable Negro Rojo Verde Amarillo Conexión Salida cruce por cero Comun cruce por cero Común transmisión X-10 Entrada transmisión X-10 TW-523 Cable N° 1 2 3 4 house var unit var byte byte Color del cable Negro Rojo Verde Amarillo Conexión Salida cruce por cero Comun cruce por cero Salida recepción X-10 Entrada transmisión X-10 Include “modedefs.El Key Code puede ser el número de un módulo específico de X-10 ó la función que debe ser realizada por un módulo. BS1DEFS. si ya está usando uno de ellos. bas” house=0 unit=8 ´ coloca 0 en house (A) ´ coloca 8 en unit (9) XOUT PORTA. seguido por un comando especificando la función deseada.1 PORTA.0.7 K conectado a 5 volt. 4.0. Los nombres Keycode (funciones) (p. Para usarlos. uniton) están definidos en el archivo MODEDEFS.BAS.1 PORTA. La salida de la interfase X-10 (cruce por cero y datos) es a colector abierto y necesita un resistor de aprox. [house0] loop XOUT PORTA. PORTA.bas” al comienzo de su programa PBP. Algunas funciones operan en todos los módulos. [house unit.0.

Sign up to vote on this title
UsefulNot useful