epelpad

El post que buscas se encuentra eliminado, pero este también te puede interesar

Programación de los microcontroladores

El mundo de los microcontroladores


Programación de los microcontroladores


Usted seguramente sabe que no solo es suficiente conectar el microcontrolador a los otros componentes y encender una fuente de alimentación para hacerlo funcionar, ¿verdad? Hay que hacer algo más. se necesita programar el microcontrolador para que sea capaz de hacer algo útil. Este capítulo trata de la programación en Basic, por lo que vamos a presentar lo básico que tiene que saber para escribir un programa. Le puede parecer complicado, sobre todo si no tiene experiencia en este campo. no se rinda, respire profundamente y empiece a programar...

Programación de los microcontroladores

El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el código ejecutable y está compuesto por una serie de ceros y unos, aparentemente sin significado. Dependiendo de la arquitectura del microcontrolador, el código binario está compuesto por palabras de 12, 14 o 16 bits de anchura. Cada palabra es interpretada por la CPU como una instrucción a ser ejecutada durante el funcionamiento del microcontrolador. Como es más fácil trabajar con el sistema de numeración hexadecimal, el código ejecutable se representa con frecuencia como una serie de los números hexadecimales denominada código Hex. A todas las instrucciones que el microcontrolador puede reconocer y ejecutar se le denominan colectivamente Juego de instrucciones. En los microcontroladores PIC con las palabras de programa de 14 bits de anchura, el conjunto de instrucciones tiene 35 instrucciones diferentes.

Programacion

Normalmente los programas se escriben en el lenguaje ensamblador cuando se requiere controlar completamente la ejecución de programa.

Como el proceso de escribir un código ejecutable era considerablemente arduo, en consecuencia fue creado el primer lenguaje de programación denominado ensamblador (ASM). El proceso de programación se hizo un poco más complicado. Por otro lado, el proceso de escribir un programa dejó de ser una pesadilla. Las instrucciones en ensamblador consisten en las abreviaturas con significado. Un programa denominado ensamblador instalado en la PC compila las instrucciones del lenguaje ensamblador a código máquina (código binario). Este programa compila instrucción a instrucción sin optimización. La ventaja principal del lenguaje ensamblador es su simplicidad y el hecho de que a cada instrucción cle orresponde una localidad de memoria. Como permite controlar todos los procesos puestos en marcha dentro del microcontrolador, este lenguaje de programación todavía sigue siendo popular.

Por otro lado, los programas se ejecutan siempre a alta velocidad y en la mayoría de casos no es necesario saber en detalle qué ocurre dentro del microcontrolador. A pesar de todos los lados buenos del lenguaje ensamblador, los programadores siempre han necesitado un lenguaje de programación similar al lenguaje utilizado en el habla cotidiana. Por último, los lenguajes de programación de alto nivel (Basic entre otros) fueron creados. La ventaja principal de estos lenguajes es la simplicidad de escribir un programa. Varias instrucciones en ensamblador se sustituyen por una sentencia en Basic. El programador ya no tiene que conocer el conjunto de instrucciones del microcontrolador utilizado. Ya no es posible conocer exactamente cómo se ejecuta cada sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en el programa una secuencia escrita en ensamblador.

visual basic

El proceso de escribir un programa en Basic. Al seleccionar la opción apropiada, el programa será compilado en el ensamblador y luego en el código hex que será cargado en el microcontrolador.

Similar al lenguaje ensamblador, un programa especializado e instalado en la PC se encarga de compilar un programa a código máquina. A diferencia del ensamblador, los compiladores para los lenguajes de programación de alto nivel crean un código ejecutable que no es siempre tan corto como el código escrito en ensamblador.

Microcontroladores

La figura anterior describe el proceso de la compilación de programa escrito en Basic en código hex.

Ejemplo de un programa simple escrito en Basic:

Microprocesador

VENTAJAS DE LOS LENGUAJES DE PROGRAMACIÓN DE ALTO NIVEL

Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje ensamblador, probablemente sepa que la arquitectura RISC carece de algunas instrucciones. Por ejemplo, no hay instrucción apropiada para multiplicar dos números. Por supuesto, este problema se puede resolver gracias a la aritmética que permite realizar las operaciones complejas al descomponerlas en un gran número de operaciones más simples. En este caso, la multiplicación se puede sustituir con facilidad por adición sucesiva (a x b = a + a + a + ... + a). Ya estamos en el comienzo de una historia muy larga... No hay que preocuparse al utilizar uno de estos lenguajes de programación de alto nivel como es Basic, porque el compilador encontrará automáticamente la solución a éste problema y otros similares. Para multiplicar los números a y b, basta con escribir a*b.

Programación de los microcontroladores

CARACTERÍSTICAS PRINCIPALES DEL LENGUAJE DE PROGRAMACIÓN BASIC

Similar al uso de cualquier lengua que no está limitada a los libros y a las revistas, el lenguaje de programación Basic no está estrechamente relacionado a un tipo particular de ordenador, procesador o sistema operativo. Esto puede ser un problema, ya que Basic varía ligeramente dependiendo de su aplicación (como diferentes dialectos de una lengua). Por consiguiente, en este libro no vamos a darle una descripción detallada de todas las características de Basic, sino presentar una aplicación muy concreta de Basic, lenguaje de programación utilizado en el compilador mikroBasic PRO for PIC.

El Basic es un lenguaje de programación simple y fácil de entender. Para utilizarlo correctamente, basta con conocer sólo unos pocos elementos básicos en los que consiste cada programa. Estos son:


Identificadores

Comentarios

Operadores

Expresiones

Instrucciones

Constantes


Variables

Símbolos

Directivas

Etiquetas

Procedimientos y funciones

Módulos


Programacion

Aquí está un ejemplo de cómo no se debe escribir un programa. Los comentarios no están incluidos, nombres de etiquetas no tienen significado, secciones del código no están agrupadas...Este programa funciona correctamente, pero sólo el programador que lo escribió conoce su propósito y modo de ejecución (como máximo uno o dos días).

En la siguiente figura se muestra la estructura de un programa simple escrito en Basic, destacando las partes en las que consiste. Esto es un ejemplo de cómo se debe escribir un programa. Las diferencias son más que obvias...

visual basic

ESTRUCTURA DE PROGRAMA

Similar a los otros lenguajes de programación, Basic dispone de un conjunto de reglas estrictamente definidas que se deben observar al escribir un programa. Para escribir un programa en Basic, es necesario instalar un software que proporciona el entorno de trabajo apropiado y entiende estas reglas en la PC... Al escribir una carta, se necesita un programa para procesar palabras. En este caso, se necesita el compilador mikroBasic PRO for PIC.
A diferencia de la mayoría de programas a los que está acostumbrado a manejar, el proceso de escribir programas en el compilador no empieza por seleccionar la opción File>New, sino Project>New. ¿Por qué? Bueno, usted escribe un programa en un documento con extensión .mbas (mikroBasic). Una vez que se ha escrito el programa, el mismo se debe compilar en código HEX para crear un nuevo documento con extensión .hex. Al mismo tiempo el compilador generará automáticamente varios documentos aparte de ése. Por ahora el propósito de estos documentos no importa. Por supuesto, hay algo para conectarlos todos. Usted ya lo adivina - se trata de un proyecto. El programa que escribe es sólo una parte del proyecto.

Microcontroladores

Sólo para estar seguro de que estamos hablando en los mismos términos... A partir de ahora la palabra módulo se refiere a un documento con extensión .mbas. El texto que contiene se refiere a un programa. Cada proyecto escrito en el compilador mikroBasic PRO for PIC es de extensión .mbppi (microBasic Project for PIC) y consiste en un módulo como mínimo (módulo principal - Main Module).

Cada proyecto en el mikroBasic PRO for PIC requiere un solo módulo principal. Lo identifica la palabra clave program y ordena al compilador por dónde empezar el proceso de la compilación. Al crear con éxito un proyecto vacío en Project Wizard, el módulo principal (main module) será visualizado automáticamente en la ventana Code Editor:

program MyProject ' El módulo principal es denominado MyProject
main: ' Procedimiento principal
... '*
... '* Escribir el código de programa aquí
... '*
end.

A la palabra clave program no le puede preceder nada, excepto comentarios. Como hemos mencionado anteriormente, el proyecto puede incluir a otros módulos que, a diferencia del módulo principal, empiezan por la palabra clave module.

module MyModule ' Módulo auxiliar Auxiliary es denominado MyModule
... '*
... '* Implementos
... '*
end.

Para que el compilador pueda reconocer todos los módulos que pertenecen a un proyecto, es necesario especificarlos en el módulo principal por medio de la palabra clave include seguida por un nombre del módulo entre comillas. La extensión de estos ficheros no se debe incluir. Se permite sólo un módulo por cláusula include. El número de las cláusulas include no está limitado, pero todas ellas deben estar especificadas inmediatamente después del nombre del programa (módulo principal). Ejemplo:

program MyProgram ' Inicio de programa (módulo principal denominado ‘MyProgram’)
' Otros módulos incluidos son: 
include "utils" ' Módulo ‘utils’
include "strings" ' Módulo ‘strings’
include "MyUnit" ' Módulo ‘MyUnit’
...

ORGANIZACIÓN DEL MÓDULO PRINCIPAL

El módulo principal se puede dividir en dos secciones: declaraciones y el cuerpo de programa. ¿Qué es una declaración en la programación? Una declaración es un proceso de definir las propiedades de los identificadores que se utilizarán en el programa. Como la mayoría de los demás lenguajes de programación, Basic también requiere que todos los identificadores estén declarados antes de ser utilizados en el programa. Si no es así, el compilador no puede interpretarlos correctamente. Ejemplo de la declaración de una variable denominada distancia:

dim distance as float ' Declarar la variable distancia

Como se puede ver, es una variable de punto flotante, o sea un número con posición decimal opcional. Las otras dos variables están declaradas y nombradas velocidad y tiempo. Ahora, se pueden utilizar en el siguiente programa:

Esto es un ejemplo de cómo escribir el módulo principal correctamente:

Microprocesador

ORGANIZACIÓN DE OTROS MÓDULOS

Los otros módulos empiezan por la palabra clave module. Cada módulo consiste en tres secciones: include, interface e implementation. Solo la sección implementation es obligatoria. Empieza por la palabra clave implements. Vea el siguiente ejemplo:

Programación de los microcontroladores


IDENTIFICADORES

Los identificadores son los nombres arbitrarios asignados a los objetos básicos del lenguaje teles como constantes, variables, funciones, procedimientos etc. A alguien se le ocurrió utilizar la palabra identificador en vez de utilizar el nombre. Así de simple. Aquí están las reglas a observar al utilizar los identificadores.

Los identificadores pueden incluir cualquiera de los caracteres alfabéticos A-Z (a-z), los dígitos 0-9 y el carácter subrayado '_'.
El primer carácter de un identificador no puede ser un dígito.
Ningún identificador puede contener caracteres especiales tales como ! [{ # $ % & etc.
Basic no es sensible a la diferencia entre minúsculas y mayúsculas, lo que significa que FIRST, first y First son identificadores idénticos.
El símbolo ^ (signo de intercalación) se utiliza para denotar un operador exponencial, el símbolo * (asterisco) se utiliza para denotar la multiplicación, mientras que los demás símbolos tienen el significado común.
Las palabras clave ya utilizadas por el compilador no deben ser utilizadas como identificadores. Lista alfabética de las palabras clave en Basic:

Abstract
And
Array
As
At
Asm
Assembler
Automated
Bdata
Begin
Bit
Case
Cdecl
Class
Code
Compact
Const
Constructor
Contains
Data
Default
Deprecated
Destructor
Dispid
Dispinterface

Div
Do
Downto
Dynamic
Else
End
Except
Export
Exports
External
Far
File
Finalization
Finally
For
Forward
Function
Goto
Idata
If
Ilevel
Implementation
In
Index
Inherited

Initialization
Inline
Interface
Io
Is
Label
Large
Library
Message
Mod
Name
Near
Nil
Not
Object
Of
On
Or
Org
Out
Overload
Override
Package
Packed
Pascal

Pdata
Platform
Private
Procedure
Program
Property
Protected
Public
Published
Raise
Read
Readonly
Record
Register
Reintroduce
Repeat
Requires
Resourcestring
Rx
Safecall
Sbit
Set
Sfr
Shl
Shr

Small
Stdcall
Stored
String
Stringresource
Then
Threadvar
To
Try
Type
Unit
Until
Uses
Var
Virtual
Volatile
While
With
Write
Writeonly
Xdata
Xor

Una lista de identificadores que no deben ser utilizados en el programa

COMENTARIOS

Los comentarios son las partes del programa utilizados para aclarar las instrucciones de programa o para proporcionar más información al respecto. En Basic, cualquier texto que sigue a un apóstrofo (') se considera un comentario, Los comentarios no se compilan al código ejecutable. El compilador es capaz de reconocer los caracteres especiales utilizados para designar dónde los comentarios comienzan y terminan y no hace nada de caso al texto entre ellos durante la compilación. Aunque los comentarios no pueden afectar a la ejecución de programa, son tan importantes como cualquier otra parte de programa. Aquí está el porqué... Con frecuencia es necesario mejorar, modificar, actualizar, simplificar un programa... No es posible interpretar incluso los programas simples sin utilizar los comentarios.

Programacion

ETIQUETAS

Las etiquetas proporcionan el modo más fácil de controlar el flujo de programa. Se utilizan para denotar las líneas particulares en el programa donde se deben ejecutar la instrucción de salto y la subrutina apropiada. Todas las etiquetas deben terminar por ‘:’ así que el compilador las puede reconocer con facilidad.

visual basic


CONSTANTES

Las constantes son los números o caracteres cuyo valor no puede ser cambiado durante la ejecución de programa. A diferencia de las variables, las constantes se almacenan en la memoria ROM del microcontrolador para guardar el mayor espacio posible de la memoria RAM. El compilador reconoce las constantes por sus nombres y el prefijo const. Cada constante se declara bajo un nombre único que debe ser un identificador válido. Las constantes pueden ser en formatos decimal, hexadecimal o binario. El compilador los distingue por su prefijo. Si una constante no lleva prefijo, se considera decimal por defecto.


Programación de los microcontroladores - Capítulo 2 - Libro: Microcontroladores PIC - Programación en BASIC

TOC
Capitulo 1
Capitulo 2
Capítulo 3
Capítulo 4
Apéndice A

Capítulo 2: Programación de los microcontroladores

Usted seguramente sabe que no solo es suficiente conectar el microcontrolador a los otros componentes y encender una fuente de alimentación para hacerlo funcionar, ¿verdad? Hay que hacer algo más. se necesita programar el microcontrolador para que sea capaz de hacer algo útil. Este capítulo trata de la programación en Basic, por lo que vamos a presentar lo básico que tiene que saber para escribir un programa. Le puede parecer complicado, sobre todo si no tiene experiencia en este campo. no se rinda, respire profundamente y empiece a programar...

2.1 LENGUAJES DE PROGRAMACIÓN
2.2 CARACTERÍSTICAS PRINCIPALES DEL LENGUAJE DE PROGRAMACIÓN BASIC
2.3 COMPILADOR MIKROBASIC PRO FOR PIC

2.1 LENGUAJES DE PROGRAMACIÓN
Programación de los microcontroladores-código máquina

El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el código ejecutable y está compuesto por una serie de ceros y unos, aparentemente sin significado. Dependiendo de la arquitectura del microcontrolador, el código binario está compuesto por palabras de 12, 14 o 16 bits de anchura. Cada palabra es interpretada por la CPU como una instrucción a ser ejecutada durante el funcionamiento del microcontrolador. Como es más fácil trabajar con el sistema de numeración hexadecimal, el código ejecutable se representa con frecuencia como una serie de los números hexadecimales denominada código Hex. A todas las instrucciones que el microcontrolador puede reconocer y ejecutar se le denominan colectivamente Juego de instrucciones. En los microcontroladores PIC con las palabras de programa de 14 bits de anchura, el conjunto de instrucciones tiene 35 instrucciones diferentes.
Programación de los microcontroladores- Ensamblador

Normalmente los programas se escriben en el lenguaje ensamblador cuando se requiere controlar completamente la ejecución de programa.

Como el proceso de escribir un código ejecutable era considerablemente arduo, en consecuencia fue creado el primer lenguaje de programación denominado ensamblador (ASM). El proceso de programación se hizo un poco más complicado. Por otro lado, el proceso de escribir un programa dejó de ser una pesadilla. Las instrucciones en ensamblador consisten en las abreviaturas con significado. Un programa denominado ensamblador instalado en la PC compila las instrucciones del lenguaje ensamblador a código máquina (código binario). Este programa compila instrucción a instrucción sin optimización. La ventaja principal del lenguaje ensamblador es su simplicidad y el hecho de que a cada instrucción cle orresponde una localidad de memoria. Como permite controlar todos los procesos puestos en marcha dentro del microcontrolador, este lenguaje de programación todavía sigue siendo popular.

Por otro lado, los programas se ejecutan siempre a alta velocidad y en la mayoría de casos no es necesario saber en detalle qué ocurre dentro del microcontrolador. A pesar de todos los lados buenos del lenguaje ensamblador, los programadores siempre han necesitado un lenguaje de programación similar al lenguaje utilizado en el habla cotidiana. Por último, los lenguajes de programación de alto nivel (Basic entre otros) fueron creados. La ventaja principal de estos lenguajes es la simplicidad de escribir un programa. Varias instrucciones en ensamblador se sustituyen por una sentencia en Basic. El programador ya no tiene que conocer el conjunto de instrucciones del microcontrolador utilizado. Ya no es posible conocer exactamente cómo se ejecuta cada sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en el programa una secuencia escrita en ensamblador.
Programación de los microcontroladores - lengauaje de programación BASIC

El proceso de escribir un programa en Basic. Al seleccionar la opción apropiada, el programa será compilado en el ensamblador y luego en el código hex que será cargado en el microcontrolador.

Similar al lenguaje ensamblador, un programa especializado e instalado en la PC se encarga de compilar un programa a código máquina. A diferencia del ensamblador, los compiladores para los lenguajes de programación de alto nivel crean un código ejecutable que no es siempre tan corto como el código escrito en ensamblador.
Proceso de programar el microcontrolador

La figura anterior describe el proceso de la compilación de programa escrito en Basic en código hex.

Ejemplo de un programa simple escrito en Basic:
Programa simple escrito en Basic
VENTAJAS DE LOS LENGUAJES DE PROGRAMACIÓN DE ALTO NIVEL

Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje ensamblador, probablemente sepa que la arquitectura RISC carece de algunas instrucciones. Por ejemplo, no hay instrucción apropiada para multiplicar dos números. Por supuesto, este problema se puede resolver gracias a la aritmética que permite realizar las operaciones complejas al descomponerlas en un gran número de operaciones más simples. En este caso, la multiplicación se puede sustituir con facilidad por adición sucesiva (a x b = a + a + a + ... + a). Ya estamos en el comienzo de una historia muy larga... No hay que preocuparse al utilizar uno de estos lenguajes de programación de alto nivel como es Basic, porque el compilador encontrará automáticamente la solución a éste problema y otros similares. Para multiplicar los números a y b, basta con escribir a*b.
Ventajas de los lenguajes de progamación de alto nivel
2.2 CARACTERÍSTICAS PRINCIPALES DEL LENGUAJE DE PROGRAMACIÓN BASIC

Similar al uso de cualquier lengua que no está limitada a los libros y a las revistas, el lenguaje de programación Basic no está estrechamente relacionado a un tipo particular de ordenador, procesador o sistema operativo. Esto puede ser un problema, ya que Basic varía ligeramente dependiendo de su aplicación (como diferentes dialectos de una lengua). Por consiguiente, en este libro no vamos a darle una descripción detallada de todas las características de Basic, sino presentar una aplicación muy concreta de Basic, lenguaje de programación utilizado en el compilador mikroBasic PRO for PIC.

El Basic es un lenguaje de programación simple y fácil de entender. Para utilizarlo correctamente, basta con conocer sólo unos pocos elementos básicos en los que consiste cada programa. Estos son:

Identificadores
Comentarios
Operadores
Expresiones
Instrucciones
Constantes

Variables
Símbolos
Directivas
Etiquetas
Procedimientos y funciones
Módulos

Cómo no escribir el programa

Aquí está un ejemplo de cómo no se debe escribir un programa. Los comentarios no están incluidos, nombres de etiquetas no tienen significado, secciones del código no están agrupadas...Este programa funciona correctamente, pero sólo el programador que lo escribió conoce su propósito y modo de ejecución (como máximo uno o dos días).

En la siguiente figura se muestra la estructura de un programa simple escrito en Basic, destacando las partes en las que consiste. Esto es un ejemplo de cómo se debe escribir un programa. Las diferencias son más que obvias...

Estructura de un programa simple
ESTRUCTURA DE PROGRAMA

Similar a los otros lenguajes de programación, Basic dispone de un conjunto de reglas estrictamente definidas que se deben observar al escribir un programa. Para escribir un programa en Basic, es necesario instalar un software que proporciona el entorno de trabajo apropiado y entiende estas reglas en la PC... Al escribir una carta, se necesita un programa para procesar palabras. En este caso, se necesita el compilador mikroBasic PRO for PIC.
A diferencia de la mayoría de programas a los que está acostumbrado a manejar, el proceso de escribir programas en el compilador no empieza por seleccionar la opción File>New, sino Project>New. ¿Por qué? Bueno, usted escribe un programa en un documento con extensión .mbas (mikroBasic). Una vez que se ha escrito el programa, el mismo se debe compilar en código HEX para crear un nuevo documento con extensión .hex. Al mismo tiempo el compilador generará automáticamente varios documentos aparte de ése. Por ahora el propósito de estos documentos no importa. Por supuesto, hay algo para conectarlos todos. Usted ya lo adivina - se trata de un proyecto. El programa que escribe es sólo una parte del proyecto.
Proyecto en mikroBasic

Sólo para estar seguro de que estamos hablando en los mismos términos... A partir de ahora la palabra módulo se refiere a un documento con extensión .mbas. El texto que contiene se refiere a un programa. Cada proyecto escrito en el compilador mikroBasic PRO for PIC es de extensión .mbppi (microBasic Project for PIC) y consiste en un módulo como mínimo (módulo principal - Main Module).

Cada proyecto en el mikroBasic PRO for PIC requiere un solo módulo principal. Lo identifica la palabra clave program y ordena al compilador por dónde empezar el proceso de la compilación. Al crear con éxito un proyecto vacío en Project Wizard, el módulo principal (main module) será visualizado automáticamente en la ventana Code Editor:

program MyProject ' El módulo principal es denominado MyProject
main: ' Procedimiento principal
... '*
... '* Escribir el código de programa aquí
... '*
end.

A la palabra clave program no le puede preceder nada, excepto comentarios. Como hemos mencionado anteriormente, el proyecto puede incluir a otros módulos que, a diferencia del módulo principal, empiezan por la palabra clave module.

module MyModule ' Módulo auxiliar Auxiliary es denominado MyModule
... '*
... '* Implementos
... '*
end.

Para que el compilador pueda reconocer todos los módulos que pertenecen a un proyecto, es necesario especificarlos en el módulo principal por medio de la palabra clave include seguida por un nombre del módulo entre comillas. La extensión de estos ficheros no se debe incluir. Se permite sólo un módulo por cláusula include. El número de las cláusulas include no está limitado, pero todas ellas deben estar especificadas inmediatamente después del nombre del programa (módulo principal). Ejemplo:


program MyProgram ' Inicio de programa (módulo principal denominado ‘MyProgram’)
' Otros módulos incluidos son: 
include "utils" ' Módulo ‘utils’
include "strings" ' Módulo ‘strings’
include "MyUnit" ' Módulo ‘MyUnit’
...

ORGANIZACIÓN DEL MÓDULO PRINCIPAL

El módulo principal se puede dividir en dos secciones: declaraciones y el cuerpo de programa. ¿Qué es una declaración en la programación? Una declaración es un proceso de definir las propiedades de los identificadores que se utilizarán en el programa. Como la mayoría de los demás lenguajes de programación, Basic también requiere que todos los identificadores estén declarados antes de ser utilizados en el programa. Si no es así, el compilador no puede interpretarlos correctamente. Ejemplo de la declaración de una variable denominada distancia:

dim distance as float ' Declarar la variable distancia

Como se puede ver, es una variable de punto flotante, o sea un número con posición decimal opcional. Las otras dos variables están declaradas y nombradas velocidad y tiempo. Ahora, se pueden utilizar en el siguiente programa:

Esto es un ejemplo de cómo escribir el módulo principal correctamente:
Cómo esribir el módulo principal correctamente
ORGANIZACIÓN DE OTROS MÓDULOS

Los otros módulos empiezan por la palabra clave module. Cada módulo consiste en tres secciones: include, interface e implementation. Solo la sección implementation es obligatoria. Empieza por la palabra clave implements. Vea el siguiente ejemplo:
Organización de otros módulos
IDENTIFICADORES

Los identificadores son los nombres arbitrarios asignados a los objetos básicos del lenguaje teles como constantes, variables, funciones, procedimientos etc. A alguien se le ocurrió utilizar la palabra identificador en vez de utilizar el nombre. Así de simple. Aquí están las reglas a observar al utilizar los identificadores.

Los identificadores pueden incluir cualquiera de los caracteres alfabéticos A-Z (a-z), los dígitos 0-9 y el carácter subrayado '_'.
El primer carácter de un identificador no puede ser un dígito.
Ningún identificador puede contener caracteres especiales tales como ! [{ # $ % & etc.
Basic no es sensible a la diferencia entre minúsculas y mayúsculas, lo que significa que FIRST, first y First son identificadores idénticos.
El símbolo ^ (signo de intercalación) se utiliza para denotar un operador exponencial, el símbolo * (asterisco) se utiliza para denotar la multiplicación, mientras que los demás símbolos tienen el significado común.
Las palabras clave ya utilizadas por el compilador no deben ser utilizadas como identificadores. Lista alfabética de las palabras clave en Basic:

Abstract
And
Array
As
At
Asm
Assembler
Automated
Bdata
Begin
Bit
Case
Cdecl
Class
Code
Compact
Const
Constructor
Contains
Data
Default
Deprecated
Destructor
Dispid
Dispinterface

Div
Do
Downto
Dynamic
Else
End
Except
Export
Exports
External
Far
File
Finalization
Finally
For
Forward
Function
Goto
Idata
If
Ilevel
Implementation
In
Index
Inherited

Initialization
Inline
Interface
Io
Is
Label
Large
Library
Message
Mod
Name
Near
Nil
Not
Object
Of
On
Or
Org
Out
Overload
Override
Package
Packed
Pascal

Pdata
Platform
Private
Procedure
Program
Property
Protected
Public
Published
Raise
Read
Readonly
Record
Register
Reintroduce
Repeat
Requires
Resourcestring
Rx
Safecall
Sbit
Set
Sfr
Shl
Shr

Small
Stdcall
Stored
String
Stringresource
Then
Threadvar
To
Try
Type
Unit
Until
Uses
Var
Virtual
Volatile
While
With
Write
Writeonly
Xdata
Xor

Una lista de identificadores que no deben ser utilizados en el programa
COMENTARIOS

Los comentarios son las partes del programa utilizados para aclarar las instrucciones de programa o para proporcionar más información al respecto. En Basic, cualquier texto que sigue a un apóstrofo (') se considera un comentario, Los comentarios no se compilan al código ejecutable. El compilador es capaz de reconocer los caracteres especiales utilizados para designar dónde los comentarios comienzan y terminan y no hace nada de caso al texto entre ellos durante la compilación. Aunque los comentarios no pueden afectar a la ejecución de programa, son tan importantes como cualquier otra parte de programa. Aquí está el porqué... Con frecuencia es necesario mejorar, modificar, actualizar, simplificar un programa... No es posible interpretar incluso los programas simples sin utilizar los comentarios.

Comentarios
ETIQUETAS

Las etiquetas proporcionan el modo más fácil de controlar el flujo de programa. Se utilizan para denotar las líneas particulares en el programa donde se deben ejecutar la instrucción de salto y la subrutina apropiada. Todas las etiquetas deben terminar por ‘:’ así que el compilador las puede reconocer con facilidad.
Etiqueta
CONSTANTES

Las constantes son los números o caracteres cuyo valor no puede ser cambiado durante la ejecución de programa. A diferencia de las variables, las constantes se almacenan en la memoria ROM del microcontrolador para guardar el mayor espacio posible de la memoria RAM. El compilador reconoce las constantes por sus nombres y el prefijo const. Cada constante se declara bajo un nombre único que debe ser un identificador válido. Las constantes pueden ser en formatos decimal, hexadecimal o binario. El compilador los distingue por su prefijo. Si una constante no lleva prefijo, se considera decimal por defecto.
Formato Prefijo Ejemplo
Decimal
const MAX = 100
Hexadecimal 0x o $ const MAX = 0xFF
Binario Punto flotante
const MAX = %11011101

Las constantes se declaran en la parte de declaración del programa o de la rutina. La sintaxis es la siguiente:

const nombre_de_constante [as type] = valor

Los nombres de las constantes se escriben normalmente con mayúsculas. El tipo de una constante se reconoce automáticamente por su tamaño. En el siguiente ejemplo, la constante MINIMUM se considera un entero con signo y ocupa dos bytes de la memoria Flash (de 16 bits):

const MINIMUM = -1000 ' Declarar la constante MINIMUM

El tipo de constante se especifica opcionalmente. En la ausencia de tipo, el compilador lo considera “el menor” tipo conveniente al valor de constante.

const MAX as longint = 10000
const MIN = 1000 ' Compilador supone el tipo word
const SWITCH = "n" ' Compilador supone el tipo char

En el siguiente ejemplo, una constante denominada T_MAX se declara de modo que tenga el valor fraccional 32.60. Ahora, el programa puede comparar la temperatura anteriormente medida con la constante con el nombre con significado en vez del número 32.60.

const T_MAX = 32.60 ' Declarar temperatura T_MAX
const T_MAX = 3.260E1 ' Otra forma de declarar la constante T_MAX

Una constante de cadena consiste en una secuencia de caracteres. Debe estar encerrada entre comillas. Un espacio en blanco se puede incluir en la constante de cadena y representa un carácter. Las constantes de cadena se utilizan para representar cantidades no numéricas tales como nombres, direcciones, mensajes etc.

const Message_1 = "Press the START button" ' Mensaje 1 para LCD
const Message_2 = "Press the RIGHT button" ' Mensaje 2 para LCD
const Message_3 = "Press the LEFT button" ' Mensaje 3 para LCD

En este ejemplo, al enviar la constante Message_1 al LCD, el mensaje ‘press the START button’ aparecerá en la pantalla.
VARIABLES

Una variable es un objeto nombrado capaz de contener un dato que puede ser modificado durante la ejecución de programa. Cada variable se declara bajo un nombre únicoque debe ser un identificador válido. Por ejemplo, para sumar dos números (número1 + número2) en el programa, es necesario tener una variable para representar qué es lo que llamamos suma en vida cotidiana. En este caso, número1, número2 y suma son variables. La sintaxis es la siguiente:

dim nombre_de_variable as type

Las variables en Basic son de un tipo, lo que significa que es necesario especificar el tipo de dato que se asignará a la variable. Las variables se almacenan en la memoria RAM y el espacio de memoria ocupado (en bytes) depende de su tipo. Aparte de las declaraciones de una sola variable, las variables del mismo tipo, se pueden declarar en forma de una lista. Aquí, lista de identificadores es una lista de identificadores válidos delimitados por comas, mientras que tipo puede ser cualquier tipo de dato.

dim i, j, k as byte 'Definir variables i, j, k
dim counter, temp as word 'Definir variables contador y temp

SÍMBOLOS

Los símbolos en Basic permiten crear los macros simples sin parámetros. Cualquier línea de código se puede reemplazar por un solo identificador. Los símbolos pueden aumentar legibilidad y reutilización de código cuando se utilizan correctamente.

Los símbolos deben ser declarados al principio del módulo, bajo el nombre del módulo y la directiva opcional include. El ámbito de un símbolo es siempre limitado al módulo en el que ha sido declarado.

symbol nombre_de_símbolo = código

Aquí, nombre_de_símbolo debe ser un identificador válido que se utilizará por todo el código. El especificador código puede ser cualquier línea de código (literales, asignaciones, llamadas de función etc.)

symbol MAXALLOWED = 216 ' Símbolo MAXALLOWED para el valor numérico
symbol OUT = PORTA ' Símbolo OUT para SFR
symbol MYDELAY = Delay_ms(762) ' Símbolo MYDELAY para llamada de procedimiento
dim cnt as byte ' Variable cnt
main:
if cnt > MAXALLOWED then ' Programa comprueba si cnt > 216
cnt = 0 ' Si lo es,
OUT.1 = 0 ' los siguientes tres comandos
MYDELAY ' se ejecutarán

end if
... ' Si no lo es, el programa continúa aquí

Los símbolos no se almacenan en la memoria RAM. El compilador reemplaza los símbolos por las líneas del código apropiadas asignadas durante la declaración.
TIPOS DE DATOS EN BASIC

Hay varios tipos de datos que se pueden utilizar en el lenguaje de programación Basic. La siguiente tabla muestra el rango de valores que estos datos pueden tener cuando se utilizan en su forma básica.

Tipo de dato
Descripción Tamaño (Número de bits) Rango de valores
bit Un bit 1 0 o 1
sbit Un bit 1 0 o 1
byte, char Carácter 8 0 ... 255
short Entero con signo corto

-127 ... 128
word Entero sin signo
16 0 ... 65535
integer Entero con signo
16 -32768 ... 32767
longword Palabra de 32 bits
32 0 ... 4294967295
longint Palabra de 32 bits asignada
32 -2147483648 ... 2147483647
float Punto flotante
32 ±1.17549435082*10-38 ... ±6.80564774407*1038
CONVERSIÓN DE TIPOS DE DATOS AUTOMÁTICA

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

si una sentencia requiere una expresión del tipo particular, y se utiliza la expresión de tipo diferente;
si un operador requiere un operando de tipo particular, y se utiliza un operando de tipo diferente;
si una función requiere un parámetro formal de tipo particular, y se le asigna el objeto de tipo diferente; y
si el resultado de una función no corresponde al tipo del valor devuelto de la función declarada.

PROMOCIÓN

Cuando los operandos son de tipos diferentes, mediante la conversión implícita se realiza la promoción de tipo más bajo a tipo más alto, de la siguiente manera:

bit → byte
short, byte/char → integer, word, longint, longword
integer, word → longint, longword
short, byte/char, integer, word, longint, longword → float

RECORTE DE DATOS

En las sentencias de asignación y en las sentencias que requieren una expresión de tipo particular, el valor correcto será almacenado en el destino sólo si el resultado de expresión no excede al rango del destino. Al contrario, si el resultado de la expresión resulta en un tipo más complejo de lo esperado, los datos que exceden se recortarán, o sea los bytes más altos se pierden.

dim i as byte 'Variable i ocupa un solo byte de la memoria RAM
dim j as word ' Variable j ocupa dos bytes de la memoria RAM

...
j = $FF0F
i = j ' i se convierte en $0F, el byte más alto $FF se pierde

CONVERSIÓN DE DATOS EXPLÍCITA

La conversión explícita se puede ejecutar bajo cualquier expresión en cualquier punto al escribir la palabra clave de tipo deseado (byte, word, short, integer, longint, float...) delante de la expresión que será convertida. La expresión debe estar encerrada entre paréntesis. La conversión explícita no puede ser realizada bajo el operando de la izquierda del operador de asignación.

a = word(b) ' Conversión explícita de la expresión b
word(b) = a ' Compilador informa de un error

Como no afecta a la representación binaria de los datos, un caso especial es una conversión entre tipos de datos con signo y sin signo.

dim a as byte
dim b as short
'...
b = -1
a = byte(b) ' a is 255, not -1
' El dato no cambia su representación binaria %11111111
' pero el compilador la interpreta de la manera diferente

OPERADORES

Un operador es un símbolo que denota una operación aritmética, lógica u otra operación particular. Cada operación se realiza sobre uno o más operandos (variables o constantes) en una expresión. Además, cada operador dispone de la ejecución de prioridad y de la asociatividad. Si una expresión contiene más de un operando, los operandos se ejecutarán en orden de su prioridad. Hay 4 categorías de prioridad en Basic. Los operadores que pertenecen a la misma categoría tienen igual prioridad. Si dos o más operandos tienen el mismo nivel de prioridad, las operaciones se realizan de izquierda a derecha. Los paréntesis se utilizan para definir la prioridad de la operación dentro de la expresión. A cada categoría se le asigna una de dos reglas de asociatividad: de izquierda a derecha o de derecha a izquierda. Refiérase a la siguiente tabla:

Prioridad Operadores Asociatividad
Alta
@ not + - de derecha a izquierda

* / div mod and << >> de izquierda a derecha

+ - or xor de izquierda a derecha
Baja
= <> < > <= >= de izquierda a derecha
OPERADORES ARITMÉTICOS

Los operadores aritméticos se utilizan para realizar operaciones aritméticas. Estas operaciones se realizan sobre los operandos numéricos y siempre devuelven los resultados numéricos. Las operaciones binarias se realizan sobre dos operandos, mientras que las operaciones unitarias se realizan sobre un operando. Todos los operadores aritméticos se asocian de izquierda a derecha.
Operador Operación
+ Adición
- Resta
* Multiplicación
/ División - punto flotante
div División - redondear
mod Remanente
DIVISIÓN POR CERO

Si un cero (0) se utiliza explícitamente como el segundo operando en la operación de división (x div 0), el compilador informa de un error y no generará un código. En caso de una división implícita, o sea, en el caso de que el segundo operando sea un objeto cuyo valor es 0 (x div y, w y=0), el resultado será indefinido.
OPERADORES RELACIONALES

Los operadores relacionales se utilizan para comparar dos variables y determinar la validez de su relación. En mikroBasic, todos los operadores relacionales devuelven 255 si la expresión es evaluada como verdadera (true). Si una expresión es evaluada como falsa (false), el operador devuelve 0. Lo mismo se aplica a las expresiones tales como ‘si la expresión es evaluada como verdadera, entonces...’

Operador Significado Ejemplo Condición de veracidad
> es mayor que
b > a si b es mayor que a
>= es mayor o igual que
a >= 5 si a es mayor o igual que 5
< es menor que
a < b si a es menor que b
<= es menor o igual que
a <= b si a es menor o igual que b
= es igual que
a = 6 si a es igual que 6
<> no es igual que
a <> b si a no es igual que b
OPERADORES LÓGICOS DE MANEJO DE BITS

Los operadores lógicos de manejo de bits se realizan sobre los bits de un operando. Se asocian de izquierda a derecha. La única excepción es el complemento not que realiza un desplazamiento de derecha a izquierda. Los operadores de manejo de bits se enumeran en la siguiente tabla:
Operando Significado Ejemplo Resultado
<< desplazamiento a la izquierda
A = B << 2 B = 11110011 A = 11001100
>> desplazamiento a la derecha
A = B >> 3 B = 11110011 A = 00011110
and Y lógico para manejo de bits C = A and B A=11100011
B=11001100 C = 11000000
or O lógico para manejo de bits
C = A or B A=11100011
B=11001100 C = 11101111
not NO lógico para manejo de bits
A = not B B = 11001100 A = 00110011
xor EXOR lógico para manejo de bits
C = A xor B A = 11100011
B = 11001100 C = 00101111

Los operadores de manejo de bits y (and), o (or) y xor realizan las operaciones lógicas sobre los pares de bits de operandos apropiados. El operador not complementa cada bit de un solo operando.

$1234 and $5678 ' resultado es $1230 porque:
' $1234 : 0001 0010 0011 0100
' $5678 : 0101 0110 0111 1000
' ----------------------------
' y : 0001 0010 0011 0000 ... eso es, $1230
$1234 or $5678 'equivale a $567C
$1234 xor $5678 ' equivale a $444C
not $1234 ' equivale a $EDCB

OPERADORES DE DESPLAZAMIENTO

Hay dos operadores de desplazamiento de bits en mikroBasic. Son el operador << que realiza un desplazamiento de bits a la izquierda y el operador >> que realiza un desplazamiento de bits a la derecha. Los operadores de desplazamiento de bits tienen dos operandos cada uno. El operando izquierdo es un objeto que se desplaza, mientras que el derecho indica el número de posiciones a mover el objeto. Los dos operandos deben ser de tipo entero. El operando derecho debe ser el valor positivo.

Al desplazar a la izquierda los bits que salen por la izquierda se pierden, mientras que los ‘nuevos’ bits a la derecha se rellenan con ceros. Por lo tanto, el desplazamiento del operando que carece de signo a la izquierda por n posiciones equivale a multiplicarlo por 2n si todos los bits descartados son ceros. Lo mismo se puede aplicar a los operandos con signo si todos los bits descartados son iguales que el signo de bit.

dim num as word ' declarar la variable num como word
num = 1 ' asignarle el valor decimal 1 (00000000 00000001 bin.)
num << 5 ' equivale a 32 (00000000 00100000 bin.)

Al desplazar a la derecha los bits que salen por la derecha se pierden, mientras que los ‘nuevos’ bits a la izquierda se rellenan con ceros (en caso del operando sin signo) o con el signo de bit (en caso del operando con signo). El desplazamiento del operando a la derecha por n posiciones equivale a dividirlo por 2n.

dim num as integer ' declarar variable num como signed integer
num = 0xFF56 'asignarle el valor hex FF56 (11111111 01010110 bin.)
num >> 4 ' equivale a 0xFFF5 (11111111 11110101 bin.)

SENTENCIAS CONDICIONALES

Las condiciones son ingredientes comunes de un programa. Las condiciones permiten ejecutar una o varias sentencias dependiendo de validez de una expresión. En otras palabras, ‘Si se cumple la condición (...), se debe hacer (...). De lo contrario, se debe hacer (...)’. Una sentencia condicional puede ser seguida por una sola sentencia o por un bloque de sentencias a ser ejecutadas.
SENTENCIA CONDICIONAL IF

La sintaxis en una forma simple de la sentencia if es:

if expresión then
operaciones
end if

Si el resultado de la expresión es verdadero (distinto de 0), las operaciones se realizan y el programa continúa con la ejecución. Si el resultado de la expresión es falso (0), las operaciones no se realizan y el programa continúa inmediatamente con la ejecución.

El operador if se puede utilizar en combinación con el operador else:

if expresión then
operaciones1
else
other operaciones2
end if

Si el resultado de la expresión es verdadero (distinto de 0), las operaciones1 se realizan. De lo contrario, las operaciones2 se realizan. Después de realizar estas operaciones, el programa continúa con la ejecución.
SENTENCIAS IF ANIDADAS

La sentencia if anidada necesita una atención adicional. Es una sentencia utilizada dentro de otra sentencia if. Siguiendo la regla, se descomponen empezando por la sentencia if más anidada, mientras que cada sentencia else se enlaza a la más cercana sentencia if disponible a la izquierda.

Microcontroladores


SENTENCIA CASE STATEMENT

La sentencia select case es una sentencia condicional de ramificación múltiple. Consiste en una expresión (condición) selector y una lista de los valores posibles de la expresión. La síntaxis de la sentencia select case es la siguiente:

El especificador selector es una expresión evaluada como un valor entero.

Los especificadores value_1...value_n representan los valores posibles del selector. Pueden ser literales, constantes o expresiones de constantes. Los especificadores statements_1 ...statements_n pueden ser cualquier sentencia.
La cláusula case else es opcional.

Primero se evalúa el valor de la expresión selector. Después se compara con todos los valores disponibles. Si los valores son iguales (selector y uno de valores), se ejecutarán las sentencias que siguen a los valores iguales y termina la sentencia select case. En el caso de que coincidan los valores múltiples se ejecutarán las sentencias que siguen a los primeros valores iguales. Si no coincide ningún valor con el selector, se ejecutarán las sentencias_por_defecto en la cláusula case else (si hay alguna).

Ejemplo de la sentencia select case:

select case decimal_digit 'El valor del dígito decimal se está comprobando
case 0
mask = %01111110 'Visualizar "0"
case 1
mask = %00110000 'Visualizar "1"
case 2
mask = %01101101
case 3
mask = %01111001
case 4
mask = %00110011
case 5
mask = %01011011
case 6
mask = %01011111
case 7
mask = %01110000
case 8
mask = %01111111
case 9
mask = %01111011
end select

Microprocesador

Esta rutina de programa convierte los dígitos decimales en la combinación binaria apropiada en el puerto para visualizarlos en el LED.
BUCLES DE PROGRAMA

Algunas instrucciones (operaciones) deben ejecutarse más de una vez en el programa. Un conjunto de comandos que se repiten es denominado un bucle de programa. Cuántas veces se ejecutará, es decir cuánto tiempo el programa se quedará en el bucle, depende de las condiciones de salir del bucle.
BUCLE WHILE

El bucle while aparece cuando el número de iteraciones no está especificado. Es necesario comprobar la condición de iteración antes de ejecutar un bucle. En otras palabras, el bucle while se ejecuta una vez cumplidas todas las condiciones necesarias para su ejecución. La sintaxis del bucle while se parece a lo siguiente:

while expresión
sentencias
wend

El especificador sentencias representa un grupo de sentencias que se ejecutan repetidamente hasta que el valor del especificador expresión que representa una expresión siga siendo verdadero. En otras palabras, el programa se queda en el bucle hasta que la expresión llegue a ser falsa. El valor de la expresión se comprueba antes de que se ejecute la siguiente iteración. Si el valor de la expresión es falso antes de entrar el bucle, no se ejecuta ninguna iteración, esto es las sentencias no se ejecutarán nunca. El programa continúa con la ejecución desde el fin del bucle while (desde las instrucciones que siguen a la instrucción wend).
Un tipo especial del bucle de programa es un bucle infinito. Se forma si la condición para salir del bucle sigue sin cambios dentro del bucle.
La ejecución es simple en este caso ya que el resultado es siempre verdadero (1 siempre será diferente de 0), lo que significa que el programa se queda en el bucle:

while 1 ' Se puede escribir ‘verdadero’ en vez de ‘1’
... ' Las expresiones se ejecutarán repetidamente (bucle infinito)
...
wend

BUCLE FOR

El bucle for se utiliza cuando el número de iteraciones está especificado. La sintaxis del bucle for es la siguiente:

for contador = valor_inicial to valor_final [step valor_de_paso]
sentencias
next contador

La variable contador se incrementa por el valor de paso con cada iteración de bucle.
El parámetro valor_de_paso es un valor entero opcional, que es igual a 1 si es omitido. Antes de ejecutar la primera iteración el contador se pone al valor_inicial y se incrementa hasta llegar o exceder al valor_ final. Con cada iteración se ejecutan las sentencias. Las expresiones valor_inicial y valor_final deben ser compatibles con el contador. El especificador sentencia puede ser cualquier sentencia que no afecta al valor del contador. El parámetro valor_de_paso puede ser negativo, lo que permite contar atrás.

for k=1 to 5 ' La variable k se incrementa cinco veces (de 1 a 5) y
operation ' cada vez sigue ejecutándose la "operación"
...
next k

Un conjunto de instrucciones (operación) se ejecutará cinco veces. Después, al comprobar que k<5 sea falsa (después de 5 iteraciones k=5) y el programa saldrá del bucle for.
BUCLE DO

La sentencia do se utiliza cuando el número de iteraciones no está especificado. El bucle se ejecuta repetidamente hasta que la expresión siga siendo verdadero. La sintaxis del bucle do es la siguiente:

do
sentencias
loop until expresión

En este caso, el especificador sentencias representa un grupo de sentencias que se ejecutarán hasta que la expresión siga siendo verdadera. Las condiciones del bucle se comprueban al final del bucle, así que el bucle se ejecuta al menos una vez, sin reparar en si la condición es verdadera o falsa. En el siguiente ejemplo, el programa se queda en el bucle do hasta que la variable a alcance 1E06 (un millón de iteraciones).

a = 0 ' Establecer el valor inicial
do
a = a+1 ' Operación en marcha
loop until a <= 1E06 ' Comprobar la condición


ESCRIBIR CÓDIGO EN LENGUAJE ENSAMBLADOR

Programación de los microcontroladores

A veces el proceso de escribir un programa en Basic requiere las partes del código escritas en ensamblador. Esto permite ejecutar algunas partes del programa de una forma definida con precisión en un período de tiempo exacto. Por ejemplo, cuando se necesita que los pulsos muy cortos (de unos microsegundos) aparezcan periódicamente en un pin del microcontrolador. En tales casos la solución más simple sería escribir el código ensamblador en la parte del programa que controla la duración de pulsos.
El comando asm se utiliza para introducir una o más instrucciones en ensamblador en el programa escrito en Basic:

asm
instrucciones en ensamblador
...
end asm

Las instrucciones en ensamblador pueden utilizar los objetos (constantes, variables, rutinas etc.) anteriormente declarados en Basic. Por supuesto, como el programa entero está escrito en Basic, sus reglas se aplican al declarar estas constantes y variables. Veamos al siguiente ejemplo:

Programacion

MATRICES

Una matriz es una lista organizada y limitada de variables del mismo tipo denominadas elementos. Este tipo es denominado tipo básico. Cada elemento es referenciado por un índice único así que los diferentes elementos pueden tener el mismo valor. Para declarar una matriz, es necesario especificar el tipo de sus elementos (denominado tipo de matriz), su nombre y el número de sus elementos encerrados entre corchetes:

dim nombre_de_matriz as tipo_de_componente [número_de_componentes]

Los elementos de una matriz se identifican por su posición. Los índices van desde 0 (el primer elemento de una matriz) a N-1 (N es el número de elementos contenidos en la matriz). El compilador tiene que “saber” cuántas localidades de memoria debe alojar al declarar una matriz. Por eso, el tamaño de una matriz no puede ser variable.

Para explicar con más claridad, una matriz puede ser pensada como una lista más o menos larga o corta de variables del mismo tipo en la que a cada una se le asigna un número ordinal que siempre empieza por cero. A esta matriz se le denomina vector. En la tabla de la derecha se muestra una matriz denominada estante que contiene 100 elementos.
Elementos de la matriz
Contenido de elementos
estante[0] 7
estante 23
estante[2] 34
estante[3] 0
estante 0
estante[5] 12
estante[6] 9
... ...
... ...
estante[99] 23

En este caso, el contenido de una variable (elemento) representa un número de productos que contiene el estante. A los elementos se les puede acceder por medio de la indexación, o sea, al especificar sus índices encerrados entre corchetes:

dim shelf as byte ' Declarar la matriz "estante" con 100 elementos
shelf = 12 ' 12 elementos están ‘colocados’ en el estante
temp = shelf ' Variable estante se copia a la variable temp

En las matrices de constantes, a los elementos se les pueden asignar sus contenidos durante la declaración de matriz. En el siguiente ejemplo, una constante de matriz denominada CALENDARIO se declara y a cada elemento se le asigna un número específico de días:

const CALENDARIO as byte = (31,28,31,30,31,30,31,31,30,31,30,31)

El número de los valores asignados no debe exceder la longitud de la matriz especificada, solo puede ser menor. En este caso, a los elementos ”de sobra” se les asignarán ceros.
SENTENCIA GOTO

La sentencia goto le permite hacer un salto absoluto a otro punto en el programa. Esta característica se debe utilizar con precaución ya que su ejecución puede causar un salto incondicional sin hacer caso a todos los tipos de limitaciones de anidación. El punto destino es identificado por una etiqueta, utilizada como un argumento para la sentencia goto. Una etiqueta consiste en un identificador válido seguido por dos puntos (. La sintaxis de la sentencia goto es:

goto: nombre_de_etiqueta

La sentencia ejecuta un salto al especificador nombre_de_etiqueta que representa una etiqueta. La sentencia goto puede preceder o seguir a una etiqueta. Por lo tanto, no es posible hacer un salto hacia o desde un procedimiento o función. La sentencia goto se puede utilizar para salir de cualquier nivel de las estructuras anidadas. No es recomendable saltar a bucles u otras sentencias estructuradas, ya que se pueden producir resultados inesperados.
SENTENCIA GOSUB

Una subrutina es una parte del código dentro de un programa largo ejecutado a petición. Realiza una tarea específica, es relativamente independiente del resto del código. El intérprete del compilador salta a la subrutina, la ejecuta y vuelve al programa principal. Las palabras clave gosub y return se utilizan en Basic para denotar el inicio y el final de la subrutina:

gosub nombre_de_etiqueta
...
...
...
nombre_de_etiqueta:
...
return

Las subrutinas se consideran difíciles de mantener, leer y manejar, igual que la sentencia goto. Es recomendable utilizarla solo si no hay otra solución.
ACCESO A LOS BITS INDIVIDUALES

El compilador mikroBasic PRO for PIC instalado en la PC, incluye una lista de los microcontroladores PIC soportados, con todos los registros, sus direcciones exactas y los nombres de bits. El compilador le permite acceder a los bits individuales de estos registros por sus nombres, sin especificar sus posiciones (el compilador ya las ‘conoce’). Hay muchas formas de acceder y modificar a un bit individual dentro de un registro. Por ejemplo, vamos a acceder al bit GIE (Global Interrupt Enable - Habilitación global de interrupciones) por ejemplo. Es el séptimo bit del registro INTCON. A este bit se le puede acceder por su nombre, al escribir lo siguiente:

INTCON.GIE = 0 ' Poner a cero el bit GIE

Para denotar la posición de bit en un registro en lugar de un nombre de bit se pueden utilizar una variable, una constante, una llamada a función o una expresión encerrada entre paréntesis. Además, para acceder a los bits individuales se utilizan las constantes globales predefinidas B0, B1, … , B7, o 0, 1, … 7, donde 7 se considera el bit más significante.

INTCON.B0 = 0 ' Poner a cero el bit 0 del registro INTCON
ADCON0.5 = 1 ' Poner a uno el bit 5 del registro ADCON0
i = 5
STATUS.(i+1) = 1 ' Poner a uno el bit 6 del registro STATUS

Por fin, a un bit deseado se le puede acceder al utilizar un nombre “alias”. En este caso, es el GIE_bit:

GIE_bit = 1 ' Poner a uno el bit GIE

TIPO SBIT

El compilador mikroBasic PRO for PIC tiene un tipo de dato sbit. Esto es un tipo de dato más corto que se refiere a un solo bit. Si al tipo sbit se le asigna una variable, el bit apropiado de un registro será cambiado al cambiar esta variable sin especificar el nombre y la localidad del registro. La variable sbit se comportará como un puntero. Para declarar la variable sbit, basta con escribir:

dim Nombre_de_bit as sbit at Nombre_de_registro.Posición_de_bit

program MyProgram ' Módulo principal
...
dim Output1 as sbit at PORTB.0 ' Variable Output1 es de tipo sbit
...
Output1 = 1 ' Pin del puerto PORTB.0 está a uno (5V)

Si una variable de tipo sbit no está definida en el mismo módulo donde se utiliza, la palabra clave external debe ser utilizada. Además, el especificador de memoria apropiado se debe añadir:

dim nombre_de_bit as sbit sfr external

module MyModule ' Esto no es el módulo principal y el bit Output1
... ' no está definido aquí
dim Output1 as sbit sfr external
...
Output1 = 1 ' Pin PORTB.0 (definido en el ejemplo anterior como Output1) está a uno (5V)

TIPO BIT

El compilador mikroBasic PRO for PIC proporciona un tipo de dato bit que se puede utilizar para declarar las variables.

dim bf as bit

A diferencia de variables de tipo sbit, solo el nombre de bit está declarado aquí, mientras que el compilador almacena una variable bit en algunos de los registros libres de la RAM. Como se puede ver, no es necesario especificar un bit de algún registro e

8 comentarios - Programación de los microcontroladores

SPAIKOMATRIX +2
me gusta y me interesa, soy tecnico en electronica industrial, pero namadas al comenzar a leer me da vueltas la cabeza jajaja, creo que segire reparando pc´s y armando amplificadores para bocinas jaja, lo mas que llege a programas fue un plc mitsubishi que traia interfas grafica con compuertas logicas flipflops delays y ese tipo de cosas jajajaja me cae que que no puedo con eso aunque se vea muy padre e interesante, mis sueños terminaron antes de empezar como la guitarra jajajajaja
fenixdiad +1
Lei pero a partir de la mitad o menos ya no pude entender me revolví tratare de esforzarme por que la verdad quiero aprender a hacer uno XD

Bueno post a Fav
Ra_xxx +2
interesante, pero hoy en día la programación en assembler o código ensamblador no es lo mas eficiente, es como querer pintar y en vez de utilizar un pincel, realices pinturas rupestres.ja
USA "C"
Mikyverg
mmm, creo que va según tus necesidades, conosco un para de empresas que se dedican a las alarmas y usan ensamblador. Bueno este tema no es algo del cual quiera generar poemica (no tengo mucha experiencia con el tema), ademas los pic´s se usan para controlar pequeñas tareas, en base a esto pienso que el programador ya que tenga la experiencia nescesaria va a decidir en un futuro que lenguaje puede usar. Saludos.
LittoIriarte
excelente post, gracias por compartir, saludos
loquando
Excelente post gracias.
m_cesar1
buenas tardes, no estoy muy ducho en la programación de micros. pero veo que es mas sencillo programar procesadores en arduino. a pesar de que este es hardware libre. mi pregunta es. porque ???
Mikyverg -2
no manches, no voy a darte la respuesta de tu tarea, pero es fácil deducirlo.
m_cesar1
@Mikyverg ohhh, gracias. te hubieses ahorrado el responder papa
tecnotron310
¿Lo has cogido de algún libro? ¿De ser así podrías pasarme el nombre?
Mikyverg -1
Checa la fuente