guÍa de referencia rÁpida a mikrobasic -...

40
GUÍA DE REFERENCIA RÁPIDA A mikroBasic

Upload: dotuyen

Post on 19-Feb-2018

222 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

GUÍA DE REFERENCIA RÁPIDA AmikroBasic

Page 2: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

ESTIMADOS CLIENTES,Querría darles las gracias por estar interesados en nuestros productos y por tenerconfianza en MikroElektronika. Nuestro objetivo es proporcionarles con los productos de la mejor calidad. Además,seguimos mejorando nuestros rendimientos para responder a sus necesidades.

Nebojsa MaticDirector general

Page 3: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

3

La guía referente proporciona definiciones formales de los elementos léxicos del lengua-je de programación mikroBasic. Estos elementos son pareciados a las unidades recono-cidas por mikroBasic. Cada programa escrito en mikroBasic consiste en las secuenciasde los caracteres ASCII tales como letras, dígitos y signos especiales. Los signos noimprimibles (por ejemplo: carácter nueva línea, tabulador, etc) se refieren a los signosespeciales también. El conjunto de los elementos básicos en mikroBasic es organizadoy limitado. El programa se escribe en un editor de texto tal como mikroBasic Code Edi-tor. Durante el proceso de compilación se realiza el análisis sintáctico (parsing). El pars-er debe identificar los tokens de forma que el código fuente es tokenizado, es decir,reducido a tokens y espacios en blanco (whitespace).

Espacio en blancoEl espacio en blanco (whitespace) es el nombre genérico dado a los espacios (en blanco),tabuladores horizontales y verticales y nueva línea. Los espacios en blanco se utilizancomo separadores para indicar donde empiezan y terminan los tokens. Por ejemplo, lasdos secuencias:

y

son léxicamente equivalentes y el resultado del análisis son los ocho tokens siguientes

Espacio en blanco en las cadenas literalesCuando el espacio en blanco está dentro de una cadena literal no se utiliza como sepa-rador, sino que se interpreta como un carácter común, esto es, como una parte de unasola cadena. Por ejemplo, la siguiente cadena:

se descompone en cuatro tokens, con tal de que la cadena literal represente un token:

dim tmp as bytedim j as word

dim tmp as bytedim j as word

dim tmpasbytedimjasword

Visión general de los elementos léxicos

some_string = "mikro foo"

some_string="mikro foo"newline character

Page 4: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

4

TokensEl token es el elemento más pequeño del lenguaje de programación Basic reconocidopor el compilador. El código fuente es escaneado de izquierda a derecha. El analizadorsintáctico (parser) extrae los tokens, seleccionando el que coincida con la secuencia decaracteres más larga posible dentro de la secuencia analizada.

Palabras claveLas palabras clave o reservadas son los tokens que tienen el significado fijo y no sepueden utilizar como identificadores. Aparte da las palabras clave estándar enmicroBasic hay un conjunto de los identificadores predefinidos (de constantes y de vari-ables) que describen el microcontrolador específico y no pueden ser redefinidos. Listaalfabética de las palabras clave en Basic. absolute and appactivate array as asc asm at atn attribute base bdata beep bit boolean byref byte call case cbool cbyte ccur cdate cdate cdbl char chdir chdrive chr cint circle class clear clng close code command compact compare const createobject csng

cstr curdir currency cvar cverr data date dateadd datediff datepart dateserial datevalue ddb deftype dim dir div do doevents double each eio empty end end with environ eof eqv erase err error exit explicit explicit fileattr fileattr filecopy filedatetime filelen fix float for

form format forward freefile function fv get getattr getobject gosub goto hex hour idata if iif ilevel imp implements include input instr int integer io ipmt irr is isarray isdate isempty iserror ismissing isnull isnumeric isobject kill large lbound lcase left len

let line loc lock lof long longint longword loop lset me mid minute mirr mkdir mod module month msgbox name new next not not nothing now nper npv object oct on open option option option or org orgallpdata pmt ppmt print

private procedure program property pset public put pv qbcolor raise randomize rate redim register rem resume return rgb right rmdir rnd rset rx sbit second seek select sendkeys set setattr sfr sgn shell short single sln small space spc sqr static step

stop str strcomp strconv string structure sub switch syd symbol system tab time timer timeserial timevalue to typedef typename ubound ucase unlock until val variant vartype version volatile weekday wend while width with word write xdata xor

Page 5: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

5

ComentariosLos comentarios son anotaciones utilizadas para interpretar el programa. Son para usoexclusivo del programador. Se eliminan del código fuente antes del análisis sintáctico.Los comentarios en mikroBasic deben ocupar sólo una línea. Para escribir comentariosse utiliza el apóstrofo.

Además, los bloques de instrucciones en ensamblador pueden introducir los comentar-ios unilíneas al colocar el signo ‘;’ delante del comentario.

IdentificadoresLos identificadores son los nombres arbitrarios utilizados para identificar los objetosbásicos del lenguaje: etiquetas, tipos, símbolos, constantes, variables, procedimientos yfunciones. Los identificadores pueden contener todas las letras mayúsculas y minúscu-las del abecedario (a a z, y A a Z), el guión bajo "_", y los dígitos 0 a 9. El primer carác-ter debe ser una letra o el guión bajo. mikroBasic no distingue mayúsculas y minúscu-las, así que Sum, sum y suM representan identificadores equivalentes. Aunque los nom-bres de identificadores son arbitrarios (de acuerdo con las reglas fijas), ocurre un errorsi se utiliza el mismo nombre para más de un identificador dentro del mismo ámbito.Ejemplos de identificadores válidos:

y de identificadores inválidos:

' Any text between an apostrophe and the end of the' line constitutes a comment. May span one line only.

asmsome_asm ; This assembly instruction …

end asm

temperatura_V1Pritisakno_hitdat2stringSUM3_vtext

7temp // NO -- no puede empezar por un numeral %higher // NO -- no puede contener los caracteres especialesxor // NO -- no puede coincidir con las palabras reservadasj23.07.04 // NO -- no puede contener los caracteres especiales(dot)

Page 6: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

6

LiteralesLos literales son tokens que representan valores fijos y numéricos o valores de carac-teres. El tipo de dato correspondiente a una constante es deducido por el compilador enbase a indicios implícitos, como el valor numérico y formato usados en el código fuente.

Constantes literales enterasLas constantes literales enteras pueden estar expresadas en los formatos decimal, octalo hexadecimal.

� En el formato decimal las constantes enteras se representan como una secuenciade dígitos con el prefijo opcional + o - (no están delimitados por coma, espacio enblanco o puntos). Si no se especifica el prefijo, el valor de la constante se considerapositivo. Por ejemplo, el número 6258 equivale a +6258.

� Las constantes con el prefijo ‘$’ o ‘0x’ se consideran números hexadecimales. Por ejemplo, $8F o 0x8F

� Las constantes con el prefijo ‘%’ se consideran números binarios. Por ejemplo, %01010101.

Ejemplos de las constantes literales:

El rango permitido de los valores de constantes es determinado por el tipo longint paralas constantes con signo (signed) y por el tipo longword para las constantes sin signo(unsigned).

Constantes literales de punto flotante (fraccionarias)Las constantes literales de punto flotante consisten en:

� Parte entera;� Punto decimal;� Parte fraccionaria; y� e/E y un entero con signo (exponente)

Ejemplos de las constantes de punto flotante:

11 ' literal decimal $11 ' literal hexadecimal, equivale a literal decimal 17 0x11 ' literal hexadecimal, equivale a literal decimal 17%11 ' literal binario, equivale a literal decimal 3

0. // = 0.0-1.23 // = -1.2323.45e6 // = 23.45 * 10^62e-5 // = 2.0 * 10^-53E+10 // = 3.0 * 10^10.09E34 // = 0.09 * 10^34

Page 7: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

7

Literales carácterUn literal carácter es una secuencia de caracteres ASCII delimitados por comillas sim-ples. Un literal carácter puede ser asignado a variables de tipos entero y cadena, a unamatriz de caracteres y a una matriz de bytes. A una variable de tipo entero se le asig-nará el valor ASCII del literal carácter correspondiente. Cadenas literales (alfanuméricas)Una cadena literal representa una secuencia de caracteres ASCII escritos en una líneaentre comillas dobles. Como hemos mencionado, una cadena literal puede contenerespacio en blanco, esto es, el parser no descompone las cadenas literales en tokens,sino que las interpreta como una totalidad. La longitud de una cadana literal depende delnúmero de caracteres en los que consiste. Al final de cada cadena literal se añade uncarácter nulo (null), llamado el ASCII cero, que no cuenta en la longitud total de la cade-na literal. Una cadena literal que no contiene ningún signo entre comillas (cadena nula)se almacena como un solo carácter nulo. Las cadenas literales se pueden asignar a vari-ables de tipo cadena, a una matriz de caracteres o a una matriz de bytes. Ejemplos de cadenas literales:

PuntuadoresLos puntuadores utilizados en mikroBasic (conocidos como separadores) son:� [ ] - corchetes� ( ) - paréntesis� , - coma� ; - punto y coma (sólo en las sentenias ASM)� : - dos puntos� . - punto

CorchetesLos corchetes indican índices de matrices uni y multi dimensionales:

ParéntesisLos paréntesis ( ) sirven para agrupar expresiones, aislar expresiones condicionales,indicar llamadas a funciones y declaraciones de éstas:

"Hola mundo!" ' mensaje de 11 caracteres"La temperatura es estable" ' mensaje de 25 caracteres" " ' dos espacios de 2 caracteres"C" ' letra C de 1 carácter"" ' cadena nula de 0 caracteres

dim abecedario as byte [30]' ...abecedario [2] = "c"

d = c * (a + b) ' modifica la precedencia normalif (d = z) then ... ' expresión condicionalfunc() ' llamada a función, sin parámetrossub function func2(dim n as word) ' declaración de función, con parámetros

Page 8: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

8

ComaLa coma ‘,’ se utiliza para separar los parámetros en las llamadas a función, los identi-ficadores en las declaraciones y los elementos del inicializador:

Punto y coma El punto y coma indica el inicio de un comentario en los bloques en ensamblador.

Dos puntosDos puntos ‘:’ se utilizan para indicar una etiqueta en el programa:

PuntoEl punto ‘.’ se utiliza para acceder a un miembro de estructura y a los bits particularesde registros. Por ejemplo:

Como los demás lenguajes de programación, mikroBasic proporciona un conjunto dereglas estrictamente definidas que se utilizan al escribir el programa. En otras palabras,todos los programas escritos en mikroBasic tienen una estructura definida y organizada.A continuación se muestran los ejemplos de escribir los ficheros de programa. Cadaproyecto en mikroBasic consiste en un fichero de proyecto y en uno o más módulos(ficheros con extensión .mbas). El fichero de proyecto proporciona las informaciones delproyecto, mientras que los módulos contienen el fuente de programa.

Módulo principalCada proyecto en mikroBasic requiere un solo módulo principal (main modul). Aquel módulose identifica por la palabra clave program que está al principio del módulo y da instuccionesal compilador de dónde debe iniciar el proceso de compilación. Después de crear un proyec-to con éxito en Project Wizard, Code Editor visualizará automáticamente el módulo prin-cipal. Code Editor contiene la estructura básica de un programa escrito en mikroBasic.Aparte de comentarios, nada debe preceder a la palabra clave program. La cláusulainclude se puede colocar después del nombre de programa. Todos los identificadoresglobales (de constantes, variables, etiquetas, rutinas) se declaran delante de la palabraclave main.

Lcd_Out(1, 1, txt)dim i, j, k as wordconst MESES as byte [12] = (31,28,31,30,31,30,31,31,30,31,30,31)

start: nopgoto start

nombre.apellido = "Smith"

Organización de programa

Page 9: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

9

Organización del módulo principal El módulo principal se puede dividir en dos partes: declaraciones y el cuerpo de progra-ma. Las declaraciones deben estar organizadas y colocadas en el código apropiada-mente. Al contrario, el compilador no puede interpretar el programa correctamente. Paraesribir el código es recomendable seguir el ejemplo a continuación.

Otros módulosOtros módulos permiten:

� descomponer los programas largos en las partes encapsuladas que se pueden editar por separado;

� crear librerías que se pueden utilizar en los proyectos diferentes; y � distribuir librerías a otros programadores sin revelar el código fuente.

programa <nombre_de_programa>include <incluir_otros_módulos>

'********************************************************'* Declaraciones globales:'********************************************************

' declaraciones de símbolossymbol ...

' declaraciones de constantesconst ...

' declaraciones de variablesdim ...

' deklaraciones de procedimientossub procedure procedure_name(...)

<declaraciones_locales>...

end sub

' declariciones de funcionessub function function_name(...)

<declaraciones_locales>...

end sub'********************************************************'* Cuerpo de programa:'********************************************************

main:' escriba el código aquí

end.

Page 10: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

10

Cada módulo se almacena en su propio fichero y se compila por separado. Los módu-los compilados se enlazan juntos con el propósito de crear un código ejecutable. Paracompilar un proyecto el compilador tiene que disponer de todos los módulos ya sean losficheros de código fuente o ficheros de objetos (ficheros creados por medio de la com-pilación de módulos). Todos los módulos empiezan por la palabra clave modul. Apartede los comentarios nada debe preceder a la palabra clave modul. La cláusula includese puede colocar después del nombre de módulo. Organización de otros módulosCada módulo consiste en tres secciones: Include, Interface e Implementation. Sólo lasección Implementation es obligatoria. Siga el modelo a continuación:

module <nombre_de_módulo>include <incluir_otros_módulos>

'********************************************************'* Interface (variables_globales):'********************************************************

' declaraciones de símbolossymbol ...

' declaraciones de constantesconst ...

' declaraciones de variablesdim ...

' prototipos de procedimientossub procedure procedure_name(...)

' prototipos de funcionessub function function_name(...)

'********************************************************'* Implementation:'********************************************************

implements

' declaraciones de constantesconst ...

' declaraciones de variablesdim ...

' declaraciones de procedimientossub procedure procedure_name (...)

<declaraciones_locales>...

end sub

' declaraciones de funcionessub function function_name(...)

<declaraciones_locales>...

end sub

end.

Page 11: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

11

Cláusula IncludemikroBasic incluye los módulos por medio de la cláusula include. Consiste en la palabrareservada include y el nombre de módulo entre comillas. El nombre del módulo noincluye la extensión. Un módulo incluye varias cláusulas include que deben estar colo-cadas inmediatamente después del nombre de módulo. Por ejemplo:

Después de llegar al nombre de módulo, el compilador comprueba si el proyecto con-tiene ficheros con el nombre dado y las extensiones .mcl y .mbas, de acuerdo con elorden y la ubicación especificados en la opción Search Paths.

� Si el compilador encuentra los dos ficheros con las extensiones .mbas y .mcl, comprobará sus fechas e incluirá el fichero de la fecha más reciente en el proyecto. Si elfichero de la extensión .mbas es de la fecha más reciente, el compilador lo recompilará y generará el nuevo fichero .mcl al copiar el antiguo;

� Si el compilador sólo encuentra el fichero de la extensión .mbas, el compilador lo recompilará y generará el fichero de la extensión .mcl;

� Si encuentra el fichero de la extensión .mcl, el compilador lo incluirá en el formato dado;

� Si no encuentra ningún fichero, el compilador informa acerca del error

Sección InterfaceLa sección Interface es la sección del módulo que precede a la palabra clave imple-ments. Esta sección contiene declaraciones globales (de constantes, variables y símbo-los) para el proyecto dado. En ella no se pueden definir rutinas. Esta sección contienelas declaraciones de rutinas (definidas en la sección Implementation) que deben servisibles fuera del módulo. Las declaraciones de rutinas deben corresponder completa-mente a las definiciones de éstas.

Sección ImplementationSección Implementation contiene las declaraciones y definiciones privadas de las ruti-nas. Esta sección permite encapsular el código. Todo lo que se declara después de lapalabra clave implements es para el uso privado, es decir, el ámbito está limitado aaquel módulo. Cualquier identificador declarado en esta sección del módulo no se puedeutilizar fuera del módulo, sino sólo en las rutinas definidas después de la declaración delidentificador dado.

program MyProgram

include "utils"include "strings"include "MyUnit"...

Page 12: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

12

Ámbito y visibilidad

Ámbito (scope)El ámbito de un identificador representa la sección de programa en la que se puede uti-lizar el identificador. Hay varias categorías del ámbito lo que depende de cómo y dóndese declaran los identificadores:

VisibilidadSimilar al ámbito, la visibilidad representa la sección de programa en la que se puedeutilizar el identificador dado. Ámbito y visibilidad coinciden generalmente, si bien puedendarse circunstancias en que un objeto puede aparecer invisible temporalmente debido ala presencia de un identificador duplicado. El objeto existe, pero el identificador originalno puede ser utilizado para accederlo hasta que el identificador duplicado es terminado. La visibilidad no puede exceder al ámbito, pero éste puede exceder a la visibilidad.

Ubicación de declaración Ámbito El identificador se declara en la sección de declaración del módulo principal, fuera de cualquier función o procedimiento

El ámbito se extiende desde el punto de declaración hasta el final del fichero, incluyendo todas las rutinas dentro del ámbito.

El identificador se declara en la función o en el procedimiento

El ámbito se extiende desde el punto de declaración hasta el final de la rutina. Estos identificadores se denominan locales.

El identificador se declara en la sección Interface del módulo

El ámbito se extiende desde el punto de declaración hasta el final del módulo. Incluye otros módulos o programas que utilizan ese módulo. La única excepción son los símbolos cuyo ámbito está limitado al fichero en el que se declaran.

El identificador se declara en la sección Implementation, pero no se declara dentro de culaquier función o procedimiento

El ámbito se extiende desde el punto de declaración hasta el final del módulo. El identificador está disponible a cualquier función o procedimiento definidos debajo de la declaración del identificador.

Page 13: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

13

mikroBasic es estrictamente un lenguaje de tipo, lo que significa que cada variable oconstante son de tipo definido antes de que se inicie el proceso de compilar. Al compro-bar el tipo no es posible asignar o acceder incorrectamente a objetos. mikroBasic soporta los tipos de datos estándar (predefinidos) tales como son los tiposenteros con signo o sin signo de varios tamańos, matrices, cadenas, punteros etc.Además, el usuario puede definir un nuevo tipo de datos al utilizar la directiva typedef.Por ejemplo:

Tipos simplesLos tipos simples son los tipos que no se pueden descomponer en los elementos másbásicos. En la tabla a continuación se muestran los tipos simples en mikroBasic:

Tipos

Typedef MyType1 as byteTypedef MyType2 as integerTypedef MyType3 as ^wordTypedef MyType4 as ^MyType1

dim mynumber as MyType2

* tipo char se puede interpretar como el tipo byte en todos los aspectos

Tipo Tamaño Rango

byte 8–bit 0 – 255

char* 8–bit 0 – 255

word 16–bit 0 – 65535

short 8–bit -128 – 127

integer 16–bit -32768 – 32767

longint 32–bit -2147483648 – 2147483647

longword 32-bit 0-4294967295

float 32–bit ±1.17549435082 * 10-38

.. ±6.80564774407 * 1038

Page 14: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

14

MatricesUna matriz representa un conjunto ordenado y limitado que contiene una serie de vari-ables del mismo tipo, los elementos de la matriz. El tipo de elemento se denomina tipobásico. Al valor de un elemento se le puede acceder por su índice que es único paracada elemento, así que los elementos diferentes pueden contener el mismo valor.

Declaración de matricesLas matrices se declaran de la siguiente manera:

Cada elemento de una matriz está numerado de 0 a array_lenght -1. El especificadorelement_type representa el tipo de elementos de matriz (tipo básico). A cada elementode matriz se le puede acceder al especificar el nombre de matriz seguido por el índicede elementos entre corchetes. Por ejemplo:

Matrices constantesUna matriz constante se inicializa al asignarle una secuencia de valores delimitados porcomas entre paréntesis. Por ejemplo:

El número de los valores asignados no debe exceder a la longitud especificada dematriz, pero puede ser menor. En este caso, a los demás elementos se les asignarán losceros hasta llegar a la longitud total.

dim weekdays as byte [7]dim samples as word [50]

main:' A los elementos de variables de matriz se les puede acceder de la sigu-

iente manerasamples [0] = 1if samples [37] = 0 then

...

' Declarar una matriz constante que contiene el número de días en cadames:const MONTHS as byte [12] = (31,28,31,30,31,30,31,31,30,31,30,31)' Declaración de una matriz de constantes bidimensional: const NUMBER s byte [4][4] = ((0, 1, 2, 3), (5, 6, 7, 8), (9, 10, 11, 12), (13, 14, 15, 16))

element_type [array_lenght]

Page 15: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

15

Matrices multidimensionalesUna matriz es unidimensional si es de tipo escalar. A veces las matrices unidimension-ales se denominan vectores. Las matrices multidimensionales se crean al declarar matri-ces de tipo matriz. El ejemplo de una matriz bidimensional:

La variable m representa una matriz de 50 elementos. Cada uno representa una nuevamatriz de los elementos de tipo byte. Así se crea una matriz de 50x20 elementos. Elprimer elemento es m[0][0], mientras que el último es m[49][19]. Si una matriz es unparámetro de función, se pasa por su dirección como en el siguiente ejemplo:

CadenasUna cadena representa un conjunto de caracteres equivalente a una matriz de tipo char. Se declara de la siguiente manera:

El especificador string_name representa el nombre de la cadena y debe ser un identi-ficador válido. El especificador string_length representa el número de caracteres en lasque consiste la cadena. Al final de cada cadena se añade un carácter nulo (null), llama-do el ASCII cero, que no cuenta en la longitud total de la cadena. Una cadena nula ('')representa una matriz que contiene sólo un caracter nulo. Las cadenas se pueden asignar a las variables de tipo cadena, a la matriz de caracteresy a la matriz de bytes. Por ejemplo:

dim m as byte [50][20] 'matriz bidimensional de tamańo 50x20

sub procedure example(dim byref m as byte [50][20]) ...inc(m [1][1])end subdim m as byte [50][20] 'matriz bidimensional de tamańo 50x20 dim n as byte [4][2][7] 'matriz tridimensional de tamańo 4x2x7 main:...func(m)end.

string [string_length]

dim poruka1 as string [20]dim poruka2 as string [19]main:msg1 = "Esto es el primer mensaje"msg2 = "Esto es el segundo mensaje"msg1 = msg2

Page 16: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

16

A una cadena se le puede acceder elemento por elemento. Por ejemplo:

Empalme de cadenasmikroBasic permite empalmar las cadenas por medio del operador más (+). Este tipo de con-catenación se puede aplicar a las variables de cadena, cadenas literales, variables cáracter yliterales carácter. Los caracteres no imprimidos se pueden representar por medio del operadorChr y el número que es el código ASCII del carácter no imprimido correspondiente (Chr (13)para CR). Por ejemplo:

mikroBasic contiene la librería String que facilita operaciones con cadenas.

dim s as string [5]...s = "mik"' s [0] es el literal de caracteres "m"' s [1] es el literal de caracteres "i"' s [2] es el literal de caracteres "k"' s [3] es cero (carácter nulo)' s [4] es indefinido ' s [5] es indefinido

dim mensaje as string [100]dim res_txt as string [5]dim res, channel as wordmain:res = Adc_Read(channel) ' Resultado de la conversión AD WordToStr(res, res_txt) ' Crear una cadena del resultado númerico' Preparar el mensaje de salidamensaje = "Result is" + ' Texto "Resultado es"

Chr(13) + ' Ańadir la secuencia CR/LFChr(10) + ' Ańadir la secuencia LFres_txt + ' Resultado de la conversión AD "." ' Ańadir un punto

Page 17: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

17

PunterosUn puntero es una variable cuyo fin específico es almacenar direcciones de memoria deobjetos. Una variable accede directamente a la dirección de memoria mientras que elpuntero representa una referencia a la dirección. Para declarar un puntero, es necesarioańadir el prefijo (^) delante del tipo. Por ejemplo, para declarar un puntero a un objetode tipo integer es necesario escribir:

Para acceder al dato almacenado en la locación de memoria a la que apunta un pun-tero, es necesario ańadir el sufijo (^) al final del nombre de la variable. Por ejemplo,vamos a declarar la variable p que apunta a un objeto de tipo word, y luego vamos aasignarle al objeto el valor 5:

Un puntero se puede asignar al otro puntero, después de que los dos apuntarán a lamisma locación de memoria. Al modificar el objeto al que apunta un puntero, será mod-ificado automáticamente el objeto al que apunta otro puntero, porque se trata de lamisma locación de memoria.

Operador @ Operador @ devuelve la dirección de una variable o una rutina, es decir, dirige al pun-tero a su operando. Las siguientes reglas se aplican al operador@:

� Si X es una variable, @X devuelve la dirección de X;

Si la variable X es de tipo array, el operador @ devolverá el puntero a su primer elemen-to básico, excepto en el caso de que la parte izquierda de la expresión en la que se uti-liza X sea el puntero a la matriz. En este caso, el operador @ devolverá el puntero a lamatriz, y no a su primer elemento básico.

� Si F es una rutina (función o un procedimiento), @F devuelve el puntero a F.

^integer

dim p as word...p = 5

typedef array_type as byte[10]

dim w as wordptr_b as ^byteptr_arr as array_typearr as byte[10]

main:ptr_b = @arr ' @ operador devuelve ^bytew = @arr ' @ operador devuelve ^byteptr_arr = @arr ' @ operador devuelve ^byte[10]

end.

Page 18: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

18

Puntero a funciónmikroBasic permite el uso de los punteros a función. Este ejemplo muestra cómo definir yutilizar un puntero a función. Primero vamos a definir el tipo procedural y el puntero a fun-ción y por fin vamos llamar a función utilizando un puntero.

' Definición de tipo proceduraltypedef TMyFunctionType = function (dim param1, param2 as byte, dim param3 as word) as word

dim MyPtr as TMyFunctionType ' Puntero al tipo procedural previamente definidodim sample as word

' Definición de función ' Prototipo de función debe corresponder a la definición de tipo proceduralsub function Func1(dim p1, p2 as byte, dim p3 as word) as word 'result = p1 and p2 or p3 ' devuelve el valor

end sub

sub function Func2(dim abc, def as byte, dim ghi as word) as word result = abc * def + ghi ' devuelve el valor

end sub

sub function Func3(dim first, yellow as byte, dim monday as word) as word 'result = monday - yellow - first ' devuelve el valor

end sub

' programa principal:main:' MyPtr ahora apunta a Func1MyPtr = @Func1

' Llamar a función Func1 mediante punteroSample = MyPtr (1, 2, 3)

' MyPtr ahora apunta a Func2MyPtr = @Func2

' Llamar a función Func2 mediante punteroSample = MyPtr (1, 2, 3)

' MyPtr ahora apunta a Func3MyPtr = @Func3

' Llamar a función Func3 mediante punteroSample = MyPtr (1, 2, 3)

end.

Page 19: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

19

EstructurasLas estructuras representan un conjunto heterogéneo de elementos. Cada elemento sedenomina el miembro. En la declaración de estructuras se especifica el nombre y el tipode cada miembro. La síntaxis de la estructura es la siguiente:

donde el especificador structname representa el nombre de estructura y debe ser elidentificador válido; los especificadores member1..membern representan uno o másmiembros de la estructura que deben ser identificadores válidos, mientras que losespecificadores type1.. typen representan los tipos de los miembros de estructura cor-respondientes. El ámbito de un identificador de miembros está limitado a la estructuraen la que está, así que no hace falta tener en cuenta la coincidencia de los nombres delos identificadores de miembros y las demás variables. En mikroBasic la estructura sepuede declarar sólo como un tipo nuevo. Por ejemplo, en la siguiente declaración escreada la estructura denominada Dot:

Cada Dot contiene dos miembros: las coordenadas x y y. La memoria se asigna aldefinir el objeto de tipo de estructura como en el siguiente ejemplo:

Mediante esta declaración son creados dos ejemplos de la estructura Dot, denominados m yn. La estructura previamente definida puede ser el miembro de otra estructura Por ejemplo:

Acceso a miembros de estructuraA los miembros de estructura se les puede acceder mediante el operador punto ‘.’. Sideclaramos las variables circle1 y circle2 del tipo previamente definido Circle:

a sus miembros individules se les puede acceder de la siguiente manera:

structure structnamedim member1 as type1...dim membern as typen

end structure

structure Dotdim x as floatdim y as float

end structure

dim m, n as Dot

' Estructura que define un círculo:structure Circle

dim radius as floatdim center as Dot

end structure

dim circle1, circle2 as Circle

circle1.radius = 3.7circle1.center.x = 0circle1.center.y = 0

Page 20: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

20

La conversión de un objeto de un tipo definido es el proceso de cambiar su tipo en otro. mikroBasic soporta las conversiones implícita y explícita de tipos básicos.

Conversión implícitaEl compilador realizará la conversión implícita en los siguientes casos:

� si una sentencia requiere una expresión de tipo particular, y se utiliza la expresión de tipo diferente;

� si un operador requiere un operando de tipo particular, y se utiliza un operando de tipo diferente;� si una función requiere un parametro formal de tipo particular, y se le pasa el objeto de tipo diferente;� si el resultado de una función no corresponde al tipo del valor devuelto.

PromociónCuando los operandos son de tipos diferentes, mediante la conversión implícita se real-iza la promoción de tipo más bajo a tipo más alto, de la siguiente manera:

bit � byte/charbyte/char� wordshort � integershort � longintinteger � longintintegral � float word � longword

Los bytes más altos del operando sin signo extendido se llenan de ceros. Los bytes másaltos del operando con signo extendido se llenan del signo de bit. Si el número es nega-tivo, los bytes más altos se llenan de ceros, al contrario se llenan de ceros. Por ejemplo:

RecorteEn las sentencias de asignación y en las sentencias que requieren una expresión de tipoparticular, el valor correcto será almacenado en el destino sólo si el resultado de expre-sión no excede al rango del destino. Al contrario, si el resultado de la expresión excedeal rango del destino los bytes más altos se pierden.

Conversión de tipos

dim a as bytedim b as word...a = $FFb = a ' promoción de a a word, de b a $00FF

dim i as bytedim j as word...j = $FF0Fi = j ' i obtiene el valor $0F, byte más alto $FF se pierde

Page 21: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

21

Conversión explícitaLa conversión explícita se puede realizar en cualquier expresión al especificar el tipodeseado (byte, word, short, integer, longint, longword o float) delante de la expre-sión que será convertida. La expresión debe estar entre paréntesis. Un caso especial esconversión entre los tipos con signo y sin signo. La conversión explícita de estos tiposde datos no cambia la representación binaria de los datos. Por ejemplo:

La conversión explícita no se puede realizar en el operando que está a la izquierda del oper-ador de asignación:

Ejemplo de la conversión:

dim a as bytedim b as short...b = -1a = byte(b) ' a is 255, not 1

' El dato se queda en la representación binaria 11111111' pero el compilador la interpreta de la manera diferente

dim a, b, c as bytedim cc as word...a = 241b = 128

c = a + b ' es igual a 113c = word(a + b) ' es igual a 369cc = a + b ' es igual a 369

word(b) = a Compilador informa acerca de un error

Nota: Conversión de datos de punto flotante en datos integrales (en las sentencias de asignacióno mediante conversión explícita - typecasting) produce el resultado correcto sólo si el valor depunto flotante no excede al ámbito de destino de tipo integral.

Page 22: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

22

Las variables son los objetos cuyo valor se puede modificar en tiempo de ejecución. Cadavariable se declara bajo el nombre único que debe ser el identificador válido. Las variablesse pueden declarar en la sección de declaración de ficheros y rutinas. Cada varaible sedebe declarar antes de ser utilizada en el programa. Las variables globales (las que son vis-ibles en todos los ficheros) se declaran en la sección de declaración del módulo principal.Es necesario especificar el tipo de dato de cada variable. La síntaxis básica de ladeclaración de variables es la siguiente:

El especificador identifier_list representa una lista de identificadores de variables sep-arados por comas; el especificador type representa su tipo. mikroBasic permite utilizarla versión reducida de la síntaxis que contiene sólo la palabra clave dim seguida por lasdeclaraciones de variables múltiples. Por ejemplo:

Las constantes son los objetos cuyos valores se han definido en el momento de escribirel código de programa, y no pueden ser modificados más tarde en tiempo de ejecución.Las constantes no se almacenan en la memoria RAM. Las constantes se declaran en lasección de declaración de ficheros y rutinas. La síntaxis es:

Cada constante se declara bajo el nombre único (especificador constant_name) quedebe ser el identificador válido. Los nombres de constantes se escriben normalmente enmayúsculas. Al declarar una constante es necesario especificar su valor que corre-sponde al tipo dado. No es obligatorio especificar el tipo. En ausencia de tipo el compi-lador supone un tipo simple con el mínimo ámbito que corresponda al valor de con-stante. MikroBasic permite utilizar una versión reducida de la síntaxis que contiene sólola palabra clave const seguida por las declaraciones de constantes múltiples. Por ejem-plo:

Variables

dim identifier_list as type

dim i, j, k as byte counter, temp as wordsamples as longint [100]

Constantes

const constant_name [as type] = value

const MAX as longint = 10000MIN = 1000 ' compilador supone el tipo wordSWITCH = "n" ' compilador supone el tipo char MSG = "Hello" ' compilador supone el tipo string MONTHS as byte [12] = (31,28,31,30,31,30,31,31,30,31,30,31)

Page 23: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

23

Las etiquetas sirven como objetivos para las sentencias goto y gosub. Marque la sen-tencia con la etiqueta como en el siguiente ejemplo:

Las declaraciones de etiquetas no son obligatorias en mikroBasic. El nombre de la eti-queta debe ser el identificador válido. La sentencia marcada así como las sentenciasgoto/gosub deben pertenecer al mismo bloque. Por lo tento no es posible saltar a unprocedimiento o a una función o de ellos. Una etiqueta se puede declarar sólo una vezdentro del mismo bloque. Ejemplo del bucle infinito que llama al procedimiento Beep repetidamente:

Los símbolos en Basic permiten crear los macros simples sin parámetros. Cualquierlínea de código se puede reemplazar por un identificador. Los símbolos pueden aumen-tar legibilidad y reutilización de código cuando se utilizan correctamente. Los símbolosdeben ser declarados al principio del módulo, bajo el nombre del módulo y la directiva(opcional) include.

Los símbolos no se almacenan en la memoria RAM - el compilador reemplaza cada sím-bolo por la línea de código apropiada de la declaración. Por ejemplo:

Etiquetas

label_identifier : statement

loop: Beepgoto loop

Símbolos

symbol alias = code

symbol MAXALLOWED = 216 'Símbolo como alias para el valor numéricosymbol PORT = PORTC 'Símbolo como alias para los SFR symbol MYDELAY = Delay_ms(1000)'Símbolo como alias para llamar a procedimientodim cnt as byte 'Alguna variable'...main:if cnt > MAXALLOWED then

cnt = 0PORT.1 = 0MYDELAY

end if

Page 24: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

24

Las funciones y los procedimientos, denominados bajo el nombre común rutinas, sonlos subprogramas que ejecutan ciertas tareas a base de un número de los parámetrosde entrada. Las funciones devuelven el valor después de la ejecución, mientras que losprocedimientos no devuelven el valor. mikroBasic no soporta las rutinas inline.FuncionesLas funciones se declaran de la siguiente manera:

El especificador function_name representa el nombre de función y puede ser cualquieridentificador válido. El especificador parameter_list entre paréntesis es la lista de losparámetros formales que se declaran de la manera similar a las variables. Para pasarun parámetro a función por dirección se debe introducir la palabra clave byref al princi-pio de la declaración del parámetro. Las declaraciones locales son las declaracionesopcionales de variables, constantes y etiquetas y se refieren sólo a la función dada. Elcuerpo de función representa una secuencia de sentencias que se ejecutarán despuésde llamar a función. El especificador return_type representa el tipo de valor devuelto de función que puedeser de tipo complejo. El ejemplo a continuación muestra cómo se define y utiliza funciónque devuelve el tipo complejo.

structure TCircle ' Structuredim CenterX, CenterY as worddim Radius as byte

end structure

dim MyCircle as TCircle ' Global variable

' DefineCircle function returns a Structuresub function DefineCircle(dim x, y as word, dim r as byte) as TCircle result.CenterX = xresult.CenterY = yresult.Radius = r

end sub

main:' Get a Structure via function callMyCircle = DefineCircle(100, 200, 30)

' Access a Structure field via function callMyCircle.CenterX = DefineCircle(100, 200, 30).CenterX + 20

' |------------------------| |------|' | |' Function returns TCircle Access to one field of TCircle end.

Funciones y procedimientos

sub function_name(parameter_list) as return_type[declaraciones locales]cuerpo de función

end sub

Page 25: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

25

Llamar a funciónUna llamada a función se realiza al especificar su nombre seguido por los parámetrosactuales colocados en el mismo orden que los parámetros formales correspondientes.El compilador es capaz de hacer los parámetros mal aparejados obtener el tipo adecua-do de acuerdo con las reglas de la conversión implícita. Si hay una llamada a función enla expresión, el valor devuleto de función se utilizará como el operando en dicha expre-sión. Esta función simple calcula xn a base de los parámetros de entrada x y n (n> 0):

Al llamar a esta función es posible calcular, por ejemplo, 312:

Procedimientos Los procedimientos se declaran de la siguiente manera:

El especificador procedure_name representa el nombre de procedimiento y puede sercualquier identificador válido. El especificador parameter_list entre paréntesis repre-senta la lista de parámetos formales que se declaran de la manera similar a las vari-ables. Para pasar un parámetro a procedimiento por dirección se debe introducir la pal-abra clave byref al principio de la declaración del parámetro. Las declaraciones localesson las declaraciones opcionales de variables, constantes y etiquetas y se refieren sóloal procedimiento dado. El cuerpo de procedimiento representa una secuencia de senten-cias que se ejecutarán después de llamar a procedimiento.

Llamar a procedimientoUna llamada a procedimiento se realiza al especificar su nombre seguido por losparámetros actuales colocados en el mismo orden que los parámetros formales corre-spondientes.

sub procedure procedure_name(parameter_list)[declaraciones locales]cuerpo de procedimiento

end sub

tmp = power(3, 12)

sub function power(dim x, n as byte) as longintdim i as byte

i = 0result = 1if n > 0 then

for i = 1 to nresult = result*x

next iend if

end sub

Page 26: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

26

Los operadores son un tipo de tokens que indican las operaciones que se realizan sobrelos operandos en una expresión. Si el orden de realización de operaciones no es deter-minado explícitamente madiante paréntesis, lo determina el operador de precedencia.Hay 4 categorías de precedencia en mikroBasic. Los operadores de la misma categoríatienen igual precedencia. Cada categoría tiene reglas de asociatividad: de izquierda aderecha (�) o de derecha a izquierda (�). En ausencia de paréntesis, estas reglasresuelven la agrupación de expresiones con operadores de igual presedencia.

Operadores aritméticos Los operadores aritméticos se utilizan para realizar operaciones matemáticas. Los operandos de tipo char son los bytes, así que se pueden utilizar como los operandos sin signo enoperaciones aritméticas. Todos los operadores aritméticos se asocian de izquierda aderecha.

Operadores

Precedencia Operandos Operadores Asociatividad

4 1 @ not + - ←

3 2 * / div mod and << >> →

2 2 + - or xor →

1 2 = <> < > <= >= →

Operador Operación Operandos Resultado

+ suma

byte, short, integer, word, longint, dword, real

byte, short, integer, word, longint, dword, real

- resta byte, short, integer, word, longint, dword, real

byte, short, integer, word, longint, dword, real

* multiplicación byte, short, integer, word, dword, real

byte, integer, word, longint, dword, short, real

/ división de los objetos de punto flotante

byte, short, integer, word, dword, real

byte, short, integer, word, real

div división entera, redonde al entero más cercano

byte, short, integer, word, longint, dword

byte, short, integer, word, longint, dword

mod

módulo, devuelve el resto de la división de enteros (no puede ser utilizado con los objetos de punto flotante)

byte, short, integer, longint, word, dword

byte, short, integer, longint, word, dword

Page 27: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

27

División por ceroAl utilizar un cero (0) explícitamente como el divisor en la operación de división (x div 0),es decir, al dividir cualquier número por cero, el compilador informa acerca de un error yno genera el código. En caso de la división implícita, o sea en caso de que el divisor seaun objeto cuyo valor es 0 (x div y, donde y=0), el resultado será indefinido.

Operadores aritméticos unitariosEl operador ‘-’ se utiliza como operador unitario para cambiar el signo de un objeto. Eloperador + puede ser utilizado como operador aritmético unitario también, sin tener influ-encia en el objeto. Por ejemplo:

Operadores relacionalesLos operadores relacionales se utilizan para operaciones lógicas. Todos los operadoresrelacionales devuelven CIERTO o FALSO. Realizan desplazamientos de izquierda aderecha.

Operadores relacionales en expresionesLa precedencia de los operadores aritméticos y relacionales permite que las expresionescomplejas generen el resultado esperado sin utilizar paréntesis. Por ejemplo:

Operadores de manejo de bitsLos operadores de manejo de bits se utilizan para modificar los bits individuales deoperandos. Los operadores de manejo de bits realizan desplazamientos de izquierda aderecha. La única excepción es el complemento not que realiza un desplazamiento dederecha a izquierda.

b = -a

Operador Operación

= igual que

<>

>

<

>= mayor o igual que

menor o igual que

menor que

mayor que

desigual que

<=

a + 5 >= c - 1.0 / e ' � (a + 5) >= (c - (1.0 / e))

Page 28: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

28

Tabla de los operadores de manejo de bits

Operadores lógicos de manejo de bitsLos operadores lógicos and, or o xor realizan operaciones sobre los pares de bitsapropiados de sus operandos. El operador not complementa a cada bit de un operan-do. Por ejemplo:

Operadores de desplazamiento de bitsHay dos operadores de desplazamiento de bits en mikroBasic. Son el operador << querealiza un desplazamiento de bits a la izquierda y el operador >> que realiza undesplazamiento de bits a la derecha. Los operadores de desplazamiento de bits tienendos operandos. El operando izquierdo es un objeto que se desplaza, mientras que elderecho indica el número de desplazamientos que se realizarán. Los dos operandosdeben ser de tipo integral. El operando derecho debe ser el valor positivo. Al desplazara la izquierda los bits que salen por la izquierda se pierden, mientras que los ‘nuevos’bits a la derecha se rellenan con ceros. Por lo tanto, el desplazamiento del operando que

carace de signo a la izquierda por n posiciones equivale a multiplicarlo por 2n

si todoslos bits descartados son ceros. Lo mismo se puede aplicar a los operandos con signo sitodos los bits descartados son iguales que el signo de bit. Al desplazar a la derecha losbits que salen por la derecha se pierden, mientras que los ‘nuevos’ bits a la izquierda serellenan con ceros (en caso del operando sin signo) o con el signo de bit (en caso deloperando con signo). El desplazamiento del operando a la derecha por n posicionesequivale a dividirlo por 2n.

Operador Operación

and operador Y; compara pares de bits y devuleve 1 si los ambos bits están a 1; en caso contrario devuelve 0.

or operador O; compara pares de bits y devuelve 1 si uno o los ambos bits están a 1; en caso contrario devuelve 0.

xor operador exclusivo O (XOR); compara pares de bits y devuelve 1 si los ambos bits son complementarios; en caso contrario devuelve 0.

not operador de complemento (unitario); invierte cada bit

<< desplazamiento a izquierda; desplaza los bits a izquierda, el bit más a la izquierda se pierde y se le asigna un 0 al bit más a la derecha.

>> desplazamiento a derecha; desplaza los bits a derecha, el bit más a la derecha se pierde. Si el objeto carece de signo, se le asignará un0 al bit más a la izquierda; en caso contrario se le asignará un signo de bit.

$1234 and $5678 // es igual a $1230 { because ..

$1234 : 0001 0010 0011 0100$5678 : 0101 0110 0111 1000----------------------------and : 0001 0010 0011 0000 .. esto es, $1230 }

Page 29: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

29

Una expresión es una secuencia de operadores, operandos y puntuadores que devuel-ven un valor. Las expresiones primarias son: literales, constantes, variables y llamadasa función. Se pueden utilizar para crear las expresiones complejas por medio de oper-adores. La forma de agrupación de los operandos y de las subexpresiones no represen-ta obligatoriamente el orden en el que se evalúan en mikroBasic.

Las sentencias especifican y controlan el flujo de ejecución del programa. En ausenciade las sentencias de salto y de selección, las sentencias se ejecutan en el orden de suaparición en el código de programa.

Sentencias de asignaciónUna sentencia de asignación se parece a lo siguiente:

La sentencia de asignación evalúa la expresión y le asigna el valor de la expresión a unavariable aplicando las reglas de la conversión implícita. El especificador variable puedeser cualquier variable declarada, mientras que el especificador expression representala expresión cuyo valor corresponde a la variable dada. Hay que distinguir el operadorde asignación ‘=’ del operador relacional ‘=’ utilizado para comprobar igualdad.

Sentencias condicionalesLas sentencias condicionales o las sentencias de selección pueden decidir entre varios cur-sos de acción distintos en función de ciertos valores.

Sentencia If La sentencia If es una sentencia condicional. La síntaxis de la sentencia if es la siguiente:

Si expression se evalúa como cierto, statement1 se ejecuta. Si expression se evalúacomo falso, statement2 se ejecuta. La rama else compuesta de palabra clave else y lasentencia statement2 es opcional.

Expresiones

Sentencias

variable = expression

if expression thenstatement1

[elsestatement2]

end if

Page 30: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

30

Sentencia Select CaseLa sentencia Select case es una sentencia condicional de ramificación múltiple. Con-siste en una sentencia de control (selector) y una lista de los valores posibles de laexpresión. La síntaxis de la sentencia select case es la siguiente:

El especifiador selector es una expresión de control evaluada como un valor integral.Los especifiadores value1..value_n representan los valores posibles del selector. Pue-den ser literales, constantes o expresiones. Los especificadores statement1..state-ment_n representan las sentencias. La cláusula else es opcional. Primero se evalúa elvalor de la expresión de control. Luego se compara con todos los valores disponibles. Sicoinciden los valores, se ejecutará la sentencia apropiada y terminará la sentenciaselect case. En el caso de que coincidan los valores múltiples se ejecutará la primerasentencia coincidente. Si no coincide ningún valor con el selector, se ejecutará la sen-tencia default_statement en la rama else (si hay alguna). Ejemplo de la sentencia select case:

Los valores posibles de la expresión de control se pueden agrupar para que se variosvalores refierran a una sentencia. Es necesario enumerar los valores y separarlos porcomas.

select case selectorcase value_1statement_1

...case value_n

statement_n[case elsedefault_statement]

end select

select case operatorcase "*"res = n1 * n2

case "/"res = n1 / n2

case "+"res = n1 + n2

case "-"res = n1 - n2

case elseres = 0cnt = cnt + 1

end select

Page 31: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

31

for counter = initial_value to final_value [step step_value]statement

next counter

s = 0for i = 0 to n-1s = s + a [i] * b [i]

next i

Sentencias Select Case anidadas Las sentencias Select Case se pueden definir dentro de otras sentencias select case.Este proceso es denominado anidamiento.

Sentencias de iteración Las sentencias de iteración permiten repetir un conjunto de sentencias. Las sentenciasbreak y continue se pueden utilizar para controlar el flujo de ejecución de sentenciasde bucles. La sentencia break termina el bucle en el que está, mientras que la contin-ue inicia la nueva iteración del bucle.

Sentencia ForLa sentencia for se utiliza para implementación del bucle iterativo cuando el número deiteraciones está especificado. La sintaxis de la sentencia for es la siguiente:

El especificador counter es una variable que se incrementa por el valor del paso(step_value) con cada iteración del bucle. El parámetro step_value es un valor integralopcional, que es igual a 1 por defecto si es omitido. Antes de ejecutar la primera iteraciónel contador se pone al valor inicial (initial_value) y se incrementa hasta llegar (o exced-er) al valor final (final_value). Con cada iteración se ejecuta la sentencia dada (state-ment). Las expresiones initial_value y final_value deben ser compatibles con la vari-able counter. El especificador statement puede ser cualquier sentencia que no cambiael valor de la variable counter. El parámetro step_value puede ser negativo, lo que permite contar atrás. Ejemplo de calcular el producto escalar de dos vectores a y b, de la longitud n, utilizan-do la sentencia for:

select case regcase 0opmode = 0

case 1,2,3,4opmode = 1

case 5,6,7opmode = 2

end select

Page 32: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

32

Bucle infinito La sentencia for resulta en un bucle infinito si final_value equivale o excede al rango de la vari-able counter. Esto es un ejemplo del bucle infinito ya que la variable counter nunca alcanzará elvalor 300.

La otra forma de crear un bucle infinito en mikroBasic es por medio de la sentencia while. Sentencia While La sentencia while se utiliza para implementación del bucle iterativo cuando el númerode iteraciones no está especificado. Es necesario comprobar la condición de iteraciónantes de la ejecución del bucle. La síntaxis de la sentencia while es la siguiente:La sentencia statement se ejecuta repetidamente siempre que el valor de la expresión

expression sea cierto. El valor de la expresión se comprueba antes de que se ejecute la sigu-iente iteración. Si el valor de la expresión es falso antes de entrar el bucle, no es ejecuta ningu-na iteración, esto es, la sentencia statement no se ejecuta ninguna vez. La forma más sim-ple de crear un bucle infinito es la siguiente:

Sentencia DoLa sentenica do se utiliza para implementación del bucle iterativo cuando el número deiteraciones no es especificado. La sentencia se ejecuta repetidamente hasta que laexpresión sea cierta. Es necesario chequear la condición de iteración al final del bucle.La síntaxis de la sentencia do es la siguiente:

La sentencia statement se ejecuta repetidamente hasta que el valor de la expresión expression llegue a ser cierto. La expresión se evalúa después de cada iteración asíque la sentencia se ejecutará por lo menos una vez. Ejemplo de calcular el productoescalar de dos vectores utilizando la sentencia do:

while expressionstatement

wend

while TRUE...

wend

dim counter as byte...for counter = 0 to 300nop

next counter

dostatement

loop until expression

s = 0i = 0...dos = s + a [i] * b [i]i = i + 1

loop until i = n

Page 33: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

33

Sentencias de salto mikroBasic soporta las siguientes sentenicas de salto: break, continue, exit, goto ygosub.

Sentencia Break Aveces es necesario detener el bucle dentro del cuerpo. La sentencia break dentro del buclese utiliza para pasar el control a la primera sentencia después del bucle. Por ejemplo:

Sentencia Continue La sentencia continue dentro del bucle se utiliza para iniciar la nueva iteración del bucle.Las sentencias que siguen después de la sentencia continue no se ejecutarán.

Sentencia Exit La sentencia exit permite salir de rutina (función o procedimiento). Se pasa el control ala primera sentencia después de la llamada a rutina. Ejemplo:

' Esperar a que se inserte la tarjeta CF ;Lcd_Out(1, 1, "No card inserted")

while trueif Cf_Detect() = 1 thenbreak

end ifDelay_ms(1000)

wend

' tarjeta CF se puede utilizar ahora ...Lcd_Out(1, 1, "Card detected")

' continue salta aquífor i = ......continue...

next i

' continue salta aquíwhile condition...continue...

wend

do...continue...

'continue salta aquíloop until condition

sub procedure Proc1()dim error as byte...if error = TRUE thenexit

end if... ' el código no se ejecutará si error tiene el valor TRUE

end sub

Page 34: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

34

Sentencia GotoLa sentencia goto se utiliza para saltar de forma incondicional a la parte apropiada deprograma. La síntaxis de la sentencia goto es:

Por medio de esta sentencia se ejecuta el salto a la etiqueta label_name. No es posiblesaltar a un procedimiento o una función o de ellos. La sentencia goto se puede utilizarpara salir de cualquier nivel de las estructuras anidadas. No es recomendable saltar abucles u otras sentencias estructuradas, ya que se pueden producir resultados inesepra-dos. En general no es recomendable utilizar la sentencia goto dado que prácticamentecada algoritmo se puede realizar sin ella dando programas estructurados legibles. No obstante, la sentencia goto es útil para salir de las estructuras de control profunda-mente anidadas.

Sentencia GosubLa sentencia gosub se utiliza para saltar de forma incondicional a la parte apropiada deprograma:

Por medio de esta sentencia es posible saltar a la etiqueta label_name. Cuando aparecela sentencia return el programa sigue ejecutando con la siguiente sentencia después de lasentencia gosub. Esta sentencia puede preceder o seguir la declaración de etiqueta.

for i = 0 to nfor j = 0 to m...if disastergoto Error

end if...

next jnext i...Error: ' error handling code

goto label_name

gosub label_name...label_name:...return

Page 35: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

Sentencia asm mikroBasic permite embeber las instrucciones en ensamblador en el código de progra-ma por medio de las sentencias asm. Las instrucciones en ensamblador se puedenagrupar utilzando la palabra clave asm:

mikroBasic permite escribir los comentarios en el código ensamblador embebido.Además, los comentarios unilíneas en ensamblador se pueden escribir al introducirpunto y coma ‘;’ delante del comentario.

35

asmbloque de instrucciones en ensamblador

end asm

program testdim myvar as wordmain:myvar = 0 asmMOVLW 10MOVWF _myvar

end asmend.

Page 36: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

36

Las directivas son las palabras de significado especial que proporcionan las prosibili-dades adicionales al compilar y mostrar los resultados.

Directivas de compiladormikroBasic trata los comentaros que empiezan por el signo ‘#’ como directivas de com-pilador. Estas directivas, entre otras cosas, permiten compilar el código de programacondicionalmente, es decir, seleccionar las secciones particulares del código para com-pilarlas. Todas las directivas de compilador deben ser terminadas en el fichero en el quehan empezado.

Directivas #DEFINE y #UNDEFINELa directiva #DEFINE se utiliza para definir una constante condicional de compilador -una bandera (flag). La bandera puede ser cualquier identificador válido. Las banderastienen los espacios de nombres separados así que no hay posibilidad de confusión conlos identificadores de programa. Es posible definir sólo una bandera por directiva. Porejemplo:

La diretiva #UNDEFINE sirve para indefinir (borrar) la bandera previamente definida.

Directivas #IFDEF..#ELSELa compilación condicional se realiza por medio de la directiva #IFDEF. Esta directivacomprueba si una bandera está actualmente definida o no (utilizando la directiva#DEFINE). La directiva #IFDEF termina por la directiva #ENDIF y puede contener unacláusula #ELSE opcional:

Primero directiva #IFDEF comprueba si la bandera está definida por la directiva#DEFINE. Si está definida, se compilará sólo <block of code>. Si no está definida, secompilará <alternate block of code>. La directiva #ENDIF seńala el final de la secuen-cia de compilación condicional. El resultado de lo anteriormente dicho es que sólo unasección de código (puede estar vacía) será compilada. La parte compilada puede con-tener las directivas condicionales adicionales (anidadas). Cada directiva #IFDEF debeterminar por la directiva #ENDIF. Por ejemplo:

#DEFINE extended_format

Directivas

#IFDEF flag block of code

#ENDIF#IFDEF flag_n block of code n ]

[ #ELSEalternate block of code ]

#ENDIF

Page 37: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

37

Banderas previamente definidasmikroBasic dispone de las banderas previamente definidas que se pueden utilizar paracompilar el código de programa para los diferentes plataformas de hardware.

Directivas de enlazamientomikroBasic utiliza el algoritmo interno para distribuir los objetos dentro de memoria. Sies necesario tener una variable o una rutina en una dirección predefinida y específica,se utilizan las directivas de enlazamiento absolute, org y orgall.

Directiva absoluteDirektiva absolute especifica la dirección inical de una variable en ls memoria RAM. Siuna variable es multi-byte, los bytes altos se almacenarán en las locaciones consecuti-vas adyacentes empezando por la locación dada. Esta directiva se ańade a ladeclaración de la variable:

Directiva orgDirectiva org especifica la dirección inicial de una rutina en memoria ROM. Se ańade ala declaración de rutina. Por ejemplo:

A los agregados constantes (estructuras, matrices) se les puede asignar espacio en unadirección especificada en memoria ROM por medio de directiva org.

' Descomentar la bandera apropiada:'#DEFINE resolution8#IFDEF resolution8 THEN... ' code specific to 8-bit resolution

#ELSE... ' default code

#ENDIF

dim x as byte absolute $22' Variable x ocupa 1 byte en la dirección $22

dim y as word absolute $23' Varibale y ocupa 2 bytes en las direcciones $23 y $24

sub procedure proc(dim par as byte) org $200' Procedimiento proc se almacenará en la dirección $200...end sub

const arr as byte[10] = (0,1,2,3,4,5,6,7,8,9) org 0x400' matriz constante ocupa 10 bytes en la dirección 0x400

Page 38: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

38

La excepción son los procedimientos interrupt a los que no se puede asignar espacio enla dirección especificada en memoria ROM por medio de esta directiva.

Directiva orgallLa directiva orgall especifica la dirección inicial de una rutina en memoria ROM desdela que empieza colocación de todas las rutinas y constantes. Por ejemplo:

main:orgall(0x200) ' Todas las rutinas y constantes en el programa serán

almacenadas encima de la dirección 0x200, incluyéndola también. ...

end.

Page 39: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

TÉRMINOS Y CONDICIONES

Todos los productos de MikroElektronika son protegidos por la ley y por los tratadosinternacionales de derechos de autor. Este manual es protegido por los tratados dederechos de autor, también. Es prohibido copiar este manual, en parte o en conjunto sinla autorización previa por escrito de MikroElektronika. Se permite imprimir este manualen el formato PDF para el uso privado. La distribución y la modificación de su contenidoson prohibidas.

MikroElektronika proporciona este manual “como está” sin garantías de ningunaespecie, sean expresas o implícitas, incluyendo las garantías o condiciones implícitas decomerciabilidad y aptitud para fines específicos.

Aunque MikroElektronika ha puesto el máximo empeńo en asegurar la exactitud de lainformación incluida en este manual, no asume la responsabilidad de ninguna especiede dańos derivados del acceso a la información o de los programas y productospresentados en este manual (incluyendo dańos por la pérdida de los beneficiosempresariales, información comercial, interrupción de negocio o cualquier otra pérdidapecuniaria).Las informaciones contenidas en este manual son para el uso interno.Pueden ser modificadas en cualquier momento y sin aviso previo.

ACTIVIDADES DE ALTO RIESGO

Los productos de MikroElektronika no son tolerantes a fallos y no están diseńados,fabricados o pensados para su uso o reventa como equipo de control en línea en entornospeligrosos que requieran un funcionamiento sin fallos, como en instalaciones nucleares, enla navegación aérea o en sistemas de comunicaciones, de tráfico aéreo, máquinas deauxilio vital o sistemas de armamento, en los que un fallo del software podría conducirdirectamente a la muerte, lesiones corporales o dańos físicos o medioambientales graves(“Actividades de alto riesgo”). MikroElektronika y sus proveedores niegan específicamentecualquier garantía expresa o implícita de aptitud para Actividades de alto riesgo.

MARCAS REGISTRADAS

Los productos y los nombres corporativos utilizados en este manual son protegidos porla ley de los derechos de autor, sin reparar en la ausencia de notas adicionales. Lasmarcas registradas son utilizadas exlusivamente con el propósito de identificar y explicarlos conceptos correspondientes y en beneficio de sus respectivos propietarios, sinintención de infringirlas.

Copyright© 2003 – 2009 por MikroElektronika. Todos los derechos reservados.

Page 40: GUÍA DE REFERENCIA RÁPIDA A mikroBasic - download…download.mikroe.com/documents/compilers/mikrobasic/... · npv object oct on open option option option or org orgall pdata pmt

Si quiere saber más de nuestros productos, por favor visite nuestra página web www.mikroe.com Si tiene problemas con cualquiera de nuestros productos o sólo necesita información adicional, deje un ticket en www.mikroe.com/en/support Si tiene alguna pregunta, comentario o propuesta de negocio, póngase en contacto con nosotros [email protected]