PicBasicPro en Castellano
PicBasicPro en Castellano
PicBasicProencastellano
PicBasicPROCompiler
TABLADECONTENIDOSDELMANUAL
INTRODUCCIN
PicMicro
acerca de este
manual
DESDE EL PRINCIPIO
Su primer
programa
programando el
micro
esta vivo!
tengo
problemas
estilos de
codigos
comentarios
nombres de
pin y
variables
etiquetas
goto
OPCIONES DE LINEA DE
COMANDOS
uso
opciones
opcion -A
opcion -C
opcion -E
opcion -H
opcion -I
opcion -L
opcion -O
opcion -P
identificadores
etiquetas de linea
variables
alias
arrays
constantes
simbolos
constantes
numericas
cadenas de
constantes
puertos
caracteres de
extension de linea
include
define
ABS
COS
DCD
DIG
DIV32
MAX y MIN
NCD
declaraciones
multiples
OPERADORES
MATEMATICOS
desplazamiento
opcion
multiplicacion
division
operadores de bit
operadores de
comparacion
operadoreslogicos
ADCIN
ASM ENDASM
BRANCH
BRANCHL
BUTTON
CALL
CLEAR
CLEARWDT
COUNT
DATA
DISABLE
DISABLE DEBUG
DISABLE
INTERRUPT
DTMFOUT
EEPROM
ENABLE
DEBUG
ENABLE
INTERRUPT
END
FOR NEXT
FREQOUT
GOSUB
HSERIN
HSEROUT
I2CREAD
I2CWRITE
IF THEN
INPUT
LCDIN
LCDOUT
LET
LOOKDOWN
LOOKDOWN2
LOW
NAP
ON DEBUG
ON INTERRUPT
OUTPUT
OWIN
OWOUT
PAUSE
PAUSEUS
PEEK
POKE
PULSOUT
PWM
RANDOM
RCTIME
READ
READCODE
RESUME
RETURN
REVERSE
SELECT CASE
SERIN
SHIFTIN
SHIFTOUT
SLEEP
SOUND
STOP
SWAP
TOGGLE
USBIN
USBINIT
USBOUT
XIN
XOUT
GOTO
ENABLE
ESTRUCTURA DE UN
PROGRAMA COMPILADO
encabezados
especificos
libreria de archivos
codigo generado
estructura del
archivo .ASM
OTRAS
CONSIDERACIONES
valores
predeterminados
uso de la RAM
palabras
reservadas
PROGRAMACION EN
ASEMBLER
dos ensambladores
programar en
ensamblador
ubicacion del
ensamblador en
linea
topico acerca
del asembler
INTERRUPCIONES
interrupciones en
general
interrupciones en
BASIC
interrupciones en
ASM
REFERENCIA DE
DECLARACIONES
WHILE
vida
despues de
los 2K
INTRODUCCION
INDICE
Este manual describe los usos y operaciones del compilador PicBasic PRO propiedad de microEngieneerinc, inc
El compilador PicBasic Pro (PBP) es nuestro lenguaje de programacin de nueva generacin que hace mas fcil y rpido para usted programar micro controladores
Pic micro de Microchip Technology .
El lenguaje Basic es mucho ms fcil de leer y escribir que el lenguaje ensamblador Microchip.
El PBP es similar al BASIC STAMP II y tiene muchas de las libreras y funciones de los BASIC STAMP I y II. Como es un compilador real los programas se
ejecutan mucho ms rpido y pueden ser mayores que sus equivalentes STAMP.
PBP no es tan compatible con los BASIC STAMP como nuestro compilador PicBasic es con el BS I. Decidimos mejorar el lenguaje en general. Una de estas
decisiones fue agregar IF ...THEN...ELSE...ENDIF en lugar de IF.. THEN (GOTO) de los Stamps. Estas diferencias se ven luego en este manual.
PBP por defecto crea archivos que corren en un PIC 16F84-04/P con un reloj de 4 Mhz. Solamente muy pocas partes son necesarias capacitores de dos capacitores
de 22 pf para el cristal de 4Mhz un resistor de 4.7K en el pin/MCLR y una fuente de 5 volt. Otros micros PIC adems del 16F84, as como otros osciladores de
frecuencias distintas pueden ser usados por este compilador.
INDICE
[Link]
1/58
10/1/2015
PicBasicProencastellano
INDICE
Este manual no es un tratado completo del lenguaje BASIC. Describe el conjunto de instrucciones del micro PIC y brinda ejemplos de cmo utilizarlo. Si no est
familiarizado con la programacin de BASIC , deber obtener un libro sobre dicho tema. O intentarlo directamente. BASIC est diseado como un lenguaje fcil de
utilizar y, hay ejemplos adicionales de programas en el disco que pueden ayudarlo a comenzar.
La prxima seccin de este manual abarca la instalacin del PBP y la escritura del primer programa. Siguiendo a esto, una seccin que describe diferentes opciones
para la compilacin de programas.
Despus son explicadas las bases de la programacin , seguidas por una seccin de referencia en donde cada comando del PBP es detallada en una lista. La seccin
de referencia muestra cada prototipo de comando, una descripcin del comando y algunos ejemplos. Las llaves ({}), indican los parmetros opcionales.
El resto del manual, provee informacin para programadores avanzados - todo el trabajo interno que el compilador hace.
INDICE
EMPEZANDODESDEELPRINCIPIO
INSTALACIN DEL SOFTWARE INDICE
El software PBP debe ser copiado a su disco rgido antes de usarlo. Cree un subdirectorio en su disco llamado PBP u otro nombre a su eleccin, tipeando md PBP
en el prompt de DOS. Copie todos los archivos desde el diskette adjunto ,en el subdirectorio recientemente creado, tipeando:
xcopy a:*.* PBP /s
La opcin /s asegurar que todos los subdirectorios necesarios sern creados dentro del subdirectorio PBP.
Si el archivo es comprimido (.ZIP) o ejecutable (.EXE), usted necesita descomprimirlo (unzip) usando la opcin -d para asegurarse que los subdirectorios sean
recreados.
Asegurese que FILES y BUFFERS sean fijados en por lo menos 50 en su archivo [Link] . Dependiendo de cuantos FILES y BUFFERS ya estn en uso por su
sistema, puede ser necesario aumentar su nmero.
recomendaciones del fabricante
INDICE
SU PRIMER PROGRAMAINDICE
Para operar el PBP , necesitar un editor procesador de texto para crear su programa fuente , algn tipo de programador de micros PIC como el EPIC Plus Pocket
PICmicro Programmer y el propio PBP. Por supuesto , tambin necesita un PC:
La secuencia de eventos es similar a la siguiente :
[Link]
2/58
10/1/2015
PicBasicProencastellano
Primero cree el archivo fuente BASIC para el programa , usando su editor o procesador de texto preferido. Si lo desea , EDIT ( includo en DOS) NOTEPAD
(includo en WINDOWS) , pueden ser [Link] nombre del archivo fuente debe terminar con la extensin .BAS (pero no es excluyente), recomiendo el
UltraEdit
El archivo de texto creado debe ser texto ASCII puro .No debe contener cdigos especiales insertados por procesadores de texto para sus propsitos especficos
.Normalmente se tiene la opcin de grabar el archivo como texto ASCII puro en la mayora de los procesadores de texto.
El siguiente programa provee un buen primer testeo de un micro PIC en el mundo real .Puede tipearlo o simplemente obtenerlo del subdirectorio SAMPLES includo
en el diskette distribuido con el PBP .El archivo es [Link] . El archivo fuente BASIC debe ser creado +o movido al mismo directorio donde se encuentra el
archivo [Link]
Ejemplo de programa para hacer parpadear un LED conectado al puerto PORTB.0 , aproximadamente una vez por segundo
loop: high PORTB.0 enciende el LED
pause 500 demora de .5 segundos
low PORTB.0 apaga el LED
pause 500 demora de .5 segundos
goto loop vuelve a loop y hace parpadear el LED indefinidamente
end
Una vez que Ud. est convencido que el programa que ha escrito funcionar sin errores puede compilarlo ingresando PBP seguido del nombre de su archivo de texto
en el prompt de DOS .Por ejemplo , si el archivo de texto que Ud. creo se llama [Link] , ingrese :
PBP blink
El compilador mostrar un mensaje de inicializacin y procesar su archivo .Si lo acepta , crear un archivo de cdigo fuente ensamblado ( en este caso
[Link]) y automticamente invocar al ensamblador para completar la tarea .Si todo funciona bien , se crea un archivo de cdigo microPIC (en este caso
[Link]). Si existen errores , se emitir un listado de los mismos , que debern ser corregidos en su archivo fuente BASIC antes de ser compilados
nuevamente.
Para ayudarlo a asegurarse que su archivo original funcione sin errores , es mejor comenzar escribiendo y probando pequeas partes de su programa y no escribir
100000 lneas de programa y luego tratar de depurarlas de principio a fin.
Si Ud, no le indica otra cosa , el PBP ,por defecto , crea cdigo para el PIC16F84 . Para compilar cdigos para otros micros PIC , simplemente use la opcin -p en
la lnea de comandos , como se describe mas adelante , para especificar otro tipo de procesador .Por ejemplo si intenta usar el programa [Link] en un
PIC16C74 , compile usando el comando
PBP - p16c74 blink
INDICE
Hay otros dos pasos colocar su programa compilado dentro del micro controlador Picmicro y testearlo.
El PBP genera archivos de 8 bit standard de INTEL (.HEX) que pueden ser usados con cualquier programador de microsPic incluyendo nuestro programador EPIC
Plus Pocket PICmicro Programmer. Los microPic no pueden ser programados con cables de programacin BASIC Stamp.
El siguiente es un ejemplo de cmo un microPic puede ser programado usando nuestro programador EPIC .
Asegrese de que no haya microsPic instalados en el zcalo de programacin del programador EPIC.
Conecte el programador EPIC al puerto paralelo de impresora del PC usando un cable de impresora DB25 macho a DB25 hembra.
Enchufe el adaptador de AC en la pared y luego en el programador EPIC (o coloque dos bateras de 9 volt en el programador y conecte el jumper Batt ON).
El LED en el programador puede estar encendido o apagado en este momento. No coloque un microPic en el zcalo de programacin cuando el LED est encendido o
antes de que el software de programacin d comienzo.
Ingrese: EPIC.
En el prompt de DOS para comenzar el software de programacin. El software EPIC puede ser iniciado desde una seccin de DOS pura o desde una seccin de
DOS bajo Windows OS/2. (No se recomienda utilizarlo bajo Windows porque altera el sistema de tiempos y juega con los puertos lo que puede causar errores de
programacin).
El software de EPIC busca donde est conectado el programador EPIC y lo deja listo para programar un microPIC. Si no se encuentra un programador EPIC
chequea todas las conexiones y verifica que no hay un microPic o algn adaptador conectado al programador. Tipeando: EPIC / ?
En el prompt de DOS mostrar una lista de opciones disponibles para el software de EPIC.
Una vez que se muestra la pantalla de programacin, use el mouse para hacer click sobre OPEN archivo apriete Alt-O en su teclado. Use el mouse o el teclado
para seleccionar [Link] cualquier otro archivo que usted desee programar dentro del microPic desde la caja de dilogo.
El archivo se cargar y usted ver una lista de nmeros en la ventana de la izquierda. Esto es su programa en cdigo de microPic. A la derecha de la pantalla se
muestra informacin de la configuracin que ser programada dentro del microPic. Verifique que es correcta antes de proseguir.
[Link]
3/58
10/1/2015
PicBasicProencastellano
En general, el oscilador debe ser colocado en XT para un cristal de 4 Mhz y el Watchdog Timer debe ser colocado en ON para programas de PBP. Mas importante,
Code Protect debe ser OFF cuando se programa cualquier micro con ventana de cuarzo (JW). Usted no puede borrar un microPic con ventanas que ha sido
protegido con cdigo.
Cuando todo parece maravilloso, es tiempo de insertar un microPic dentro del zcalo de programacin y hacer click sobre Program teclear Alt-P en el teclado. El
microPic primero ser chequeado para asegurarse de que est en blanco y luego su cdigo ser programado dentro de l. Si el microPic no est en blanco y es un
16F84 un 16C84, usted simplemente puede elegir programarlo sin borrarlo primero.
Una vez que se complet el programa y se apag el LED es tiempo de probar su programa.
INDICE
ESTA VIVO
INDICE
El esquema de ejemplo siguiente da una idea de los pocos elementos que se necesitan conectar a un microPic para hacerlo funcionar. Bsicamente se necesita un
resistor de pull-up en la lnea /MCLR, un cristal de 4 Mhz con 2 capacitores y una fuente de 5 volt. Hemos agregado un LED y un resistor para proveer la salida
para el programa BLINK.
Construya y verifique este simple circuito en una tarjeta y enchufe el microPic que usted program. Nuestra lnea de tarjetas PICProto es perfecta para este tipo
de cosas.
Conecte una fuente de alimentacin su microPIC arrancar parpadeando el LED aproximadamente una vez por segundo. Si no lo hace verifique todas las conexiones
y asegrese que hay 5 volt en los pins apropiados de su microPic
Con este simple comienzo ,puede crear su propio mundo de aplicaciones.
INDICE
Los programas mas comunes para hacer funcionar los microPic involucran asegurarse que los pocos componentes externos sean de valor apropiado y estn
conectados adecuadamente. Las siguientes son algunas claves para ayudar a hacer funcionar todo.
Asegrese que el pin /MCLR est conectada a 5 volt a travs de algn tipo de circuito protector o simplemente con un resistor de 4.7K. Si deja el pin sin conectar
su nivel flota y algunas veces el microPic puede fallar. El microPic tiene un circuito interno de power-on-reset (puesta a cero al encender) y en general solo es
necesario un resistor interno de pull-up es adecuado. En algunos casos el microPic puede no arrancar apropiadamente y se necesita un circuito interno. En los
manuales encontrar mayor informacin.
Asegrese de usar un cristal en buen estado con capacitores de valor adecuados conectados a l . Los valores de los capacitores pueden ser difciles de leer. Si los
valores son muy diferentes el oscilador no arrancar ni trabajar en forma apropiada. Un cristal de 4 Mhz con 2 capacitores cermicos de 22pf es un buen
comienzo para la mayora de los microPic. Una vez mas, busque en los manuales informacin adicional en ste tema.
Asegrese de que la fuente de alimantacin es apropiada para la tarea. Aunque el microPic consume muy poca potencia la fuente debe estar muy bien filtrada. Si el
microPic est controlando dispositivos que consumen bastante corriente de su fuente cuando ellos se encienden o apagan pueden causar un glitch (ruido
interferencia) en las lneas de alimentacin causando que el microPic deje de funcionar apropiadamente. Aun un visor LED puede crear un drenaje instantneo en
una pequea fuente de alimentacin (como una batera de 9 volt) y causar el microPic falle.
Cheque las hojas de datos del microPic. Algunos dispositivos tienen opciones que pueden interferir con algunas operaciones. Los PIC16C62X (16C620, 621 y 622)
son un buen ejemplo. Estos microPic tienen comparadores analgicos en PORTA. Cuando estos micros arrancan, PORTA se coloca en modo analgico. Esto hace que
la funcin en PORTA trabaje de una manera no esperada. Para cambiar el pin a digital, simplemente agregue la lnea.
CMCON = 7
Al principio de su programa .Cualquier micro C con entradas analgicas como la serie16C7xx arrancar en modo analgico .Deber colocarlos en modo digital si
intenta usarlos en ese modo.
Otro ejemplo de desastre potencial es el pin 4 PORTA , exhibe un comportamiento inusual cuando es usado como salida .Esto sucede porque tiene una salida a
[Link]
4/58
10/1/2015
PicBasicProencastellano
colector abierto , en lugar del estado bipolar del resto de los pins .Esto significa que puede ser llevada a tierra cuando se coloca en 0 . pero flotar cuando se la
coloque en 1 , en lugar de ir a un estado alto .Para hacer que este pin funcione de manera correcta , agregue un resistor de pull-up entre el pin y 5 volt . El valor del
resistor puede estar entre 1 K y 33 K . dependiendo de la conexin de entrada .Este pin actua como cualquier otro cuando se lo usa como entrada.
Todos los pins del microPIC se colocan como entradas cuando arranca .Si necesita que un pin actue como salida , coloquelo como salida antes de usarlo use un
comando de PBP que lo haga por Ud .Una vez ms , puede revisar las hojas de datos de los microsPIC .
Comience en pequeo .Escriba programas cortos para probar opciones de las que no est seguro con las que puede tener problemas .Una vez que estas funcionen .
puede seguir adelante
Trate de hacer las cosas de otra manera . Algunas veces , aquello que trata de hacer debera funcionar , pero no lo hace . Normalmente hay mas de una forma de
confeccionar un programa . Trate de llegar utilizando un ngulo diferente.
ESTILO DE CDIGO
INDICE
Escribir programas legibles y mantenibles es un arte . Existen algunas tcnicas simples que ud. debe seguir y se convertir en un artista.
COMENTARIOS
INDICE
Use comentarios . Aunque sea perfectamente obvio para Ud, lo que est escribiendo , alguien ms puede leerlo ( Ud. mismo ms tarde) y puede no tener idea de lo
que Ud. hizo .Aunque los comentarios usan espacio en el archivo fuente BASIC , no lo hacen en el microPIC .
Haga que los comentarios le digan algo til acerca de lo que el programa est haciendo .Un comentario como colocar pin 0 en 1 simplemente explica la sintaxis del
lenguaje , pero no le dice nada acerca de la necesidad de hacerlo . Encender el LED de batera baja puede ser ms til .
Un bloque de comentarios en el comienzo del programa y antes de cada seccin de cdigo puede describir que suceder con ms detalle que un simple espacio
despus de cada lnea .No incluya un bloque de comentarios en lugar de comentarios individuales de lnea - use ambos .
En el comienzo del programa que har el programa , autor y fecha .Puede ser til para listar informaciones de revisin y fechas . Especificar las conexiones de cada
pin puede ser til para recordar para que equipo en especial se program .Si se utiliz un cristal no standard , u opciones especiales de compilacin asegurese de
indicarlo .
ETIQUETAS
INDICE
Las etiquetas (labels) deben indicar algo mas significativo que etigueta 1 aqu .An una etiqueta loop es ms descriptiva (pero poco) .Usualmente la lnea
rutina a la que se est saltando hace algo nico .Trate de dar un indicio de su funcin con la etiqueta y luego siga con un comentario .
GOTO
INDICE
Trate de no usar demasiados GOTO . Aunque pueden ser un mal necesario , trate de minimizar su uso en lo posible .Trate de escribir su cdigo en secciones lgicas
y no ir saltando a cualquier lado . Usar GOSUB puede ser til para esto .
El PBP puede ser llamado desde la lnea de comando del DOS usando el siguiente formato:
PBP opciones nombre de archivo.
Ninguna o varias opciones pueden ser usadas para modificar la manera en que PBP compila el archivo especificado. Las opciones comienzan con un signo menos (-) o
una barra invertida (/). El carcter siguiente al signo menos o la barra es una letra que selecciona la opcin. Puede haber ms caracteres si la opcin requiere mas
informacin. Cada opcin debe estar separada por un espacio, pero no puede haber ningn espacio dentro de una opcin.
Opciones mltiples pueden ser usadas al mismo tiempo, por ejemplo:
[Link]
5/58
10/1/2015
PicBasicProencastellano
OPCIONES INDICE
Opcin
Descripcin
H(?)
Opcin -A INDICE
PBP tiene la posibilidad de usar tanto PM, que est includo con PBP MPASM de Microchips como ensamblador. Para especificar MPASM, use -ampasm en la lnea
de comandos
PBP -ampasm nombre de archivo
Si no se especifica un ensamblador en la lnea de comando, se usa PM. Vea la seccin de programacin en lenguaje ensamblador para ms informacin.
Opcin -C INDICE
La opcin -C causa que PBP inserte las lneas del archivo fuente como comentario en el archivo fuente en lenguaje ensamblador. Esto puede ser til como una
herramienta de depuracin o una herramienta de aprendizaje ya que muestra la instruccin PBP seguida por las instrucciones en lenguaje ensamblador que genera.
PBP -C nombre de archivo
Opcin -E INDICE
La opcin -e causa que el PBP envie todos los errores a un archivo,nombre_de_archivo.er .
PBP -e nombre de archivo
Opcin -H -? INDICE
La opcin -H -? causa que PBP muestre una pantalla de ayuda. Esta pantalla de ayuda tambin se muestra si no se especifica opcin o nombre de archivo en la lnea
de comandos
Opcin -I INDICE
Opcin -L INDICE
La opcin -L permite seleccionar la librera usada por el PBP. Esta opcin generalmente es innecesaria ya que el archivo de librera por defecto se coloca en un
archivo de configuracin para cada micro controlador. Para mas informacin acerca de la librera PBP, vea las secciones avanzadas de ste manual.
PBP -lpbpps2 nombre del archivo
[Link]
6/58
10/1/2015
PicBasicProencastellano
Este ejemplo hace que PBP compile el nombre del archivo usando la librera PicStic2.
Opcin -O INDICE
La opcin -O causa que las letras que la sigan sean pasadas al ansamblador en su lnea de comando como opciones. Algunas opciones de PM se muestran en la
siguiente tabla:
PM opcin
Descripcin
OD
OL
Opcin -P INDICE
Si no se le indica otra cosa, PBP compila programas para el PIC16F84. Si el programa est destinado a otro procesador su nombre debe ser especificado en la lnea
de comando usando la opcin -P.
Por ejemplo si el programa PBP est destinado a un procesador PIC16C74 la lnea de comando debera ser la siguiente:
PBP -p16c74 nombre de archivo
Opcin -S INDICE
Normalmente cuando PBP compila exitosamente un programa automticamente arranca el ensamblador. Esto se hace para convertir la salida ensamblada el PBP a
una imagen ejecutable. La opcin -S evita esto dejando la salida del PBP en un archivo .ASM.
Ya que -S evita que sea llamado el ensamblador todas la opciones que son pasadas al ensamblador usando la opcin -O son anuladas.
PBP -S nombre de archivo
Opcin -V INDICE
La opcin -V coloca al PBP en modo de comentarios el que presenta mayor informacin durante la compilacin del programa.
PBP -V nombre de archivo
VARIABLES INDICE
Variables es donde se guardan datos en forma temporaria en un programa PBP. Son creadas usando la palabra clave VAR. Pueden bits , bytes word. Espacio para
cada variable es automticamente destinado en la memoria del micro controlador por PBP. El formato para crear una variable es el siguiente:
Etiqueta VAR tamao (.modificadores)
Etiqueta es cualquier identificador excluyendo palabras claves como se describe anteriormente. Tamao es bit, byte word. Modificadores opcionales agregan
control adicional acerca de cmo se crea la variable. Algunos ejemplos de creacin de variables son:
perro var byte
gato var bit
W0 var word
[Link]
7/58
10/1/2015
PicBasicProencastellano
No hay variables predefinidas de usuarios de PBP. Por razones de compatibilidad existen dos archivos que crean las variables standard usadas con BASIC
stamps:[Link] y [Link]. Para usar uno de estos archivos agregue la lnea
Include [Link]
Include [Link]
cerca del comienzo del programa PBP. Estos archivos contienen numerosas declaraciones VAR que crean todas las variables de BASIC Stamps y definiciones de
pin.
De cualquier manera, en lugar de usar estos archivos envasados le recomendamos que cree su propias variables usando nombres con significado para usted.
El nmero de variables disponibles depende de la cantidad de RAM en un dispositivo en particular y el tamao de las variables y los arrays .PBP reserva
aproximadamente 24 posiciones RAM para su propio uso. Tambin puede crear variables temporarias adicionales para usar en ordenamiento de ecuaciones
complejas.
ALIAS INDICE
VAR tambin puede ser usado para crear un alias para una variable. Esto es muy til para acceder al interior de una variable.
fido var perro fido es otro nombre de perro
b0 var w0.byte0 b0 es el primer byte de word w0
b1 var w1.byte1 b1 es el segundo byte de word w0
flea var perro.0 flea es bit0 de perro
Modificador
Descripcin
BIT0 O 0
BIT1 O 1
BIT2 O 2
BIT3 O 3
BIT4 O 4
BIT5 O 5
BIT6 O 6
BIT7 O 7
BIT8 O 8
BIT9 O 9
BIT10 O 10
BIT11 O 11
BIT12 O 12
BIT13 O 13
BIT14 O 14
BIT15 O 15
BYTE0 O LOWBYTE
BYTE1 O HIGHBYTE
[Link]
8/58
10/1/2015
PicBasicProencastellano
en total .
Dada la forma en que los arreglos estn localizados en memoria hay lmites de tamao para cada tipo.
Tamao
BIT
128
BYTE
64
WORD
32
CONSTANTES INDICE
Las llamadas constantes pueden ser creadas de manera similar a las variables. Puede ser mas conveniente usar un nombre de constante en lugar de un nmero
constante. Si el nmero necesita ser cambiado, nicamente puede ser cambiando en un lugar del programa donde se define la constante. No pueden guardarse datos
variables dentro de una constante.
Etiqueta CON expresin constante
Algunos ejemplos son:
Mice con 3
Traps con mice *1000
SMBOLOS INDICE
SYMBOL provee otro mtodo para renombrar (darle alias) a variables y constantes. SYMBOL no puede ser usado para crear una variable. Use VAR para crear una
variable
SYMBOL lion = cat cat fue previamente creada usando VAR
SYMBOL mouse = 1 igual que mouse con 1
[Link]
9/58
10/1/2015
PicBasicProencastellano
PORTA anyvar = PORTB y $0F. ' Asle los 4 dgitos binarios bajos de PORTB y ponga el resultado en anyvar
PINS INDICE
A los pins se puede acceder de diferentes modos. El mejor camino para especificar un pin para una operacin, es simplemente usar sus nombres PORT y un nmero
de bit:
PORTB.1= Colocar PORTB, bit 1 a 1
Para recordar fcilmente para qu puede ser usado un pin, debe asignarse un nombre usando el comando VAR. De esta manera, el nombre puede ser utilizado luego
en cualquier operacin:
Led var PORTA.O Renombra PORTA.O como led
High led Coloca led (PORTA:O) en valor alto
Para compatibilidad con el BASIC Stamp, los pins usados en los comandos del PBP pueden, adems, ser referidos por un nmero, 0-15. Estos pins estan fsicamente
distribuidos sobre diferentes puertos del hardware del micro PIC, dependiendo de cuntos pins tiene el microcontroladores
0-7
8-15
8-pin
GPIO*
GPIO*
18-pin
PORTB
PORTA*
PORTB
PORTC
28-pin (14C000)
PORTC
PORTD
40-pin
PORTB
PORTC
Si un conector no tiene ocho pins, como el PORTA, slo los nmeros de pin que existen pueden ser utilizados, por ejemplo 8-12. Usar los nmeros de pin 13-15 no
tendr un efecto perceptible.
Este nmero de pin, 0-15, no tiene relacin con el nmero fsico del pin de un micro PIC. Dependiendo de cada micro PIC, el pin nmero 0 podra ser el pin fsico
6,21 o 33, pero en cada caso esto apunta a PORTB.0 (o GPIO.0 para dispositivos 8-pin, o PORTC.0 para un PIC14C000).
Los pins pueden ser referenciados por un nmero (0-15), un nombre (Ej: Pin0, si uno de los archivos [Link] son includos o si usted los tiene definidos), o un
nombre completo de bit (Ej: PORTA.1).
A cualquier pin o bit del microcontrolador se puede acceder usando el mtodo anterior.
Los nombres de los pin (Ej: Pin0) no son automticamente includos en su programa. En la mayora de los casos, usted define los nombres de los pins como desee,
usando el comando VAR:
Sin embargo, dos archivos de definicines han sido provistos para mejorar la compatibilidad del BASIC Stamp. Los archivos [Link] o [Link] pueden
ser incluidos en el programa PBP para proveer nombres de pin y bit, compatibles con los nombres del BASIC Stamp.
Include [Link]
O
Include [Link]
[Link] define Pins , B0 - B13 , W0 - W6 y muchos otros nombres de pin y variables de BS1.
[Link] define Ins , Outs , B0 - B25 , W0 - W12 y muchos otros nombres de pin y variables de BS1.
Cuando arranca un microPIC , todos los pins son colocados en entrada .Para usar un pin como salida , el pin o port debe ser colocado como salida o se debe usar un
comando que automaticamente coloque al pin como salida.
Para colocar un pin o port como salida ( entrada) debe dar valores al registro TRIS . Colocando el bit de TRIS como 0 , hace su pin una salida , y colocandolo en 1
lo hace una entrada .Por ejemplo :
[Link]
10/58
10/1/2015
PicBasicProencastellano
COMENTARIOS INDICE
Un comentario de PBP comienza con la palabra clave REM o el apstrofe (). Todos los dems caracteres de esa lnea se ignoran.
REM es una nica palabra clave y no es una abreviacin de REMark, por lo tanto, los nombres de variables pueden comenzar con REM (aunque REM por s mismo no
es vlido).
INCLUDE INDICE
Se puede agregar archivos fuente BASIC a un programa PBP usando INCLUDE. Usted puede tener su rutina standard, definiciones u otros archivos que desee
guardar en forma separada. Los archivos de definicin de modo serial y de stamp son ejemplo de esta. Estos archivos pueden ser incluidos en programas donde ser
necesario, pero no en programas donde no se los necesita.
Las lneas de cdigo fuente del archivo incluido son insertadas dentro del programa exactamente donde se coloca el INCLUDE.
INCLUDE [Link]
[Link]
11/58
10/1/2015
PicBasicProencastellano
DEFINE INDICE
Algunos elementos, como el oscilador y las ubicaciones de los pin LCD, estn predefinidas en PBP. DEFINE le permite a un programa PBP cambiar estas definiciones
si as lo desea.
Define puede ser usado para cambiar el valor predefinido del oscilador, los pins de DEBUG y el baud rate y las ubicaciones de los pin LCD adems de otras cosas.
Estas definiciones deben estar en maysculas
DEFINE BUTTON_PAUSE 50
DEFINE DEBUG_BIT 0
DEFINE DEBUG_MODE 1
paso de depuracion en us
DEFINE HSER_RCSTA 90 h
DEFINE HSER_TXSTA 20 h
DEFINE HSER_EVEN 1
DEFINE HSER_ODD 1
DEFINE I2C_INTERNAL 1
DEFINE I2C_SLOW 1
DEFINE LCD_DBIT 0
DEFINE LCD_RSBIT 4
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE OSC 4
3 (3.58) 4 8 10 12 16 20Mhz.
DEFINE OSCCAL_1K 1
DEFINE OSCCAL_2K 1
[Link]
Descripcin
Suma
Resta
Multiplicacion
**
*/
Division
//
Resto (mdulo)
<<
Desplazamiento izquierdo
12/58
10/1/2015
PicBasicProencastellano
>>
Desplazamiento derecho
ABS
Valor absoluto
COS
Coseno
DCD
2m decodificador
DIG
Digito
MAX
Maximo *
MIN
Minimo *
NCD
Codificar
REV
Invertir bits
SIN
Seno
SQR
Raiz cuadrada
&
Bit inteligente OR
& /
^ /
MULTIPLICACIN INDICE
PBP efectua multiplicaciones 16 x 16 bits .El operador * devuelve los 16 bit inferiores del resultado de 32 bit. Esta es la multiplicacin tpica encontrada en los
lenguajes de programacin. El operador ** devuelve los 16 bit superiores del resultado de 32 bit. Estos dos operadores pueden ser utilizados en conjunto para
realizar multiplixaxiones de 16 x 16 bit que produzcan resultados de 32 bit .
W1 = W0 * 1000 multiplica el valor de W0 por 1000 y coloca el resultado en W1
W2 = W0 ** 1000 W0 por 1000 y coloca los 16 bit superiores (que Deben ser 0 ) en W2
El operador */ los 16 bit medios del resultado de 32 bit.
W3 = W1 */ W0 multiplica W1 por W0 y coloca los 16 bit medios en W3
DIVISIN INDICE
PBP efectua divisiones de 16 x 16 bit . El operador / devuelve el resultado de 16 bit . El operador // devuelve el resto (mdulo del nmero).
W1 = W0 / 1000 Divide el valor de W0 por 1000 y coloca el resultado en w1
W2 = W0 // 1000 Divide el valor de W0 por 1000 y coloca el resto en W2
DESPLAZAMIENTO INDICE
Los operadores << y >> desplazan un valor hacia la izquierda derecha respectivamente , 1 a 15 veces .Los bits desplazados se colocan en 0 .
B0 = B0 << 3 Desplaza B0 tres lugares a la izquierda ( igual a multiplicar por 8)
W1 = W0 >> 1 Desplaza W0 una posicin a la derecha y coloca el resultado en W1 (igual a dividir por 2 )
ABS INDICE
ABS devuelve el valor absoluto de un nmero . Si un byte es mayor de 127 (bits altos) ABS devuelve un valor 256 - . Si un word es mayor de 32767 (bits altos) ,
devuelve un valor 65536 - .
B1 = ABS B0
COS INDICE
COS es coseno en 8 bit de un valor dado. El resultado est dado en forma de dos complementos . ( [Link]. - 127 a 127 ) .Usa una tabla de cuarto de onda para
encontrar el resultado . El coseno comienza con un valor en radianes binarios , 0 a 255 , en lugar de los comunes 0 a 358 grados.
[Link]
13/58
10/1/2015
PicBasicProencastellano
B1 = COS B0
DCD INDICE
DCD devuelve el valor decodificado de un nmero de bit . Cambia un nmero de bit ( 0 a 15) por un nmero binario con ese bit seteado en 1. Todos los dems bits
son 0 .
B0 = DCD 2 setea B0 como % 00000100
DIG INDICE
DIG devuelve el valor de un dgito decimal . Simplemente se le indica el nmero de dgito a conocer ( 0 - 4 , siendo 0 el primero de la derecha) y ya est.
B0 = 123 setea B0 en 123
B1 = B0 DIG 1 setea B1 en 2 (dgito 1 de 123)
DIV32INDICE
DIV32
PBPs multiplican (*) la funcin 16-bit x 16-bit obtienen un resultado 32-bit.
Sin embargo, puesto que el compilador utiliza solamente una talla variable mxima de 16 dgitos binarios, el acceso al resultado tuvo que suceder en 2 pasos de
progresin: c = b * retorna los 16 dgitos binarios ms bajos del multiplicar mientras que d = ** de b retorna los 16 dgitos binarios superiores.
No haba manera de tener acceso al resultado 32-bit como unidad.
En muchos casos es deseable poder dividir el resultado 32-bit entero de multiplicar por un nmero 16-bit para hacer un promedio o escalar. Una nueva funcin se
ha agregado para este propsito: DIV32.
DIV32 es limitado realmente a dividir un entero sin signo 31-bit (mximo 2147483647) por un entero sin signo 15-bit (mximo 32767). Esto debe ser suficiente en
la mayora de las circunstancias.
Pues el compilador permite solamente una talla variable mxima de 16 dgitos binarios, DIV32 confa que una multiplicacin acaba de ser realizado y que las
variables internas del compilador todava contienen el resultado 32-bit de la multiplicacin .
Ninguna otra operacin puede ocurrir entre la multiplicacin y el DIV32 o las variables internas puede ser alterado, destruyendo el resultado de 32-bit de la
multiplicacin. Este medio, entre otras cosas, de los cuales ON INTERRUPT debe estar DISABLEd antes de que el multiplicar hasta despus del DIV32.
Si ON INTERRUPT no se utiliza, all no es ninguna necesidad de agregar DISABLE al programa. Las interrupciones en ensamblador no deben tener ningn efecto en
las variables internas as que pueden ser utilizadas sin consideracin alguna hacia DIV32.
El fragmento siguiente del cdigo muestra la operacin de DIV32:
a Var Word
b Var Word
c Var Word
dummy var Word
b = 500
c = 1000
NCD INDICE
NCD devuelve el nmero de prioridad de bit codificado (1-16) de un valor . Se usa para encontrar el bit codificado con 1 de un valor dado . Devuelve 0 si no existen
[Link]
14/58
10/1/2015
PicBasicProencastellano
REV INDICE
REV invierte el orden de los bits inferiores de un valor .El nmero de bits a ser invertidos es de 1 a 16 .
B0 = %10101100 REV 4 setea B0 a %10100011
SIN INDICE
SIN es seno en 8 bits de un valor . El est dado en dos complementos ([Link]. -127 a 127 ) .Usa una tabla de cuarto de onda para encontrar el resultado . Comienza
con un valor en radianes binarios , 0 a 255 , en lugar de los usuales 0 a 359 grados.
B1 = SIN B0
SQR INDICE
SQR devuelve la raz cuadrada de un valor . Como PBP dolo trabaja con enteros , el resultado ser siempre un entero en 8 bits no mayor que el resultado actual .
B0 = SQR W1 setea B0 con la raz cuadrada de W1
Operador
Descripcin
= o ==
Igual
<> o !=
No igual
<
Menor
>
Mayor
<=
Menor o igual
>=
Mayor o igual
Los operadores lgicos difieren de las operaciones de bit inteligente . Entregan un resultado CIERTO / FALSO de su operacin .Valores 0 son tratados como falso .
Cualquier otro valor es cierto . Se usan junto a operadores de comparacin en una declaracin IF .. THEN .Los operadores soportados son :
Operador
[Link]
Descripcin
AND o &&
AMD logico
OR o I I
OR logico
XOR o ^ ^
OR exclusivo logico
NOT AND
NAND logico
NOT OR
NOR logico
NOT XOR
NXOR logico
15/58
10/1/2015
PicBasicProencastellano
ASM...ENDASM
BRANCH
BRANCHL
BUTTON
CALL
CLEAR
COUNT
DATA
DEBUG
DISABLE
DTMFOUT
EEPROM
ENABLE
END
FOR...NEXT
FREQOUT
GOSUB
GOTO
HIGH
HSERIN
HSEROUT
I2CREAD
I2CWRITE
IF..THEN..ELSE..ENDIF
INPUT
(LET)
LCDOUT
LOOKDOWN
LOOKDOWN2
LOOKUP
LOOKUP2
LOW
NAP
ON INTERRUPT
OUTPUT
PAUSE
PAUSEUS
PEEK
POKE
POT
PULSIN
PULSOUT
[Link]
16/58
10/1/2015
PicBasicProencastellano
PWM
RANDOM
RCTIME
READ
RESUME
RETURN
REVERSE
SERIN
SERIN2
SEROUT
SEROUT2
SHIFTIN
SHIFTOUT
SLEEP
SOUND
STOP
SWAP
TOGGLE
WHILE..WEND
WRITE
XIN
Entrada X - 10
XOUT
Salida X - 10
INDICE
@ declaracion
Cuando se usa al comienzo de una lnea , provee un atajo para insertar una declaracion en lenguaje ensamblador en un programa PBP. Este atajo se puede usar
libremente para unir codigo ensamblador con declaraciones PBP .
I var byte
Rollme var byte
For i = 1 to 4
@ rlf _rollme, 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 .Por ejemplo :
@ Include [Link]
@ resetea a 0 la pgina del registro antes de ejecutar la instruccin en lenguaje ensamblador .La pgina del registro no debe ser alterada usando @
Vea la seccion de programacion del ensamblador para mayor informacion.
ADCIN INDICE
ADCIN Channel , Var
Le el conversor analogico del micro y guarda el resultado en el Var. Mientras que los registros del ADC se pueden alcanzar directamente, ADCIN hace el proceso
un poco ms fcil.
Antes de que ADCIN pueda ser utilizado,el registro de TRIS se debe fijar como entradas . ADCON1 tambin necesita ser asignado como entradas de informacin
analogicas y en algunos casos para fijar el formato del resultado y la fuente del reloj. Vea las hojas de datos del microchip para ms informacin sobre estos
registros y cmo fijarlos para el dispositivo especfico.
[Link]
17/58
10/1/2015
PicBasicProencastellano
Dependiendo del dispositivo, puede tener 8 -, 10 o 12-bit ADC. El bit alto de ADCON1 controla si el resultado est a la izquierda o a la derecha. En la mayora de los
casos, los resultados 8-bit se deben dejar alineados (ADCON1.7 = 0) y 10 y los resultados 12-bit justificados a la derecha (ADCON1.7 = 1).
Varios DEFINEs pueden tambin ser utilizados. Los valores por defecto se muestran abajo:
Estas instrucciones le dicen a PBP que el codigo entre estas dos lneas esta en lenguaje ensamblador y no debe ser interpretado como declaraciones PBP .Se puede
usar estas dos instrucciones libremente para mezclar cdigo ensamblador con declaraciones PBP .
El tamao mximo para una seccin de texto ensamblador es 8 K . Este es el tamao mximo para el fuente actual , incluyendo comentarios , no el cdigo generado
.Si el bloque de texto es mayor , divdalo en mltiples secciones ASM ..ENDASM o incluyalo en un archivo separado .
ASM resetea a 0 el registro de pgina .Debe asegurarse que el registro de pgina sea 0 antes de ENDASM si el cdigo de ensamblador lo ha alterado .
Vea la seccin de programacin de ensamblador para mas informacin .
ASM
Bsf PORTA,0 setea bit 0 en PORTA
Bcf PORTB.0 setea bit 0 en PORTB
ENDASM
BRANCH INDICE
BRANCH index , [ etiqueta { ,etiqueta .....} ]
Causa que el programa salte a una posicin diferente , basada en una variable indexada. Es similar al ON...GOTO de otros BASIC.
Index selecciona una etiqueta de una lista .La ejecucion comienza en la etiqueta especificada .Por ejemplo , si Index es 0 , el programa salta a la primer etiqueta
especificada en la lista ,si Index es 1 , salta a la segunda y as sucesivamente ..Si Index es mayor igual al nmero de etiquetas ,no se toma ninguna accin y la
ejecucin contina con la declaracin siguiente al BRANCH .Se pueden usar hasta 256 etiquetas en un BRANCH .
Etiqueta debe estar en la misma pgina de cdigo que la instruccin BRANCH . Si no est seguro de esto , use BRANCHL .
BRANCH B4 , [ dog,cat,fish ]
igual que :
if B4=0 then dog (goto dog)
if B4=1 then cat(goto cat)
if B4=2 then fish (goto fish)
[Link]
18/58
10/1/2015
PicBasicProencastellano
BRANCHL INDICE
BRANCHL trabaja en forma similar a BRANCH ,haciendo que el programa salte a una localizacin determinada , basndose en una variable indexada .Las principales
diferencias son que puede saltar a una etiqueta ubicada en otra pgina de cdigo y que genera un cdigo dos veces mayor en tamao al de BRANCH ..Si est seguro
que las etiquetas estn en la misma pgina que el BRANCH si el microcontrolador no tiene ms que una pgina de cdigo (2K menos de ROM) , use BRANCH para
minimizar el uso de memoria .
Index selecciona una etiqueta de una lista .La ejecucion comienza en la etiqueta especificada .Por ejemplo , si Index es 0 , el programa salta a la primer etiqueta
especificada en la lista ,si Index es 1 , salta a la segunda y as sucesivamente ..Si Index es mayor igual al nmero de etiquetas ,no se toma ninguna accin y la
ejecucin contina con la declaracin siguiente al BRANCHL .Se pueden usar hasta 128 etiquetas en un BRANCHL .
BRANCHL B4 , [ dog,cat,fish ]
igual que :
if B4=0 then dog (goto dog)
if B4=1 then cat(goto cat)
if B4=2 then fish (goto fish)
BUTTON INDICE
Lee Pin y opcionalmente ejecuta anti-rebote y auto-repeticin . Pin automticamente se toma como entrada .Pin debe ser una constante , 0 - 15 , o una variable que
contenga un nmero 0 - 15 ([Link]. B0) un nmero de pin ([Link]. PORTA ,0)
Down
Delay
Rate
Bvar
Action
Etiqueta
[Link]
19/58
10/1/2015
PicBasicProencastellano
CALL INDICE
CALL etiqueta
Ejecuta la subrutina ensamblador llamada etiqueta.
Normalmente se usa GOSUB para ejecutar una subrutina PBP .La principal diferencia entre GOSUB y CALL , es que con sta ltima no se chequea la existencia de
etiquetas hasta el momento de ensamblar .Usando CALL se puede acceder a una etiqueta en una seccin de lenguaje ensamblador , lo que es inaccesible mediante
PBP .
CALL pass ejecuta la subrutina ensamblada ,denominada _pass
CLEAR INDICE
CLEAR
Coloca en cero todos los registros en cada banco . Coloca en cero todas las variables ,incluyendo las del sistema .Esto no se hace automticamente al comenzar un
programa en PBP , como sucede en BASIC Stamps .Por lo general ,las variables deben ser colocadas en un estado inicial apropiado por el programa , y no usando
CLEAR .
CLEAR Coloca todas las variables en cero
CLEARWDT INDICE
CLEARWDT
CLEARWDT borra el temporizador WATCHDOG ( perro guardin ).
El temporizador del WATCHDOG se utiliza conjuntamente con las instrucciones de SLEEP (dormir) y de NAP (siesta) para despertar el PICmicro MCU despus de
cierto perodo de tiempo.
Las instrucciones de ensamblador (clrwdt) bajo circunstancias normales se insertan automticamente en los lugares apropiados a travs del programa.
CLEARWDT permite la colocacin de las instrucciones adicionales del clrwdt en el programa.
CLEARWDT. 'borra el temporizador del watchdog
DEFINE puede ser utilizado para quitar todas las instrucciones del clrwdt
que el compilador agrega automticamente:
DEFINE NO_CLRWDT 1 ' no insertar CLRWDTs
COUNT INDICE
COUNT Pin,Period,Var
Cuenta el numero de pulsos en un Pin , durante un perodo periodo,y guarda el resultado en Var .Pin es automticamente colocado como entrada .Pin debe ser una
constante , 0-15 , una variable que contenga un nmero de 0 a 15 ([Link]. B0) . un numero de pin .
La resolucin de periodoest dada en milisegundos .Sigue la frecuencia del oscilador basado en DEFINE OSC .
VCOUNT chequea el estado de Pin mediante un loop y cuenta las transiciones de bajo a alto .Con un oscilador de 4 Mhz chequea el estado del pin cada 20 us .Con un
oscilador de 20 Mhz chequea el estado cada 4 us .De esto ,se infiere que la mayor frecuencia de pulsos que puede ser contada ,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).
cuenta el nmero de pulsos en Pin1 en 100 ms
COUNT PORTB.1,100,W1 determinar la frecuencia en un Pin
COUNT PORTA.2,1000,W1 contar por 1 segundo
Serout PORTB.0,N2400, [ W1 ]
DATA INDICE
[Link]
20/58
10/1/2015
PicBasicProencastellano
DATA { @ location , } constante { ,constante }
Guarda constantes en un chip EEPROM cuando este dispositivo se programa por primera vez .Si se omite el valor opcional location , la primer declaracin de DATA
comienza a almacenarse en la direccin 0 y las declaraciones siguientes , en las direcciones siguientes .Si existe un valor location este indica la direccin de
comienzo donde se almacenar la informacin .Una etiqueta opcional se le puede asignar a la direccin de comienzo , para futuras referencias del programa ,
Constante puede ser una constante numrica una cadena de constantes .Solo se guarda el byte menos significativo del valor numrico , excepto que se use el
modificador WORD . Las cadenas se guardan como bytes consecutivos de valores ASCII .No se agregan terminadores ni se completa el largo ,
DATA solo funciona con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84 .Dado que el EEPROM es una memoria no-volatil , los datos
permanecen intactos an cuando se quite la energa .
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 .
WRITE se usa para colocar los valores en el EEPROM en el momento de ejecucin .
guardar 10,20 y 30 comenzando en la posicin 5
DATA @5,10,20,30
asignar una etiqueta a un word en la prxima ubicacin
dlabel DATA word $1234 guarda $34, $12
saltear 4 posiciones y guardar 10 ceros
DATA (4) , 0 (10)
DEBUG INDICE
DEBUG item{ ,item ..}
Envia uno ms items a un pin predefinido con un baud rate predefinido en formato standard asincrnico , usando 8 bits de datos ,sin paridad y con 1 bit de parada
(stop bit) (8N1) ..El pin ,automticamente se convierte en salida .
Si un signo ( # ) precede a un item ,se enva serialmente la representacin ASCII para cada dgito .DEBUG soporta los mismos modificadores de datos que
SEROUT2.
DEBUG es una de varias funciones seriales asincronicas pre-construidas .Es la ms pequea de las rutinas seriales generadas por software .Puede ser usada para
enviar informacin de depuracin (variables ,posicin de marcadores , etc).a un programa terminal como HyperTerm .Tambin se puede usar cuando se desee salida
serial sobre un pin determinado y con un baud rate determinado .
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, 1= invertido
DEFINE DEBUG_MODE 1
DEBUG asume un oscilador de 4 Mhz, cuando est generando su tiempo de bit. Para mantener el tiempo apropiado del baud rate con otros valores de osciladores,
asegurese de DEFINE el seteo de OSC al valor de oscilador deseado.
En algunos casos, la tasa de transmisin de las instrucciones de DEBUG podran presentar los caracteres demasiado rpidamente al dispositivo receptor. Un
DEFINE agrega una demora de caracteres para las transmisiones seriales de salida. Esto permite un tiempo adicional entre los caracteres a medida que son
transmitidos. La demora de caracter DEFINE permite un atraso de 1 a 65,535 microsegundos (.001 a 65.535 milisegundos) entre cada carcter transmitido.
Por ejemplo, para pausar 1 milisegundo entre la transmisin de cada caracter:
DEFINE DEBUG_PACING 1000
Si bien los chips convertidores de nivel RS-232 son comunes y econmicos, gracias a la implementacin de corriente RS-232 y a las excelentes especificaciones
I/O del micro PIC la mayora de las aplicaciones no requieren convertidores de nivel. 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).
Enviar el texto B0= seguido por el valor decimal de B0 y un avance de
lnea (linefeed) serialmente a la salida
DEBUG B0= ,dec B0,10
[Link]
21/58
10/1/2015
PicBasicProencastellano
DEBUGIN INDICE
Debugin { Timeout, etiqueta, }[Item{, Item... } ]
Reciba unos o ms items de un pin predefinido en una velocidad predefinida en formato asncrono estndar usando 8 bits de datos, ninguna paridad y 1 bit de stop
(8N1). El pin automticamente se hace una entrada .
Se pueden incluir un TIMEOUT y una etiqueta opcional para permitir que el programa contine si un carcter no se recibe dentro de cierta cantidad de tiempo.
TIMEOUT se especifica en unidades de 1 milisegundo. Si el PIN serial de la entrada de informacin permanece ocioso durante el tiempo del descanso, el programa
saldr del comando de DEBUGIN y saltar a la ETIQUETA.
DEBUGIN (en todos los dispositivos excepto los de 12-bit) utiliza los mismos modificadores que SERIN2. Obtenga mas informacin en la seccin SERIN2 .
modificadores
operacin
BIN{1..16 }
DEC{1..5 }
recibir dgitodecimal
HEX{1..4 }
SKIP n
STR ArrayVar\n{\c }
WAIT ( )
WAITSTR ArrayVar{\n }
DEBUGIN Es la ms pequea y ms rpida que de las rutinas seriales asncrono generadas por lgica e software . Puede ser utilizada para recibir la informacin que
pone a punto un programa terminal como Hyperterminal. Puede tambin ser utilizada la entrada de informacin serial en un PIN fijo en una velocidad fija.
Se especifican el PIN y la velocidad seriales usando DEFINEs:
Si cualesquiera de estos DEFINEs no se incluyen en un programa, el puerto, pin o el modo de DEBUGIN se fija a los mismos valores que estn en DEBUGIN (poner
a punto). La velocidad de DEBUGIN essiempre igual que DEBUG.s. No puede ser DEFINEd diferentemente.
DEBUGIN asume un oscilador 4MHz al generar su sincronizacin de bit. Para mantener la sincronizacin apropiada de la
velocidad con otros valores del oscilador, DEFINIR el OSCILADOR .
Mientras que los IC convertidores de nivel RS-232 (max232)son comunes y baratos, gracias a la actual RS-232 y las
especificaciones excelentes de la entrada-salida del PICmicro MCU, la mayora de las aplicaciones pueden no requerir IC convertidores .
Puede ser utilizando logica TTL invertida (DEBUGIN_MODE 1). Solo una resistencia limitadora de 22k. es necesaria para disipar el voltaje ms alto y a veces
negativo de RS-232.
' Espere hasta que el caracter A es recibido en serie y el caracter siguiente es puesto en B0
[Link]
22/58
10/1/2015
PicBasicProencastellano
DISABLE INDICE
DISABLE
DISABLE interrumpe el procesamiento siguiente a la instruccin. Pueden ocurrir otras Interrupciones, pero el manipulador de interrupciones del BASIC en el PBP,
no se ejecutar hasta que se encuentre un ENABLE .
DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador, en lugar de producir cdigo. Vea ON INTERRUPT para ms
informacin.
DISABLE Deshablita interrupciones en el handler
Myint: led = 1 enciende el LED cuando es interrumpido
Resume Vuelve al programa principal
Enable ENABLE interrumpe despus del handler
DTMFOUT INDICE
DTMFOUT Pin, { Onms ,Offms,} [ Tone {,Tone} ]
Produce una secuencia DTMF Touch Tone en Pin ,Pin automticamente se convierte en salida . Pin debe ser una constante , 0 - 15 , una variable que contenga un
nmero de 0 a 15 ([Link]. B0) un nmero de pin ([Link]. B0)
Onms es el nmero de milisegundos que suena cada tono y Offms es el nmero de milisegundos de pausa entre cada tono .Si no estn especificados , por defecto
Onms es 200 ms y Offms es 50 ms.
Tones tiene un valor de 0 - 15 .Los tonos de 0 - 9 son los mismos que en un teclado telefnico .Tone 10 es la clave * , Tone 11 es la clave # ,y los Tones 12 - 15
corresponden a las teclas extendidas A -D .
DTMFOUT usa FREQOUT para generar los tonos duales .FREQOUT genera tonos usando una forma de modulacin de ancho de pulso .Los datos en bruto que salen
del pin son bastante horribles .Usualmente se necesita algn tipo de filtro para suavizar la seal hasta una forma de onda senoidal quitndole algunas armnicas
generadas:
DTMFOUT trabaja mejor con un oscilador de 20 Mhz .Tambin puede trabajar con uno de 10 Mhz y an con uno de 4 Mhz , aunque ser muy difcil de filtrar y
tendr muy baja amplitud .Cualquier otra frecuencia causar que DTMFOUT genere una frecuencia proporcional al oscilador comparado a 20 Mhz , lo que no ser
muy til para enviar touch tones .
[Link]
23/58
10/1/2015
PicBasicProencastellano
EEPROM INDICE
EEPROM {Location ,} [ constante {,constante ...} ]
Guarda constantes en un chip EEPROM . Si se omite el valor opcional Location ,la primera declaracin se guarda en la direccin 0 del EEPROM y las subsiguientes en
las siguientes direcciones del mismo .Si se indica un valor Location , ste indica la direccin de comienzo para guardar los datos .
Constante puede ser una constante numrica una cadena de constantes .Solo se guardan los bytes menos significativos de los valores numricos . Las cadenas son
guardadas como bytes consecutivos d valores ASCII .No se agregan automticamente terminadores ,ni se completa el largo .
EEPROM solo trabaja con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84 . Dado que el EEPROM es una memoria no voltil , los datos
permanecern intactos an sin alimentacin .
Los datos son guardados en el EEPROM solo una vez , cuando el micro controlador es programado , no cada vez que se ejecuta el programa .Se puede usar WRITE
para colocar valores en el EEPROM en el momento de la ejecucin .
Guardar 10 ,20 , 30 comenzando en la direccin 5
EEPROM 5, [ 10,20,30 ]
ENABLE INDICE
ENABLE
ENABLE interrumpe el procesamiento que fue previamente deshabilitado con DISABLE ,siguiendo a esta instruccin.
DISABLE y ENABLE son pseudo-operaciones en el sentido que dan direcciones de compilador, en lugar de producir cdigo. Vea ON INTERRUPT para ms
informacin.
DISABLE Deshablita interrupciones en el handler
Myint: led = 1 enciende el LED cuando es interrumpido
Resume Vuelve al programa principal
Enable ENABLE interrumpe despus del handler
ENABLE DEBUGINDICE
ENABLE DEBUG proceso previamente DISABLEd despus de esta instruccin.
DISABLE DEBUG Y ENABLE DEBUG son pseudo-ops que dan al compilador directivas, ms que generan cdigo.
Vea ON DEBUG para ms informacin.
ENABLE INTERRUPT
INDICE
ENABLE INTERRUPT
ENABLE INTERRUPT Permite el proceso de la INTERRUPCIN que era previamente DISABLEd despus de esta instruccin.
DISABLE INTERRUPT Y ENABLE INTERRUPT son pseudo-ops que dan al compilador directivas, ms que generan cdigo. Vea ON INTERRUPT para ms
informacin.
DISABLE INTERRUPT 'Invalide las interrupciones en HANDLER
myint:LED = 1 ' encienda el LED con interrupcion
resume 'retorne al programan principal
ENABLE INTERRUPT' Permita al programa piloto de las interrupciones
[Link]
24/58
10/1/2015
PicBasicProencastellano
END
INDICE
END
Detiene la ejecucin del proceso y entra en modo de baja potencia .Todos los pins de I/O permanecen en el estado en que se encuentran ,END trabaja ejecutando
una instruccin SLEEP continua dentro de un loop .
Un END , STOP GOTO deben ser colocados al final de un programa para evitar pasar del lmite de la misma u comience nuevamente .END
FREQOUT INDICE
FREQOUT Pin,Onms,Frequency1{,Frequency2}
Produce la las frecuencias especificadas en el Pin , durante Onms milisegundos .Pin se convierte automticamene en salida .Pin puede ser una constante , 0-15 ,
una variable que contenga un nmero 0 - 15 .([Link]. B0) un nmero de pin ([Link]. PORTA.0) .
Puede producir una dos frecuencias de 0 a 32767 Hz al mismo tiempo .
FREQOUT genera tonos usando una forma de modulacin de ancho de pulso . Los datos en bruto que salen del pin son bastante horribles .Usualmente se necesita
algn tipo de filtro para suavizar la seal hasta una forma de onda senoidal quitndole algunas armnicas generadas:
FREQOUT trabaja mejor con un oscilador de 20 Mhz .Tambin puede trabajar con uno de 10 Mhz y an con uno de 4 Mhz , aunque ser muy difcil de filtrar y
tendr muy baja amplitud .Cualquier otra frecuencia causar que FREQOUT genere una frecuencia proporcional al oscilador comparado a 20 Mhz .
Enviar un tono de 1 Khz al Pin1 durante 2 segundos
FREQOUT PORTB.1 ,2000,1000
GOSUB INDICE
[Link]
25/58
10/1/2015
PicBasicProencastellano
GOSUB etiqueta
Salta a la subrutina indicada en la etiqueta , guardando su direccin de regreso en la pila (stack) .A diferencia del GOTO , cuando se llega a un RETURN ,la
ejecucin sigue con la declaracin siguiente al ltimo GOSUB ejecutado .
Se puede usar un nmero ilimitado de subrutinas en un programa y pueden estar anidadas .En otras palabras , las subrutinas pueden llamar a otra subrutina .Cada
anidamiento no debe ser mayor de cuatro niveles .
GOSUB beep ejecuta la subrutina beep
beep: high 0 enciende el LED conectado a Pin0
sound 1, [ 80 , 10 ] hace sonar el parlante conectado a Pin1
low 0 apaga el LED conectado a Pin0
return vuelve a la rutina principal
GOTO INDICE
GOTO etiqueta
La ejecucin del programa continua en la declaracin de la etiqueta .
GOTO send salta a la declaracin etiquetada send
send: serout 0,N2400, [ Hi ] enva Hi como salida al Pin0 en forma serial
HIGH INDICE
HIGH Pin
Hace de valor alto el Pin especificado y lo convierte automticamente en salida .Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15
([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
HIGH 0 convierte Pin0 en salida y lo coloca en valor alto
(-5 volt)
HIGH PORTA.0 convierte PORTA,Pin0 en salida y lo coloca en valor
alto (-5 volt)
led var PORTB.0 define el pin LED
HIGH led convierte el Pin LED en salida y lo coloca en valor
alto (-5 volt)
Como alternativa , si el pin ya es salida , hay una forma ms rpida y corta de setearlo en valor alto (desde un codigo generado standpoint ) :
PORTB.0 = 1 setea PORTB Pin0 a valor alto .
HPWM INDICE
HPWM, Channel, Dutycycle, frecuencia
Hace salir un tren de pulso modulado en anchura usando PWM por hardware ,disponible en algunos PICmicro . Puede ejecutarse continuamente en segundo plano
mientras que el programa est ejecutando otras instrucciones.
Channel especifica qu canal fisico PWM se va a utilizar.
Algunos dispositivos tienen 1, 2 o 3 canales de PWM.
En los dispositivos con 2 canales, la frecuencia debe ser igual en ambos canales.
Dutycycle especifica la relacin de (alta-baja) con./desc. de la seal.
Se extiende a partir de 0 a 255, donde 0 est apagado todo el tiempo y 255 es alto todo el tiempo. Un valor de 127 da un ciclo de 50% (onda cuadrada). La
frecuencia es la frecuencia deseada de la seal de PWM. No todas las frecuencias estn disponibles en todas las configuraciones del oscilador. La frecuencia ms
alta a cualquier velocidad del oscilador es 32767Hz. La frecuencia usable ms baja de HPWM en cada configuracin del oscilador se muestra en la tabla siguiente:
OSC
17Cxxx
4 Mhz.
245 hz.
3907 hz.
8 Mhz.
489 hz.
7813 hz.
10 Mhz.
611 hz.
9766 hz.
12 Mhz.
733 hz.
11719 hz.
16 Mhz.
977 hz.
15625 hz.
[Link]
26/58
10/1/2015
PicBasicProencastellano
20 Mhz.
1221 hz.
19531 hz.
24 Mhz.
1465 hz.
23438 hz.
33 Mhz.
2015 hz.
32227 hz.
40 Mhz.
2442 hz.
na
Algunos dispositivos, tales como el PIC18C452, tienen pines alternos que se puedan utilizar para HPWM. Los DEFINEs siguientes permiten el usar de estos pines:
DEFINE CCP1_REG PORTC Hpwm 1 pin port
DEFINE CCP1_BIT 2 Hpwm 1 pin bit
DEFINE CCP2_REG PORTC Hpwm 2 pin port
DEFINE CCP2_BIT 1 Hpwm 2 pin bit
los siguientes DEFINEs especifican qu temporizador, 1 o 2, utilizar con el canal 2 de PWM y el canal 3 de PWM para los dispositivos de PIC17C7xx. El valor por
defecto es el temporizador 1 si ningn DEFINE se especifica.
DEFINE HPWM2_TIMER 1 Hpwm 2 timer select
DEFINE HPWM3_TIMER 1 Hpwm 3 timer select
HPWM 1,127,1000 envie a 50% ciclo de trabajo PWM a 1kHz
HPWM 1,64,2000 envie a 25% ciclo de trabajo PWM a 2kHz
HSERIN INDICE
HSERIN {ParityLabel , }{Timeout ,Label ,} [ Item { . . . } ]
Recibe uno ms Items de un port serial ( de hardware ) en dispositivos que soportan comunicaciones seriales asincrnicas por hardware .
HSERIN es una de varias funciones seriales asincrnicas pre-construdas .Slo puede ser usada en dispositivos que posean hardware USART .Vea la hoja de datos
del dispositivo para informacin de los pin seriales de entrada y otros .Los parametros seriales y el baud-rate son especificados usando DEFINE :
coloque el registro receptor en receptor habilitado
DEFINE HSER_RCSTA 90h
coloque el registro de transmisin en transmisin habilitada
DEFINE HSER_TSTA 20h
coloque baud rate
DEFINE HSER_BAUD 2400
HSERIN asume un oscilador de 4 Mhz cuando calcula el baud rate .Para mantener una relacin de baud rate apropiada con otros valores de oscilador ,use DEFINE
para especificar el nuevo valor OSC .
Timeout y Label pueden ser includos en forma opcional para permitir al programa continuar si un carcter no es recibido dentro de un lmite de tiempo . Timeout
est especificado en unidades de 1 milisegundo .
El formato por defecto de los datos seriales es 8N1 , 8 bits de datos ,sin paridad y 1 stop bit .7E1 ( 7 bits de datos , paridad par , 1 stop bit ) 7 O 1 ( 7 bits de
datos , paridad impar ,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
Se puede incluir ParityLabel como opcional en la declaracin .El programa continuar en este punto si se recibe un carcter con error de paridad .Solo debe ser
usado si se habilit paridad con un DEFINE anterior .
Dado que la recepcin serial se realiza por hardware ,no es posible invertir los niveles para eliminar un driver RS - 232 .Por esto debe usarse un driver adecuado
con HSERIN .
HSERIN soporta los mismos modificadores de datos que SERIN2 .Refierase a la seccin de SERIN2 para mayor informacin .
HSERIN [ B0 , dec W1 ]
HSEROUT INDICE
HSEROUT [Item {,Item } ]
[Link]
27/58
10/1/2015
PicBasicProencastellano
Enva uno ms Items al port serial de hardware en dispositivos que soportan comunicaciones seriales asincrnicas por hardware .
HSEROUT es una de varias funciones seriales asincrnicas pre-construdas .Slo puede ser usada en dispositivos que posean hardware USART .Vea la hoja de
datos del dispositivo para informacin de los pin seriales de entrada y otros .Los parametros seriales y el baud-rate son especificados usando DEFINE :
coloque el registro receptor en receptor habilitado
DEFINE HSER_RCSTA 90h
coloque el registro de transmisin en transmisin habilitada
DEFINE HSER_TSTA 20h
coloque baud rate
DEFINE HSER_BAUD 2400
HSEROUT asume un oscilador de 4 Mhz cuando calcula el baud rate .Para mantener una relacin de baud rate apropiada con otros valores de oscilador ,use
DEFINE para especificar el nuevo valor OSC .
El formato por defecto de los datos seriales es 8N1 , 8 bits de datos ,sin paridad y 1 stop bit .7E1 ( 7 bits de datos , paridad par , 1 stop bit ) 7 O 1 ( 7 bits de
datos , paridad impar ,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 recepcin serial se realiza por hardware ,no es posible invertir los niveles para eliminar un driver RS - 232 .Por esto debe usarse un driver adecuado
con HSEROUT .
HSEROUT soporta los mismos modificadores de datos que SEROUT2 .Refirase a la seccin de SEROUT2 para mayor informacin .
enviar el valor decimal de B0 seguido por un linefeed a travs del USART
HSEROUT [ dec B0 , 10 ]
I2CREAD INDICE
I2CREAD DataPin ,ClockPin,Control,{Address,}
[ Var {,Var ...} ] { . Label }
Enva los bytes de Control y opcionalmente los de Address , a travs del ClockPin y el DataPin y guarda los bytes recibidos dentro de Var .ClockPin y dataPin pueden
ser constantes , 0-15 , una variable que contenga un nmero ([Link]. B0) , un nmero de Pin ([Link]. PORTA.0)
I2CREAD y I2CWRITE pueden ser usados para leer y grabar datos de un EEPROM serial usando una interfase I2C de 2 cables , como Microchip 24LC01B similar
.Esto permite guardar datos en una memoria externa no voltil , para que sean mantenidos an sin energa conectada .Estos comandos funcionan en modo I2C
master y tambin son usados para comunicarse con otros dispositivos con interfase I2C , como sensores de temperatura y convertidores A/D .
Los 7 bits superiores del byte de Control contienen el cdigo de control junto con la seleccin del chip e informacin adicional de direccin ., dependiendo de cada
dispositivo .El bit inferior es una bandera interna que indica si es un comando de lectura escritura y no se debe usar .
Este formato para el byte de Control es diferente al usado por el PBP original .Asegrese de usar este formato en operaciones PBP I2C .
Por ejemplo , cuando comunicamos con un 24LC01B , el cdigo de control es %1010 y no se usa la seleccin de chip , por lo que el byte de Control ser %10100000
$A0 .Algunos formatos de Control son :
Dispositivo
Capacidad
Control
Tamao direccin
24LC01B
128 bytes
%1010xxx0
1 byte
24LC02B
256 bytes
%1010xxx0
1 byte
24LC04B
512 bytes
%1010xxb0
1 byte
24LC08B
1 Kbytes
%1010xbb0
1 byte
24LC16B
2 Kbytes
%1010bbb0
1 byte
24LC32B
4 Kbytes
%1010ddd0
2 bytes
24LC65
8 Kbytes
%1010ddd0
2 bytes
[Link]
28/58
10/1/2015
PicBasicProencastellano
xxx = no importa
El tamao de direccin enviado (byte word) es determinado por el tamao de la variable usada .Si se usa una variable con tamao byte se enva una direccin de 8
[Link] se enva una variable de tamao word ,se enva una direccin de 16 bits. Asegrese de usar una variable apropiada al dispositivo a comunicar .
Si se especifica Var con tamao word , se leen 2 bytes y se guarda primero el de mayor orden y luego el de orden inferior dentro de Var .Este orden es el inverso
al que se osa normalmente con variables .
Si se usa la opcin Label , se saltar a ella , si no se recibe un reconocimiento del dispositivo I2C .
Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx .Simplemente especifique los nombres de pin
de las lneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa .
DEFINE I2C_INTERNAL 1
Vea las hojas de datos de Microchip para ms indormacin .
El tiempo de las instrucciones I2C es tal que los dispositivos de velocidad standard (100 Khz) pueden ser accedidos a velocidad de clock de hasta 8 Mhz
.Dispositivos rpidos (400 Mhz) pueden ser usados hasta 20 Mhz .Si se desea acceder un dispositivo de velocidad standard a 8 Mhz , se debe usar el siguiente
DEFINE en el programa :
DEFINE I2C_SLOW 1
El clock I2C y las lneas de datos pueden ser empujados a Vcc con un resistor de 4-7 K de acuerdo al siguiente esquema ,ya que ambos trabajan en modo de
colector abierto .
addr var byte
cont con %10100000
addr =17 coloca la direccin en 17
lee datos de la direccin 17 y los deja en B2
I2CREAD PORTA.0,PORTA.1,cont,addr, [ B2 ]
Vea el libro Microchip NON VOLATILE MEMORY PRODUCTS para mayor informacin de este otros dispositivos que pueden ser usados con los comandos
I2CREAD y I2CWRITE .
I2CWRITE INDICE
I2CWRITE DataPin ,ClockPin,Control,{Address,}
[ Value {,Value ...} ] { . Label }
Enva los bytes de Control y opcionalmente los de Address , a travs del ClockPin y el DataPin seguidos por Value .ClockPin y DataPin pueden ser constantes , 0-15 ,
una variable que contenga un nmero ([Link]. B0) , un nmero de Pin ([Link]. PORTA.0)
El tamao de direccin enviado (byte word) es determinado por el tamao de la variable usada .Si se usa una variable con tamao byte se enva una direccin de 8
[Link] se enva una variable de tamao word ,se enva una direccin de 16 bits. Asegrese de usar una variable apropiada al dispositivo a comunicar .
Cuando se escribe un EEPROM serial , es necesario esperar 10 ms (dependiendo del dispositivo ) para completar la grabacin , antes de intentar comunicarse
nuevamente con el dispositivo .Si se intenta un I2CWRITE I2CREAD antes que se complete la grabacin , se ignorar el acceso .
Aunque una sola declaracin I2CWRITE puede ser usada para grabar mltiples bytes simultaneamente , se puede violar los requerimientos de tiempo de grabacin
para los EEPROM seriales .Algunos permiten grabar mltiples bytes en una pgina simple antes de necesitar una espera .Revise la hoja de datos del dispositivo que
est usando .La opcin de grabacin mltiple puede ser til con dispositivos I2C que no deban esperar entre grabaciones .
Si se usa la opcin Label , se saltar a ella , si no se recibe un reconocimiento del dispositivo I2C .
Las instrucciones I2C pueden ser usadas para acceder al EEPROM incorporado en los dispositivos 12CExxx y 16CExxx .Simplemente especifique los nombres de pin
[Link]
29/58
10/1/2015
PicBasicProencastellano
de las lneas internas adecuadas como parte del comando I2C y coloque el siguiente DEFINE en el principio del programa .
DEFINE I2C_INTERNAL 1
Vea las hojas de datos de Microchip para ms indormacin .
El tiempo de las instrucciones I2C es tal que los dispositivos de velocidad standard (100 Khz) pueden ser accedidos a velocidad de clock de hasta 8 Mhz
.Dispositivos rpidos (400 Mhz) pueden ser usados hasta 20 Mhz .Si se desea acceder un dispositivo de velocidad standard a 8 Mhz , 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 direccin en 17
enva el byte 6 a la direccin 17
I2CWRITE PORTA.0,PORTA.1,cont,addr, [ 6 ]
Pause 10 espera 10 ms que se complete la grabacin
addr =1 coloca la direccin en 1
enva el byte en B2 a la direccin 1
I2CWRITE PORTA.0,PORTA.1,cont,addr, [ B2 ]
Pause 10 espera 10 ms que se complete la grabacin
IF ...THEN INDICE
IF Comp { AND/OR Comp ... } THEN Label
IF Comp { AND/OR Comp ... } THEN
Declaracin
ELSE
Declaracin
ENDIF
Efecta una ms comparaciones .Cada trmino Comp puede relacionar una variable con una constante otra variable e incluye uno de los operadores listados
anteriormente .
IF ... THEN evala la comparacin en trminos de CIERTO o FALSO .Si lo considera cierto , se ejecuta la operacin posterior al THEN . Si lo considera falso , no
se ejecuta la operacin posterior al THEN .Las comparaciones que dan 0 se consideran falso .Cualquier otro valor es cierto .Todas las comparaciones son sin signo ,
ya que PBP solo soporta operaciones sin signo .
Asegurese de usar parntesis para especificar el orden en que se deben realizar las operaciones .De otra manera , la prioridad de los operadores lo determina y el
resultado puede no ser el esperado .
IF..THEN puede operar de dos maneras. De una forma, el THEN en un IF..THEN es esencialmente un GOTO. Si la condicin es cierta, el programa ir hacia la
etiqueta que sigue al THEN. Si la condicin es falsa, el programa va a continuar hacia la prxima lnea despus del IF..THEN. Otra declaracin no puede ser puesta
despus del THEN sino que debe ser una etiqueta.
If Pin0 = 0 Then pushd si el botn conectado al pin 0 es oprimido (0), salta a la etiqueta pushd
If B0 >=40 Then old si el valor en la variable B0 es mayor igual a 40, salta a old
If PORTB.0 Then itson si PORTB, pin 0 es alto (1), salta a itson
If (B0 = 10) AND (B1 = 20) Then loop
En la segunda forma, IF..THEN puede ejecutar condicionalmente un grupo de declaraciones que sigan al THEN. Las declaraciones deben estar seguidas por un ELSE
o un ENDIF para completar la estructura.
If B0 <> 10 Then
B0 = B0 + 1
B1 = B1 - 1
Endif
If B0 = 20 Then
[Link]
30/58
10/1/2015
PicBasicProencastellano
led = 1
Else
led = 0
Endif
INPUT INDICE
INPUT Pin
Convierte el Pin especificado en una entrada. Pin debe ser una constante, 0-15, o una variable que contenga un nmero 0-15 (p. ejj., B0) o el nombre de un pin (p. ej.,
PORTA.0).
INPUT 0 convierte el Pin0 en entrada
INPUT PORTA.0 convierte el PORTA, pin 0 en entrada
En forma alternativa, el pin puede ser colocado como entrada de una forma ms rpida y corta (desde un cdigo generado standpoint):
TRISB.0 =1 Setea el PORTB, 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
LET INDICE
{LET} Var = Value
Asigna un Value a una Variable. El Value puede ser una constante, otra variable o el resultado de una expresin. Refirase a la seccin previa acerca de operadores
para ms informacin. La palabra clave LET , por s misma , es opcional.
LET B0 = B1 * B2 + B3
B0 = Sqr W1
LCDIN INDICE
LCDIN { Direccion, }[Var{, Var... } ]
Le la RAM del LCD en el direccionamiento y salva los datos en Var.
LCDs tienen RAM onboard ,eso se utiliza para la memoria de caracter.
La mayora de los LCDs tienen ms RAM disponible que la necesaria para el rea mostrable.
Esta RAM se puede escribir usando la instruccin de LCDOUT.
La instruccin de LCDIN permite que esta RAM sea leda.
Los funcionamientos de la RAM del CG (generador de carcter) del LCD estn en la direccin $40 a $7F . comienzan en la direccin $80. Vea la hoja de datos del
LCD especfico para estos direccionamientos y funciones.
Es necesario conectar la lnea de lectura/grabacin del LCD con un contacto de PICmicro MCU para poder seleccionar si el modulo es ledo (LCDIN) o para escribir
(LCDOUT).
LCDOUT INDICE
LCDOUT Item{ , Item...}
Muestra Items en un visor de cristal lquido inteligente (LCD). PBP soporta mdulos LCD con un controlador Hitachi 44780 o equivalente. Estos LCD, usualmente,
tienen un cabezal de 14 o 16 pins simples o duales en un extremo.
Si el signo (#) est colocado antes de un Item, la representacin ASCII para cada dgito es enviada al LCD. LCDOUT tambin puede usar cualquiera de los
modificadores usados con SEROUT2. Vea la seccin de SEROUT2 para ms informacin.
Un programa debe esperar, por lo menos, medio segundo antes de enviar el primer comando a un LCD. Puede tomar bastante tiempo a un LCD arrancar.
[Link]
31/58
10/1/2015
PicBasicProencastellano
Los comandos son enviados al LCD, enviando un $FE seguido por el comando. Algunos comandos tiles se muestran en la siguiente tabla:
Comando
Operacin
$FE, 1
Limpia visor
$FE, 2
$FE, $0C
Cursor apagado
$FE, $0E
$FE, $0F
$FE, $10
$FE, $14
$FE, $C0
Note que hay un comando para mover el cursor al comienzo de la segunda lnea en un visor de dos lneas. Para muchos LCD, los caracteres y lneas mostrados no son
consecutivos en la memoria del visor - puede haber un salto entre las localizaciones. Para muchos visores 16x2, la primera lnea comienza en $0 y la segunda, en
$40. El comando:
LCDOUT $FE, $C0
hace que el visor comience a escribir caracteres en el principio de la segunda lnea. Los visores 16x1 usualmente estn formateados como visores de 8x2, con un
salto entre las locaciones de memoria para los primeros y segundos caracteres de 8. Los visores de 4 lneas, tambin tienen un mapa de memoria no ordenado.
Vea la hoja de datos para el dispositivo LCD, en particular el que usted est usando, para las locaciones de memoria de caracter y comandos adicionales.
LCDOUT $FE, 1, Hello limpia el visor y muestra Hello
LCDOUT B0, #B1
El LCD puede estar conectado al micro Pic, usando un bus de 4 bit o uno de 8 bit. Si se usa un bus de 8 bit, todos los 8 bits deben estar en un port. Si se usa un bus
de 4 bit , debe estar conectado o a los 4 bit inferiores o a los 4 bit superiores de un port. Enable y Register Select deben estar conectados a algn pin del port .
R/W debe estar colocado a tierra, ya que el comando de LCDOUT solamente es de grabacin.
PBP supone que el LCD est conectado a pins especficos, a menos que se le diga de otra manera. Asume que el LCD va a ser usado con un bus de 4 bits, con las
lneas de data DB4 - DB7 conectadas en el micro Pic a PORTA.0 - PORTA.3, Register Select a PORTA.4 y Enable a PORTB.3. Adems, inicializa el LCD como un
visor de dos lneas.
Para cambiar este seteo, coloque uno o ms de los siguientes DEFINEs, todos en maysculas, en el comienzo de su programa PBP:
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 tamao 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, le dir a PBP que hay conectado un LCD de 2 lneas en modo de 4 bit con el bus de datos en los 4 bit inferiores de PORTB, Register Select en el
PORTB.4, y Enable en el PORTB.5.
El siguiente esquema muestra una forma de conectar un LCD a un micro Pic:
[Link]
32/58
10/1/2015
PicBasicProencastellano
LOOKDOWN INDICE
LOOKDOWN Search, [Constant{ , Constant...}] , Var
La declaracin LOOKDOWN busca en una lista de 8 bit los valores Constant que coincidan con un valor Search. Si se encuentra, el ndice de la constante es
guardado en Var as, si el valor es el primero de la lista, Var = 0. Si es el segundo, Var = 1 y as, sucesivamente. Si no se encuentra, no se toma ninguna accin y Var
permanece sin cambios.
La lista de constantes puede ser una mezcla de constantes numricas y cadenas. Cada carcter en una cadena es tratado como una constante separada con el valor
del carcter ASCII. Las variables de array con ndice variable no pueden ser usadas en LOOKDOWN, aunque variables de array con ndice constantes son
permitidas.
LOOKDOWN2 INDICE
LOOKDOWN2 W0,[512,W1,1024],B0
LOOKDOWN2 W0,<[10,100,1000],B0
[Link]
33/58
10/1/2015
PicBasicProencastellano
LOOKUP INDICE
LOOKUP puede ser usado para obtener valores de una tabla de constantes de 8 bits ,Si Index es cero , Var toma el valor de la primer Constanet .Si Index es 1 ,
Var toma el valor de la segunda Constante y as sucesivamente .Si Index es mayor igual que el nmero de entradas en la lista de constantes , no se toma ninguna
accin y Var permanece sin cambios .
La lista de constantes puede ser una mezcla de constantes numricas y cadenas. Cada carcter en una cadena es tratado como una constante separada con el valor
del carcter ASCII. Las variables de array con ndice variable no pueden ser usadas en LOOKUP, aunque son permitidas las variables de array con ndice
constantes .
LOOKUP2 INDICE
LOOKUP2 puede ser usado para obtener entradas de una tabla de Values ,Si Index es cero , Var toma el valor del primer Value .Si Index es 1 , Var toma el valor
del segundo Value y as sucesivamente .Si Index es mayor igual que el nmero de entradas en la lista , no se toma ninguna accin y Var permanece sin cambios .
La lista de Values puede ser una mezcla de constantes numricas y cadenas en 16 bits y variables. Cada carcter en una cadena es tratado como una constante
separada con el valor del carcter ASCII. No se pueden usar expresiones en una lisia de Values , aunque pueden ser usadas como valor Index Las variables de array
con ndice variable no pueden ser usadas en LOOKUP2, aunque variables de array con ndice constantes son permitidas.
LOOKUP2 genera un cdigo 3 veces ms grande que LOOKUP .Si la lista consiste solamente de constantes y cadenas de 8 bits , use LOOKUP .
LOOKUP2 B0 , [256,512,1024],W1
LOW INDICE
LOW Pin
Coloca el pin especificado en valor bajo y automticamente lo convierte en salida .Pin puede ser una xonstante , 0-15 , +o una variable que contenga un nmero 0-15
([Link]. B0) un nombre de pin ([Link]. PORTA.0)
[Link]
34/58
10/1/2015
PicBasicProencastellano
NAP INDICE
NAP Period
Coloca al micro controlador en modo de baja potencia por perodos de tiempo reducidos (siesta). Durante este NAP , se reduce al mnimo el consumo de energa .
Los perodos indicados son solo aproximados , porque el tiempo se deriva del Watchdog Timer que est controlado por R/C y puede variar de chip a chip y tambin
con la temperatura . Como NAP usa el Watchdog Timer es independiente de la frecuencia del oscilador .
Period
Demora (aprox.) en
milisegundos
18
36
72
144
288
576
1152
2304
ON INTERRUPT INDICE
Permite el manejo de las interrupciones del micro controlador por medio de una subrutina PBP .
Existen dos formas de manejar interrupciones usando PBP . La primera es escribir una subrutina de interrupcin en lenguaje ensamblador .Esta es la forma de
manejar interrupciones con la menor latencia y el menor overhead .Este mtodo se discute ms adelante , en la seccin avanzada .
El segundo mtodo es escribir un handler ( manejador ) de interrupciones PBP .Es similar a una subrutina PBP , pero termina con un RESUME .
Cuando ocurre una interrupcin , se marca con una bandera .Cuando la ejecucin de la declaracin PBP que se estaba ejecutando termina , el programa salta al
handler de interrupciones indicado en Label .Una vez que termina el trabajo del handler , una declaracin RESUME enva el programa de vuelta a donde estaba
cuando ocurri la interrupcin , tomando todo como lo dej .
DISABLE y ENABLE permiten que distintas secciones de un programa PBP se ejecuten sin la posibilidad de ser interrumpidas El lugar ms notorio para usar
DISABLE es justo antes del actual handler de interrupciones . O el handler puede ser colocado antes que la declaracin ON INTERRUPT ya que la bandera de
interrupciones no se chequea antes del primer ON INTERRUPT en un programa .
Latencia es el tiempo entre el pedido de interrupcin y el momento en que se ingresa en el handler de interrupciones .Como las declaraciones de PBP no son
reentrantes ([Link]. no se puede ejecutar una declaracin mientras se est ejecutando una anterior) , puede existir una latencia considerable hasta que se ingrese a
la rutina de interrupciones .
PBP no ingresar al handler BASIC de interrupciones hasta que haya terminado de ejecutar la declaracin en curso .Si la declaracin es PAUSE SERIN , puede
demorarse bastante hasta que sea reconocida la interrupcin .Se debe disear el programa tomando en cuenta esta latencia .Si esta es inaceptable y las
interrupciones deben ser manejados ms rapidamente , se debe usar una rutina en lenguaje ensamblador .
ON INTERRUPT agregar una instruccin despus de cada declaracin , para chequear si ocurre no una interrupcin DISABLE elimina la posibilidad de usar esta
instruccin y ENABLE la habilita .Normalmente , las instrucciones adicionales no son un problema , pero programas largos en pequeas computadoras si lo son .
Se puede usar ms de un ON INTERRUPT en un programa :
[Link]
35/58
10/1/2015
PicBasicProencastellano
Handler
Myint : led=1 enciende el LED con una interrupcin
RESUME vuelve al programa principal
ENABLE habilita las interrupciones despus del
Handler
Para deshabilitar permanentemente las interrupciones ( hasta que se necesiten ) , una vez que se us ON INTERRUPT , coloque INTCON en $80
INTCON = $80
OUTPUT INDICE
OUTPUT Pin
Convierte el pin especificado en salida . .Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link].
PORTA.0)
En forma alternativa , el pin puede ser convertido en salida de una manera ms rpida y corta (con un cdigo generado standpoint).
OWIN INDICE
OWIN Pin, Modo, [Item... ]
Enva opcionalmente un pulso de reset a un dispositivo de one-wire (un alambre) y despus lee unos o ms bits o bytes de datos de l, terminando opcionalmente con
otro pulso de restauracin. (reset)
Pin puede ser una constante, un 0 - 15, o una variable que contenga un nmero 0 -15
(e.g. B0) o un nombre de pin (e.g. PORTA.0).
Modo especifica antes si un reset est enviado y/o despus de la operacin y el tamao de los datos, bit o bytes
MODE numero de bit
EFECTO
[Link]
36/58
10/1/2015
PicBasicProencastellano
OWOUT INDICE
OWOUT Pin, Modo, [Item... ]
Enve un pulso opcional de reset a un dispositivo de one_wire (un-alambre) y despus escribe unos o ms bit o bytes de datos, terminando opcionalmente con otro
pulso de reset.
pin puede ser una constante,0 - 15, o una variable que contenga un nmero 0 -15 (e.g. B0) o un nombre de pin (e.g. PORTA.0).
Modo especifica si un pulso de reset se envia antes y/o despus de la operacin y el tamao del los byte de datos,bit o byte.
MODE nmero de bit
EFECTO
ejemplos de Modo: modo 0 significa ningun reset y byte de datos, modo de 1 significa reset antes de los datos y los bytes de datos,modo de 4 ningun reset y bit de
datos.
Item es unas o ms constantes, variables o modificadores separados por comas.
Los modificadores permitidos son STR para enviar datos de bytes array y REP para enviar un nmero de valores repetidos.
REP y STR no estan soportados para PICmicro de 12-bit core debido a la RAM y el limite de STACK.
OWOUT PORTC.0,1,[$cc,$be ]
esta declaracin enviara un pulso de reset a un dispositivo del un-alambre en el
pin 0 de PORTC seguido por los BYTES $$cc y $$be.
PAUSE INDICE
Detiene el programa por un Periodo milisegundos .Periodo tiene 16 bit , por lo que los retardos pueden ser de hasta 65.535 milisegundos .( un poco mas de 1 minuto )
.No coloca el micro controlador en modo de baja potencia como las otras funciones de retardo (NAP y SLEEP ). Inclusive , consume mayor potencia, pero es ms
exacto .Tiene la misma precisin que el clock .
PAUSE asume la frecuencia de 4 Mhz del oscilador . Si se usa un oscilador de otra frecuencia ,se debe indicar usando el comando DEFINE OSC . Vea la seccin
sobre velocidad para mayores detalles .
PAUSE 1000 ' demora de 1 segundo
PAUSEUS INDICE
PAUSEUS Periodo
Detiene el programa por Periodo milisegundos .Periodo tiene 16 bit , por lo que los retardos pueden ser de hasta 65.535 milisegundos .No coloca el micro
controlador en modo de baja potencia como las otras funciones de retardo (NAP y SLEEP ). Inclusive , consume mayor potencia, pero es ms exacto .Tiene la misma
precisin que el clock .
PAUSE tiene un nmero mnimo de ciclos para operar .Como depende de la frecuencia del oscilador , no es posible obtener demoras menores a un nmero mnimo de
microsegundos usando PAUSEUS .Para obtener demoras precisas , menores que esto use una rutina ensambladora tipo ASM...ENDASM .La tabla siguiente muestra
el nmero mnimo de microsegundos obtenible para una determinada frecuencia de oscilador .
[Link]
OSC
Demora mnima
3(3.58)
20us
24us
12us
10
8us
12
7us
16
5us
20
3us
37/58
10/1/2015
PicBasicProencastellano
PAUSEUS asume la frecuencia de 4 Mhz del oscilador . Si se usa un oscilador de otra frecuencia ,se debe indicar usando el comando DEFINE OSC . Vea la seccin
sobre velocidad para mayores detalles .
PAUSEUS 1000 ' demora de 1 segundo
PEEK INDICE
Lee el registro del micro controlador en la direccin Address especificada y guarda la lectura en Var .Opciones especiales del microPIC , como convertidores A/D y
ports adicionales pueden ser ledos usando PEEK .
PEEK y POKE permiten acceso directo a los registros del microPIC incluyendo PORTA,PORTB,PORTC,PORTD,PORTE y sus registros asociados de direccin de
datos (TRIS) .PEEK y POKE operan en todos los bits de un registro simultaneamente .Cuando se hace un POKE de datos a PORTA , se actualiza el port completo , no
solamente un bit individual .
PBP puede acceder directamente a registros y bits sin necesidad de utilizar PEEK y POKE .Se recomienda usar el acceso directo y no PEEK y POKE .
POKE INDICE
POKE $85,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 .Se recomienda usar el acceso directo y no PEEK y POKE .
TRISA = 0 setea todo PORTA como salidas )
PORTA.0 = 1 setea alto el bit 0 de PORTA
POT INDICE
POT Pin,Scale,Var
Lee un potencimetro ( otro dispositivo resistivo) en Pin . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15 ([Link]. B0) un
nmero de Pin ([Link]. PORTA.0)
La resistencia se mide tomando el tiempo de descarga de un capacitor a travs de un resistor .( 5 K a 50 K ) .Scale se usa para ajustar distintas constantes RC .
Para constantes RC grandes , Scale debe ser baja (valor mnmo 1 ) . Para constantes RC pequeas , Scale debe ser mxima (255) . Si el valor de Scale es correcto ,
Var debe ser cero para mnma resistencia y 255 para mxima resistencia .
Desafortunadamente , Scale debe ser determinada en forma experimental .Para sto , coloque el dispositivo a medir en mxima resistencia y midalo con Scale=255
. En estas condiciones , Var tendr un valor apropiado de Scale .(Este es el mismo tipo de proceso que efecta la opcin ALT-P en BS1 ).
POT,3,255,B0 lee el potencimetro en pin 3 para determinar Scale
Serout 0,N2400,[#B0] envia el valor del potenciometro en forma serial al pin 0
[Link]
38/58
10/1/2015
PicBasicProencastellano
PULSIN INDICE
PULSIN Pin,State,Var
Mide el ancho del pulso en Pin . Si State es cero se mide el ancho de un pulso bajo . Si State es uno , se mide el ancho de un pulso alto . El ancho medido se coloca
en Var . Si el flanco del pulso no llega , el ancho del pulso es demasiado grande para ser medido , Var=0 . Si se usa una variable de 8 bit , solo se usan los bits
menos significativos de la medicin de 16 bits . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin
([Link]. PORTA.0)
La resolucin de PULSIN depende de la frecuencia del oscilador . Si se usa un oscilador de 4 Mhz , el ancho de pulso se obtiene en incrementos de 10 us .Si se usa
un oscilador de 20 Mhz ,el ancho de pulso tendr una resolucin de 2 us .Definir un valor de OSC no tiene efectos sobre PULSIN . La resolucin siempre cambia con
la velocidad del oscilador en uso .
PULSIN PORTB.4,1,W3 mide el pulso alto en pin 4 guardado en W3
PULSOUT INDICE
PULSOUT Pin,Periodo
Genera un pulso en Pin , con un periodo especificado . El pulso se genera activando dos veces el pin , por lo que la polaridad del pulso depende del estado inicial del
pin . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
La resolucin de PULSOUT depende de la frecuencia del oscilador . Si se usa un oscilador de 4 Mhz , el periodo del pulso generado estar en incrementos de 10 us
.Si se usa un oscilador de 20 Mhz , periodo una resolucin de 2 us .Definir un valor de OSC no tiene efectos sobre PULSOUT . La resolucin siempre cambia con la
velocidad del oscilador en uso .
PWM INDICE
PWM Pin,Duty,Cycle
Enva un tren de pulsos modulados en ancho a Pin .Cada ciclo de PWM est compuesto de 256 pasos . El ciclo til Duty para cada ciclo vara de 0 (0%) a 255 (100%=
.El ciclo PWM es repetido Cycle veces . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link].
PORTA.0)
Cycle depende de la frecuencia del oscilador .Con un oscilador de 4 Mhz , cada Cycle ser de aproximadamente 5 mseg. de largo .Con un oscilador de 20 Mhz el
largo aproximado ser de 1 mseg. Definir un valor de OSC no tiene efecto sobre PWM . El tiempo de Cycle siempre cambia con la velocidad del oscilador en uso .
Pin se convierte en salida justo antes de la generacin del pulso y vuelve a ser entrada , cuando cesa .La salida de PWM en un pin tiene mucho ruido , y no tiene
forma de onda cuadrada .Es necesario usar algn tipo de filtro para convertirla en algo til . Un circuito R/C se puede usar como un simple convertidor D/A .
PWM PORTB.7,127,100 enva una seal PWM con un ciclo til del 50% al pin 7 , durante 100 ciclos
RANDOM INDICE
[Link]
39/58
10/1/2015
PicBasicProencastellano
RANDOM Var
Efecta una interacin pseudo-aleatoria en Var .Var debe ser una variable de 16 bit .No se pueden usar variables de array con ndice variable ,pero se permite usar
variables de array con ndice constante .Var se usa tanto como origen , como para guardar el resultado .El algoritmo pseudo-aleatorio usado tiene un paso de 65535
( el nico nmero que no produce es el cero).
RCTIME INDICE
RCTIME Pin,State,Var
Mide el tiempo que un Pin permanece en un estado State determinado .Bsicamente es la mitad de un PULSIN . Pin puede ser una constante , 0 - 15 , una variable
que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
RCTIME puede usarse para leer un potencimetro ( cualquier dispositivo resistivo ) .La resistencia puede ser medida descargando un capacitor a travs de un
resistor ( 5 K a 50 K ) y midiendo el tiempo de carga ( viceversa )
La resolucin de RCTIME depende de la frecuencia del oscilador . Si se usa un oscilador de 4 Mhz , el tiempo estar en incrementos de 10 us .Si se usa un oscilador
de 20 Mhz ,el tiempo tendr una resolucin de 2 us .Definir un valor de OSC no tiene efectos sobre PULSOUT . La resolucin siempre cambia con la velocidad del
oscilador en uso .
READ INDICE
READ Address,Var
Lee el EEPROM incorporado en la direccin Address , y guarda el resultado en Var .Esta instruccin solo puede ser usada con un microPIC que tenga un EEPROM
incorporado como el PIC16F84 PIC16C84
READCODE INDICE
READCODE, address, Var
RESUME INDICE
[Link]
40/58
10/1/2015
PicBasicProencastellano
RESUME { Label }
Vuelve al lugar del programa que se abandon , despus que termina de procesarse una interrupcin . RESUME es similar a RETURN ,pero es usado al final de un
handler de interrupciones PBP .
Si se usa el Label opcional , la ejecucin del programa va a continuar en este Label y no donde estaba el programa cuando ocurri la interrupcin .En este caso ,
cualquier otra direccin de retorno , no ser accesible .Vea ON INTERRUPT para mayor informacin .
RETURN INDICE
RETURN
Vuelve desde una subrutina . Retoma la ejecucin en la declaracin que sigue al GOSUB que llam la subrutina .
REVERSE INDICE
REVERSE Pin
Si Pin es entrada , lo convierte en salida .Si es salida , lo convierte en entrada . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15
([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
SERIN INDICE
Recibe uno ms Items en Pin , en formato standard asincrnico , usando 8 bit de datos ,sin paridad y un stop bit (8N1) .SERIN es similar al comando Serin de BS1
con el agregado de Timeout . Pin automaticamente se convierte en entrada . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15
([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
Los nombres Mode ([Link]. T2400 ) estn definidos en el archivo [Link] .Para usarlos ,agregue la lnea :
Include [Link]
al comienzo del programa PBP . BS1DEFS,BAS y [Link] ya incluyen [Link] .No lo incluya , si ya est usando alguno de estos archivos .Los nmeros
Mode pueden ser usados sin incluir este archivo .
[Link]
41/58
10/1/2015
PicBasicProencastellano
Mode
Mode N
Baud rate
State
T2400
2400
VERDADERO
T1200
1200
T9600
9600
T300
300
N2400
2400
N1200
1200
N9600
9600
N300
300
FALSO
Timeout y Label son opciones que pueden ser includas para permitir al programa continuar si no se recibe un carcter durante un cierto tiempo . Timeout est
especificado en unidades de 1 milisegundo .
La lista de Items de datos a ser recibida puede estar precedida por uno ms calificadores encerrados entre corchetes . SERIN debe recibir estos bytes en un
orden exacto , antes de recibir los datos .Si algn byte recibido no concuerda con el byte siguiente de la secuencia de calificacin ,el proceso de calificacin
comienza nuevamente ( [Link]. el prximo hyte recibido es comparado con el primer Item de la lista de calificacin ) .Un Qualifier puede ser constante,variable una
cadena de constantes . Cada carcter de una cadena es tratado como un calificador individual .
Una vez que se completan los calificadores , SERIN comienza a guardar datos en la variable asociada con cada Item .Si el nombre de variable es nico ,el valor del
carcter ASCII recibido es guardado en la variable .Si la variable es precedida por el signo # . SERIN convierte un valor decimal en ASCII y guarda el resultado
en esa variable .Todos los no-dgitos recibidos antes del primer dgito del valor decimal son ignorados y descartados .El carcter no-dgito que termina el valor
decimal tambin se descarta .
Aunque los chips convertidores de nivel RS-232 son comunes y baratos , las excelentes especificaciones de I/O de los microPIC permiten ejecutar muchas
aplicaciones sin usar convertidores de nivel .Ms an , se pueden usar entradas invertidas ( N300...N9600) junto con un resistor limitador de corriente de 22k.
SERIN 1,N2400, [A],B0 espera hasta que el carcter A sea recibido en forma serial en el pin 1 y coloca el prximocaracter en B0
SERIN2 INDICE
SERIN2 DataPin { FlowPin } ,Mode,{ParityLabel,} {Timeout,Label,}[Item...]
Recibe uno ms Items en el Pin especificado en formato standard asincrnico .SERIN2 es similar al comando Serin de BS2 .DataPin es colocado como entrada en
forma automtica .FlowPin es opcional y es automticamente colocado como salida .DataPin y FlowPin pueden ser una constante , 0 - 15 , una variable que contenga
un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
El pin opcional de control de flujo FlowPin , puede ser includo para ayudar a que los datos no desborden la capacidad del receptor .Si se usa , FlowPin es
automticamente habilitado para permitir la transmisin de cada carcter .Este estado habilitado es determinado por la polaridad del dato especificado en Mode .
Mode se usa para especificar el baud rate y los parmetros de operacin de la transferencia serial .Los 13 bits de menor orden seleccionan el baud rate . Bit 13
selecciona paridad no paridad . Bit 14 selecciona nivel cierto invertido . Bit 15 no se usa .
Los bits de baud rate especifican el el tiempo de bit en microsegundos -20 .Para encontrar un valor dado , use la ecuacin :
(1000000/bayd)-20
[Link]
Baud rate
Bits 0 - 12
300
3313
600
1646
1200
813
2400
396
42/58
10/1/2015
PicBasicProencastellano
4800
188
9600
84
19200
32
INDICE
Bit 13 selecciona paridad par (bit13=1) sin paridad (bit13=0) .Normalmente ,las transmisiones seriales son 8N1 (8 bit de datos, sin paridad ,1 stop bit) .Si se
selecciona paridad ,los datos son recibidos como 7E1 (7 bit de datos , paridad par ,1 stop bit) .
Bit 14 selecciona el nivel de los pins de datos y de control de flujo .Si bit 14=0 , se reciben los datos en forma normal ,para usar con los drivers RS-232 .Si bit 14=1
, los datos se reciben invertidos .Esto se puede usar para evitar usar drivers RS-232
Algunois ejemplos de Mode son : Mode = 84 (9600 baud ,sin paridad , cierto),Mode = 16780 ( 2400 baud , sin paridad , invertido ) , Mode = 27889 ( 300 baud ,
paridad par invertido ) .
Si se incluye ParityLabel , se saltar a la etiqueta indicada si se recibe un carcter con error de paridad .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 contine si no se recibe un carcter dentro de un cierto tiempo .Timeout se
especifica en unidades de 1 milisegundo .
SERIN2 soporta distintos modificadores , que pueden ser combinados entre s ,dentro de una declaracin SERIN2 para obtener distintos formatos .
Modificador
Operacin
BIN {1..16}
DEC{1..5}
HEX{1..4}
SKIP n
STR ArrayVar{}
WAIT ()
WAITSTRArrayVar{ }
Una variable precedida por BIN va a recibir la representacin ASCII de su valor binario ..Por ejemplo ,si est especificado BIN B0 y se
recibe 1000 , B0 ser 8.
Una variable precedida por DEC va a recibir la representacin ASCII de su valor decimal ..Por ejemplo ,si est especificado DEC B0 y se
recibe 123 , B0 ser 123.
Una variable precedida por HEX va a recibir la representacin ASCII de su valor hexadecimal ..Por ejemplo ,si est especificado HEX B0
y se recibe FE , B0 ser 254.
SKIP seguido por un contador , va a saltear esa cantidad de caracteres en el flujo de datos .Por ejemplo , SKIP 4 saltear 4 caracteres .
STR seguido por una variable de array , un contador y un carcter opcional de finalizacin ,va a recibir una cadena de caracteres .La
longitud de la cadena est determinada por el contador cuando se encuentre el carcter opcional .
La lista de items de datos a ser recibidos ,puede estar precedida por uno ms calificadores entre parentesis despus del WAIT .
SERIN2 debe recibir estos bytes en un orden exacto ,antes de recibir los datos .Si algn byte recibido no concuerda con el prximo en
la secuencia de calificacin ,recomienza el proceso de calificacin .( [Link]. el el prximo byte recibido se compara con el primer item en la
lista de calificadores )..Un Qualifier puede ser constante , variable una cadena de constantes ,Cada carcter de una cadena es tratado
como un calificador individual .
WAITSTR puede ser usado como WAIT anteriormente , para forzar a SERIN2 a esperar por una cadena de caracteres de un
determinado largo ,antes de seguir adelante .
Una vez que los calificadores WAIT y WAITSTR estn cumplimentados , SERIN comienza a guardar los datos en las variables asociadas con cada Item .Si se usa
solo el nombre de la variable , se guarda el valor del carcter ASCII . Si la variable est precedida por BIN,DEC HEX , SERIN2 convierte un valor binario ,
decimal hexadecimal en su equivalente ASCII y guarda el resultado en esa variable .Todos los no-dhitos recibidos antes que el primer digito del valor decimal es
ignorado y descartado .El carcter no-digito que termina el valor tambin es descartado .
BIN , DEC y HEX pueden estar seguidos por un nmero .reciben tantos digitos como hay en la entrada .Sin embargo , si un nmero sigue a un modificador ,SERIN2
siempre recibir ese nmero de dgitos , salteando dgitos adicionales si es necesario .
SERIN2 asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit .Para mantener los valores de baud rate adecuados con otro oscilador , asegrese
de usar DEFINE OSC con el nuevo valor de oscilador .
Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementacin de corriente RS-232 y las excelentes especificaciones de I/O
del microPIC , no se requieren convertidores de nivel en muchas aplicaciones . Se puede usar TTL invertido ( Mode bit14 = 1 ) .Se sugiere el uso de un resistor
limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos ).
[Link]
43/58
10/1/2015
PicBasicProencastellano
SERIN2 1,16780,[wait (A),B0] espera hasta que el carcter A sea recibido en forma serial en Pin1 y pone el prximo carcter en B0
SERIN2 PORTA.1 ,84,[skip 2,dec4 B0] saltea 2 caracteres y toma un nmero decimal de 4 dgitos
SERIN2 PORTA.1.0 ,84,100,tlabel,[wait (x,b0),str ar]
SEROUT INDICE
SEROUT Pin,Mode,[Item[,Item...}]
Enva uno ms Items a Pin , en formato standard asincrnico usando 8 bits de datos , sin paridad y 1 stop bit (8N1) .SEROUT es similar al comando Serout de BS1
.Pin es automticamente colocado como salida . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin
([Link]. PORTA.0)
Los nombres Mode ([Link]. T2400) estn definidos en el archivo [Link] .
Para usarlos ,agregue la lnea :
Include [Link]
Mode
Mode N
Baud rate
T2400
2400
T1200
1200
T9600
9600
T300
300
N2400
2400
N1200
1200
N9600
9600
N300
300
OT2400
2400
OT1200
1200
OT9600
10
9600
OT300
11
300
ON2400
12
2400
ON1200
13
1200
ON9600
14
9600
ON300
15
300
Estado
LLEVADO A CIERTO
LLEVADO A INVERTIDO
ABIERTO CIERTO
ABIERTO INVERTIDO
INDICE
SEROUT soporta 3 tipos distintos de datos , que pueden ser combinados libremente dentro de una declaracin SEROUT .
Una cadena de constantes es enviada como una cadena de caracteres literales .
Un valor numrico (constante variable ) va a enviar el correspondiente carcter ASCII .Ms an , 13 es retorno de carro ( Carriage
Return CR ) y 10 es avance de lnea ( Line Feed LF ) .
Un valor numrico precedido por el signo # va a enviar la representacin ASCII de su valor decimal .Por ejemplo , si W0=123 ,entonces
[Link]
44/58
10/1/2015
PicBasicProencastellano
#W0 ( #123) va a enviar 1,2,3 .
SEROUT asume un valor de oscilador de 4 Mhz cuando genera sus tiempos de bit .Para mantener los valores de baud rate adecuados con otro oscilador , asegrese
de usar DEFINE OSC con el nuevo valor de oscilador .
En algunos casos ,los rangos de transmisin de SEROUT pueden presentar los caracteres demasiado rpidamente en el dispositivi receptor .Un DEFINE agrega
tiempo entre caracteres en la transmisin de salida .Esto permite un tiempo adicional entre caracteres a medida que son transmitidos .Se puede lograr una demora
entre cada carcter transmitido de 1 a 65535 microsegundos ( .001 a 65,535 milisegundos ) .
Por ejemplo , para pausar 1 milisegundo entre cada carcter transmitido :
DEFINE CHAR_PACING 1000
Aunque los chips convertidores de nivel RS-232 son comunes y baratos gracias a la implementacin de corriente RS-232 y las excelentes especificaciones de I/O
del microPIC , no se requieren convertidores de nivel en muchas aplicaciones . Se puede usar TTL invertido ( N300 ...N9600 ) .Se sugiere el uso de un resistor
limitador de corriente de 1K (se supone que RS-232 es tolerante a los cortocircuitos ).
SEROUT 0,N2400,[#B0,10] enva el valor ASCII de B0 ,seguido por un LF al pin 0 , en forma serial
SEROUT2 INDICE
SEROUT2 DataPin { FlowPin } ,Mode,{Pace,} {Timeout,Label,}[Item...]
Enva uno ms Items al Pin especificado en formato standard asincrnico .SEROUT2 es similar al comando Serout de BS2 .DataPin es colocado como salida en
forma automtica .FlowPin es opcional y es automticamente colocado como entrada .DataPin y FlowPin pueden ser una constante , 0 - 15 , una variable que
contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
El pin opcional de control de flujo FlowPin , puede ser includo para ayudar a que los datos no desborden la capacidad del receptor .Si se usa , los datos seriales no
sern enviados hasta que FlowPin est en el estado adecuado . .Este estado es determinado por la polaridad del dato especificado en Mode .
Como opcin se puede incluir Timeout y Label para permitir continuar al programa si el FlowPin no cambia al estado de habilitacin dentro de un cierto tiempo
.Timeout esta especificado en unidades de 1 milisegundo .
En algunos casos ,los rangos de transmisin de SEROUT2 pueden presentar los datos demasiado rpidamente al dispositivo receptor .Puede no desearse usar un pin
extra para control de flujo .La opcin Pace se puede usar para agregar tiempo entre cada carcter durante la transmisin .La demora puede ser de 1 a 65535
milisegundos entre cada carcter transmitido .
Mode se usa para especificar el baud rate y los parmetros de operacin de la transferencia serial .Los 13 bits de menor orden seleccionan el baud rate . Bit 13
selecciona paridad no paridad . Bit 14 selecciona nivel cierto invertido . Bit 15 selecciona si est abierto no.
Los bits de baud rate especifican el el tiempo de bit en microsegundos -20 .Para encontrar un valor dado , use la ecuacin :
(1000000/bayd)-20
Baud rate
Bits 0 - 12
300
3313
600
1646
1200
813
2400
396
4800
188
9600
84
19200
32
Bit 13 selecciona paridad par (bit13=1) sin paridad (bit13=0) .Normalmente ,las transmisiones seriales son 8N1 (8 bit de datos, sin paridad ,1 stop bit) .Si se
selecciona paridad ,los datos son enviados como 7E1 (7 bit de datos , paridad par ,1 stop bit) .
Bit 14 selecciona el nivel de los pins de datos y de control de flujo .Si bit 14=0 , se envian los datos en forma normal ,para usar con los drivers RS-232 .Si bit 14=1 ,
[Link]
45/58
10/1/2015
PicBasicProencastellano
los datos se envian invertidos .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).El modo abierto puede usarse para conectar
varios dispositivos juntos en el mismo bus serial .
Algunos ejemplos de Mode son : Mode = 84 (9600 baud ,sin paridad , cierto , con carga ),Mode = 16780 ( 2400 baud , sin paridad , invertido ,con carga ) , Mode =
60657 ( 300 baud , paridad par, invertido , abierto) .
SEROUT2 soporta distintos modificadores , que pueden ser combinados entre s ,dentro de una declaracin SEROUT2 para obtener distintos formatos .
Modificador
Operacin
{I}{S}BIN {1..16}
{I}{S}DEC{1..5}
{I}{S}HEX{1..4}
REP c n
STR ArrayVar{}
SEROUT2 0,16780,[dec B0,10] enva el valor ASCII de B0 ,seguido por un LF al pin 0 , en forma serial a 2400 baud
SEROUT2 PORTA.1,84 ,[B0=0,ihex4 B0] enva B0 = 0 seguido por el valor binario de B0 ,a PORTA pin1 ,en forma serial , a 9600 baud
SHIFTIN INDICE
SHIFTIN DataPin,ClockPin,Mode, [Var{}...]
El ClockPin , desplaza en forma sincrnica los bits en DataPin y guarda los bytes recibidos en Var . ClockPin y DataPin pueden ser una constante , 0 - 15 , una
[Link]
46/58
10/1/2015
PicBasicProencastellano
variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
(en forma opcional) especifica el nmero de bits a ser desplazado .Si no se especifica , se desplazan 8 bits , independientemente del tipo de variable .
Los nombres Mode ([Link]. MSBPRE) estn definidos en el archivo [Link] .
Para usarlos ,agregue la lnea :
Include [Link]
Mode
Mode N
Operacin
MSBPRE
LSBPRE
MSBPOST
LSBPOST
SHIFTIN 0,1,MSBPRE,[B0]
SHIFTOUT INDICE
SHIFTOUT DataPin,ClockPin,Mode, [Var{}...]
Desplaza en forma sincrnica el contenido de Var sobre DataPin y ClockPin . ClockPin y DataPin pueden ser una constante , 0 - 15 , una variable que contenga un
nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
(en forma opcional) especifica el nmero de bits a ser desplazado .Si no se especifica , se desplazan 8 bits , independientemente del tipo de variable .
Los nombres Mode ([Link]. LSBFIRST) estn definidos en el archivo [Link] .
Para usarlos ,agregue la lnea :
Include [Link]
Mode
Mode N
Operacin
LSBFIRST
MSBFIRST
SHIFTOUT 0,1,MSBFIRST,[B0]
SHIFTOUT PORTA.1,PORTA.2,1,[wordvar 4]
SLEEP INDICE
[Link]
47/58
10/1/2015
PicBasicProencastellano
SLEEP Period
Coloca al micro controlador en modo de baja potencia por periodo segundos . periodo tiene 16 bit ,por lo que los retardos pueden ser de hasta 65535 segundos
(aprox. 18 horas).
SLEEP usa el WatchDog Timer ,por lo que es independiente de la frecuencia del oscilador utilizado .La granulacin es aproximadamente 2.3 segundos y puede variar
de acuerdo al dispositivo y la temperatura . Esta variacin es distinta a la de BASIC Stamp . Se necesit este cambio ,porque cuando el micro PIC pone a cero
(resetea) el WatchDog Timer , tambin pone valores predefinidos en los registros internos .Estos valores pueden diferir de los esperados por su programa
.Ejecutando el comando SLEEP sin calibrar , este paso se deja de lado .
SOUND INDICE
SOUND Pin,[Note,Duration{,Note,Duration...}]
Genera un tono y/o ruido blanco en el Pin especificado . Pin es automticamente colocado como salida . Pin puede ser una constante , 0 - 15 , una variable que
contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
Note 0 es silencio .Nte 1-127 son tonos .Notes 128-255 son ruido blanco .Los tonos y el ruido blanco estn en una escala ascendente ([Link]. 1 y 128 son las
frecuencias menores , 129 y 266 las mayores).Note 1 es aprox. 78,74 Hz y Note 127 es aproz. 10000 Hz .
Duration es 0-255 y determina el largo de la nota ,en incrementos de 12 milisegundos .Note y Duration no necesitan ser constantes .
SOUND entrega como salida ondas cuadradas con nivel TTL .Gracias a las caractersticas del micro PIC , se puede manejar un parlante a travs de un capacitor -El
valor del capacitor debe ser determinado enfuncin de las frecuencias a usar y la carga del parlante .Parlantes piezo elctricos pueden ser conectados
directamente .
STOP INDICE
STOP
Detiene la ejecucin del programa , ejecutando un loop sin fin ,No coloca al micro controlador en modo de baja potencia .El micro controlador trabaja igual que
siempre .
SWAP INDICE
SWAP Variable1,Variable2
Intercambia los valores de dos variables .Normalmente intercambiar los valores de dos variables es un proceso tedioso .SWAP lo hace con una sola declaracin ,sin
variables intermedias .Puede ser usado con variables de bit,vyte y word .Variables de array con ndice variable no son permitidas ,pero s variables de array con
ndice constante .
Temp = B0 anteriormente
B0=B1
B1=Temo
[Link]
48/58
10/1/2015
PicBasicProencastellano
TOGGLE INDICE
TOGGLE Pin
Invierte el estado del Pin especificado . Pin es automticamente colocado como salida . Pin puede ser una constante , 0 - 15 , una variable que contenga un nmero
de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
Low 0 comienza Pin0 como bajo
TOGGLE 0 cambia a alto el estado del pin 0
WHILE...WEND INDICE
WHILE Condition
Statement
WEND
Ejecuta las declaraciones Statement en forma repetida ,mientras la condicin Condition sea cierta .Cuando Condition deja de ser cierta ,la ejecucin continua con
la declaracin siguiente al WEND .Condition puede ser cualquier expresin de comparacin .
I=1
WHILE i < = 10
Serout 0,N2400,[No:,#i,13,10]
WEND
WRITE INDICE
WRITE Address,Value
Graba valores Value en el EEPROM incorporado en la direccin Address especificada . .Esta instruccin 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 ejecucin .Para grabar datos en el EEPROM durante la programacin ,se usan las declaraciones
DATA y EEPROM .
Cada WRITE se auto regula en tiempo y toma aproximadamente 10 milisegundos ejecutarlo en un microPIC .
WRIT 5,B0 enva el valor de B0 al EEPROM pin 5
WRITECODE INDICE
XIN INDICE
[Link]
49/58
10/1/2015
PicBasicProencastellano
Si Var tiene tamao de word ,cada cdigo House Code recibido , se guarda en el byte superior del word .Cada cdigo Key Code recibido se guarda en el byte
inferior del word .Si Var es un byte , solo se guarda el Key Code .
El Hpuse Code es un nmero 0-15 , que corresponde al juego House Code del mdulo X-10 de A a P .
El Key Code puede ser el nmero de un mdulo especfico de X-10 la funcin que debe ser realizada por un mdulo .En la prctica , primero se enva un comando
especificando el nmero de mdulo X-10 ,seguido por un comando especificando la funcin deseada .Algunas funciones operan en todos los mdulos , por lo que el
nmero de mdulo es innecesario .Los ejemplos posteriores ayudarn a clarificar el tema .Key Code 0-15 corresponden a nmeros de mdulo 1-16 .
XOUT despus lista las funciones y la informacin de conexionado .
Housekey var word
loop: XIN PORTA.2,PORTA.0,[housekey] obtiene datos X-10
Lcdout $fe,1,House=,#housekey.byte1,Key=,#housekey.byte0 muestra los datos X-10 en un LCD
Goto loop por siempre
XIN PORTA.2,PORTA.0,1,nodata,[housekey] chequea por datos X-10 , si no hay va a nodata
XOUT INDICE
Enva un HouseCode seguido por un KeyCode , repetidos un nmero Repeat de veces en formato X-10 .Si no se usa Repeat se asume 2 veces como mnimo .Repeat
usualmente se usa con los comandos Bright y Dim .
XOUT se usa para enviar informacin de control a dispositivos X-10 .Los mdulos X-10 estn disponibles en muchos lugares y de distintos proveedores .Se requiere
una interfase para conectar el micro controlador a la lnea de AC .Se necesita un TW-523 para comunicaciones de dos vas , un PL-513 para enviar solamente ,
para trabajar con XIN .Estos dispositivos tienen la interfase a la lnea de alimentacin y aslan el micro controlador de la lnea de AC .Como X-10 est patentado ,
esta interfase tambin cubre el licenciamiento .
DataPin es automticamente convertido en salida para enviar datos a la interfase X-10 .ZeroPin es automticamente convertido en entrada para recibir el tiempo
de cruce por cero de la interfase X-10 .Ambos pins pueden ser llevados a 5 volt con resistores de 4.7 K . DataPin y ZeroPin pueden ser una constante , 0 - 15 , una
variable que contenga un nmero de 0-15 ([Link]. B0) un nmero de Pin ([Link]. PORTA.0)
XOUT solamente procesa datos en el momento en que la lnea de AC pasa por cero (en ese momento recibe ZeroPin).Si no hay transiciones en esta lnea , XIN
esperar que las haya .
El House Code es un nmero 0-15 , que corresponde al juego House Code del mdulo X-10 de A a P .El HouseCode apropiado debe ser enviado como parte de cada
comando .
El Key Code puede ser el nmero de un mdulo especfico de X-10 la funcin que debe ser realizada por un mdulo .En la prctica , primero se enva un comando
especificando el nmero de mdulo X-10 ,seguido por un comando especificando la funcin deseada .Algunas funciones operan en todos los mdulos , por lo que el
nmero de mdulo es innecesario .Los ejemplos posteriores ayudarn a clarificar el tema .Key Code 0-15 corresponden a nmeros de mdulo 1-16 .
Los nombres Keycode (funciones) ([Link]. uniton) estn definidos en el archivo [Link] .Para usarlos ,agregue la lnea :
Include [Link]
INDICE
al comienzo de su programa PBP .[Link] y [Link] ya incluyen [Link] . No lo incluya ,si ya est usando uno de ellos .Los nmeros KeyCode
pueden ser usados sin incluir este archivo .
KeyCode
KeyCode N
Operacin
unitOn
%10010
Enciende el mdulo
UnitOff
%11010
Apaga el mdulo
UnitsOff
%11100
LightsOn
%10100
LightsOff
%10000
Bright
%10110
Dim
%11110
Conectarse a la interfase X-10 requiere 4 conexiones .La salida de la interfase X-10 ( cruce por cero y datos) es a colector abierto y necesita un resistor de aprox.
4.7 K conectado a 5 volt .La tabla siguiente muestra el xonexionado :
[Link]
50/58
10/1/2015
PicBasicProencastellano
Cable N
Conexin
Negro
Rojo
Verde
Amarillo
TW-523
INDICE
Cable N
Conexin
Negro
Rojo
Verde
Amarillo
[Link]
51/58
10/1/2015
PicBasicProencastellano
DEFINE OSC 8
Cerca del comienzo del programa PBP , se asume que se usar un oscilador de 8 Mhz .Las definiciones aceptables son :
[Link]
OSC
Oscilador usado
3.58 Mhz
4 Mhz
8 Mhz
10
10 Mhz
12
12 Mhz
16
16 Mhz
52/58
10/1/2015
PicBasicProencastellano
20
20 Mhz
Indicando a PBP la frecuencia del oscilador se le permite compensar y producir los tiempos correctos para COUNT ,DEBUG ,DTMFOUT ,FREQOUT ,HSERIN
,HSEROUT ,I2CREAD ,I2CWRITE ,LCDOUT ,PAUSE ,PAUSEUS ,SERIN ,SERIN2 ,SEROUT , SEROUT2 , SHIFTIN ,SHIFTOUT ,SOUND ,XIN y XOUT .
Cambiando la frecuencia del oscilador puede ser usado para mejorar la resolucin de las instrucciones PULSIN ,PULSOUT y RCTIME .A 4 Mhz ,operan con una
resolucin de 10 microsegundos .Si se usa un cristal de 20 Mhz , la resolucin ser de 2 microsegundos .Pero , el ancho del pulso es medido en una variable de 16 bit
.Con una resolucin de 2 microsegundos , el mximo ancho de pulso medible ser de 131070 microsegundos .
Yendo en la otra direccin y utilizando un oscilador de 32768 Khz es problemtico .Puede ser deseable , si se desea reducir el consumo de potencia .Los comandos
SERIN y SEROUT son inutilizables ,y el WatchDog Timer puede hacer que el programa recomience slo en cualquier momento .Experimente si su aplicacin
funciona con esta velocidad del oscilador .
Si se hacen solicitudes de un banco especfico , stos son manejados primero .Si no existe lugar dentro del banco solicitado , se usa el primer espacio disponible y
se avisa lo sucedido .
Tambin se pueden solicitar direcciones especficas para las variables .En muchos casos , es mejor dejar que PBP maneje la distribucin de memoria por usted .Pero
en algunos casos ,como el manejo del registro W durante un handler de interrupciones es necesario definir una direccin fija .Esto puede ser hecho de una manera
similar al direccionamiento de un banco :
Varias variables de sistema ,usando 24 bytes de memoria ,son automticamente distribudas por el compilador para el uso de las subrutinas de librera .Estas
variables estn en el archivo [Link] y deben estar en banco 0 .
Las variables de usuario usan el smbolo ( _ ) , mientras que las variables de sistema no lo hacen ,por lo que no interfieren entre s .
Las variables B0-B25 y W0-W12 de BASIC Stamp no son distribudas automticamente .Es mejor crear sus propias variables usando la instruccin VAR .Sin
embargo , si desea que se creen estas variables ,simplemente incluya el archivo apropiado , [Link] [Link] al comienzo del programa PBP .Estas
variables se colocan en un espacio separado y aparte de las dems variables que usted pueda crear posteriormente .Es diferente que en BS2 donde usar variables
pre-confeccionadas y variables de usuario ocasiona problemas .
[Link]
53/58
10/1/2015
PicBasicProencastellano
El compilador puede crear automticamente variables adicionales temporarias ,para ayudar a resolver ecuaciones .Una lista de estas variables ,as como el mapa de
memoria completo , estn en los archivos generados .ASM y .LST .
[Link]
54/58
10/1/2015
PicBasicProencastellano
@ bsf PORTA, 0
Asm
bsf STATUS,RP0
bcf TRISA, 0
bcf STATUS,RP0
Endasm
Las lneas de ensamblador son copiadas exactamente dentro del archivo ensamblador de salida .Esto le permite al programa PBP usar todas las ventajas de PM .Sin
embargo ,requiere que el programador est familiarizado con las libreras PBP . Las convenciones PBP son similares a la de otros compiladores comerciales y no
seran problema para un programador experimentado .
Todos los nombres identificatorios definidos en un programa PBP son definidos en forma similar en el ensamblador , pero precedidos por un ( _ ) Esto permite el
acceso a variables de usuario , constantes y an a direcciones etiquetadas en ensamblador .
Cualquier nombre definido en ensamblador que comience con un (_) tiene la posibilidad de conflictuar con un smbolo generado por PBP . Si se evitan los conflictos
, se puede acceder a estos valores marcados por el ensamblador , desde PBP ? . No .Recuerde que los nombres con (_) generados por PBP son solo imgenes de la
informacin actual definida en el compilador .Como el ensamblado en lnea es copiado directamente al archivo de salida y no es procesado por el compilador , ste
ignora cualquier informacin de tipo valor de los smbolos ensambladores .Si las variables son compartidas por el ensamblador y PBP ,deben ser definidas en PBP .
Tambin pueden tener conflictos , smbolos que no comiencen con (_) .El problema son los identificadores internos de las libreras .Afortunadamente , muchos de
ellos contienen un ? hacen referencia a uno de los registros de trabajo (como R0) .Evitar esos nombres es evitar problemas .Si usted tiene un conflicto de
nombres ,el compilador reporta las definiciones duplicadas como un error .
En lenguaje ensamblador el designador de comentarios cambia del ( ) de PBP a (:) .
comentario de PBP
: comentario de lenguaje ensamblador
[Link]
55/58
10/1/2015
PicBasicProencastellano
Sabe tambin que debe poner en cero los bits de seleccin de banco antes de efectuar un Call un Jump .Lo hace as , porque no puede saber el estado de los bits
de seleccin de banco de la nueva ubicacin .
As , cada vez que hay un cambio de ubicacin , una etiqueta que puede ser llamada a la cual saltar , pone en cero los bits de seleccin de banco .
Tambin pone en cero los bits de seleccin de banco antes de cada ASM y atajo @ de ensamblador .Una vez ms ,la rutina ensambladora no sabe el estado actual
de los bits ,por lo que son colocados en un estado conocido .El cdigo ensamblador debe estar seguro de poner en cero los bits de seleccin de banco antes de salir ,
si los ha alterado .
INTERRUPCIONES INDICE
Las interrupciones pueden ser una forma de hacer que su programa sea realmente difcil de depurar .
Las interrupciones son disparadas por eventos de hardware , ya sea un pin de I/O cambiando su estado un tiempo terminado cualquier otro .Si est habilitada
(por defecto no lo est) , la interrupcin causa que el procesador detenga lo que est haciendo y salte a una rutina especfica en el micro controlador , llamada
handler de interrupciones .
Pueden ser dificiles de implementar adecuadamente , pero tambin pueden proveer funciones muy tiles .
Por ejemplo , una interrupcin puede ser usada para acumular datos seriales de entrada ,mientras el programa principal est haciendo otra tarea .(este uso
particular requiere un micro controlador con un port serial ) .
Hay muchas formas de evitar usar las interrupciones .Un polling rpido de un pin un bit de registro hace el mismo trabajo en forma rpida .O se puede verificar el
valor de una bandera de interrupcin sin tener que habilitarlo .
Sin embargo ,si usted desea hacerlo , le damos algunas ideas de cmo hacerlo .
El compilador PBP tiene dos mecanismos diferentes para manejar interrupciones .La primera es simplemente escribir el handler de interrupcin en ensamblador y
colocarlo en el frente de un programa PBP .El segundo mtodo es usar la declaracin ON INTERRUPT .Cada mtodo ser explicado por separado ,despus de
explicar las interrupciones en general .
[Link]
56/58
10/1/2015
PicBasicProencastellano
estaba el programa cuando ocurri la interrupcin .Si se indica en RESUME una etiqueta hacia donde saltar ,la ejecucin continuar en esa direccin .En ese caso ,
se pierden todas las direcciones previas de regreso .
DISABLE detiene PBP insertando un Call al verificador de interrupcin despus de cada declaracin .Esto permite que se ejecuten secciones de cdigo sin la
posibilidad de ser interrumpidas .ENABLE permite la insercin para continuar .
DISABLE debe ser colocado antes que el handler de interrupcin para que ste no sea arrancado cada vez que se chequee el bit GIE .
Si por alguna razn se desea apagar las interrupciones despus que se encuentra un ON INTERRUPT ,no debe apagar el bit GIE .Apagando este bit , se le indica a
PBP que ha sucedido una interrupcin y esto ejecutar el handler de interrupcin por siempre .En su lugar haga :
INTCON = $80
Esto deshabilita todas las interrupciones individuales , pero deja seteado el bit GIE.
Una nota final acerca de las interrupciones en BASIC .Si el programa usa :
loop: goto loop
y espera ser interrumpido ,eso no suceder .Recuerde que la bandera de interrupcin es chequeada despus de cada instruccin .Realmente no hay un lugar donde
chequear despus de un GOTO . Inmediatamente salta al loop , sin chequear la interrupcin .Debe colocarse alguna declaracin dentro del loop , para que haya un
chequeo de interrupciones .
[Link]
57/58
10/1/2015
PicBasicProencastellano
[Link]
58/58