64
 INDICE 1. Especif icaciones de mikr obasic 1.1  Predefiniendo globales y constantes 1.2   Accesando a los bits i ndividuales 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 Cle arB it TestBit Lo Hi  Hi gher Hi ghest Si zeOf Swap Clo ck_ Khz Clo ck_ Mhz Reset Cl rWdt 1

Mikrobasic-Español

Embed Size (px)

Citation preview

Page 1: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 1/64

INDICE

1. Especificaciones de mikrobasic1.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

1

Page 2: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 2/64

1.4 Optimización de código

2. Especificaciones del PIC2.1. Tipos de Eficiencia

2.2.Limitaciones de Llamadas Anidadas

2.3.Especificaciones familia PIC16

3. Referencia del Lenguaje mikroBasic.  3.1. Elementos léxicos  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 puntuación o separadores

3.2 Organización de Programa3.2.a Organización del Programa3.2.b Alcance y Visibilidad3.2.c Módulos

3.3 Variables

3.4 Constantes3.5 Etiquetas3.6 Sí mbolos3.7 Funciones y Procedimientos

3.7.a Funciones3.7.b Procedimientos

3.8 Tipos3.8.a Tipos simples3.8.b Arreglos3.8.c Cadenas3.8.d Punteros3.8.e Estructuras3.8.f  Tipos de conversión

3.8.f.1 Conversión implí cita

3.8.f.2 Conversión explicita

3.8.f.3 Conversión aritmética

2

Page 3: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 3/64

3.9 Operadores3.9.a Precedencia y asociatividad3.9.b Operadores aritméticos3.9.c Operadores relacionales3.9.d Operadores inteligentes

3.10 Expresiones

3.11 Declaraciones3.11.a Declaraciones de asignación3.11.b declaraciones condicionales

3.11.b.1 Declaraciones IF3.11.b.2 Declaraciones SELECT CASE

3.11.c Declaraciones de Iteración (ciclos)3.11.c.1 Declaracion FOR 3.11.c.2 Declaracion WHILE

3.11.c.3 Decalaracion DO3.11.d Declaraciones de Saltos

3.11.d.1 Declaraciones BREAK y CONTINUE3.11.d.2 Declaracion EXIT3.11.d.3 Declaracion GOTO3.11.d.4 Declaracion GOSUB

3.11.e Declaraciones ASM

3.12 Directivas3.12.a Directivas del compilador

3.12.b Directivas del Linker 

3

Page 4: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 4/64

4

Page 5: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 5/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

ACERCA DE

Dedicado: a la luz de mi vida Izzy y a mi futuro Bebe 

Motores de mi existencia 

Este documento es la traducción –a veces interpretativa, a veces ayudada porprogramas traductores de la ayuda de mikroBasic. Este documento no persigueningún otro fin que no sea ayudar a los Aficionados al mundo de los PICS de hablahispana 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 podrán encontrar, como un ejemplo de ello es verdelante de la traducción los siguientes signos (¿?), esto es que no pude encontrarla manera correcta de interpretar o traducir el enunciado. También podrán

encontrar diferencias en la traducción, como puede ser la palabra declaraci ó n en

lugar de usar la palabra sentencia. De alguna forma trate de hacer una traducciónlo mas cristalina posible, sin usar muchas interpretaciones –aunque a veces fuenecesario o modismos de mi pa ís (México).

Creo yo que el documento es entendible y nos puede brindar un poco de ayuda

para hacer mas fá

cil la interpretació

n de las reglas, instrucciones y librerías delmikroBasic. Reitero que no manejo el lenguaje ingles al 100% y menos el lenguaje

técnico en ingles pero por la poca experiencia que tengo usando el mikroBasictrate de realizar este documento.

La traducción de la ayuda como marca en los encabezados de cada página 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 parteeste documento tiene licencia GPL –al menos la traducción y puede sermodificada siempre y cuando se respete al autor original de la traducción (en estecaso navaismo) y se haga referencia al foro TODOPIC.

Pues sin nada mas que decir, solo me resta desearles suerte en este viajeinterminable hacia al mundo de los PICS y a la introducción de un lenguaje en víasde desarrollo como lo es el BASIC para PICmicros.

Gracias a TOD@S y en especial a mikroelektronika por su Software demo:

mikroBasic

5

Page 6: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 6/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

PREDEFINIENDO GLOBALES Y CONSTANTES

Para facilitar la programación, MikroBasic implementa un número predefinido de Variables globalesy constantes

Todos los Registros SFR del PIC están declarados implícitamente como variables globales del tipo

byte , y son visibles en todo el proyecto. Cuando se crea un proyecto, MiKrobasic incluirá el archivo

apropiado con extensión .def , el cual contiene las declaraciones disponibles del SFR y constantes

(como PORTB, TMR1, etc.). Los identificadores están todos en mayúsculas, idénticos a lasnomenclaturas de las hojas de datos de MICROCHIP.

Para el set completo de constantes y globales predefinidas, Busque "DEFS" en el directorio deinstalación de MikroBasic, o pruebe el asistente de código para letras especificas (ctrl.+espacio enel editor de código).

ACCESANDO A LOS BITS INDIVIDUALES 

Mikrobasic permite acceder de forma individual a cada Bit de una variable. Simplemente use un

punto (.) con la variable, seguido de un numero.

Por Ejemplo:

Dim myvar as longint

' rango de los bits de myvar es de myvar.0...myvar.31

'...' si RB0 es 1, pon 1 en el 28vo. bit de myvar:

if PORTB.0 = 1 then

  myvar.27 = 1

endif

No hay necesidad por una declaración en especial; este tipo de acceso selectivo es unacaracterística intrínseca de mikrobasic y puede ser usada en cualquier parte del código. Asegúrese

de no exceder el tamaño del tipo apropiado.(P.E. PORTB.12 retornara un error ya que el PORTB esuna variable de 8 bits).

Si esta familiarizado con un Chip en particular, puede acceder a sus bits por su nombre:

' Limpiar TMR0F 

INTCON.TMR0F = 0

Vea Predefiniendo Globales y Constantes para más información de los nombres deREGISTROS/BIT.

NOTA: Puede también acceder a los bits individuales de una variable flotante de esta forma, pero

necesita estar familiarizado con el almacenamiento interno de tipo flotante.

6

Page 7: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 7/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

INTERRUPCIONES

Pueden ocuparse interrupciones fácilmente por medio de la palabra reservada interrupt .

mikroBasic implícitamente declara procedimiento interrupt , el cual no puede ser redeclarado.

Escriba su propio procedimiento para ocupar interrupciones en su aplicación. Note que no puedellamar rutinas dentro de la interrupción debido a las limitaciones de la pila(stack).

Mikrobasic salva los siguientes SFR dentro de la pila y los elimina cuando retorna:

Familia PIC12 : W, STATUS, FSR,PCLATHFamilia PIC16 : W, STATUS, FSR,PCLATHFamilia PIC18 : FSR (El contexto rápido es

usado para salvar WREG BSR, STATUS )

NOTA: MikroBasic no soporta interrupciones de baja prioridad; para la Familia PIC18, las

interrupciones deben ser en alta prioridad.

LLAMANDO RUTINAS DESDE INTERRUPCIONES

Llamar funciones y procedimientos dentro de una rutina es ahora posible. El compilador se encarga

de los registros que están siendo usados, ambos en interrupt  y en main. Y realiza un switcheointeligente entre ambos contextos, salvando solo los registros que ambos hilos pueden usar.

Las Funciones y procedimientos que no tengan su propio marco ( sin argumentos o variables

locales) pueden ser llamados desde la interrupción o desde main.

EJEMPLOS DE INTERRUPCION

Aquí esta un ejemplo simple del manejo de interrupciones desde TMR0 ( si ninguna otrainterrupción es requerida)

sub procedure interrupt

counter = counter + 1

TMR0 = 96INTCON = $20

end sub

En caso de múltiples interrupciones habilitadas, necesita probar cual de las interrupciones ocurre ydespués proceder con el código apropiado (manejo de interrupción):

sub procedure interrupt

  if TestBit(INTCON, TMR0IF) = 1 then

counter = counter + 1

TMR0 = 96ClearBit(INTCON, TMR0F)

  ' ClearBit se comprende como una funci ó n inline

  ' y debe ser llamada dentro de la interrupci ó n 

  else

7

Page 8: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 8/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

  if TestBit(INTCON, RBIF) = 1 then

counter = counter + 1TMR0 = 96

ClearBit(INTCON,RBIF)

  end if

  end if

end sub

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 delproyecto.

Algunas rutinas predefinidas están implementadas como inline ; por ejemplo: el código se genera en

el lugar de la llamada, para que la llamada no está contra el límite de llamadas anidadas.

RUTINAS

Inc

Dec

Chr

Ord

SetBit

ClearBit

TestBit 

Lo

Hi 

Higher

Highest 

SizeOf 

Swap

Clock_Khz

8

Page 9: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 9/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Clock_Mhz

Reset 

ClrWdt 

Inc

Prototipo: sub function Inc(dim byref par as longint) as longint

Regresa: El valor incrementado del parámetro

Descripción: Incrementa el parámetro par por 1. Note que la función debe ser llamada comouna declaración auto contenida.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la

llamada no esté contra el límite de llamadas anidadas

Requiere: Nada

Ejemplo a=4

b= Inc(a) 'a y b ahora son igual a 5

DEC

Prototipo: sub function Dec(dim byref par as longint) as longint

Regresa: El valor decrementado del parámetro

Descripción: Decrementa el parámetro par por 1. Note que la función debe ser llamada como

una declaración auto contenida

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la

llamada no esté contra el límite de llamadas anidadas.

Requiere: nada

