Entrenador para Microcontroladores PIC con PBP.

¿Qué es un entrenador? La principal aplicación de un entrenador, es de servir como elemento de soporte a las personas que desean aprender el manejo del microcontrolador PIC (ya sea para los diferentes familias que utiliza el PIC), también ayuda a la persona interesada que pueda realizar los mas variados experimentos desde proyectos sencillos hasta los mas variados y complejos. El siguiente manual contiene ejercicios simples que nos permiten adquirir nuevos conocimientos tanto en la programación y en las conexiones electrónicas (software y hardware). Los ejercicios con los que cuenta el entrenador se encuentran basados en el contenido práctico del programa de la Universidad Politécnica de Chiapas (Ver Anexo A.) incluyendo también ciertos temas para poder ir desarrollando técnicas, habilidades y conocimiento en el campo de la Mecatrónica. En tanto el diseño del hardware contiene los siguientes Módulos: •

• • • • • •
• • •

• • • • •

Módulo Fuente de alimentación (5V, GND y 12V) Modulo de Programación. Modulo Leds. Modulo de Potencia. Modulo de entrada digital. Modulo de entrada analógica. Modulo RS232. Módulo USB. Modulo Display de 7 Segmentos. Modulo PWM. Modulo Motor paso a paso. Modulo Servo Motor. Modulo Motor CD. Modulo Teclado. Modulo LCD. Modulo Experimento (Protoboard)

Además el entrenador contiene lo siguiente: una base con fuente, un apagador, fusible de protección, una práctica caja para guardar tus cables, herramientas y dispositivos y una lámpara para iluminación del entrenador. Para poder realizar un correcto funcionamiento del entrenador necesitamos el siguiente sistema: • IBM PC o una computadora compatible. • Un puerto USB • Windows 98, ME, 2000, NT, XP ó VISTA Y para su correcto funcionamiento: 1. El entrenador. 2. Programador USB y su correspondiente software. 3. Cable de programación. 4. Programa editor y compilador (Microcode Studio y PBP)

EXPERIMENTO 1. ¿Qué es un Microcontrolador?
Muchos de nosotros sabemos qué apariencia tiene una computadora. Usualmente tiene teclado, monitor, CPU (Unidad de Procesamiento Central), impresora y mouse. Este tipo de computadoras, como la Mac o PC, son diseñadas principalmente para comunicarse con humanos. Manejo de base de datos, análisis financieros o incluso procesadores de textos, se encuentran todos dentro de la “gran caja”, que contiene CPU, la memoria, el disco rígido, etc. El verdadero “cómputo”, sin embargo, tiene lugar dentro de la CPU. Si piensa sobre esto, el único propósito del monitor, teclado, mouse e incluso la impresora, es “conectar” a la CPU con el mundo exterior. Pero hay computadoras alrededor de nosotros, corriendo programas y haciendo cálculos silenciosamente sin interactuar con ningún humano. Estas computadoras están en su auto, en el transbordador espacial, en un juguete, e incluso puede haber uno en su secador de pelo. Llamamos a éstos dispositivos “microcontroladores”. Micro porque son pequeños, y controladores, porque controlan máquinas o incluso otros controladores. Los Microcontroladores, por definición entonces, son diseñados para ser conectados más a máquinas que a personas. Son muy útiles porque se pueden construir máquinas o artefactos, para controlarlo, y luego dejarlo trabajar para usted de manera automática. El límite de las aplicaciones para los microcontroladores es la imaginación.
Microcontrolador. Es un circuito integrado que contiene muchas de las mismas cualidades que una computadora de escritorio, tales como la CPU, la memoria, etc., pero no incluye ningún dispositivo de “comunicación con humanos”, como monitor, teclados o mouse. Los microcontroladores son diseñados para aplicación de control de máquinas, más que para interactuar con humanos.

Cuando creamos dispositivos que tienen un microcontrolador actuando como un “cerebro”, en muchas formas estamos tratando de imitar cómo actúa nuestro cuerpo. Su cerebro necesita cierta información para tomar decisiones. Esta información es obtenida a través de varios sensores, como la vista, el oído, el tacto, etc. Estos sensores detectan lo que nosotros llamamos el “mundo real” o mundo exterior, y envían esa información al cerebro para “procesamiento”. Recíprocamente, cuando su cerebro toma una decisión, manda señales a través de su cuerpo para hacer algo en el “mundo exterior”. Utilizando las “entradas” de sus sentidos, y las “salidas” de sus piernas, brazos, manos, etc., su cerebro se está comunicando e interactuando con el mundo exterior. Esta “entrada/decisión o procesamiento/salida” es de lo que se tratan los Sistemas y los microcontroladores. Para cada experimento se necesita una PC compatible XP o VISTA, una fuente conectada al entrenador. Partes Requeridas para el experimento 1: (2) LEDs (Diodos emisores de luz) (2) Dos resistores de 330 ohm, ¼ watt. Cable de programación. Cables de conexión. El programa editor de PBP para el PIC

¡Armelo!
Cualquier sistema microcontrolador, consiste en dos componentes primarios: hardware y software. El hardware es el componente físico del sistema. El software es la lista de instrucciones que residen dentro del hardware. Nosotros crearemos ahora el hardware que interactúe con el mundo exterior, y luego escribiremos un programa de software para “controlarlo”. Ahora construyamos nuestro circuito. Ver figura 1.1

AL LABORATORIO. En este experimento conectaremos dos diodos emisores de luz (LEDs) al entrenador PIC. Los LEDs son formas especiales de lámparas que por varias razones son fácilmente conectadas a dispositivos microcontroladores. Hay dos cosas muy importantes de recordar cuando conecta LEDs al PIC. La primera es que siempre se debe asegurar que haya una resistencia conectada, como muestra la figura 1.2. En este experimento el resistor debe tener un valor de 330 ohms, ¼ watt.

