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.

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

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

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

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

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

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

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

A medida que la tecnología avanza en todas las áreas de nuestras vidas. las luces del auto.. Usted puede ayudar a desarrollarlos y tal vez inventar el próximo “gran producto”.¿Cómo puedo aplicarlo? La ventaja de los microcontroladores (y algo que usted puede considerar como una carrera futura) es que el mundo de los dispositivos inteligentes se está expandiendo a una velocidad increíble y no muestran ningún signo de disminuir su velocidad. Piense con sus amigos en un desarrollo para comenzar a fabricar con perspectivas comerciales. …¿Quién sabe? A continuación se muestra varios ejemplo para que se practique y aprendan a utilizar diferentes comandos. nos vemos rodeados por un creciente número de aparatos avanzados tecnológicamente. 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. un proyecto de arte que use la luz para interactuar con los espectadores. ¡la tecnología es la misma.. .

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

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

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

207.230.134.end Display En este ejemplo se va a utilizar un display de 7 segmentos y aremos un contador de 0-9 con la fuincion Look Up vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.135.237.255.239].[191.num portb=num pause 500 next vec goto prog END .219.253.

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 .

[191.237.253.253.num portb=num pause 500 next vec goto prog END .255.134.219.207.134.207.Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.239].255.135.230.230.219.239].[191.135.237.

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

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

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

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

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

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

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

end pause 200 else cont=cont endif goto inicio .

253.191.[0.0=0 then vec=vec+1 lookup vec.237.207.219.255.219.239].237.207.255.[0.253.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.135.230.134.135..1=0 then vec=vec-1 lookup vec..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..Contador con Pulsantes Este es un contador ascendente y descendente.239].134.230.191.

END .

255.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.num portb=num .207.[0.. vecvar byte num VAR BYTE flag var byte TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 flag=1 inicio: if PORTA.135.191.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.230.134..253.239].219.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful