Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Especificaciones de mikrobasic 1.1 Predefiniendo globales y constantes 1.2 Accesando a los bits individuales 1.3 Interrupciones 1.3a Llamando rutinas desde interrupciones 1.4 Rutinas construidas o predefinidas (built-in routines) 1.4a Rutinas Inc Dec Chr Ord SetBit ClearBit TestBit Lo Hi Higher Highest SizeOf Swap Clock_Khz Clock_Mhz Reset ClrWdt
2. Especificaciones del PIC 2.1. Tipos de Eficiencia 2.2.Limitaciones de Llamadas Anidadas 2.3.Especificaciones familia PIC16
3.
Referencia del Lenguaje mikroBasic. 3.1. Elementos lxicos 3.1a espacios en blanco 3.1b comentarios 3.1c tokens 3.1c.1 literales 3.1c.2 palabras clave 3.1c.3 identificadores. 3.1c.4 signos de puntuacin o separadores 3.2 Organizacin de Programa 3.2.a Organizacin del Programa 3.2.b Alcance y Visibilidad 3.2.c Mdulos 3.3 3.4 3.5 3.6 3.7 Variables Constantes Etiquetas Smbolos Funciones y Procedimientos 3.7.a Funciones 3.7.b Procedimientos
3.8 Tipos 3.8.a Tipos simples 3.8.b Arreglos 3.8.c Cadenas 3.8.d Punteros 3.8.e Estructuras 3.8.f Tipos de conversin 3.8.f.1 Conversin implcita 3.8.f.2 Conversin explicita 3.8.f.3 Conversin aritmtica
3.9 Operadores 3.9.a Precedencia y asociatividad 3.9.b Operadores aritmticos 3.9.c Operadores relacionales 3.9.d Operadores inteligentes 3.10 Expresiones 3.11 Declaraciones 3.11.a Declaraciones de asignacin 3.11.b declaraciones condicionales 3.11.b.1 Declaraciones IF 3.11.b.2 Declaraciones SELECT CASE 3.11.c Declaraciones de Iteracin (ciclos) 3.11.c.1 Declaracion FOR 3.11.c.2 Declaracion WHILE 3.11.c.3 Decalaracion DO 3.11.d Declaraciones de Saltos 3.11.d.1 Declaraciones BREAK y CONTINUE 3.11.d.2 Declaracion EXIT 3.11.d.3 Declaracion GOTO 3.11.d.4 Declaracion GOSUB 3.11.e Declaraciones ASM 3.12 Directivas 3.12.a Directivas del compilador 3.12.b Directivas del Linker
ACERCA DE
Dedicado: a la luz de mi vida Izzy y a mi futuro Bebe Motores de mi existencia
Este documento es la traduccin a veces interpretativa, a veces ayudada por programas traductores- de la ayuda de mikroBasic. Este documento no persigue ningn otro fin que no sea ayudar a los Aficionados al mundo de los PICS de habla hispana y del lenguaje tan prometedor como lo es mikroBasic. Este documento es gratuito y no tiene copyright solo los que mikroelektronika disponga en sus documentos-. Algunos errores interpretativos podrn encontrar, como un ejemplo de ello es ver delante de la traduccin los siguientes signos (?), esto es que no pude encontrar la manera correcta de interpretar o traducir el enunciado. Tambin podrn encontrar diferencias en la traduccin, como puede ser la palabra declaracin en lugar de usar la palabra sentencia. De alguna forma trate de hacer una traduccin lo mas cristalina posible, sin usar muchas interpretaciones aunque a veces fue necesario- o modismos de mi pas (Mxico). Creo yo que el documento es entendible y nos puede brindar un poco de ayuda para hacer mas fcil la interpretacin de las reglas, instrucciones y libreras del mikroBasic. Reitero que no manejo el lenguaje ingles al 100% y menos el lenguaje tcnico en ingles pero por la poca experiencia que tengo usando el mikroBasic trate de realizar este documento. La traduccin de la ayuda como marca en los encabezados de cada pgina la hice como un tributo al mejor foro de Microcontroladores de habla hispana: TODOPIC. Por lo tanto este documento pertenece al foro y a todos sus usuarios. Por mi parte este documento tiene licencia GPL al menos la traduccin- y puede ser modificada siempre y cuando se respete al autor original de la traduccin (en este caso navaismo) y se haga referencia al foro TODOPIC. Pues sin nada mas que decir, solo me resta desearles suerte en este viaje interminable hacia al mundo de los PICS y a la introduccin de un lenguaje en vas de desarrollo como lo es el BASIC para PICmicros. Gracias a TOD@S y en especial a mikroelektronika por su Software demo: mikroBasic
RUTINAS CONSTRUIDAS O PREDEFINIDAS (BUILT-IN ROUTINES) El compilador mikroBasic esta provisto de una serie til de rutinas predefinidas. Las rutinas predefinidas no requieren de nada especial; puede hacer uso de ellas en cualquier parte del proyecto. Algunas rutinas predefinidas estn implementadas como inline; por ejemplo: el cdigo se genera en el lugar de la llamada, para que la llamada no est contra el lmite de llamadas anidadas.
RUTINAS
Inc Dec Chr Ord SetBit ClearBit TestBit Lo Hi Higher Highest SizeOf Swap Clock_Khz
Requiere: Ejemplo
Requiere: Ejemplo :
Requiere: Ejemplo:
Requiere: Ejemplo:
Requiere: Ejemplo:
10
ClearBit Prototipo:
Regresa: Descripci n:
Requiere: Ejemplo:
Requiere: Ejemplo:
Requiere: Ejemplo:
11
Requiere: Ejemplo:
Requiere: Ejemplo:
12
Requiere Ejemplo:
13
Requiere: Ejemplo:
sub procedure ClrWdt Nada Este procedimiento es igual a la instruccin en ensamblador clrwdt Nada ClrWdt ' Limpia el WatchDogTimer del PIC
Optimizaci n de c digo La optimizacin ha sido aadida para extender la usabilidad del compilador, bajo la cantidad de cdigo generado y la velocidad de su ejecucin. Las principales caractersticas son: Plegado Constante Todas las expresiones pueden ser evaluadas al tiempo de la compilacin (por ejemplo una constante) son reemplazados por el resultado. (3+5--->8); La propagaci n de Constantes Cuando un valor constante est asignndose a cierta variable, el compilador reconoce esto y reemplaza el uso de la variable en el cdigo que sigue por la constante, con tal de que el valor de variable permanezca inalterado.
14
Enumeraci n de Valor El compilador "reconoce" si dos expresiones rinden el mismo resultado, y por consiguiente puede eliminar el cmputo entero para uno de ellos. Eliminaci n de c digo Muerto El cdigo que ya no es usado en ninguna parte del programa, y que no afecta el resultado final de la aplicacin. Es automticamente removido. Asignaci n de la Pila Los registros temporales ("Pilas") se usan ms racionalmente, permitiendo expresiones MUY complejas para ser evaluadas con el consumo mnimo de la pila. Optimizaci n de Variables locales Ninguna variable local se usa si su resultado no afecta algunas de las variables globales o voltiles. Mejor Generaci n de c digo y Optimizaci n local La Generacin de cdigo es ms Consistente, y Mucha ms atencin se ha implementado para solucionar especficamente la construccin del cdigo, para reducir el tamao de cdigo generado. Especificaciones del PIC Para conseguir el mejor rendimiento del compilador MikroBasic, usted debe estar familiarizado con ciertos aspectos del PICmicro. Estos conocimientos no son esenciales, pero pueden ayudar a entender mejor las posibilidades y limitaciones del PIC, y su impacto en el la escritura del cdigo. Tipos de Eficiencia Primero que nada, debe saber que la ALU del PIC, quien realiza las operaciones aritmticas, esta optimizada para trabajar con Bytes. Aunque MikroBasic es capaz de trabajar con tipos de datos muy complejos, el PIC puede chocar con estos, especialmente si esta trabajando con modelos muy viejos. Esto puede aumentar dramticamente el tiempo necesario para realizar hasta una simple operacin. Un consejo universal es usar el tipo ms pequeo posible en cada situacin. Esto aplica en general para toda la programacin, y doblemente para los Microcontroladores. Conozca su herramienta, Cuando haga clculos, no todos los PIC tienen el mismo rendimiento. Por ejemplo, la Familia PIC16 no tiene Hardware para multiplicar 2 bytes, pero se compensa con un algoritmo por software. Por otro lado, la familia PIC18 tiene un hardware multiplicador, y por ende la multiplicacin trabaja considerablemente ms rpido.
15
16
some_string = "mikro foo" analiza 4 tokens, incluyendo la cadena simple del token:
some_string = "mikro foo" newline character
17
TOKENS Un Token es el elemento mas pequeo en BASIC que es significativo para el compilador, El analizador separa los Tokens de la entrada creando un Token mas largo usando los caracteres de izquierda a derecha. MikroBasic reconoce los siguientes tipos de Tokens: Palabras Clave Identificadores Constantes Operadores Signos de puntuacin (tambin conocidos como Separadores) Ejemplo de tokens Aqu hay un ejemplo de extraccin de Tokens. Veamos el siguiente cdigo: end_flag = 0 El compilador analizara los siguientes 4 tokens: end_flag ' identificador de la variable = ' operador de asignacion 0 ' literal newline ' termino de la declaracin Note que end_flag ser analizado como un identificador, no como la palabra clave end seguida de _flag.
18
19
20
absolute abs and array asm begin boolean case char chr clear const dim div do double else end exit float for function goto gosub
21
if include in int integer interrupt is loop label mod module new next not or org print procedure program read select sub step string switch 22
Mikrobasic tambin incluye un numero predefinido de identificadores usados en las libreras. Puede remplazar estos por sus propias definiciones usted planea hacer sus propias libreras. Para mas informacin vea libreras de Mikrobasic.
Identificadores.
Los identificadores son nombres arbitrarios de cualquier longitud dados a Funciones, variables, Constantes simblicas, tipos de datos por definidos por el usuario y etiquetas. Todos estos elementos de programa son relacionados con objetos a travs de la ayuda. ( no se confunda con el termino objeto de la programacin orientada a objetos). may sculas o Min sculas Basic no es sensible a las maysculas o a las minsculas, por lo tanto Sum, sum y suM son identificadores equivalentes. Singularidad y Alcance Aunque los nombres del identificador son arbitrarios (dentro de las reglas declaradas), los errores resultan si el mismo nombre se usa para ms de un identificador dentro del mismo alcance. Simplemente, los nombres dobles son ilegales dentro del mismo alcance. Para ms informacin, refirase al Alcance y Visibilidad.
23
Ejemplos de Identificadores:
temperature_V1 Pressure no_hit dat2string SUM3 _vtext
24
Dos Puntos Los dos puntos (:) son usados para declara una Etiqueta:
25
Organizaci n del Programa MikroBasic tiene una estricta organizacin de programa impuesta, debajo encontrara modelos para una escritura legible de cdigo. Para mas informacin de la inclusin de archivos y alcance vea Mdulos y tambin Alcance y visibilidad. Organizaci n del Modulo Principal Bsicamente, el cdigo fuente tiene dos secciones: declaraciones y el cuerpo del programa. Las declaraciones deben ir en la parte apropiada del cdigo, organizadas de manera ordenada, de otro forma el compilador no ser capaz de comprender el programa correctamente. Cuando escriba el cdigo, siga el modelo que se presenta de bajo. El modulo principal deber lucir de la siguiente manera:
program <nombre del programa> include <incluir otros mdulos> '******************************************************** '* Declaraciones Globales: '******************************************************** ' Declaraciones simblicas symbol ... ' declaracin de constantes const ... 'declaracin de Variables dim ... ' declaracin de procedimientos sub procedure nombre del procedimiento(...) <Declaraciones locales> ... end sub
26
27
El identificador es declarado dentro de una funcin o de un Procedimiento El identificador es declarado en la seccin de interfase de un Modulo
El Identificador fue declarado en la secci n de implementaci n de un modulo, pero no dentro de una funci n o procedimiento.
28
VISIBILIDAD La visibilidad de un identificador es la regin del programa del cdigo fuente donde puede hacerse el acceso legal al objeto asociado al identificador. El alcance y la visibilidad generalmente coinciden, aunque hay circunstancias en la que un objeto se vuelve oculto temporalmente por el aparente duplicado del identificador. El objeto aun existe pero el identificador no puede ser usado para ser accesado hasta que el alcance del identificador duplicado termine. Tcnicamente, la visibilidad no puede exceder al alcance, pero el alcance puede exceder la visibilidad. MODULOS En mikroBasic cada proyecto consiste en un nico archivo de proyecto, y uno o mas archivos de mdulos. El archivo proyecto con extensin .pbp contiene informacin acerca del proyecto, mientras que los mdulos con extensin .pbas contienen el cdigo fuente. Vea Organizacin de programa para ver detalladamente el arreglo de un programa.
Los mdulos permiten: Separar programas extensos en mdulos encapsulados que pueden ser accesados y editados individualmente. Crear libreras que pueden ser usadas en diferentes proyectos. Distribuir libreras a otros programadores sin incluir el cdigo fuente. Cada modulo es guardado como su propio archivo y compilado por separado, los mdulos compilados son encadenados para crear una aplicacin. Para crear un proyecto el compilador necesita cada archivo fuente o el modulo compilado de cada modulo. Clusula INCLUDE MikroBasic incluye los mdulos que tengan la clusula include, la cual consiste en la palabra reservada include seguida de el nombre del modulo entrecomillado. La extensin del archivo no debe ser incluida. Puede incluir un solo archivo por cada clusula include . Puede haber cualquier numero de clusulas include en cada cdigo fuente, Pero ellos deben declararse inmediatamente despus del nombre del programa. Por ejemplo:
29
Si ambos .mcl y .pbas son encontrados, el compilador verificara las fechas e incluir el mas reciente en el proyecto. Si el archivo .pbas es mas nuevo que el archivo .mcl, la nueva librera sobrescribir la vieja Si solo el archivo .pbas es encontrado, el compilador generara el archivo .mcl y lo incluir en el proyecto. Si solo se encuentra el archivo .mcl y no hay cdigo fuente, el archivo .mcl se incluir en el proyecto tal como se encuentra. Si ninguno es encontrado, el compilador emitir file not found (Archivo no encontrado) como una advertencia. MODULO PRINCIPAL (MAIN) Cada proyecto en mikrobasic requiere de un nico modulo principal (main) el modulo principal es identificado por la palabra reservada program al inicio; esto sirve para que el compilador sepa por donde empezar. Despus de que haya creado un nuevo proyecto con el asistente de proyecto, el editor de cdigo desplegara un nuevo modulo principal, el cual contiene partes de un programa. program MyProject ' main procedure main: ' Place program code here end. Nada que no sea un comentario debe ir precedido por la palabra reservada program despus del nombre del programa usted puede incluir opcionalmente las clusulas include Ponga todas las declaraciones globales (constantes, variables, etiquetas, rutinas) antes de la etiqueta main
30
SECCION DE IMPLEMENTACION La seccin de implementacin esconde todas las entraas irrelevantes de otros mdulos, permitiendo as el encapsulado del cdigo. Cualquier declaracin debajo de la palabra reservada implementes es privada. Es decir tiene un alcance limitado al archivo. Cuando declare un identificador en la seccin de implementacin de un modulo, no podr usarlo fuera de ese modulo, pero puede usarlo en cualquier rutina o bloque definido dentro del modulo. Poniendo el prototipo en la seccin de interfase (arriba de la seccin de implementacin) puede hacer una rutina publica. Es decir visible fuera del modulo. El prototipo debe coincidir exactamente con la declaracin.
VARIABLES Una variable es un objeto cuyo valor puede ser cambiado durante el tiempo de ejecucin. Cada variable debe ser declarada bajo un nico nombre de identificador valido. Este nombre es usado para acceder al lugar de la memoria que ocupa la variable. Cada variable es declarada en la seccin de declaracin de cualquier archivo o rutina, cada variable debe ser declarada antes de ser usada. Las variables Globales (aquellas que no estn
31
32
ETIQUETAS Las etiquetas sirven como objetivos para las declaraciones goto y gosub. Marque las etiquetas de seadas con el nombre que desee y dos puntos, as: Nombre_de_etiqueta: declaraciones No se necesitan declaraciones especiales para las etiquetas en mikroBasic. El nombre de la etiqueta necesita ser un nombre de identificador valido, las declaraciones etiqueta das y las declaraciones goto, gosub deben estar en el mismo bloque. No es posible saltar hacia una funcin o un procedimiento, No establezca una misma etiqueta para dos identificadores dife rentes. Aqu hay un ejemplo de un ciclo infinito que llama al procedimiento beep repetidamente: loop: Beep goto loop SIMBOLOS En Basic los smbolos permiten crear macros sin necesidad de parmetros. Puede reemplazar cualquier lnea de cdigo por un identificador alias. Cuando los smbolos son usados correctamente pueden incrementar la usabilidad y la legibilidad del cdigo. Los smbolos necesitan ser declarados inmediatamente despus del inicio del modulo, justo des pus del nombre del modulo y opcionalmente de las clusulas incluye. Vea organizacin de progra ma para mas detalles. El alcance de un smbolo esta siempre limitado al archivo en el cual fue de clarado. Un Smbolo es declarado as: symbol alias = code
33
FUNCIONES Y PROCEDIMIENTOS Las funciones y los procedimientos, colectivamente se refieren a las rutinas, son subprogramas (auto-contenidos en bloques de declaraciones) los cuales realizan una tarea especifica de acuerdo al numero de entradas y parmetros. Una funcin regresa un parmetro cuando esta es finalizada, un procedimiento no lo hace. NOTA: Vea especificaciones PIC para mas informacin de la limitaciones de las rutinas de los PIC micros. FUNCIONES Las funciones son declaradas as: sub function nombre de la funcin(lista de parmetros) as tipo que regre sa [ declaraciones locales] Cuerpo de la funcin end sub El nombre de la function representa el nombre de un identificador valido. El tipo que regresa, es el tipo del valor regresado por la funcin y puede ser de tipo simple. Dentro de los parntesis, la lista de parmetros, son los parmetros formales similares a la declaracin de variables. En mikrobasic,
34
35
TIPOS Basic es un lenguaje estrictamente tipificado(se refiere a los tipos de datos), lo que significa que cada variable o constante necesita tener un tipo estricto de dato conocido para el momento de la compilacin.
36
Tipo byte char* word short integer longint float 8bit 8bit 16bit 8bit 16bit 32bit 32bit
Tama o
Rango 0 255 0 255 0 65535 -128 127 -32768 32767 -2147483648 2147483647 1.17549435082 * 10-38 .. 6.80564774407 * 1038
*El tipo de dato char puede ser tratado com una variable byte en cualquier aspecto. Puede asignar signos a los tipos de datos usando la conversin explicita. Vea tipos de conversio nes para mas informacin. ARREGLOS Un arreglo representa una serie de electos indexados del mismo tipo (llamados tipo de base). Como cada elemento contiene su propio indice, los arreglos pueden contener significativamente mas de una vez el mismo valor.
37
Arreglos Multidimensionales Los arreglos de una dimension son del tipo escalable, muchas veces un arreglo de una dimension es conocido tambien como un vector. Un arreglo multidimensional es construido por un arreglo de arreglos de una dimension. Y son alo jados en un espacio de memoria donde puedan ser accesados fcilmente. Es decir los arreglos son alojados en filas. Aqu hay un ejemplo de un arreglo bidimensional: dim m as byte[50][20] arreglo bidimensional de tamao 50x20
38
msg1 = msg2 ' esto esta bien, pero viceversa seria un error
Alternativamente puede manejar elemento por elemento de la cadena, por ejemplo:
39
' Prepare message for output msg = "Result is" + ' Texto "Result is" Chr(13) + ' aplicar un enter Chr(10) + ' aplicar un linefeed res_txt + ' resultado del adc "." ' aplicar un punto '... NOTA: mikroBasic incluye la libreria String la cual automatiza las tareas arriba realizadas.
40
41
Por ejemplo, las siguientes declaraciones forman una estructura llamada Dot: structure Dot dim x as float dim y as float end structure Cada Dot contiene 2 miembros: coordenadas x y y; el espacio de memoria es alojado cuando usa la estructura. Asi por ejemplo: dim m, n as Dot La declaracion de las variables crea dos instancias de la estructura DOT, llamadas m y n. Un miembro puede estar previamente definido en una estructura, por ejemplo: ' estructura definiendo un circulo: structure Circle dim radius as float dim center as Dot end structure Acceso a los miembros de las estructuras Puede acceder a los miembros de las estructuras usando un punto (.) y el nombre del selector del miembro; Si hemos declarado circle1 y circle2 de una estructura circle: dim circle1, circle2 as Circle Podemos acceder a sus miembros de forma individual de la siguiente manera: circle1.radius = 3.7 circle1.center.x = 0 circle1.center.y = 0 Tambien puede hacer asignaciones entre variables complejas, siempre y cuando las variables sean del mismo tipo. circle2 = circle1 ' esto copiara todos los valores de todos los miembros
42
Los bytes mas altos de un operando sin signo son llenados con ceros. Los bytes mas altos de un operando con signo son llenados con signos bit (si el numero es negativo, llenara los bytes mas altos con uno(1), cualquier otra forma los llenara con ceros (0) ). Por ejemplo: dim dim ... a = b = a as byte b as word $FF a ' a es promovido a word, b se vuelve $00FF
43
Conversi n Explicita La conversin explicita puede ser usada en cualquier punto del programa usando las palabras reservadas byte, word, short, integer, longint, o float delante de la expresin a ser convertida. La expresin debera estar encerrada entre parntesis. La conversin explicita solo puede ser usada en el operando a la derecha del operador declarado. Una conversin especial es aquella entre tipos con y sin signo. La conversin explicita entre datos con signo y sin signo no cambiara la representacin binaria del dato solamente se copia al destino. Por ejemplo: dim dim ... b = a = a as byte b as short -1 byte(b) ' a es 255, no 1
' esto es porque la representacion binaria es ' 11111111; Simplemente es interpretado de otra manera ahora No puede ejecutar la conversin explicita con el operando a la izquierda del operador declarado. word(b) = a ' Compiler will report an error
Ejemplos de conversions dim dim ... a = b = c a, b, c as byte cc as word 241 128 = a + b ' igual 113
44
Conversiones Aritmticas Cuando usa una expresin aritmetica, como a+b, donde a y b son tipos de datos diferentes, mikroBasic realiza la conversin implicita de los tipos antes de ser evaluados. Estas conversiones incluyen la promocion o cambio de los tipos mas bajoa a los tipos mas altos, con interes en la exactitud y la consistencia. Asignando un objeto con signo tipo carcter (como una variable) a un objeto integral el resultado automticamente estara signado. Los objetos de tipo short siempre usan una extensin signada; los objetos de tipo byte siempre ponen en cero el byte mas alto cuando son convertidos a int. Convertir un entero largo (long int) a un tipo corto (short) siempre se truncan los bits mas altos, dejando intactos los bits mas bajos. Conviertiendo un tipo corto a un tipo largo con el signo extendido o llenando con ceros los bits extras del nuevo valor. Dependiendo si el dato corto esta signado o no, respectivamente. NOTA: la conversin de datos de tipo flotante a un valor entero (en asignaciones via tipo de dato explicito) produce los resultados correctos si el valor del tipo flotante no excede el alcance del tipo de dato del destino. A detalle: Aqu estan los pasos que mikrobasic usa para convertir los operandos en expresiones aritmeticas: Primero, cualquier dato pequeo es convertido de acuerdo a las siguientes reglas: 1. 2. 3. 4. byte se convierte a integer short se convierte a integer, con el mismo valor short se convierte a integer, con el mismo valor, con signo extendido byte se convierte a integer, con el mismo valor, rellenado con ceros
El resultado de la expresin es el mismo tipo que la de los 2 operandos. Aqu unos ejemplos de la conversin implicita: 2 + 3.1 5 / 4 * 3. 3. * 5 / 4 ' 2. + 3.1 5.1 ' (5/4)*3. 1*3. 1.*3. 3. ' (3.*5)/4 (3.*5.)/4 15./4 15./4. 3.75
45
Operadores, Precedencia y Asociatividad. Hay 4 categorias de precedencia en mikroBasic. Los operadores que estan en la misma categora tienen la misma precedencia uno con otro. Cada categora tiene reglas de asociatividad: izquierda a derecha (), o de derecha a izquierda (). En la ausencia de parntesis, estas reglas resuelven la agrupacin con expresin de la misma categora.
Precedencia 4 3 2 1
Operandos 1 2 2 2
Operadores @ * + = not + / div mod and << >> - or xor <> < > <= >=
Asociatividad
OPERADORES ARITMETICOS Los operadores aritmeticos son usados para realizar computos matematicos, estos tienen operadores numericos y regresan un valor numerico. Como los operadores char bsicamente son operadores byte pueden ser usados como operadores aritmeticos sin signo. Los operadores necesitan ser ambos con signo o ambos sin signo. Todos los operadores aritmticos se asocian de izquierda a derecha.
Operador + * /
Operandos byte, short, integer, word, longint, float byte, short, integer, word, longint, float byte, short, integer, word, float byte, short, integer,
Resultado byte, short, integer, word, longint, float byte, short, integer, word, longint, float integer, word, lon gint, float byte, short, integer, 46
div mod
tante division, redondeo al entero mas cercano modulo, regresa el resto de la division de un entero(no pue de ser usada con va lores flotantes.)
word, float byte, short, integer, word, longint, float byte, short, integer, word, longint
word, float byte, short, integer, word, longint byte, short, integer, word, longint
Division por cero Si 0 (cero) es usado como el segundo operando (por ejemplo, x div 0) el compilador generara un error y no generara el codigo. Pero en el caso de una division implicita por ejemplo x div y donde y es igual a 0 el resultado sera el maximo valor para el tipo de dato apropiado. (por ejemplo si x y y son tipo Word el resultado sera $FFFF). Operadores aritmeticos unarios. El operador (menos) puede ser uado como el prefijo unario de un operando, para cambiar el signo de un valor. El operador unario mas (+) tambien puede ser usado pero no afecta al dato. Por ejemplo: b := -a; OPERADORES RELACIONALES Use los operadores relacionales para probar igualdades o desigualdades de las expresiones. Todos los operadores regresan TRUE (verdadero) o FALSE (falso).
Operator = <> > < >= <= Igual Diferente Mayor que Menor que Mayor igual Menor igual
Operation
47
OPERADORES INTELIGENTES Use los operadores inteligentes para cambiar los bits individuales de los operandos numericos. Los operandos necesitan ser signados o sin signo, ambos. Los operadores inteligentes se relacionan de izquierda a derecha. La unica excepcion se aplica al operador inteligente not, que se relaciona de derecha a izquierda. Resumen de los operadores inteligentes.
Operacin AND inteligente; compara pares de bits y genera 1 si ambos son uno de otro modo genera un 0 OR (inclusiva) inteligente; compara pares de bits y genera un 1 si el resultado es 1, de otra forma genera 0 OR exclusiva (XOR); compara pares de bits y gene ra un 1 si el resulatdo de ambos es complementario, de otra forma regresa 0 Complemento (unario); invierte cada bit Corrimiento a la izquierda; mueve los bits a la iz quierda, descarta el bit izquierda mas lejano y asig na 0 al bit de la derecha. Corrimiento a la derecha; mueve los bits hacia la de recha, descarta el bit de la derecha mas lejano y si no tiene signo lo asigna con 0 al bit de la izquierda, de otro modo el signo se extiende
48
0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1
Los operadores inteligentes and, or y xor realizan operaciones logicas con los respectivos pares de bits de los operandos. El operador not complemente cada bit del operando. Por ejemplo: $1234 and $5678 ' igual a $1230 ' porque .. ' $1234 : 0001 0010 0011 0100 ' $5678 : 0101 0110 0111 1000 ' ---------------------------' and : 0001 0010 0011 0000 ' .. esto es, $1230 ' similarmente: $1234 or $5678 $1234 xor $5678 not $1234 Conversiones sin signo Si un numero es convertido de un tipo menos complejo a uno mas complejo, los bits mas altos seran rellenados con ceros. Si un numero es convertido de un tipo masa complejo a uno menos complejo los bits mas altos se perderan. Por ejemplo: dim dim ... a b a as byte b as word = $AA = $F0F0 ' igual a $567C ' igual a $444C ' igual a $EDCB
49
Conversiones con signo Si un numero es convertido de un tipo menos complejo a uno mas complejo. Los bits mas altos son llenados con unos si el bit de signo es 1 ( si es negativo); los bits mas altos son llenados con ceros si el bit de signo es 0 (si es positivo). Si un numero es convertido de un tipo masa complejo a uno menos complejo, los bits mas altos se perderan. Por ejemplo: dim dim ... a b b a as byte b as word = -12 = $70FF = b and a
' a se extiende con signo, los bytes mas altos seran $FF; ' b se vuelve $70F4 Operadores de corrimiento Los operadores binarios << y >> mueven los bits del operando izquierdo, especificados por un numero en el operando derecho, ya sea a la izquierda o a la derecha. El operando derecho debe ser positivo y menor que 255. Con el corrimiento a la izquierda (<<) los bits mas izquierdos son descartados, y los nuevos bits son llenados con ceros. Hacer el corrimiento a la izquierda de un operando sin signo n posiciones es equivalente a multiplicarlo por 2n si todos los bits descartados son cero. Esto tambien es verdadero para los operandos con signo, si todos los bits descartados son iguales el bit de signo. Con el corrimiento a la derecha (>>) los bits mas derechos son descartados, y los bits de la izquierda son rellenados con ceros (en caso de que sea un operando sin signo) o el valor del bit de signo (en caso de que este sea un valor con signo). Hacer el corrimiento a la derecha n posiciones es equivalente a dividirlo por 2n. EXPRESIONES Una expresin son una serie de declaraciones, operandos, operadores y puntuaciones que retornan un valor. Las expresiones primarias incluyen: literales, constantes, variables y llamadas a funciones. Apartir de esto, usando operadores se pueden crear expresiones mas complejas. Formalmente las expresiones son definidas recursivamente: las subexpresiones pueden aadirse al limite de la memoria.
50
DECLARACIONES Las declaraciones definien la manera en que actuan los algoritmos dentro de un programa. Cada declaracion necesita estar determinada por una nueva linea de carcter (enter). La declaracion mas simple incluye asignacines, llamadas de rutinas y saltos a otras declaraciones. Esto puede ser usado para crear ciclos, saltos, y otras declaraciones estructuradas. En la ausencia de saltos y seleccin de declaracines, las declaraciones seran ejecutadas de manera secuencial tal como estan escritas en el codigo fuente. Vea: Declaraciones de asignacin Declaraciones condicionales Declaraciones de iteracin (ciclos) Declaraciones de saltos Declaraciones de lenguaje Ensamblador (ASM).
Declaraciones de asignaci n Las declaraciones de asignacin tiene la siguiente forma: variable = expresin la declaracion evalua la expresin y le asigna el valor de la variable. Todas las reglas de la conversin implicita se aplican. Variable puede ser declarada como una variable o como un arreglo y expresin puede ser cualquier expresin. No confunda el asignamiento con el operador relacional igual (=), que prueba una igualdad. Mikrobasic interpretara el signo igual (=) dentro de su contexto.
51
select case selector case valor_1 declaraciones_1 ... case valor_n declaraciones_n [case else Declaraciones _default] end select
52
Primero el selctor es evaluado, despus se compara con la lista de valores disponibles case valor, si un valor es encontrado, el programa seguira en las declaraciones del valor encontrado. En le caso de multiples valores encontrados el programa hara uno a uno empezando por el primer valor encontrado. Si ningun valor es encontrado seguira en las declaraciones default. Aqu un ejemplo simple: select case operator case "*" res = n1 * n2 case "/" res = n1 / n2 case "+" res = n1 + n2 case "-" res = n1 - n2 case else res = 0 cnt = cnt + 1
end select
Tambien puede agrupar valores para un caso. Simplemente separe los valores por comas: select case reg case 0 opmode = 0 case 1,2,3,4 opmode = 1 case 5,6,7 opmode = 2 end select Declaraciones case anidadas Note que las declaraciones case pueden ser anidadas, los valores son asignados al mas profundo select case .
53
next contador
El contador es una variable que se incrementa segn el valor del paso con cada iteracin del ciclo. El parmetro valor de paso es un valor entero opcional y si este es omitido el valor por defecto es 1, antes de la primera iteracin, el valor del contador es puesto al valor inicial y se incrementa mientras no exceda o no llegue al valor final, con cada iteracin las declaraciones son ejecutadas. Los valores iniciales y finales deben ser valores compatibles con el contador; las declaraciones pueden ser cualquier tipo de declaraciones siempre y cuando no afecten el valor del contador. Note que el valor de paso puede ser un valor negativo, permitiendole hacer cuentas regresivas. Aqu un ejemplo de cmo calcular el producto escalar de 2 vectores a y b, de longitud n usando la sentencia FOR: S = 0 for i = 0 to n s = s + a[i] * b[i]
next i
Ciclo infinito La sentencia for puede resultar un ciclo infinito si el valor final es igual o excede el rango del tipo de dato del contador Por ejemplo, esto resultara un ciclo infinito ya que el contador nunca alcanzara el valor 300:
54
55
56
next i
La sentencia continue en ciclos while mueve el programa a la primer linea de la condicion (arriba) continue salta aqui while condition ... continue ...
wend
La sentencia continue en ciclos Do, mueve el programa a la linea de la condicion (abajo) do ... continue ... ' continue salta aqui
Declaraciones EXIT La sentencia exit le permite romper una rutina ( una funcion o un procedimiento). Pasa el control a la siguiente expresin de la llamada de la rutina. Aqu un simple ejemplo: sub procedure Proc1() dim error as byte ... ' Aqui se hace algo if error = TRUE then exit
57
Declaracion GOSUB Use la sentencia gosub para un salto sin condiciones a cualquier etiqueta para mas informacin vea Etiquetas-. La sintaxis de un gosub es: gosub nombre de la etiqueta ...
58
Declaraciones ASM mikroBasic permite el codigo embebido ASM, usando la sentencia asm. Note que no puede usar numeros ni direcciones en codigo ensamblador. Puede usar nombres simbolicos en lugar de eso (la lista desplegara los nombres en lugar de las direcciones). Puede agrupar instrucciones en ensamblador usando la sentecia asm: asm bloque de declaraciones en ensamblador end asm Los comentarios de Basic no son permitodas en las sentencias de bloques asm, en lugar de eso tendra que usar los comentarios del ensamblador usando punto y coma (;) Si planea usar una variable de Basic en su codigo asm, asegurese de que tenga un valor inicial, de otro modo el compilador reportara un error y no compilara el programa. Esto no aplica para las globlales predefinidas como PORTB. Por ejemplo el compilador reportara un error, ya que el linker no es capaz de reconocer la variable myvar: program test dim myvar as word main: asm MOVLW 10 MOVLW test_main_global_myvar_1 end asm end.
59
DIRECTIVAS
Las directivas son palabras de especial importancia que proporcionan funcinalidad adicional con respecto a la compilacin y el rendimiento. Tiene las siguientes directivas a su disposicin: Directivas de compilacin, para una compilacin condicional Directivas del Linker, para distribuir objetos en la memoria. Directivas de compilaci n o del compilador Toda linea en el codigo que comienze con el numeral (#) es tomada como una directiva del compilador el numeral inicial puede ser precedido o seguido de espacios en blanco, pero no nuevas lineas. Las directivas del compilador no diferencian entre mayusculas o minusculas Puede usar las directivas de compilacin para ejecutar ciertas partes del codigo y excluir otras. Todas las directivas deben ser completadas en el archivo donde se empezaron. Directivas #DEFINE y #UNDEFINE Use la directiva #DEFINE para definir una constante condicional del compilador (una bandera o flag). Puede usar un identificador para esa bandera, sin ninguna restriccin. No hay conflictos con el programa y sus identificadores, cuando las directivas tienen un nombre espaciado. Solo una bandera puede ser registrada por directiva. Por ejemplo: #DEFINE extended_format
60
61
62
ADC Library CAN Library CANSPI Library Compact Flash Library EEPROM Library Ethernet Library SPI Ethernet Library Flash Memory Library Graphic LCD Library T6963C Graphic LCD Library IC Library Keypad Library LCD Library LCD8 Library Manchester Code Library Multi Media Card Library OneWire Library PS/2 Library PWM Library
63
RS-485 Library Secure Digital Library Software IC Library Software SPI Library Software UART Library Sound Library SPI GLCD Library SPI Library USART Library USB HID Library Util Library SPI Graphic LCD Library Port Expander Library Conversions Library Delays Library Math Library String Library
Vea tambien rutinas predefinidas.
64