Segundo, esté seguro que la polaridad del LED es la correcta. Hay una zona liza en un costado del LED que debería ser conectada como en la figura 1.2, si la polaridad es invertida, el LED no trabaja. El lado liso también tiene la pata más corta del LED.

Figura 1.2: LED en el Protoboard. Muestra el LED y el resistor enchufados en el protoboard. Ninguna conexión ha sido hecha aún a las entradas/salidas del BASIC Stamp.

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

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

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

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

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

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

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

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

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

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

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

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

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 .

230.219.239].134.230.255.num portb=num pause 500 next vec for vec=9 to 0 step -1 lookup vec.[191.239].135.[191.135.207.207.num portb=num pause 500 next vec goto prog END .253.237.134.255.Un contador ascendente y descendente vec var byte num VAR BYTE TRISB = 0 prog: for vec=0 to 9 lookup vec.253.237.219.

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

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

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

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

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

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

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

end pause 200 else cont=cont endif goto inicio .

230.239].[0.Contador con Pulsantes Este es un contador ascendente y descendente.135.135..207.num portb=num if vec>=10 then vec=0 endif pause 200 endif if PORTA.239].230.134.191.191.255.237.219..0=0 then vec=vec+1 lookup vec.255.207..1=0 then vec=vec-1 lookup vec.[0.134.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.219.253.237.num portb=num if vec<=1 then vec=11 endif pause 200 endif goto inicio .253.

END .

.253.219.207.134. vecvar byte num VAR BYTE flag var byte TRISA = %00000011 TRISB = 0 cmcon=7 vec=0 flag=1 inicio: if PORTA.num portb=num .255.0=0 then flag=1 endif if PORTA.230..239].135.237.191.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.CONTADOR CON PULSANTES A diferencia del anterior que el conteo se la hacia cuando se pulsaba aqui es conteo es automatico y los pulsantes sirven para elegir si se quiere que el conteo sea ascendente o descendente.[0.

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

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

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

Cuanto más mire a su alrededor. y de la calidad de los sensores de entrada. Cualquier sistema microcontrolador (o para el caso. Las entradas a los microcontroladores. computado).nombre que tenga relación con el dato que almacena. l/0 pin declaradas entradas (o sensores) if in1=0 programa activados debug (depurar) variables La verdadera importancia de los microcontroladores es su habilidad para tomar decisiones basándose en las entradas. Si a usted le gusta más trabajar con “hardware”. Es importante recordar que las decisiones del microcontrolador son solamente tan buenas como el programa que están ejecutando. en lugar de escribir programas (crear software). La tecnología de los sensores es una de las áreas más desafiantes de la electrónica. La longitud del nombre no tiene influencia en que tan rápido su _________ se ejecuta. 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. 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. deben tener un formato digital. Mucha gente se especializa en el diseño de sensores que se comunican con microcontroladores. más aplicaciones verá para la tecnología de sensores y microcontroladores. depende de las entradas digitales para tomar decisiones correctas. .

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

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

a ON....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..ENDIF INPUT (LET) LCDOUT LOOKDOWN LOOKDOWN2 LOOKUP LOOKUP2 LOW NAP ON INTERRUPT OUTPUT PAUSE Inserta una linea de codigo ensamblador Inserta una seccion de codigo ensamblador GOTO computado(equiv..) .ENDASM BRANCH BRANCHL BUTTON CALL CLEAR COUNT DATA DEBUG DISABLE DTMFOUT EEPROM ENABLE END FOR.Apéndice B: REFERENCIA DE DECLARACIONES PBP @ ASM....ELSE.

. 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. ASM. 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. @ @ declaracion Cuando se usa al comienzo de una línea. Este atajo se puede usar libremente para unir codigo ensamblador con declaraciones PBP.) Lee un byte del registro Graba un byte en el registro Lee el potenciometro en el pin especificado Mide el ancho de pulso en un pin Genera pulso hacia un pin Salida modulada en ancho de pulso a un pin Genera numero pseudo-aleatorio Mide el ancho de pulso en un pin Lee byte de un chip EEPROM Continua la ejecucion despues de una interrupcion Continua en la declaracion que sigue al ultimo GOSUB Convierte un pin de salida en entrada o uno de entrada en salida Entrada serial asincronica (tipo BS!) Entrada serial asincronica (tipo BS2) Salida serial asincronica (tipo BS1) Salida serial asincronica (tipo BS2) Entrada serial sincronica Salida serial sincronica Apaga el procesador por un periodo de tiempo Genera un tono o ruido blanco en un pin Detiene la ejecucion del programa Intercambia los valores de dos variables Hace salida a un pin y cambia su estado Ejecuta declaraciones mientras la condicion sea cierta Graba bytes a un chip EEPROM Entrada X .2.WEND WRITE XIN XOUT Demora (resolucion 1 useg. provee un atajo para insertar una declaracion en lenguaje ensamblador en un programa PBP. Por ejemplo @ Include “fp.10 5. 5.ENDASM ASM .PAUSEUS PEEK POKE POT PULSIN PULSOUT PWM RANDOM RCTIME READ RESUME RETURN REVERSE SERIN SERIN2 SEROUT SEROUT2 SHIFTIN SHIFTOUT SLEEP SOUND STOP SWAP TOGGLE WHILE.10 Salida X .asm “ @ resetea a 0 la página del registro antes de ejecutar la instrucción en lenguaje ensamblador..1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful