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.

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

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

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

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

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

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

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

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

ENCENDER Y APAGAR UN LED.0 = 0 pause 1000 goto inicio end inicio: TOGGLE PORTB.0 pause 1000 goto inicio end led var 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: Varias formas para hacer lo mismo: inicio: High 0 pause 1000 low 0 pause 1000 goto inicio end TRISB. Led intermitente en RB0. prender y apagar un led conectado a portb.0 = 1 pause 1000 PORTB.0 pause 1000 low PORTB.0 PAUSE 1000 goto inicio end Inicio: High PORTB. Bueno aquí esta el primer ejemplo y el más sencillo y por donde aprendí.

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

JUEGO DE LUCES Juego de luces que cuenta en forma binaria de 0 a 255: i var byte TRISB=0 inicio: for i=0 to 255 PORTB=i pause 50 next I goto inicio end i var byte leds var byte[5] TRISB=0 leds[1]=%10000001 leds[2]=%01000010 leds[3]=%00100100 leds[4]=%00011000 Leds=1 inicio: for i=1 to 4 PORTB=leds pause 100 next I for i=4 to 1 step-1 PORTB=leds pause 100 next i goto inicio end Otra manera de hacerlo: i var byte leds var PORTB TRISB=0 Leds=1 inicio: for i=1 to 7 leds=leds<<1 pause 100 next i for i=1 to 7 leds=leds>>1 pause 100 next i goto inicio end Juego de luces al estilo AUTO FANTASTICO: i var byte cont var word TRISB=0 inicio: cont=1 for i=1 to 7 PORTB=cont pause 100 cont=cont*2 next i for i=1 to 7 PORTB=cont pause 100 cont=cont/2 next i goto inicio .

num portb=num pause 500 next vec goto prog END .237.134.219.230.239].255.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.207.135.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 .

134.230.Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.255.237.135.239].253.219.239].num portb=num pause 500 next vec goto prog END .num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.207.255.230.135.207.[191.[191.253.219.237.134.

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

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

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

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

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

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

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

end pause 200 else cont=cont endif goto inicio .

134.191.[0.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.237.135.255.135.230.219.0=0 then vec=vec+1 lookup vec..1=0 then vec=vec-1 lookup vec.239].230.191.253.219.207.237..num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio .num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA.134.253.255..239].Contador con Pulsantes Este es un contador ascendente y descendente.[0.207.

END .

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

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

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

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

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

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

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

....THEN...Apéndice B: REFERENCIA DE DECLARACIONES PBP @ ASM.NEXT FREQOUT GOSUB GOTO HIGH HSERIN HSEROUT I2CREAD I2CWRITE IF.) .ENDIF INPUT (LET) LCDOUT LOOKDOWN LOOKDOWN2 LOOKUP LOOKUP2 LOW NAP ON INTERRUPT OUTPUT PAUSE Inserta una linea de codigo ensamblador Inserta una seccion de codigo ensamblador GOTO computado(equiv.GOTO) BRANCH fuera de pagina(BRANCH largo) Anti-rebote y auto-repeticion de entrada en el pin especificado Llamada a subrutina de ensamblador Hace cero todas las variables Cuenta el numero de pulsos en un pin Define el contenido inicial en un chip EEPROM Señal asincronica de salida en un pin fijo y baud Deshabilita el procesamiento de ON INTERRUPT Produce tonos en un pin Define el contenido inicial en un chip EEPROM Habilita el procesamiento de ON INTERRUPT Detiene la ejecucion e ingresa en modo de baja potencia Ejecuta declaraciones en forma repetitiva Produce hasta 2 freuencias en un pin Llama a una subrutina BASIC en la etiqueta especificada Continua la ejecucion en la etiqueta especificada Hace alto la salida del pin Entrada serial asincronica(hardware) Salida serial asincronica(hardware) Lee bytes de dispositivo I2C Graba bytes en dispositivo I2C Ejecuta declaraciones en forma condicional Convierte un pin en entrada Asigna el resultado de una expresion a una variable Muestra caracteres en LCD Busca un valor en una tabla de constantes Busca un valor en una tabla de constantes o variables Obtiene un valor constante de una tabla Obtiene un valor constante o variable de una tabla Hace bajo la salida de un pin Apaga el procesador por un corto periodo de tiempo Ejecuta una subrutina BASIC en un interrupt Convierte un pin en salida Demora (resolucion 1mseg..ENDASM BRANCH BRANCHL BUTTON CALL CLEAR COUNT DATA DEBUG DISABLE DTMFOUT EEPROM ENABLE END FOR.ELSE. a ON..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful