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

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

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

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

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

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

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

o simplemente divertirse construyendo cosas. 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. 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.¿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.. las luces del auto. A medida que la tecnología avanza en todas las áreas de nuestras vidas. nos vemos rodeados por un creciente número de aparatos avanzados tecnológicamente. . 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. ¡la tecnología es la misma.

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

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 .

num portb=num pause 500 next vec goto prog END .219.237.135.207.134.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.255.239].230.253.[191.

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 .

135.255.[191.207.135.num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.239].[191.253.253.207.134.230.219.230.237.num portb=num pause 500 next vec goto prog END .255.239].134.237.219.Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.

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

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

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

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

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

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 .

1=0 then cont=cont/2 PORTB=cont if cont<=1 then cont=256 endif .0=0 then cont=cont*2 PORTB=cont if cont>=256 then cont=1 PORTB=cont endif pause 200 else cont=cont endif if PORTA.BOTONES Y LEDS Este tiene dos botones el uno sirve para subir y el otro para bajar: i var byte cont var word cmcon=7 TRISB=0 TRISA=%00000011 cont=1 PORTB=cont inicio: if PORTA.

end pause 200 else cont=cont endif goto inicio .

.[0.230.0=0 then vec=vec+1 lookup vec.253.207.219.255.135.239].237.Contador con Pulsantes Este es un contador ascendente y descendente.219.253..[0.134..1=0 then vec=vec-1 lookup vec.230.134.135.207.191.num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA.239].num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio .237.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.255.191.

END .

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.[0.237.0=0 then flag=1 endif if PORTA.253..255.239].191.num portb=num . vecvar byte num VAR BYTE flag var byte TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 flag=1 inicio: if PORTA.1=0 then flag=0 endif if flag=1 then gosub subir endif if flag=0 then gosub bajar endif goto inicio Subir: vec=vec+1 lookup vec.207.134..135.230.

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

Preguntas 1.0 output portb. 3.0=0 then titilar if porta.1=0 then dobletitilar goto revisar titilar: low 0 pause 200 high 0 pause 200 goto revisar doble_titilar: low 0 low 1 pause 200 high 0 ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ ____________________________ .1 input porta. Defina una variable y describa cómo puede ser usada en un programa. Agregue comentarios apropiados al siguiente programa: output portb. ¿Cómo toma una decisión un microcontrolador? 2. 5.0 input porta. Escriba el código para declarar una variable llamada “status”.1 revisar: if porta. ¿Qué es un sensor y por qué un microcontrolador necesita uno? Mencione algunos tipos diferentes de sensores. 4. La variable podría valer tanto “0” como “1”.

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

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

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

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

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

. 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.10 5.) 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 . Este atajo se puede usar libremente para unir codigo ensamblador con declaraciones PBP.. Por ejemplo @ Include “fp.ENDASM ASM .10 Salida X . 5. @ @ declaracion Cuando se usa al comienzo de una línea.asm “ @ resetea a 0 la página del registro antes de ejecutar la instrucción en lenguaje ensamblador.1.2. ASM. La página del registro no debe ser alterada usando @ Vea la seccion de programacion del ensamblador para mayor informacion. I var byte Rollme var byte For i = 1 to 4 @ rlf _rollme.PAUSEUS PEEK POKE POT PULSIN PULSOUT PWM RANDOM RCTIME READ RESUME RETURN REVERSE SERIN SERIN2 SEROUT SEROUT2 SHIFTIN SHIFTOUT SLEEP SOUND STOP SWAP TOGGLE WHILE.WEND WRITE XIN XOUT Demora (resolucion 1 useg. provee un atajo para insertar una declaracion en lenguaje ensamblador en un programa PBP.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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