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

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

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

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

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

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

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

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. 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. Piense con sus amigos en un desarrollo para comenzar a fabricar con perspectivas comerciales. . las luces del auto. Usted puede ayudar a desarrollarlos y tal vez inventar el próximo “gran producto”. …¿Quién sabe? A continuación se muestra varios ejemplo para que se practique y aprendan a utilizar diferentes comandos.¿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. ¡la tecnología es la misma. A medida que la tecnología avanza en todas las áreas de nuestras vidas. o simplemente divertirse construyendo cosas...

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

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 .

230.255.num portb=num pause 500 next vec goto prog END .134.237.253.207.239].[191.135.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.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.239].num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.230.253.255.239].Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.135.134.[191.[191.237.255.230.num portb=num pause 500 next vec goto prog END .207.237.219.207.253.134.135.

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

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

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

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

una entrada. tomando una decisión. El comando “if . . 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. se fija en la toma una decisión basada en el estado de un pin. para un análisis posterior. y luego creando una salida. Escribamos ahora varios programas diferentes en un programa nuevo. Las variables deben ser “declaradas” antes de ser usadas en un programa. Una variable nos permite almacenar cierta pieza de información (ingresada ahora).then”.

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

0=0 then cont=cont*2 PORTB=cont if cont>=256 then cont=1 PORTB=cont endif pause 200 else cont=cont endif if PORTA.1=0 then cont=cont/2 PORTB=cont if cont<=1 then cont=256 endif .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.

end pause 200 else cont=cont endif goto inicio .

1=0 then vec=vec-1 lookup vec.219.255.239].230.[0.0=0 then vec=vec+1 lookup vec..207.219.num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA..135.num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio .207.253..135.134.230.191.[0.191.237.134.Contador con Pulsantes Este es un contador ascendente y descendente.239].237.255.253.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 .

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

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

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

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

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

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

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

Apéndice B: REFERENCIA DE DECLARACIONES PBP @ ASM.ELSE..THEN.NEXT FREQOUT GOSUB GOTO HIGH HSERIN HSEROUT I2CREAD I2CWRITE IF... a ON.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...) .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..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Algunas funciones operan en todos los módulos. si ya está usando uno de ellos.0. No lo incluya. 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.1 PORTA. En la práctica. house unitOn] ´ enciende unit 8 en house 0 XOUT PORTA.0. uniton) están definidos en el archivo MODEDEFS. seguido por un comando especificando la función deseada.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. por lo que el número de módulo es innecesario. PORTA. PORTA. Los nombres Keycode (funciones) (p.1 PORTA. primero se envía un comando especificando el número de módulo X-10. [house0] loop XOUT PORTA. agregue la línea: Include “modedefs.0.0. [house unit.BAS.BAS ya incluyen MODEDEFS. BS1DEFS.7 K conectado a 5 volt. Los ejemplos posteriores ayudarán a clarificar el tema.1. La salida de la interfase X-10 (cruce por cero y datos) es a colector abierto y necesita un resistor de aprox.BAS.bas” al comienzo de su programa PBP. [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 . 4.1. Los números KeyCode pueden ser usados sin incluir este archivo. PORTA. [house] pause10000 XOUT PORTA.1. Key Code 0-15 corresponden a números de módulo 1-16. Para usarlos.BAS y BS2DEFS. bas” house=0 unit=8 ´ coloca 0 en house (A) ´ coloca 8 en unit (9) XOUT PORTA.0. 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. [house lightsOff] XOUT PORTA.ej.