P. 1
Entrenador Para Micro Control Ad Or Con PBP

Entrenador Para Micro Control Ad Or Con PBP

|Views: 260|Likes:
Publicado porbandus

More info:

Published by: bandus on May 18, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/04/2014

pdf

text

original

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.

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

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

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

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

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

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

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

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

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

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 .

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

El mismo contador con un display pero ahora con un vector en el cual almacenaremos los valores correspondientes a cada numero (Para los dos ejemplos el Display es de Anodo Comun) vec var byte [10] pos var byte vec[0]=191 vec[1]=134 vec[2]=219 vec[3]=207 vec[4]=230 vec[5]=237 vec[6]=253 vec[7]=135 vec[8]=255 vec[9]=239 TRISB=%00000000 loop: for pos=0 to 9 PORTB=vec[pos] pause 500 next goto loop end .

134.Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.237.239].135.[191.207.237.135.num portb=num pause 500 next vec goto prog END .219.253.253.[191.239].207.230.255.num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.255.230.134.219.

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

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

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

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

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

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

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

end pause 200 else cont=cont endif goto inicio .

134.239]..191.219.1=0 then vec=vec-1 lookup vec.237.[0.253..posee dos pulsantes que sirven para subir y bajar el conteo: vec var byte num VAR BYTE TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 PORTB=64 inicio: if PORTA.num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio .135.207.134.[0.num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA.0=0 then vec=vec+1 lookup vec.237.191.230.135.230.Contador con Pulsantes Este es un contador ascendente y descendente.207.219.255.253.239].255..

END .

230.207.0=0 then flag=1 endif if PORTA. vecvar byte num VAR BYTE flag var byte TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 flag=1 inicio: if PORTA.219.135.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.237...253.134.num portb=num .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.255.[0.191.239].

207.230.134.num portb=num if vec<=1 then vec=11 endif pause 200 return end .191.[0.if vec>=10 then vec=0 endif pause 200 return Bajar: vec=vec-1 lookup vec.135.239].253.237.219.255.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->