Ejemplo : b= Dec(a) 'a y b ahora son igual a 3

9

Page 10: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 10/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Chr

Prototipo: sub function Chr(dim code as byte) as char

Regresa: Regresa un carácter asociado con el carácterespecifico de code

Descripción: Regresa un carácter asociado con el carácter especifico de code. Números de 0 a

31 son los códigos ASCCI no imprimibles

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la

llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: c = Chr(13) ' regresa un retorno de carro (enter)

Ord

Prototipo: sub function Ord(dim character as char) as byte

Regresa: El código ASCII de character

Descripción: La función regresa el código ASCII del carácter.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la

llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: c = Ord("A") ' C ahora es 65

SetBit

Prototipo: sub procedure SetBit(dim byref register as byte, dim rbit as

byte)

Regresa: Nada

Descripció

n:La función "setea"(poner en uno o verdadero) el bit rbit del registro. Elparámetro rbit debe ser una variable o una literal cuyo valor sea de 0...7. Vearedefiniendo globales y constantes para mayor información de los

identificadores de registros.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para quela llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: SetBit(PORTB,2) 'setea RB2

10

Page 11: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 11/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

ClearBit

Prototipo: sub procedure ClearBit(dim byref register as byte, dim rbit as

byte)

Regresa: Nada

Descripción: La funciona limpia el rbit del registro. El parámetro rbit necesita ser unavariable o una literal cuyo valor sea de 0...7. Vea predefiniendo globales y

constantes para mayor información de los identificadores de registros.

Esta es una rutina inline; el código se genera en el lugar de la llamada, paraque la llamada no esté contra el límite de llamadas anidadas.

Requiere: NadaEjemplo: ClearBit(PORTC,7) 'Limpia RC7 (Limpiar o poner a 0 o falso)

TestBit

Prototipo: sub function TestBit(dim register, rbit as byte) as byte

Regesa: Si el bit esta seteado(verdadero), regresa 1, en otro caso regresa 0

Descripción: La función revisa si el rbit del registro esta seteado. Si esta seteado, la funciónretorna 1, cualquier otro caso retorna 0. El parámetro rbit necesita ser una

variable o literal cuyo valor sea de 0...7. Vea predefiniendo globales y

constantes para mayor información de los identificadores de registros.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para

que la llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: flag = TestBit(PORTE,2) ' 1 si RE2 esta seteado, 0 si no lo esta.

Lo 

Prototipo: sub function Lo(dim number as byte..longint) as byte

Regresa: Regresa los 8 bits menores de number, bits 0...7Descripción: La función regresa los 8 bits menores de number. La función no interpreta los

patrones bit de number solamente regresa los 8 bits encontrados en el registro.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para quela llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: a = Lo(0x1AC30F4) ' a será igual a 0xF4

11

Page 12: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 12/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Hi

Prototipo: sub function Hi(dim number as word..longint) as byte

Regresa: Regresa el los siguientes 8 bits(byte)de los 8 bits menores de number, bits 8...15Descripción: La función regresa el siguiente Byte del menor byte de number. La función no

interpreta los patrones bit de number solamente regresa los siguiente 8 bitsencontrados en el registro.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la

llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: a = Hi(0x1AC30F4) ' a es igual a 0x30

Higher

Prototipo: sub function Higher(dim number as longint) as byte

Regresa: Regresa el siguiente byte del byte mas alto de number, bits 16...23

Descripción: La función regresa el siguiente byte del byte más alto de number. La funciónno interpreta los patrones bit de number solamente regresa los siguiente 8bits encontrados en el registro.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para

que la llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: a = Higher(0x1AC30F4) ' a es igual a 0xAC

Highest

Prototipo: sub function Highest(dim number as longint) as byte

Regresa: Regresa el Byte mas alto de number, bits 24...31

Descripción: La función regresa el Byte mas alto de number, La función no interpreta los

patrones bit de number solamente regresa los siguiente 8 bits encontradosen el registro.

Esta es una rutina inline; el código se genera en el lugar de la llamada, paraque la llamada no esté contra el límite de llamadas anidadas.

Requiere: NadaEjemplo: a = Highest(0x1AC30F4) ' a es igual a 0x01

12

Page 13: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 13/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

SizeOf

Prototipo: sub function SizeOf(dim variable_name as string[100]) as word

Regresa: Regresa el tamañ

o en bytes de la variableDescripción: Esta función da el tamaño en Bytes de cuánto espacio de memoria es usado

por el operando.

Requiere: Nada

Ejemplo: structure TStruct

dim FieldA as byte ' 1 byte 

dim FieldB as word ' 2 bytes 

end structure ' total 3 bytes 

dim SomeVar as TStruct

dim SomeOtherVar as word

 

main:someOtherVar = SizeOf(SomeVar) ' SomeOtherVar = 3 

end.

Swap

Prototipo: sub function Swap(dim byref arg as byte) as byte

Regresa: Regresa el Byte consistente de los nibbles intercambiados

Descripción: Intercambia los nibbles altos (bits <7..4>) y los nibbles bajos (bits <3..0>) de eltamaño del Byte del parámetro arg.

Requiere: Nada

Ejemplo: PORTB = 0xF0PORTA = Swap(PORTB) ' PORTA = PORTB = 0x0F

Clock_Khz

Prototipo: sub function Clock_Khz as word

Regresa: El dispositivo reloj in KHZ, es redondeado al entero mas cercano

Descripción: El dispositivo reloj in KHZ, es redondeado al entero mas cercano.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que lallamada no esté contra el límite de llamadas anidadas.

Requiere NadaEjemplo: clk = Clock_Khz

13

Page 14: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 14/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Clock_Mhz

Prototipo: sub function Clock_Mhz as byte

Regresa: La funció

n dispositivo reloj en MHz, es redondeado a el entero mas cercano.

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la

llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: clk = Clock_Mhz

Reset

Prototipo: sub procedure Reset

Regresa: Nada

Descripción: Este procedimiento es igual a la instrucción en ensamblador reset. Esteprocedimiento funciona solamente para la Familia PIC18.

Requiere: Nada

Ejemplo: Reset ' Resetea el PIC

ClrWdt

Prototipo: sub procedure ClrWdt

Regresa: Nada

Descripción: Este procedimiento es igual a la instrucción en ensamblador clrwdt

Requiere: Nada

Ejemplo: ClrWdt ' Limpia el WatchDogTimer del PIC

Optimización de código

La optimización ha sido añadida para extender la usabilidad del compilador, bajo la cantidad de

código generado y la velocidad de su ejecución. Las principales características son:

Plegado Constante

Todas las expresiones pueden ser evaluadas al tiempo de la compilación (por ejemplo una

constante) son reemplazados por el resultado. (3+5 >8);

La propagación de Constantes

Cuando un valor constante está asignándose a cierta variable, el compilador reconoce esto y

reemplaza el uso de la variable en el código que sigue por la constante, con tal de que el valor devariable permanezca inalterado.

14

Page 15: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 15/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Copia de Propagación

El compilador reconoce dos variables que tienen el mismo valor y elimina una de ellas en el código.

Enumeración de Valor

El compilador "reconoce" si dos expresiones rinden el mismo resultado, y por consiguiente puedeeliminar el cómputo entero para uno de ellos.

Eliminación de código Muerto

El código que ya no es usado en ninguna parte del programa, y que no afecta el resultado final de

la aplicación. Es automáticamente removido.

Asignación de la Pila

Los registros temporales ("Pilas") se usan más racionalmente, permitiendo expresiones MUYcomplejas para ser evaluadas con el consumo mínimo de la pila.

Optimización de Variables locales

Ninguna variable local se usa si su resultado no afecta algunas de las variables globales o volátiles.

Mejor Generación de código y Optimización local

La Generación de código es más Consistente, y Mucha más atención se ha implementado para

solucionar específicamente la construcción del código, para reducir el tamaño de código generado.

Especificaciones del PIC

Para conseguir el mejor rendimiento del compilador MikroBasic, usted debe estar familiarizado conciertos 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 código.

Tipos de Eficiencia

Primero que nada, debe saber que la ALU del PIC, quien realiza las operaciones aritméticas, estaoptimizada 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 muyviejos. Esto puede aumentar dramáticamente el tiempo necesario para realizar hasta una simple

operación. Un consejo universal es usar el tipo m á s peque ñ o posible en cada situación. Esto aplica

en general para toda la programación, y doblemente para los Microcontroladores.

Conozca su herramienta, Cuando haga cálculos, no todos los PIC tienen el mismo rendimiento. Por

ejemplo, la Familia PIC16 no tiene Hardware para multiplicar 2 bytes, pero se compensa con unalgoritmo por software. Por otro lado, la familia PIC18 tiene un hardware multiplicador, y por ende lamultiplicación trabaja considerablemente más rápido.

15

Page 16: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 16/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Limitaciones de Llamadas Anidadas.

Las llamadas anidadas representan una llamada a una función dentro del cuerpo de la función. Oasí mismo (llamadas recursivas) a otra función. Las llamadas recursivas, son una forma de cruzarlas llamadas, y no están soportadas por mikroBasic debido a la pila del PIC y limitaciones de

memoria.

MikroBasic limita el número de llamadas anidadas no recursivas a:

8 llamadas para la familia PIC12

8 llamadas para la familia PIC1631 llamadas para la familia PIC18

Note que las rutinas predefinidas no cuentan encontra del limite, debido a su implementación inline .

El numero permitido de llamadas anidadas decrece por uno si se usa en el código cualquiera de lossiguientes operadores: * / %, Y decrece por uno si usa interrupciones en el programa.

Si el numero permitido de llamadas anidadas es excedido, el compilador reportara un error dedesbordamiento de la pila.

Especificaciones PIC16

