Professional Documents
Culture Documents
BASIC
En la programacin de computadoras, el BASIC, siglas de Beginner's All-purpose Symbolic Instruction Code1
(Cdigo simblico de instrucciones de propsito general para principiantes en espaol), es una familia de lenguajes
de programacin de alto nivel. El BASIC original, el Dartmouth BASIC, fue diseado en 1964 por John George
Kemeny y Thomas Eugene Kurtz en el Dartmouth College en New Hampshire, Estados Unidos, como un medio
para facilitar la programacin en ordenadores a estudiantes (y profesores) que no fueran de ciencias. De aquella,
casi todo el uso de los ordenadores requera codificar software hecho a medida, con lo cual quedaba restringida a
personas con formacin como cientficos y matemticos. BASIC originalmente fue desarrollado como una
herramienta de enseanza. El lenguaje y sus variantes llegaron a estar ampliamente disponibles en los
microcomputadores a finales de los aos
1970 y en los aos
1980. BASIC sigue siendo popular a da
de hoy en un puado
de dialectos altamente modificados, y en
nuevos
lenguajes,
influenciados por BASIC tales como
Microsoft Visual Basic
o Gambas en GNU/Linux. En el ao
2006, el 59% de los
desarrolladores para la plataforma .NET
usaban Visual Basic
.NET como su nico lenguaje
Compiladores de Basic
Gratuitos:
Small Basic es un compilador para Windows, creado por Microsoft, gratuito, pensado para principiantes.
Puedes leer ms sobre l en el blog.
ASIC, version 4.00, compilador de Basic, parecido a QuickBasic, comprimido con ZIP, 260 K.
UBasic, version 8.30, intrprete de Basic, parecido a GwBasic, comprimido con ZIP, 338 K.
Informacin sobre Visual Basic, la herramienta visual para Windows creada por Microsoft, basada en el
lenguaje Basic. Es posible descargar la versin "Control Creation Edition", que no permite crear ficheros
EXE pero s controles ActiveX, tras rellenar un formulario en la Web de Microsoft.
RapidQ, es un compilador de Basic Visual, gratis, que est disponible para Windows y para Linux. Tambin
permite crear aplicaciones "en modo texto", e incluso escribir antiguos programas con nmeros de lneas....
Informacion sobre XBasic, otro compilador de Basic Visual, tambin gratis (pero ms difcil de manejar) y
tambin disponible para Windows y para Linux.
DarkBasic, es compilador de Basic para Windows, pensado para poder crear juegos con facilidad.
Envelop, es un compilador de Basic Visual, que imita el Visual Basic de Microsoft.
Yabasic, es un intrprete de Basic en modo consola (texto) que est disponible para Windows y diversos
sistemas Unix, y que incluye el cdigo fuente del intrprete.
Bywater Basic es similar, para Linux y Dos.
Free Basic es un compilador multiplataforma de cdigo abierto (open-source) que busca ser lo ms
compatible posible con QBasic y QuickBasic.
QuickForward es un compilador de cdigo abierto que incorpora un entorno de desarrollo y que pretende
ser altamente compatible con QuickBasic 4.5.
NewBasic es un proyecto para crear un compilador de Basic de cdigo abierto (open-source),
multiplataforma, orientado a objetos y compilado a Byte-Code (como Java).
B++ (o B-improved) tambin es un proyecto de Basic para Windows orientado a objetos.
SpeedBasic es un curioso proyecto con un entorno integrado, que permite crear programas visuales, y que
convierte los fuentes Basic a C++ para que luego puedan ser compilados con Visual C++ 6, MinGW o
Borland C++ 5.5
ExtremeBasic es un compilador para Windows y para Mac que incluye entorno de desarrollo y que permite
crear aplicaciones GUI (entornos grficos de usuario). La versin para Windows necesita el compilador de
C++ MinGW.
wxBasic es un compilador de Basic multiplataforma (Windows y Linux) que se apoya en las bibliotecas
wxWindows.
SmallBasic es un compilador sencillo con versiones para Windows, Dos, Linux y PalmOs.
La versin "Express" de Visual Basic 2005 parece poder descargarse libremente desde la pgina Web de
Microsoft, en msdn.microsoft.com/vstudio/express/vb/
No gratuitos:
QBasic era un intrprete de Basic en modo texto que vena incorporado en las ltimas versiones de MsDos.
QuickBasic era un compilador de Basic en modo texto para MsDos realizado por Microsoft. Hasta donde yo
s, no se contina su desarrollo ni se puede descargar (legalmente al menos) desde ningn sitio.
Visual Basic es un compilador de Basic para Windows, creado por Microsoft, visual, pensado para crear con
facilidad aplicaciones con interfaces grficas. No es gratuito. Tienes ms informacin en la pgina de
Microsoft: msdn.microsoft.com/vbasic.
TurboBasic es un compilador de Basic en modo texto para MsDos realizado por Borland. Hasta donde yo
s, no se contina su desarrollo ni se puede descargar (legalmente al menos) desde ningn sitio.
TrueBasic es un entorno creado por John G. Kemeny y Thomas E. Kurtz, los creadores originales del
lenguaje Basic en 1964. Hay versiones para Windows y Mac, pero la de libre descarga obliga a dejar de
trabajar con ella cada 15 minutos volver a entrar.
RealBasic es un compilador multiplataforma para Windows, Macintosh y Linux, con buena apariencia, pero
no es gratuito. Se puede descargar una versin demo.
iBasic es otro compilador no gratuito para Windows, con soporte para DirectX.
Otro no gratuito pero interesante es PowerBasic.
Tambin puedes echar un vistazo a PureBasic, que tiene versiones para Windows, Linux y AmigaOS.
SYMBOL
Los smbolos en nuestras rutinas, son palabras clave que identifican constantes, variables y direcciones en el
programa.
La asignacin del smbolo se realiza poniendo el comando symbol + nombre del smbolo y seguido de este
implementamos el signo igual (=). Posterior a estas lineas, agregamos la variable o constante.
Los smbolos pueden ser cualquier palabra que no sea la relativa a un comando.
Los smbolos pueden contener caracteres numricos (e.j.: ucontrol1, salida2, etc.) Pero el primer carcter no
puede ser uno numrico (e.j.: 1salida).
El uso de smbolos no aumentan la longitud del programa. osea, esta funcin no tiene peso alguno en lo que
refiere el programa. Por lo general, yo en mi caso, implemento este comdo para renombrar las entradas y
salidas del microcontrolador, osea, me ayuda a recordar cual es la funcin de cada salida a la hora de leer y o
modificar mi programa
Las direcciones del programa configuradas con el comando symbol, siempre tienen que ir sobre la primer
CONSTANTES
Las llamadas constantes, pueden ser creadas de manera similar a las variables. Puede que sea ms
conveniente usar un nombre para la constante en lugar de implementar un nmero constante. Si el nmero
necesita ser cambiado, nicamente puede ser cambiado en algn lugar del programa donde se define la
constante. Dentro de las constantes, no pueden guardarse datos variables.
Las constantes declaradas pueden ser de cuatro tipos: decimal, hexadecimal, binario y ASCII.
Los nmeros binarios de preceden del smbolo tanto por ciento (%).
VARIABLES
Veamos los tipos de variable segn el sistema, ya que estas varan en su aplicacin segn cada modelo de
programacin :
PICAXE
El sistema PICAXE da soporte a las siguientes variables:
Words: W0, W1, W2, W3, W4, W5, W6
Bytes: DIRS, PINS (solo PICAXE-08), INFRA, KEYVALUE
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13
Bits: PIN0, PIN1, PIN2, PIN3, PIN4, PIN5, PIN6, PIN7 (conjuntamente igual PINS)
BIT0, BIT1, BIT2, BIT3, BIT4, BIT4, BIT5, BIT6, BIT7 (conjuntamente igual B0)
BIT8, BIT9, BIT10, BIT11, BIT12, BIT13, BIT14, BIT15 (conjuntamente igual B1)
In/Out aade los pseudo nombres:
INPUT0, INPUT1, etc. puede usarse en lugar de PIN0, PIN1, tec.
OUTPUT0, OUTPUT1, etc. puede usarse en lugar de 0, 1, 2, etc.
BASIC
El modo BASIC da soporte a las siguientes variables:
Words: PORT
W0, W1, W2, W3, W4, W5, W6
GOSUB
Este comando, tiene como funcin saltar a la subrutina indicada en etiqueta, guardando su direccin de
regreso en la memoria pila (snack). 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.
Ejemplo:
inicio:
let b2 = 15
set b2 con valor 15
pause 2000
espera de 2 segundos
gosub flash
salta al procedimiento flash
let b2 = 5
set b2 con valor 5
pause 2000
espera de 2 segundos
gosub flash
salta al procedimiento flash
end
fin del programa
flash:
for b0 = 1 to b2 define el bucle con el valor b2
high 1
salida 1 a nivel alto
pause 500
espera de 0,5 segundos
low 1
salida 1 a nivel bajo
pause 500
espera de 0,5 segundos
next b0
fin de bucle
return
retorno a linea siguiente de la llamada
goto inicio
Dicho en otras palabras, cuando nosotros ejecutamos GOSUB, salta el programa a una etiqueta, y cuando
llega al comando RETURN, vuelve a la siguiente linea de donde partio con el comando GOSUB....
Como podemos ver en nuestro ejemplo (quiero imaginar que ya lo estn simulando); Al iniciarse el programa,
cuando la lectura ingresa en el contador (for b0 = 1 to 20), pre carga el valor 1 en un espacio de memoria
determinado (en este caso b0) y comienza un conteo que finalizara cuando llegue a 20.
En el caso de la rutina que ejemplifique, luego de pasar por la instruccin de comenzar con el contador, sigue
leyendo el resto de las lineas y ejecutando toda accin que conlleven en ellas (high1-pause-low1-pause)
hasta llegar a la linea donde dice "next b0". En esta linea, lo que hacemos, es decirle al contador que adicione
un entero en la memoria que alojamos el conteo (b0) y luego salta automticamente a la linea donde
comienza el contador (for b0 = 1 to 20) iniciando nuevamente toda la accin descrita anteriormente hasta
llegar a almacenar en la memoria el valor 20 (por que esa fue la instruccin que le dimos cuando le dijimos que
cuente de 1 a 20 con "for b0 = 1 to 20")... Ahora, notemos algo raro.... Cuando llega a 20, en ves de retornar
a la linea del contador, ahora sigue leyendo la siguiente linea. En este caso, la siguiente linea nos dice con el
comando PAUSE y GOTO, que debemos hacer un retardo y volver al programa u etiqueta "bucle".
Supuestamente, despus de esto, como el contador tenia registrado el valor 20, no tendria que seguir
contando... Bueno, pues le comento que no es asi, ya que al volver a reiniciarse el programa, el contador
vuelve a cero tambin.
Para el caso en que nosotros quisiramos que al llegar a determinado conteo, el programa termine, lo que
podramos hacer, es implementar la siguiente rutina:
bucle:
for b0 = 1 to 20
define el bucle con repeticin de 1 a 20
high 1
salida 1 a nivel alto
pause 500
espera de 0,5 segundos
low 1
salida 1 a nivel bajo
pause 500
espera de 0,5 segundos
next b0
fin de bucle
pause 2000
espera de 2 segundos
end
salta a bucle para comienzo de nuevo
HIGH
Este comando, es una accin que se implementa para poner a nivel alto (1 logico) un pin o mejor dicho puerto
de salida especifico del microcontrolador.
Dicho en otras palabras, empleamos este comando, para activar una salida...
LOW
Este comando es todo lo contrario al comando high, ya que coloca el pin de salida especificado en valor bajo (0
logico). Dicho en otras palabras, implementamos este comando para desactivar una salida...
Veamos como funcionan los comandos high y low en el siguiente ejemplo:
inicio:
high 1
pone salida 1 a nivel alto
pause 5000 espera de 5 segundos
low 1
pone la salida 1 a nivel bajo
pause 5000 espera de 5 segundos
goto inicio salta a comienzo de bucle repetitivo
INPUT
Este comando refiere a un puerto de entrada especifico; En cierta manera, convierte el numero de Pin
especificado en una entrada. Osea, no es que podemos configurar nuestros puerto como entradas y salidas; A
lo que me refiero, es que definimos en una linea, que accion queremos que adopte esa entrada definida.
Para definir nuestra entrada, se puede
implementar el
comando INPUT, o bien, podemos adoptar el
numero de
puerto (0 a 7 para el caso de los micros 18x) y
definirlo con un
sencillo IN antes del numero de puerto de
entrada (in7 /
input7)
Al definir el comando input en nuestro
programa,
automticamente, estamos mencionando que
vamos a
trabajar con seales digitales entrantes en un
puerto
definido... Cuando me refiero a seales
digitales, me
refiero a las seales que solo pueden estar en
dos estados...
Alto, o bajo (5vcc - ovcc / cerrado - abierto)
OUTPUT
Este comando refiere a un puerto de salida especifico;
En cierta
manera, convierte el numero de Pin especificado en
una salida. Osea,
como mencione anteriormente en input, no es que
podemos
configurar nuestros puerto como entradas y salidas; A
lo que me
refiero, es que definimos en una linea, que accin
queremos que
adopte esa salida definida. Para definir nuestra salida,
se puede
implementar el comando OUTPUT, o bien, podemos adoptar el numero de puerto (0 a 7 para el caso de los
micros 18x) y definir la accin o estado de este puerto (high 7 - low 7 / high output7 - low output7)
Para comprender un poco mejor lo que les explico, nuevamente, copiamos las siguientes lineas y las pegamos
en nuestro software para ver en el ejemplo, como funcionan las entradas y salidas de nuestro micro (notar que
en la versin 5.2 del software, se puede visualizar en un grafico los estados de los pines del microcontrolador):
inicio:
gosub i1
gosub i2
goto inicio
saltar al subprocedimiento i1
saltar al subprocedimiento i2
volver a la etiqueta inicio
i1:
if input1= 1 then salida7 si la entrada 1 es igual a uno, entonces ir a la etiqueta salida7
pause 500
retardo de 1/2 segundo
return
volver y seguir en la seguiente linea (en este caso gosub i2)
i2:
if in1 = 0 then salida6
pause 500
return
salida7:
high 7
low 6
pause 500
goto i2
salida6:
high output6
low output7
pause 500
goto inicio
Nota: en este ejemplo, cite ambas maneras e las que podemos definir u nombrar un puerto de entrada o
salida. Si ya han simulado esta rutina, vern que el software, las reconoce a ambas como lo mismo y no
genera ningn conflicto.
END
Este comando, tiene como objeto detener la ejecucin del proceso y el microcontrolador no se ejecuta mas
hasta que lo reiniciemos o bien, hasta que no le demos la instruccin manual de volver a comenzar con su
ciclo. Cuando el microcontrolador es detenido por el comando END, este entra en modo de bajo consumo. Otra
de las caracterstica de este comando, es que cuando se ejecuta esta instruccin, todos los pins de entrada y
salida, cuando la lectura de lineas llega a este comando, se congelan y permanecen en el estado en que se
encuentran(I/O).
Para ver mejor como funciona este comando, vamos a nuestro software programing editor, copiamos y
pegamos en el las siguientes lineas que sumo como ejemplo:
inicio:
let b2 = 5
pause 2000
gosub flash
let b2 = 3
pause 2000
gosub flash
end
flash:
for b0 = 1 to b2 define el bucle con el valor b2
high 1
salida 1 a nivel alto
pause 500
espera de 0,5 segundos
low 1
salida 1 a nivel bajo
pause 500
espera de 0,5 segundos
next b0
fin de bucle
return
retorno a linea siguiente de la llamada
ifthen
ifandthen
iforthen
Estos comandos son en si parte de una estructura de comparacin con salto a una direccin determinada
(siempre a una etiqueta), en el caso en que se cumpla la funcin asignada.
Las funciones que se pueden asignar a estas comparaciones son:
= (igual que)
>= (mayor o igual que)
> (mayor que)
< (menor que)
<= (menor o igual que)
<> (no es igual que)
& (funcin lgica AND)
or (funcin lgica OR)
entre otras, que veremos mas adelante dada su complejidad....
El principio basico de estos tres comandos, son la de establecer una pregunta (IF...)sobre el estado de un
puerto determinado, compara, lee el estado, evala en trminos de VERDADERO o FALSO y en el caso de ser
cierto, se ejecuta la operacin posterior al THEN (entonces...). Si lo considera falso, no se ejecuta la operacin
posterior al THEN y prosigue con la lectura de la siguiente linea.
Veamos lo que les menciono de la siguiente manera:
ifthen
if input 1 = 1 then action3
(traduciendo estos trminos, estamos diciendo que si la entrada 1 es igual a 1, entonces ir a la etiqueta
"action3")
ifandthen
if input 1 = 1 and input 0 = 1 then action3 (traduciendo estos trminos, estamos diciendo que si la entrada
1 es igual a 1 y la entrada 0 es igual a 1 , entonces ir a la etiqueta "action3")
iforthen
if input 1 = 1 or input 0 = 1 then action3
(traduciendo estos trminos, estamos diciendo que si la entrada 1 es igual a 1 o la entrada 0 es igual a 1 ,
osea, cualquiera de las dos entradas esta en estado alto, entonces ir a la etiqueta "action3")
Vamos hacerlo mas practico, y ejecutemos este ejemplo:
inicio:
if pin0 = 1 then flash
goto inicio
flash:
high 1
pause 5000
low 1
goto inicio
espera de 5 segundos
pone a valor bajo la salida 1
salto a inicio
PAUSE
Este comando, es implementado para generar retardos en los saltos entre lineas y ejecucin del cdigo del
programa. La especificacin del tiempo de retardo, esta dada en "mili-segundos", y esta especificacin del
tiempo, es de 16 bits, por lo que los retardos pueden ser de hasta 65635 mili-segundos (66 segundos).
Veamos un ejemplo practico:
inicio:
high 1
pause 5000
low 1
pause 5000
goto inicio
WAIT
Este comando, al igual que el anterior, es implementado para generar retardos en los saltos entre lineas y
ejecucin del cdigo del programa. La especificacin del tiempo de retardo, esta dada en "segundos" y puede
tener un mximo de 65 segundos, el cual, si implementamos un FOR...NEXT, claramente podemos ampliarlo a
mas tiempo....
Veamoslo mas practico en este ejemplo:
inicio:
high 7
wait 5
low 7
wait 5
goto inicio
RETURN
Este es un muy buen comando que si lo sabemos implementar, podemos hacer watch dog mas rpidos e
interesantes. En si, este comando tiene como funcin volver desde una subrutina, retomando la ejecucin en la
declaracin que sigue al GOSUB que llam la subrutina.
veamos un ejemplo sencillo en nuestro software:
inicio:
let b2 = 15
pause 2000
gosub flash
let b2 = 5
pause 2000
gosub flash
end
flash:
for b0 = 1 to b2 define el bucle para el tiempo de b2
high 1
pone la salida 1 a nivel alto
pause 500
espera 0,5 segundos
low 1
pone la salida 1 a nivel bajo
pause 500
espera 0,5 segundos
next b0
fin del bucle
return
vuelve a lnea siguiente de llamada
INFRAIN
Este comando se implementa para para esperar en el receptor una seal infrarrojo procedente del transmisor
IR.
Este comando, ademas de poder implementarlos en nuestros propios proyectos, podemos crear nuestros
propios controles remotos IR o bien repetidores IR para toda la gama de equipos de la marca SONY, ya que
implementa el mismo protocolo que esta compaa implementa en sus productos.
El comando en si, interactua en el programa esperando la seal infrarroja, y una ves recibida esta seal, el
valor de ella se almacena en la variable predefinida infra (es similar a b0,b1,etc , `pero de uso exclusivo para
este comando).
Veamos este ejemplo.... Si no tienen un control sony, no importa, podemos simularlo igualmente y cambiar los
valores desde la tabla de variables de la derecha...
Inicio:
infrain espera una nueva seal infrarroja
if infra = 1 then accion_on1 si el valor de infra es 1 salta a accion_on1
if infra = 2 then accion_on2 si el valor de infra es 1 salta a accion_on2
if infra = 3 then accion_on3 si el valor de infra es 1 salta a accion_on3
if infra = 4 then accion_off1 si el valor de infra es 1 salta a accion_off1
if infra = 5 then accion_off2 si el valor de infra es 1 salta a accion_off2
if infra = 6 then accion_off3 si el valor de infra es 1 salta a accion_off3
goto inicio
accion_on1:
high 1
goto inicio
accion_on2:
high 2
goto inicio
accion_on3:
high 3
goto inicio
accion_off1:
low1
goto inicio
accion_off2:
low2
goto inicio
accion_off3:
low3
goto inicio
READADC
Un sensor analgico, es capas de medir y proveer informacin codificada en voltajes variables. Esta seal
entrante en el puerto analgico del microcontrolador, puede ser representado por valores de 0 a 255 (por
ejemplo en el caso de una foto resistencia, podriamos decir que 0 es oscuro, y 255 luz intensa)...
Este comando, lo podemos implementar para convertir una seal analgica entrante en el puerto ADC del
microcontrolador, en digital con una resolucin de 8 bits. El dato obtenido de esta lectura convertida (A/D), es
almacenada en una variable (b0,b1,b2,bX,etc) que luego, ese dato puede ser empleado para cualquier
propsito
NOTA: cuando implementamos este comando, es muy importante a tener en cuenta, que si almacenamos el
dato en una variable tipo "b1", esta es almacenada con una resolucin de 8 bits... Si la almacenamos en una
variable tipo "w1", el dato es almacenado con una resolucin de 10 bits...
Veamos este sencillo ejemplo primero:
inicio:
readadc 1,b1
if b1 > 50 then flash
goto inicio
flash:
high 1
pause 5000
low 1
goto inicio
CONCLUSION
Aprend y entend que es el lenguaje Basic.
Aprend los varios tipos de comandos que existen para programar
en el lenguaje de BASIC.
Comprend que existen varios programas que derivan de el
lenguaje de BASIC pero tienen un propsito distinto al BASIC
original, en otras palabras esta programados para programar
para que compile un objeto distinto como el PICs.
BIBLIOGRAFIA
http://es.wikipedia.org/wiki/BASIC
http://www.ucontrol.com.ar/forosmf/picaxe/comandos-basic-de-programacion/
http://www.electronicaestudio.com/docs/09basic.pdf