Saltando entre paginas

En aplicaciones que usen los PIC16, ninguna rutina sola debe exceder una pagina (2000instrucciones. Si la rutina no encaja dentro de una pagina, el linker reportara un error. Cuando

confronte este problema, talvez deba pensar como replantear el diseño de su aplicación trate dehacer la rutina en particulares pedazos cortos, etc.

Limites de acercamiento a través del FSR

Punteros con la familia PIC16 están cercanos y solo pueden llevar 8 bits de la dirección. El

compilador automáticamente limpiara el 9no. bit al inicio. Para que los punteros se refieran al banco0 y 1, para acceder a los objetos en el banco 3 o 4 v ía punteros, el usuario deberá poner el IRPmanualmente, y restaurarlo a 0 después de la operación.

Nota: Es muy importante tener cuidado del manejo del IRP, si desea seguir con este acercamiento.

Si cree que este método es inapropiado con demasiadas variables, tal vez deba considerar

actualizarse a la familia PIC18.

Nota: Si tiene muchas variables en el código, trate reestructurarlas con la directiva absolute del

linker. Las variables que se aproximen solo directamente deben ser movidas a los bancos 3 y 4para incrementar la eficiencia.

16

Page 17: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 17/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Referencia del Lenguaje MikroBasic.

Elementos léxicos

Estos temas proporcionan una definición formal de los elementos léxicos de Mikrobasic. Ellos

describen las diferentes categorías de unidad de tipo de palabra (TOKENS) reconocidas por ellenguaje.

En la fase de Tokenizacion, el código fuente es analizado (es decir, despedazado)en tokens y 

espacios en blanco. Los tokens en mikrobasic son derivados de una serie de operacionesrealizadas en su programa por el compilador.

Un programa de MikroBasic comienza como una secuencia de caracteres ASCII, que representanel código fuente, creado por palabras clave usando un editor de texto (como el editor de código de

mikroBasic). El programa básico de mikrobasic es un archivo guardado en la RAM o en un disco

teniendo por extensión .pbas .

Espacios en Blanco

Los espacios en blanco es el nombre dado a los espacios (blancos), horizontales o verticales y

comentarios. Los espacios en blanco sirven para indicar donde empiezan los Tokens y donde

terminan. Mas allá de esto cualquier espacio en blanco es descartado.

Por ejemplo estas 2 secuencias:

dim tmp as byte

dim j as word

y

dim tmp as byte

dim j as word

Son léxicamente equivalentes y analizadas idénticamente.

Espacios en Blanco en cadenas

Los caracteres ASCII representando un espacio en blanco pueden darse dentro de las cadenas

literales, en cuyo caso están protegidos por el análisis gramatical normal (permanecen como partede la cadena).Por ejemplo: la declaración

some_string = "mikro foo"

analiza 4 tokens , incluyendo la cadena simple del token :

some_string

="mikro foo"

newline character 

17

Page 18: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 18/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Comentarios

Los comentarios son pedazos de texto usados para hacer anotaciones en el programa, y sontécnicamente otra forma de espacios en blanco. Los comentarios son solamente para el uso delprogramador; estos son quitados del código fuente antes de analizar.

Use el apostrofe para crear un comentario:

' Cualquier texto en medio de un apostrofe y el fin de la l ínea' constituye un comentario. Puede ser una sola l ínea.

No hay comentarios multilínea en BASIC.

TOKENS

Un Token es el elemento mas pequeño en BASIC que es significativo para el compilador, El

analizador separa los Tokens de la entrada creando un Token mas largo usando los caracteres deizquierda a derecha.

MikroBasic reconoce los siguientes tipos de Tokens: 

Palabras Clave

IdentificadoresConstantes

OperadoresSignos de puntuación (también conocidos como Separadores)

Ejemplo de tokens

Aquí hay un ejemplo de extracción de Tokens. Veamos el siguiente código:

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 declaraci ó n 

Note que end_flag  será analizado como un identificador, no como la palabra clave end seguida de

 _flag.

18

Page 19: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 19/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

LITERALES

Las Literales son tokens  que representan un valor numérico o el valor de un carácter.

El tipo de dato de una constante es deducido por el compilador, usando pistas como el valornumérico y el formato usado en el código fuente.

ENTEROS

Los valores enteros pueden ser representados en formato Decimal, Hexadecimal o en notaciónbinaria.

En notación Decimal, los numerales son representados como una secuencia de dígitos (sin comas,espacios, o puntos), con los prefijos opcionales + o para indicar el signo. Por default los valores

son positivos (6258 es equivalente a +6258).

El prefijo signo de pesos o dólar ($) o el prefijo 0x indica un numero hexadecimal ( por ejemplo, $8Fo 0x8F).

El prefijo signo de porcentaje (%) indica un numero binario (por ejemplo %0101).

Aquí hay algunos ejemplos:

11 ' Valor decimal 

$11 ' Valor Hexadecimal, Igual a 17 decimal 

0x11 ' Valor Hexadecimal, Igual a 17 decimal 

%11 ' Valor Binario, Igual a 3 decimal 

El rango máximo permitido de un valor es impuesto por la longitud del tipo de dato en mikrobasic longint. El compilador reportara un error si la literal excede el valor 2147483647 ($7FFFFFFF).

PUNTO FLOTANTE

Un Valor de punto Flotante consiste en:

Un entero Decimal

El Punto DecimalLa fracción decimale o E y el entero con signo del exponente(opcional)

Las constantes negativas flotantes son tomadas como constantes positivas con el operador unariomenos ( ) como prefijo.

MikroBasic limita las constantes de punto flotante a un rango de + 1.17549435082*10e 18...+ -

6.80564774407*10e38

Aquí algunos ejemplos:

0. ' = 0.0 

19

Page 20: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 20/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

1.23 ' = 1.23 

23.45e6 ' = 23.45 * 10^6 

2e 5 ' = 2.0 * 10^ 5 

3E+10 ' = 3.0 * 10^10 

.09E34 ' = 0.09 * 10^34 

CARACTERES

Las literales de caracteres son solamente un carácter del código ASCCI, dentro de comillas(Porejemplo, "A"). El carácter puede ser asignado a variables de tipo Byte y Char ( la variable byte

asignara el valor ASCII del carácter). también puede asignar variables carácter a variables tipocadena.

CADENAS

Una cadena es una secuencia de 255 caracteres del código ASCII, dentro de comillas. Los

espacios en blanco son preservados dentro de las cadenas. Por ejemplo el analizador ve lasiguiente cadena: "IR A" como un simple token.

La longitud de las cadenas depende del numero del que consisten. Las cadenas se guardaninternamente como la sucesión dada de caracteres más un carácter nulo final (el cero del ASCII).

Las cadenas que no tengan nada dentro de las comillas son guardadas como un carácter nulo.

Puede asignar cadenas a variables de cadena o a un arreglo de variables char.

Algunos ejemplos:

"Hello world!" ' mensaje, 12 caracteres de longitud "Temperature is stable" ' mensaje, 21 caracteres de longitud 

" " ' dos espacios, 2 caracteres de longitud 

"C" ' Letra, un car á cter de longitud 

"" ' cadena vacia, 0 caracteres 

Las comillas por si mismas no pueden ser parte de las cadenas, si desea usar comillas tendrá porejemplo que usar la rutina construida Chr para imprimir las comillas: Chr(34).

Palabras Clave

Las palabras clave son palabras reservadas para propósitos especiales y no pueden ser usadas

como un nombre de un identificador.

Las palabras clave de Basic y las relevantes del registro SFR son definidas como variables

globales y representan palabras reservadas que no pueden ser redefinidas como por ejemplo:PORTB, TIMER0, T1CON, etc. Pruebe el asistente de código para letras especificas o refiérase aPredefiniedo Globales y Contstantes.

Aquí esta el listado alfabético de las palabras reservadas en MikroBasic:

20

Page 21: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 21/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

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

Page 22: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 22/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

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

Page 23: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 23/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

then

to

until

wend

while

with

xor

Mikrobasic también incluye un numero predefinido de identificadores usados en las

librerías. Puede remplazar estos por sus propias definiciones usted planea hacersus propias librerías. Para mas información vea librerías de Mikrobasic.

Identificadores.

Los identificadores son nombres arbitrarios de cualquier longitud dados a

Funciones, variables, Constantes simbólicas, tipos de datos por definidos por elusuario y etiquetas. Todos estos elementos de programa son relacionados con

objetos a través de la ayuda. ( no se confunda con el termino objeto de laprogramación orientada a objetos).

mayúsculas o Minúsculas

Basic no es sensible a las mayúsculas o a las minúsculas, por lo tanto Sum, sum ysuM son identificadores equivalentes.

Singularidad y Alcance

Aunque los nombres del identificador son arbitrarios (dentro de las reglasdeclaradas), los errores resultan si el mismo nombre se usa para más de un

identificador dentro del mismo alcance. Simplemente, los nombres dobles sonilegales dentro del mismo alcance. Para más información, refiérase al Alcance y

Visibilidad.

23

Page 24: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 24/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Ejemplos de Identificadores:

temperature_V1Pressure

no_hitdat2stringSUM3

 _vtext

Y aqui unos identificadores inválidos:

7temp ' NO No pueden iniciar con un numero 

%higher ' NO No pueden iniciar con caracteres especiales 

xor ' NO No pueden ser una palabra reservada  j23.07.04 ' NO No pueden contener puntos 

Signos de puntuación o separadores

los signos de puntuación de MikroBasic son :

Corchetes

Paréntesis

Comas

Dos puntos

Punto

Corchetes

Los corchetes [] indican un simple o múltiples arreglos:

dim alphabet as byte[30]

' ...alphabet[2] = "c"

Para mas información vea Arreglos.

Paréntesis

24

Page 25: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 25/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Los paréntesis () son usados para un grupo de expresiones, aislar expresiones condicionales,indicar la llamada de una rutina y las declaraciones de la rutina:

d = c * (a + b) ' Separar la precedencia normal 

if (d = z) then ... ' Usado con expresiones condicionales 

func() ' llamando una rutina sin argumentos 

sub function func2(dim n as word) ' declarando la funci ó n con sus par á metros.

Para mas información vea Precedencia de operadores y asociatividad de expresiones o Funciones

y Procedimientos.

Coma

La coma (,) separa los argumentos en las llamadas a rutinas:

Lcd_Out(1, 1, txt)

Sirve para separar identificadores en las declaraciones:

dim i, j, k as word

La coma también separa elementos de inicialización en las listas de los arreglos:

const MONTHS as byte[12] = (31,28,31,30,31,30,31,31,30,31,30,31)

Dos Puntos

Los dos puntos (:) son usados para declara una Etiqueta:

start: nop

...

goto start

Para mas información vea Etiquetas.

25

Page 26: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 26/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Punto

El punto (.) indica el acceso a un miembro de una estructura. Por ejemplo:

person.surname = "Smith"

Para mas información Vea Estructuras.

El punto es parte esencial de las literales de punto flotante. Además el punto sirve para acceder a

los bits individuales de los registros en MikroBasic.

Organización del Programa

MikroBasic tiene una estricta organización de programa impuesta, debajo

encontrara modelos para una escritura legible de código. Para mas información de

la inclusión de archivos y alcance vea Módulos y también Alcance y visibilidad.

Organización del Modulo Principal

Básicamente, el código fuente tiene dos secciones: declaraciones y el cuerpo delprograma. Las declaraciones deben ir en la parte apropiada del código,organizadas de manera ordenada, de otro forma el compilador no será capaz de

comprender el programa correctamente.

Cuando escriba el código, siga el modelo que se presenta de bajo. El modulo

principal deberá lucir de la siguiente manera:

program <nombre del programa> include <incluir otros m ó dulos> 

'******************************************************** 

'* Declaraciones Globales: 

'******************************************************** 

' Declaraciones simb ó licas 

symbol ...

' declaraci ó n de constantes 

const ...

'declaraci ó n de Variables 

dim ...

' declaraci ó n de procedimientos 

sub procedure nombre del procedimiento (...)

  <Declaraciones locales> 

...

end sub

26

Page 27: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 27/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

' declaraci ó n de funciones 

sub function nombre de la funci ó n (...)

  <declaraciones globales> 

...

end sub

'******************************************************** 

'* Cuerpo del Programa 

'******************************************************** 

main:

  ' Escriba el c ó digo aqui 

end.

Organización de otros módulos

Los módulos que no sean el Modulo principal deben empezar con la palabra clave module; la

sección de implementación empieza con la palabra clave implements. Siga el modelo presentado

debajo:

module  <nombre del modulo> 

include <incluir otros m ó dulos> 

'******************************************************** 

'* Interfase (Globales)

'******************************************************** 

' declaraci ó n de s í  mbolos 

symbol ...

' declaraci ó n de Constantes 

const ...

' declaraci ó n de Variables 

dim ...

' Prototipos de procedimientos 

sub procedure Nombre del procedimiento (...)

' Prototipo de la funci ó n 

sub function Nombre de la funci ó n (...)

'******************************************************** 

'* implementaci ó n 

'******************************************************** 

implements

27

Page 28: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 28/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

' declaraci ó n de constantes 

const ...

' declaraci ó n de Variables 

dim ...

' declaraci ó n de procedimientos 

sub procedure nombre del procedimiento (...)

  <Declaraciones locales> 

...

end sub

' declaraci ó n de la funci ó n 

sub function nombre de la funci ó n (...)

  <Declaraciones locales> 

...

end sub

end.

Alcance y Visibilidad

Alcance

El alcance de los identificadores es la parte del programa donde los identificadores pueden ser

usados para acceder un objeto. Hay diferentes categorías de alcances y dependen de como ydonde fueron declarados los identificadores:

Lugar de la declaración Alcance

El identificador es declarado en la sección de

declaraciones del modulo principal, fuera decualquier modulo o procedimiento

El alcance se extiende desde el punto donde

fue declarado hasta el final del archivo,

incluyendo todas las rutinas dentro del

alcance del archivo. Este identificador tiene

un archivo de alcance y es referido como

GLOBAL

El identificador es declarado dentro de unafunción o de un Procedimiento

El alcance se extiende desde el punto donde

fue declarado hasta el fin de la rutina en uso.

Este identificador es referido como LOCAL

El identificador es declarado en la sección deinterfase de un Modulo

El alcance se extiende del punto donde fue

declarado hasta el fin del modulo y hasta

cualquier otro programa que use esemodulo. La única excepción son los

sí mbolos que tienen alcance limitado en el

archivo en el cual fueron declarados.

El Identificador fue declarado en la sección

de implementación de un modulo, pero no

dentro de una función o procedimiento.

El alcance se extiende del punto donde fue

declarado hasta el fin del modulo. El

identificador esta disponible para cualquier

función o procedimiento que este dentro del

modulo.

28

Page 29: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 29/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

VISIBILIDAD

La visibilidad de un identificador es la región del programa del código fuente donde puede hacerseel acceso legal al objeto asociado al identificador.

El alcance y la visibilidad generalmente coinciden, aunque hay circunstancias en la que un objetose 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 identificadorduplicado termine.

Técnicamente, la visibilidad no puede exceder al alcance, pero el alcance puede exceder lavisibilidad.

MODULOS

En mikroBasic cada proyecto consiste en un único archivo de proyecto, y uno o mas archivos de

módulos. El archivo proyecto con extensión .pbp  contiene información acerca del proyecto,

mientras que los módulos con extensión .pbas contienen el código fuente. Vea Organización deprograma para ver detalladamente el arreglo de un programa.

Los módulos permiten:

Separar programas extensos en módulos encapsulados que pueden ser

accesados y editados individualmente.Crear librerías que pueden ser usadas en diferentes proyectos.

Distribuir librerías a otros programadores sin incluir el código fuente.

Cada modulo es guardado como su propio archivo y compilado por separado, los móduloscompilados son encadenados para crear una aplicación. Para crear un proyecto el compiladornecesita cada archivo fuente o el modulo compilado de cada modulo.

Cláusula INCLUDE

MikroBasic incluye los módulos que tengan la cláusula include , la cual consiste en la palabra

reservada include seguida de el nombre del modulo entrecomillado. La extensión del archivo no

debe ser incluida.

Puede incluir un solo archivo por cada cláusula include . Puede haber cualquier numero de

cláusulas include en cada código fuente, Pero ellos deben declararse inmediatamente después delnombre del programa.

Por ejemplo:

29

Page 30: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 30/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

 program MyProgram

include "utils"

include "strings"

include "MyUnit"

...

 

Dándole un nombre al modulo, el compilador verificara la presencia de los archivos .mcl  y .pbas .

En orden especificado por las rutas de búsqueda.

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 libreríasobrescribirá 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 código 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 esidentificado por la palabra reservada program al inicio; esto sirve para que el compilador sepa por

donde empezar.

Después de que haya creado un nuevo proyecto con el asistente de proyecto, el editor de código

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 después del

nombre del programa usted puede incluir opcionalmente las cláusulas include 

Ponga todas las declaraciones globales (constantes, variables, etiquetas, rutinas) antes de la

etiqueta main  

30

Page 31: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 31/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

NOTA: En mikrobasic, la declaración end. (la declaración de finalización de cualquier programa)

actúa como un ciclo infinito.

OTROS MODULOS

Cualquier otro modulo que no sea el principal deberá comenzar con la palabra reservada module .Nuevamente creara un espacio en blanco del modulo el cual puede lucir así:

 module MyModule

implements

end.

Cualquier otra cosa que no sea un comentario no debe ir precedida de la palabra reservada

module. Después de la cláusula module  usted puede añadir opcionalmente la cláusula include.

SECION DE INTERFACE 

Parte del modulo sobre la palabra clave implements se refiere a la sección de interfase. Aquí puede

poner las declaraciones globales (constantes, variables y etiquetas) para el proyecto.

No puede definir rutinas en la sección de interfase, En cambio declare los prototipos de las rutinas(de la sección de implementación) que quiera que estén visibles fuera del modulo. El prototipodebe coincidir con la declaración exactamente.

SECCION DE IMPLEMENTACION

La sección de implementación esconde todas las entrañas irrelevantes de otros módulos,

permitiendo así el encapsulado del código.

Cualquier declaración debajo de la palabra reservada implementes es privada. Es decir tiene unalcance limitado al archivo. Cuando declare un identificador en la sección de implementación de un

modulo, no podrá usarlo fuera de ese modulo, pero puede usarlo en cualquier rutina o bloquedefinido dentro del modulo.

Poniendo el prototipo en la sección de interfase (arriba de la sección de implementación) puedehacer una rutina publica. Es decir visible fuera del modulo. El prototipo debe coincidir exactamente

con la declaración.

VARIABLES

Una variable es un objeto cuyo valor puede ser cambiado durante el tiempo de ejecución. Cadavariable 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 sección de declaración de cualquier archivo o rutina, cada

variable debe ser declarada antes de ser usada. Las variables Globales (aquellas que no están

31

Page 32: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 32/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

encerradas por ninguna rutina o procedimiento) son declaradas debajo de las cláusulas include y

arriba de la etiqueta main.

Es imperativo especificar el tipo de variables en mikrobasic. La sintaxis para declara una variable

en MikroBasic es:

dim  nombre_de_identificador  as type

Donde nombre del identificador puede estar delimitado por una coma para separar diferentes

nombres de identificadores y type  es el tipo de dato soportado por MikroBasic.

Para mas detalles vea Tipos y Tipos de conversiones, Para mas información del alcance de lasvariables vea Alcance y Visibilidad.

Aquí algunos ejemplos:

dim i, j, k as byte

dim counter, temp as word

dim samples as longint[100] 

VARIABLES Y EL PIC

Cada variable declarada consume una parte de la memoria RAM del PIC. El tipo de dato de lavariable no solo delimita el rango de la variable sino también determina el espacio usado en la

memoria RAM del PIC. Tenga en mente que realizar operaciones con diferentes tipos de variablestoma diferentes tiempos en ser completadas. mikroBasic recicla el espacio de variables locales – 

las variables locales declaradas en diferentes rutinas y procedimientos comparten el mismoespacio de memoria si es posible.

No es necesario declarar el tipo de variables del registro SFR, mikroBasic automáticamente declara

los registros relevantes como variables globales del tipo byte por ejemplo: T0IE, INTF, etc .

CONSTANTES

Una constante es un dato cuyo valor no puede ser cambiado durante el tiempo de ejecución. Usaruna constante en un programa no consume memoria RAM de un PIC. Una constante puede usarse

en cualquier expresión pero no se le puede asignar otro valor.

Las constantes son declaradas en la sección de declaración de un programa. La sintaxis dedeclaración de una constante deberá ser as:

const constant_name [as type] = value

Cada constante es declarada bajo un único nombre, el cual debe ser un identificador valido. Es una

tradición escribir las constantes en mayúsculas. Una constante necesita que se especifique su va

lor (value) que es una literal apropiada para el tipo de dato usado. El tipo (type) es opcional; en la

32

Page 33: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 33/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

ausencia del tipo el compilador asume el tipo de dato mas pequeño el cual se ajuste al tamaño del

valor.

NOTA: No puede omitir el tipo de constante si esta se trata de un arreglo.

Aquí algunos ejemplos:

const MAX as longint = 10000

const MIN = 1000 ' El compilador asume el tipo de dato como word 

const SWITCH = "n" ' El compilador asume el tipo de dato como char 

const MSG = "Hello" ' El compilador asume el tipo de dato como cadena

const MONTHS as byte[12] = (31,28,31,30,31,30,31,31,30,31,30,31)

ETIQUETAS

Las etiquetas sirven como objetivos para las declaraciones goto y gosub. Marque las etiquetas deseadas 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 haciauna función o un procedimiento, No establezca una misma etiqueta para dos identificadores diferentes.

Aquí hay un ejemplo de un ciclo infinito que llama al procedimiento beep repetidamente:

loop: Beep

goto loop

SIMBOLOS

En Basic los símbolos permiten crear macros sin necesidad de parámetros. Puede reemplazar

cualquier línea de código por un identificador alias . Cuando los símbolos son usados correctamentepueden incrementar la usabilidad y la legibilidad del código.

Los símbolos necesitan ser declarados inmediatamente después del inicio del modulo, justo después del nombre del modulo y opcionalmente de las cláusulas incluye . Vea organización de programa para mas detalles. El alcance de un símbolo esta siempre limitado al archivo en el cual fue declarado.

Un Símbolo es declarado así:

symbol alias = code

33

Page 34: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 34/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Aquí, el alias debe ser un identificador valido el cual usara a lo largo del código, Este identificador

tiene el alcance del archivo, el c ó digo  (code )puede ser cualquier línea de código valida.

Usar un símbolo no consume memoria RAM de un PIC, el compilador simplemente reemplaza

cada instancia de cada símbolo por la apropiada declaración de su código.

Aquí algunos ejemplos:

symbol MAXALLOWED = 216 ' Symbol es el alias de un valor numéri

co

symbol PORT = PORTC ' Symbol es el alias de un registro SFR

symbol MYDELAY = Delay_ms(1000) ' Symbol es el alias de un procedimiento

dim cnt as byte  ' alguna variable

'...

main:

if cnt > MAXALLOWED then

cnt = 0

PORT.1 = 0

MYDELAY

end if

NOTA: Los símbolos no soportan la expansión de macros como lo hace el preprocesador de C

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 parámetros. Una función regresa un parámetro cuando esta es finalizada,un procedimiento no lo hace.

NOTA: Vea especificaciones PIC para mas información de la limitaciones de las rutinas de los PIC

micros.

FUNCIONES

Las funciones son declaradas así:

sub function nombre de la función(lista de par ámetros) as tipo que regre

sa

[ declaraciones locales]

  Cuerpo de la función

end sub

El nombre de la function representa el nombre de un identificador valido. El tipo que regresa, es eltipo del valor regresado por la función y puede ser de tipo simple. Dentro de los paréntesis, la lista

de parámetros, son los parámetros formales similares a la declaración de variables. En mikrobasic,

34

Page 35: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 35/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

los parámetros son siempre pasados de la función por un valor; para pasar argumentos por direc

ción, añada la palabra reservada byref adelante del identificador.

Las declaraciones locales son declaraciones opcionales sobre variables y/o constantes locales,para uso de la función. El cuerpo de la función es la secuencia de declaraciones a ser ejecutadas

cuando se llame a la función.

Llamando una función

Una funcion es llamada por su propio nombre, con los argumentos necesarios, ingresados de lamisma manera que los parámetros de la funcion. El compilador es capaz de restringir los argumentos erroneos al tipo de argumento valido usando las reglas de conversión implicita. En la llamada

de la funcion se crean los parámetros formales como objetos locales inicializados por valores de argumentos reales. En el retorno de la funcion, un objeto temporal es creado en lugar de la llamada,

y es inicializado por la declaracion de la palabra reservada return. Esto significa que la llamda de lafuncion es un operando en una expresión compleja y es tratada como el resultado de una funcion.

Use la variable result (automáticamente es puesta como local) para asignar un valor de retorno de

la funcion.

Las llamadas de la funcion son consideradas como expresiones primarias, y pueden ser usadas ensituaciones donde se espera una expresión. Una llamada de la función tambien puede ser una declaracion autocontenida, en cuyo caso el valor de regreso es descartado.

Ejemplo:

Aquí hay un ejemplo de una funcion que calcula el numero xn basado en dos parámetros de entrada: x y n donde n tiene que ser mayor que cero (n>0):

sub function power(dim x, n as byte) as longint

dim i as byte

i = 0

result = 1

  if n > 0 then

  for i = 1 to n

result = result*x

  next i

  end if

end sub

Ahora aquí se realiza la llamda de la funcion para calcular el numero 312

:

tmp = power(3, 12)

35

Page 36: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 36/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

PROCEDIMIENTOS

Un procedimiento es declarado de la siguiente manera:

sub procedure nombre_del_procedimiento (lista de parametros)

[ declaraciones locales ]

  Cuerpo del procedimiento

end sub

El nombre del procedimiento representa el nombre de identificador valido para el procedimieto actual. Dentro de los paréntesis, la lista de parámetros representa una lista similar a la declaracion devariables. En mikroBasic, los parámetros siempre son pasados de procedimiento por valor; para

pasar argumento por direccion use la palabra clave byref  delante del identificador.

Las declaraciones locales, son declaraciones opcionales de variables y/o constantes locales usadas por el procedimiento. El cuerpo del procedimiento son las secuencias de declaraciones a ser

ejecutadas cuando se llame al proceso.

Llamando un Proceso

Un proceso es llamado por su nombre, con los argumentos necesarios, ingresados de la misma

manera que los parámetros del procedimiento. El compilador es capaz de restringir los argumentoserroneos al tipo de argumento valido usando las reglas de conversión implicita. Cuando se llamaun proceso, todos los parámetros formales son creados como objetos locales inicializados por los

valores de los argumentos.

La llamada de un proceso es una declaracion auto contenida.

Ejemplo:

Aquí hay un ejemplo donde se utiliza un procedimiento el cual prepara las entradas de tiempo paraser visualizadas por un LCD.

sub procedure time_prep(dim byref sec, min, hr as byte)

sec = ((sec and $F0) >> 4)*10 + (sec and $0F)

min = ((min and $F0) >> 4)*10 + (min and $0F)

hr = ((hr and $F0) >> 4)*10 + (hr and $0F)

end sub

TIPOS

Basic es un lenguaje estrictamente tipificado(se refiere a los tipos de datos), lo que significa quecada variable o constante necesita tener un tipo estricto de dato conocido para el momento de lacompilación.

36

Page 37: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 37/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Los tipos sirven para:

Determinar el correcto espacio de memoria que sera usadoPara interpretar de manera correcta los patrones de los bits encon

trados en el objeto durante el subsecuente accesoMuchas veces para determinar los tipos de dato erroneos, usdadosen las declaraciones.

TIPOS DE CATEGORIA

Los tipos pueden ser divididos en:

Tipos simples

ArreglosCadenasPunteros

Estructuras (tipos definidos por el usuario)

TIPOS SIMPLES

Los tipos simples representan los tipos que no pueden ser divididos en mas elementos basicos, yson el modelo para representar los tipos de dato elementales en el lenguaje maquina.

Aquí esta una tabla de los tipos simples en mikroBasic:

Tipo Tamaño Rango

byte 8–bit 0 – 255

char* 8–bit 0 – 255

word 16–bit 0 – 65535short 8–bit 128 – 127

integer 16–bit 32768 – 32767

longint 32–bit 2147483648 – 2147483647

float 32–bit ±1.17549435082 * 1038 ..

±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 conversión explicita. Vea tipos de conversio

nes para mas información.

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 significativamentemas de una vez el mismo valor.

37

Page 38: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 38/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Declaracion de arreglos

El tipo de arreglos es denotado por la siguiente manera de construccion:

tipo[longitud del arreglo]

Cada elemento del arreglo es numerado desde 0 hasta la longitud del arreglo . Cada elemento delarreglo es de un tipo y puede ser accesado especificando su nombre seguido del numero de indice

dentro de corchetes.

Aquí unos ejemplos de declaraciones de arreglos:

dim weekdays as byte[7]

dim samples as word[50]

main:

  ' Ahora podemos acceder a los indices del arreglo

samples[0] = 1

  if samples[37] = 0 then

...

Arreglo de constantes

La inicializacion del arreglo de constantes, es asignada por una delimitacion de comas de los valores de cada indice. Por ejemplo:

' declaramos un arreglo de constants el cual contiene los dias de cada

mes

const MONTHS as byte[12] = (31,28,31,30,31,30,31,31,30,31,30,31)

Note que la indexacion esta basada desde el cero, por lo tanto Enero es el MONTHS[0] y Diciem

bre seria el MONTHS[11] 

El numero de los valores asignados no debera exceder el limte del tipo de dato, si esto llegara a suceder el valor asigando sera 0.

Para información de arreglo de datos Char vea Cadenas.

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 fácilmente. Es decir los arreglos sonalojados en filas. Aquí hay un ejemplo de un arreglo bidimensional:

dim m as byte[50][20] ‘arreglo bidimensional de tamaño 50x20

38

Page 39: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 39/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

La variable m  tiene un arreglo de 50 elementos y cada uno tiene un arreglo de un byte, tenemos

entonces una matriz de 50x20 donde el primer elemento es m[0][0], el ultimo sera m[49][19] y el pri

mer elemento de la 5ta fila sera m[0][5].

Si no ha inicializado el arreglo en la declaracion, puede omitir l aprimera dimension del arreglo multidimensional en este caso el arreglo es guardado en cualquier parte, por ejemplo en otro archivo.

Esta es una tecnica comúnmente usada para pasar arreglos a parámetros de una funcion.

sub procedure example(dim byref m as byte[50][20]) ‘podemos omitir la

  primera dimension...

inc(m[1][1])

end sub

dim m as byte[50][20] 'arreglo de 2 dimensiones 50x20

dim n as byte[4][2][7] 'arreglo de 3 dimensiones 4x2x7main:

...

func(m)

end.

CADENAS

Una cadena representa una secuencia de caracteres y es equivalente a un arreglo construido con

tipo de dato Char. Su decalaracion es asi:

string[longitud de cadena]

Donde la longitud de cadena se refiere al tamaño maximo en el cual consistira la cadena. Las ca

denas son guardadas internamente como una secuencia de caracteres finalizadas por un carácternulo, este ultimo no afecta la longitud de la cadena.

Una cadena nula (“”), es guardada como un carácter nulo.

Puede asignar literales u otras cadenas a las variables de cadena, la cadena del lado derecho después del operador deber ser menor o igual a la cadena o literal del lado izquierdo. Por ejemplo:

dim msg1 as string[20]

dim msg2 as string[19]

main:

msg1 = "This is some message"

msg2 = "Yet another message"

msg1 = msg2 ' esto esta bien, pero viceversa seria un error 

Alternativamente puede manejar elemento por elemento de la cadena, por ejemplo:

39

Page 40: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 40/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

dim s as string[5]

...

s = "mik"

' s[0] es el caracter "m"

' s[1] es el caracter "i"

' s[2] es el caracter l "k"

' s[3] es cero

' s[4] no esta definido

' s[5] no esta definido

Tenga cuidado cuando use las cadenas de esa manera, sobrescribir el fin de la cadena puede ocasionar una violación de acceso.

Empalmado de cadenas

mikroBasic permite empalmar cadenas mediante del signo mas (+). Este encadenamiento es apli

cable a variables/literales de cadena y variables/literales de carácter. Para el control de caracteresuse la rutina construida Chr 

El resultado de empalmar cadenas es una cadena. Vea la funcion Strcat 

Aquí un ejemplo:

dim msg as string[100]

dim res_txt as string[5]

dim res, channel as word

main:

res = Adc_Read(channel) ' Obtener el valor del ADC 

WordToStr(res, res_txt) ' Crear una variable para mostrar en forma de

cadena

' 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

Page 41: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 41/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

PUNTEROS

Un puntero es un tipo de dato que almacena una direccion de memoria. Mientras que una variableaccesa a esa direccion directamente. Un puntero puede describirse como una referencia a una di

rección de memoria.

Para declara un puntero añada el prefijo carat (^) antes del tipo. Por ejemplo si esta creando un

puntero para un entero seria asi:

^integer

Para ingresar el dato al puntero de la direccion de memoria, tendra que añadir el carácter carat (^)

después del nombre. Por ejemplo si declara p cuyo puntero es Word y para asignar el valor 5 a esadireccion tendra que ser de la siguiente forma:

dim p as ^word

...p^ = 5

Un puntero puede ser asignado a otro puntero, de cualquier forma solo se apunta la direccion no el

valor. Una vez modificado el dato de un puntero, el otro puntero diferenciara y tambien modificarasus datos.(dato es la direccion a la que apunta).

Operador @

El operador @ regresa la direccion de la variable o la rutina; esto es, @ constituye un operador

para un puntero. Las siguientes reglas se aplican para @:

Si x es una variable, @x devolvera la direccion de la variable xSi F es una rutina (un procedimiento o funcion), @F devolvera el punto

entero de F’s (el resultado es de tipo longint)

ESTRUCTURAS

Las estructuras representan una serie de elementos heterogeneos. Cada elemento es llamada unmiembro; la declaracion de la estructura define el tipo de cada miembro. La sintaxis de declaracion

de estructuras es la siguiente:

structure nombre de estructura

  dim miembro1 as tipo1...

  dim  miembron as tipon

end structure

Donde el nombre de la estructura es un identificador valido, cada tipo denota un tipo y cada miembro es un identificador valido para cada tipo. El alcance del identificador del miembro, esta limitadoal alcance de la estructura. Asi que no debe preocuparse por duplicar el nombre de un identificador

entre miembros y variables.

41

Page 42: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 42/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

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 delmiembro; 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 seandel mismo tipo.

circle2 = circle1 ' esto copiara todos los valores de todos los miembros

42

Page 43: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 43/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

TIPOS DE CONVERSINES

La conversion de un tipo de objeto, es el cambio de un mismo objeto a otro tipo (es decir, aplicar elcambio de tipo de un objeto). mikroBasic soporta la conversión explicita e implicita para los tipos

construidos.

Conversión Implí cita

El compilador provee automáticamente la conversión implícita en los siguientes casos:

La declaración requiere una expresión de un tipo en particular ( deacuerdo con la definición del lenguaje), y es usada una expresión

de diferente tipo.El operador requiere de un operando de un tipo en particular, yusamos un operando de diferente tipo.

La función requiere de un parámetro formal de un tipo enparticular, y nosotros lo pasamos a un objeto de diferente tipo.

Result no concuerda con el tipo de dato declarado al regreso de lafunción.

Promoción

Cuando los operandos son de diferentes tipos, la conversión implicita promueve el cambio delmenos complejo al mas complejo tipo de datos llevada acabo por los siguientes pasos:

byte/char word→

short integer→

short longint→

integer longint→

integral float→

Los bytes mas altos de un operando sin signo son llenados con ceros. Los bytes mas altos de unoperando 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 a as byte

dim b as word

...

a = $FF

b = a ' a es promovido a word, b se vuelve $00FF 

43

Page 44: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 44/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Sujetando

En asignaciones y declaraciones que requieran de una edxpresion de un tipo en particular, eldestino debe ser guardado en el valor correcto solo si este puede representar apropiadamente el

resultado de la expresión (esto es, si el resultado cabe dentro del rango del destino).

Si la expresión sobrepasa el limite esperado del tipo evaluado, el exceso de datos sera

simplemente sujetado (los bytes mas altos se perderan).

dim i as byte

dim j as word

...

j = $FF0F

i = j ' i se vuelve $0F, los bytes mas altos $FF se perderan.

Conversión Explicita

La conversión explicita puede ser usada en cualquier punto del programa usando las palabras

reservadas byte, word, short, integer, longint, o float delante de la expresión aser convertida. La expresión debera estar encerrada entre paréntesis. La conversión explicita solopuede ser usada en el operando a la derecha del operador declarado.

Una conversión especial es aquella entre tipos con y sin signo. La conversión explicita entre datoscon signo y sin signo no cambiara la representación binaria del dato –solamente se copia al

destino.

Por ejemplo:

dim a as bytedim b as short

...

b = 1

a = 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 conversión explicita con el operando a la izquierda del operador declarado.

word(b) = a ' Compiler will report an error 

Ejemplos de conversions

dim a, b, c as byte

dim cc as word

...

a = 241

b = 128

c = a + b ' igual 113

44

Page 45: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 45/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

c = word(a + b) ' igual 369

cc = a + b ' igual 369

Conversiones Aritméticas

Cuando usa una expresión aritmetica, como a+b, donde a y b son tipos de datos diferentes,mikroBasic realiza la conversión implicita de los tipos antes de ser evaluados. Estas conversionesincluyen 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 carácter (como una variable) a un objeto integral el resultado

automáticamente estara signado. Los objetos de tipo short siempre usan una extensión 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 signoextendido o llenando con ceros los bits extras del nuevo valor. Dependiendo si el dato corto estasignado 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 pequeño es convertido de acuerdo a las siguientes reglas:

1. byte  se convierte a integer 

2. short se convierte a integer , con el mismo valor

3. short se convierte a integer, con el mismo valor, con signo extendido

4. byte se convierte a integer, con el mismo valor, rellenado con ceros

El resultado de la expresión es el mismo tipo que la de los 2 operandos.

Aquí unos ejemplos de la conversión implicita:

2 + 3.1 ' 2. + 3.1 5.1→ →

5 / 4 * 3. ' (5/4)*3. 1*3. 1.*3. 3.→ → → →

3. * 5 / 4 ' (3.*5)/4 (3.*5.)/4 15./4 15./4. 3.75→ → → → →

45

Page 46: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 46/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

OPERADORES

Los operadores son tokens que activan algun computo cuando son aplicados a una variable o a un

objeto en alguna expresión.

Existen cuatro tipos de operandos en mikroBasic:

Operadores aritmeticos

Operadores InteligentesOperadores relacionales

Operadores, Precedencia y Asociatividad.

Hay 4 categorias de precedencia en mikroBasic. Los operadores que estan en la misma categor ía

tienen la misma precedencia uno con otro.

Cada categoría tiene reglas de asociatividad: izquierda a derecha (→), o de derecha a izquierda(←). En la ausencia de paréntesis, estas reglas resuelven la agrupación con expresión de la

misma categoría.

Precedencia Operandos Operadores Asociatividad

4 1 @ not + - ←

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

2 2 + or xor →

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

OPERADORES ARITMETICOS

Los operadores aritmeticos son usados para realizar computos matematicos, estos tienen

operadores numericos y regresan un valor numerico. Como los operadores char básicamente 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 aritméticos se asocian de izquierda a derecha.

Operador Operacion Operandos Resultado

+ suma byte, short, integer,

word, longint, float

byte, short, integer,

word, longint, float

resta byte, short, integer,

word, longint, float

byte, short, integer,

word, longint, float

* multiplicacion byte, short, integer,

word, float

integer, word, lon

gint, float

  / division, punto flo byte, short, integer, byte, short, integer,

46

Page 47: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 47/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

tante word, float word, float

div division, redondeo al

entero mas cercano

byte, short, integer,

word, longint, float

byte, short, integer,

word, longint

mod modulo, regresa elresto de la division

de un entero(no pue

de ser usada con va

lores flotantes.)

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 yson tipo Word el resultado sera $FFFF).

Operadores aritmeticos unarios.

El operador – (menos) puede ser uado como el prefijo unario de un operando, para cambiar elsigno 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 Operation

= Igual

<> Diferente

> Mayor que

< Menor que

>= Mayor igual

<= Menor igual

Todos los operadores se relacionan de izquierda a derecha.

47

Page 48: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 48/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Operadores relacionales en expresiones.

El signo igual (=) tambien puede ser un operador de asignación, dependiendo del contexto.

La precedencia de los operadores aritmeticos y relacionales fueron designados para trabajar conexpresiones complejas sin paréntesis lo que quiere decir que:

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

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.

Operador Operación

and AND inteligente; compara pares de bits y genera 1

si ambos son uno de otro modo genera un 0

or OR (inclusiva) inteligente; compara pares de bits y

genera un 1 si el resultado es 1, de otra forma genera

0

xor OR exclusiva (XOR); compara pares de bits y gene

ra un 1 si el resulatdo de ambos es complementario,

de otra forma regresa 0

not 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

Page 49: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 49/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Operaciones lógicas a nivel bit

and 0 1

0 0 01 0 1

or 0 1

0 0 1

1 1 1

xor 0 1

0 0 1

1 1 0

not 0 1

1 0

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 ' igual a $567C 

$1234 xor $5678 ' igual a $444C 

not $1234 ' igual a $EDCB

 

Conversiones sin signo

Si un numero es convertido de un tipo menos complejo a uno mas complejo, los bits mas altosseran 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 a as byte

dim b as word

...

a = $AA

b = $F0F0

49

Page 50: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 50/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

b = b and a

  ' a es extendido con ceros; b se vuelve $00A0

 

Conversiones con signo

Si un numero es convertido de un tipo menos complejo a uno mas complejo. Los bits mas altos sonllenados 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 unomenos complejo, los bits mas altos se perderan.

Por ejemplo:

dim a as byte

dim b as word

...

a = 12

b = $70FF

b = 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 bitsson 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 esverdadero 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 laizquierda 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 posicioneses equivalente a dividirlo por 2n.

EXPRESIONES

Una expresión son una serie de declaraciones, operandos, operadores y puntuaciones que

retornan un valor.

Las expresiones primarias incluyen: literales, constantes, variables  y llamadas a funciones . Apartirde esto, usando operadores se pueden crear expresiones mas complejas. Formalmente lasexpresiones son definidas recursivamente: las subexpresiones pueden añadirse al limite de la

memoria.

50

Page 51: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 51/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Las expresiones son evaluadas de acuerdo al tipo de conversión, grupo, asociatividad y las reglasde precedencia usado por los operadores dentro de ellas, la presencia de paréntesis y el tipo de

dato de los operandos. La manera en que las expresiones son agrupadas no necesariamenteespecifican el orden actual en que son evaluadas por mikroBasic.

No puede mezclar tipos de dato con o sin signo en expresiones de asignación o en expresionesaritmeticas o en expresines logicas. Puede usar la conversión explicita para ello.

DECLARACIONES

Las declaraciones definien la manera en que actuan los algoritmos dentro de un programa. Cadadeclaracion necesita estar determinada por una nueva linea de carácter (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 selección de declaracines, las declaraciones seran ejecutadas de manera secuencial talcomo estan escritas en el codigo fuente.

Vea:

Declaraciones de asignación

Declaraciones condicionalesDeclaraciones de iteración (ciclos)

Declaraciones de saltosDeclaraciones de lenguaje Ensamblador (ASM).

Declaraciones de asignación

Las declaraciones de asignación tiene la siguiente forma:

variable = expresión

la declaracion evalua la expresi ó n y le asigna el valor de la variable. Todas las reglas de la

conversión implicita se aplican. Variable  puede ser declarada como una variable o como un arreglo

y expresi ó n puede ser cualquier expresión.

No confunda el asignamiento con el operador relacional igual (=), que prueba una igualdad.Mikrobasic interpretara el signo igual (=) dentro de su contexto.

51

Page 52: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 52/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Declaraciones condicionales

Las declaraciones condicionales o de selección, escogen diferentes tipos de acciones dependiendode los valores o expresiones evaluadas. Hay 2 tipos de declaraciones condicionales:

IfSelect Case

 Declaraciones IF

Use declaraciones if para implementar una declaracion condicional. La sintaxis de lasdeclaraciones IF es la siguiente:

if expresion then

  declaraciones

[else

  Otras declaraciones]

end if

Donde la expresi ó n, es evaluada si es verdadero las declaraciones se ejecutan. Si la expresi ó n 

es falsa se ejecutaran otras declaraciones . La expresión debe ser convertida a tipo bolean, de otra

forma la expresión esta mal formulada. La palabra clave else  y las otras declaraciones sonopcionales.

Declaraciones de IF’s anidados

Anidar If’s requiere de atención especial, la regla general es que la condicion anidada se analizadesde la condicion mas profunda, con cada else limitando al if mas cercano de la izquierda.

Declaraciones Select Case

Use la declaracion select case para pasar el control o saltar a una rutina de programa, basado en

una condicion certera. La palabra clave select case consiste en un selector de una expresión ( unacondicion) y una lista de posibles valores. La sintaxis de select case es la siguiente:

select case selector 

  case valor_1

  declaraciones_1

...

  case valor_n

  declaraciones_n

[case else

  Declaraciones _default]

end select

 

52

Page 53: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 53/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Primero el selctor es evaluado, después 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 lecaso 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 0opmode = 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 profundoselect case .

53

Page 54: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 54/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

DECLARACIONES DE ITERACION.

Las declaraciones de iteración le permiten crear ciclos de un set de declaraciones. Hay tres formasde hacer iteraciones con mikroBasic:

ForWhile

Do

Puede usar las palabras reservada break  y continue  para regular el control de flujo de una

iteración. La declaración break  termina las declaraciones cuando este se presenta. Mientras que

continue  comienza el siguiente ciclo de iteraron de la secuencia.

Declaraciones FOR

La declaracion de un FOR determina un ciclo de iteración y requiere que se especifique el numerode iteraciones. La sintaxis de una sentencia For es:

for contador = valor inicial to valor final [step valor de paso]

  declaraciones

next contador 

El contador es una variable que se incrementa según el valor del paso con cada iteración del ciclo.

El parámetro valor de paso es un valor entero opcional y si este es omitido el valor por defecto es 1,antes de la primera iteración, el valor del contador es puesto al valor inicial y se incrementa

mientras no exceda o no llegue al valor final, con cada iteración 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 cómo 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

Page 55: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 55/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

dim counter as byte

...

for counter = 0 to 300

nop

next counter

para hacer un cilo infinito mas legible en mikroBasic puede usar la sentencia while true.

Declaraciones WHILE

Use la sentencia while para condicionar una declaracion de iteración. La sintaxis es:

while expresion

declaraciones

wend

Las declaraciones se ejecutaran repetidamente, mientras la expresión sea verdadera, esto es si laexpresión al ser evaluada la primera vez es falsa no se ejecutaran las declaraciones.

Aquí esta un ejemplo de cómo calcular el producto escalar de 2 vectores usando la sentenciaWhile:

s = 0

i = 0

while i < n

s = s + a[i] * b[i]

i = i + 1

wend

Problamente la manera mas facil de hacer un ciclo infinito sea esta:

while TRUE

...

wend

Declaraciones DO

La sentencia do ejecuta un ciclo mientras la condicion sea verdadera. La sintaxis es:

do

  declaraciones

loop until expresión

Las declaraciones son ejecutadas mientras la expresión evaluada sea verdadera. La expresión es

evaluada depuse de cada iteración. Entonces las todas declaraciones se ejecutaran.

55

Page 56: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 56/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Aquí hay un ejemplo de cómo calcular el producto escalar de 2 vectores, usando la sentencia DO:

s = 0

i = 0...

do

s = s + a[i] * b[i]

i = i + 1

loop until i = n

DECLARACIONES DE SALTOS

Cuando una declaracion de saltos es ejecutada, transfiere un control incondicionalmente. Hay cicotipos de sentencias de saltos en mikroBasic:

BreakContinue

ExitGoto

Gosub

Declaraciones Break, Continue.

BREAK

Algunas veces es necesario hacer una pausa desde dentro del cuerpo del codigo. Use la

sentencia break  dentro de los ciclos para pasar el mando a la primera declaracion seguido delmas profundo ciclo (for while o do).

Por ejemplo:

'esperar que la tarjeta_CF sea conectada; actualizar cada segundo

while true

Lcd_Out(1, 1, "No card inserted")

  if Cf_Detect() = 1 then

   break

  end if

Delay_ms(1000)

wend

' ahora podemos trabajar con la tarjeta CF.Lcd_Out(1, 1, "Card detected ")

56

Page 57: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 57/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Declaracion Continue

Puede usar la sentencia continue dentro de los cilcos para saltarse el ciclo:

La sentencia continue en ciclos For, mueve el programa a la lineafor, esto no cambia el contador del cilco

' continue salta aqui

for i = ...

...

  continue

...

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 lineade la condicion (abajo)

do...

  continue

...

' continue salta aqui

loop until condition

Declaraciones EXIT

La sentencia exit le permite romper una rutina ( una funcion o un procedimiento). Pasa el control a

la siguiente expresión 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

Page 58: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 58/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

  end if

... ' algun codigo que no sera ejecutado si se encuentra un error 

end sub

 

NOTA: si rompio una funcion, el valor regresado sera el valor de la variable local result al momento

de la salida.

Declaración GOTO

Use la sentencia goto para un salto sin condiciones a cualquier etiqueta local – para masinformación vea Etiquetas . La sintaxis de un goto es:

goto nombre de etiqueta

Esto transferira el control a la posición al lugar especifico del nombre de la etiqueta. La palabrareservada puede estar antes o después de la etiqueta, no es posible saltar dentro o fuera de una

rutina.

Puede usar la sentencia goto para salir de cualquier estructura de control anidada, nunca salte auna estructura de un ciclo o a expresiones estructuradas, porque esto puede tener efectosimpredecibles.

Usar un goto puede ser usado en cualquier algoritmo, resultando asi un codigo mas legible. Unaposible aplicación posibe de un goto puede ser romper un ciclo profundo anidado de una

estructura:

for i = 0 to n

  for j = 0 to m

...

  if disaster

  goto Error

  end if

...

  next j

next i

.

.

.

Error: ' manejo del codigo.

Declaracion GOSUB

Use la sentencia gosub para un salto sin condiciones a cualquier etiqueta – para mas informaciónvea Etiquetas . La sintaxis de un gosub es:

gosub nombre de la etiqueta

...

58

Page 59: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 59/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Nombre de la etiqueta:

...

return

Esto transferira el control a el nombre de la etiqueta, tambien el punto del llamado es recordado,

por eso la sentencia return , el programa regresara y ejecuta la siguiente linea después del gosub.Un gosub puede ir antes o después de una etiqueta.

No es posible dar un salto dentro de una funcion o un procedimiento, ya que no se saben losefectos que esto podria tener.

NOTA: usar un gosub es como usar un goto. El uso del gosub es indiferente. Mikrobasic solo

soporta el gosub por la causa compartida hacia atrás (¿?). Es mejor usar funciones yprocedimientos para un programa mas legibles. Generalmente un gosub viene acompañado de un

Return.

Declaraciones ASM

mikroBasic permite el codigo embebido ASM, usando la sentencia asm. Note que no puede usarnumeros 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 esotendra 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, deotro 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 testdim myvar as word

main:

  asm 

MOVLW 10

MOVLW test_main_global_myvar_1

  end asm 

end.

59

Page 60: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 60/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Añadiendo el siguiente codigo o uno similar el linker podra reconocer la variable myvar

myvar = 0

NOTA: mikrobasic no verificara si el banco apropiado esta seteado para la variable. Necesita setear

el banco apropiado en el codigo ensamblador.

DIRECTIVAS

Las directivas son palabras de especial importancia que proporcionan funcinalidad adicional conrespecto a la compilación y el rendimiento.

Tiene las siguientes directivas a su disposición:

Directivas de compilación, para una compilación condicionalDirectivas 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 nonuevas lineas. Las directivas del compilador no diferencian entre mayusculas o minusculas

Puede usar las directivas de compilación 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 restricción. No hay conflictos conel 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

Page 61: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 61/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Directivas #IFDEF…THEN.. #ELSE

La compilación condicional es llevada acabo por la directiva #IFDEF..THEN. La directiva #IFDEFverifica que banderas estan definidas y cuales no, esto es cuando una directiva #DEFINE fue

definida y si sigue activa o no.

La directiva #IFDEF..THEN es terminada por la directiva #ENDIF y la clausula #ELSE es opcional:

#IFDEF bandera THEN

  Bloque de codigo

...

#IFDEF bandera_n THEN

  Bloque de codigo n ]

[ #ELSE

  Bloque de codigo alternativo ]

#ENDIF

Primero #IFDEF verifica que la bandera este definida por #DEFINE, si es asi el bloque de codigo

es compilado, si no verifica las siguientes banderas_n y ejecuta el bloque de codigo apropiado, sininguna esta definida, entonces compilara el codigo del bloque alternativo dentro del #ELSE.

La directiva #ENDIF finaliza la secuencia condicional. El resultado del posible escenario es solo unbloque de codigo compilado (posiblemente vacio)y es pasado para un uso futuro. La seccion de

codigo procesado puede tener clausalas condicionales, anidamientos de cualquier profundidad;cada #IFDEF debe ser enmarcado por su #ENDIF correspondiente.

Aquí un ejemplo:

'#DEFINE resolution8

#IFDEF resolution8 THEN

... ' codigo especifico 8 bits de resolucion

#ELSE

... ' codigo por defecto.

#ENDIF

La directiva #I es usada para insertar el volumen del archivo dado, donde esta es llamada:

#I filename.txt

Predefiniendo Banderas

Mikrobasic tiene banderas predefinidas para el uso del hardware. Estas pueden ser encontradas en

los archivos de definición (directorio DEFS). Especificando el hardware para cada piccorrespondiente. El registro SFR es organizado bajo categorías: _SFR (sombrilla para todos losregistros), _CONFIG_OSC(oscilador), _CONFIG_WDT(match dog timer) y _CONFIG_BORPOR

(brown out reset y power on timer).

61

Page 62: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 62/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

Directivas del Linker

Mikrobasic usa un algoritmo interno para distribuir objetos dentro de la memoria. Si tiene algun

objeto o rutina que especifique una direccion especifica use las directivas del linker absolute y org .

Directiva ABSOLUTE

La directiv absolute especifica una dirección RAM especifia de una variable, si la variable es multi byte, los bytes mas altos se guardaran en las direcciones consecutivas.

La directiva absolute  es añadida a una declaracion de variable:

dim x as byte absolute $22

' Variable x will occupy 1 byte at address $22

dim y as word absolute $23

' Variable y will occupy 2 bytes at addresses $23 and $24

Tenga cuidado cuando use la directiva absolute, ya que puede sobrescribir dos variables poraccidente. Por ejemplo:

dim i as byte absolute $33

' la variable I ocupara un byte de la direccion $33

dim jjjj as longint absolute $30

' la variable jjjj ocupara bytes de $30, $31, $32, $33; Esto,

' cambia I, cambia jjjj por los valores de los bytes mas altos y vicever 

sa.

Directiva ORG

La directiva org especifica la direccion de comeizo de una rutina en la ROM. Esto se añade a ladeclaracion de la rutina. Por ejemplo:

sub procedure proc(dim par as byte) org $200

el procedimiento proc empezara en la direccion $200

...

end sub

NOTA: la directiva org puede usarse a cualquier rutina, excepto a un procedmieto interrupt .Interrupt siempre es guardado en la direccion $4 u $8 para la familia PIC18, en la pagina 0.

Directiva VOLATILE

La directiva volatile le da la posibilidad a una variable de cambiar sin intervención del codigo.

Las variables volatiles tipicas son: STATUS, TIMER0,TIMER1 PORTA, PORTB, etc.

dim MyVar as byte absolute $123 register volatile

62

Page 63: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 63/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

LIBRERIAS DE MIKROBASIC

mikroBasic esta provisto de una serie de librerias que facilitan el uso de los PIC y sus modulos:

Es importante hacer notar que una buena parte de la conexión de hardware en las librerias

tiene errores al igual que el codigo ejemplo de las mismas. Por tratar de respetar el trabajo

de la ayuda no se realizaron modificaciones, ni a las imágenes, ni al codigo. (uno de los

errores mas comunes es que el boton de reset esta conectado al cristal, debiendo estar

conectado al pin MCLR)

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

I²C Library

Keypad Library

LCD Library

LCD8 Library

Manchester Code Library

Multi Media Card Library

OneWire Library

PS/2 Library

PWM Library

63

Page 64: Mikrobasic-Español

5/11/2018 Mikrobasic-Espa ol - slidepdf.com

http://slidepdf.com/reader/full/mikrobasic-espanol-55a0c7b36e7f0 64/64

Traducido por: NavaismoEste documento es propiedad de EL FORO TODOPIC

RS 485 Library

Secure Digital Library

Software I²C 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