Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 LENGUAJES DE PROGRAMACIN
Similar al uso de cualquier lengua que no est limitada a los libros y a las revistas, el
lenguaje de programacin Basic no est estrechamente relacionado a un tipo particular de
ordenador, procesador o sistema operativo. Esto puede ser un problema, ya que Basic vara
ligeramente dependiendo de su aplicacin (como diferentes dialectos de una lengua). Por
consiguiente, en este libro no vamos a darle una descripcin detallada de todas las
caractersticas de Basic, sino presentar una aplicacin muy concreta de Basic, lenguaje de
programacin utilizado en el compilador mikroBasic PRO for PIC.
El Basic es un lenguaje de programacin simple y fcil de entender. Para utilizarlo
correctamente, basta con conocer slo unos pocos elementos bsicos en los que consiste
cada programa. Estos son:
Identificadores
Comentarios
Operadores
Expresiones
Instrucciones
Constantes
Variables
Smbolos
Directivas
Etiquetas
Procedimientos y funciones
Mdulos
Aqu est un ejemplo de cmo no se debe escribir un programa. Los comentarios no estn
incluidos, nombres de etiquetas no tienen significado, secciones del cdigo no estn
agrupadas...Este programa funciona correctamente, pero slo el programador que lo
escribi conoce su propsito y modo de ejecucin (como mximo uno o dos das).
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 cmo se debe escribir un
programa. Las diferencias son ms que obvias...
ESTRUCTURA DE PROGRAMA
Similar a los otros lenguajes de programacin, 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 mayora de programas a los que est acostumbrado a manejar, el proceso
Slo para estar seguro de que estamos hablando en los mismos trminos... A partir de ahora
la palabra mdulo se refiere a un documento con extensin .mbas. El texto que contiene se
refiere a un programa. Cada proyecto escrito en el compilador mikroBasic PRO for PIC es
de extensin .mbppi (microBasic Project for PIC) y consiste en un mdulo como mnimo
(mdulo principal - Main Module).
Cada proyecto en el mikroBasic PRO for PIC requiere un solo mdulo principal. Lo
identifica la palabra clave program y ordena al compilador por dnde empezar el proceso
de la compilacin. Al crear con xito un proyecto vaco en Project Wizard, el mdulo
principal (main module) ser visualizado automticamente en la ventana Code Editor:
program MyProject ' El mdulo principal es denominado MyProject
main: ' Procedimiento principal
... '*
...
'* Escribir el cdigo 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 mdulos que, a diferencia del
mdulo principal, empiezan por la palabra clave module.
Para que el compilador pueda reconocer todos los mdulos que pertenecen a un proyecto,
es necesario especificarlos en el mdulo principal por medio de la palabra clave include
seguida por un nombre del mdulo entre comillas. La extensin de estos ficheros no se
debe incluir. Se permite slo un mdulo por clusula include. El nmero de las clusulas
include no est limitado, pero todas ellas deben estar especificadas inmediatamente despus
del nombre del programa (mdulo principal). Ejemplo:
program MyProgram
MyProgram)
include "utils"
include "strings"
include "MyUnit"
...
Como se puede ver, es una variable de punto flotante, o sea un nmero con posicin
decimal opcional. Las otras dos variables estn declaradas y nombradas velocidad y tiempo.
Ahora, se pueden utilizar en el siguiente programa:
Esto es un ejemplo de cmo escribir el mdulo principal correctamente:
IDENTIFICADORES
Los identificadores son los nombres arbitrarios asignados a los objetos bsicos 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 estn las
reglas a observar al utilizar los identificadores.
Los identificadores pueden incluir cualquiera de los caracteres alfabticos A-Z (a-z),
los dgitos 0-9 y el carcter subrayado '_'.
Las palabras clave ya utilizadas por el compilador no deben ser utilizadas como
identificadores. Lista alfabtica 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
COMENTARIOS
Los comentarios son las partes del programa utilizados para aclarar las instrucciones de
programa o para proporcionar ms informacin al respecto. En Basic, cualquier texto que
ETIQUETAS
Las etiquetas proporcionan el modo ms fcil de controlar el flujo de programa. Se utilizan
para denotar las lneas particulares en el programa donde se deben ejecutar la instruccin de
salto y la subrutina apropiada. Todas las etiquetas deben terminar por : as que el
compilador las puede reconocer con facilidad.
CONSTANTES
Las constantes son los nmeros o caracteres cuyo valor no puede ser cambiado durante la
ejecucin 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 vlido. 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
Decimal
Hexadecimal
Binario
Prefijo
0x o $
Punto flotante
Ejemplo
const MAX = 100
const MAX = 0xFF
const MAX = %11011101
Los nombres de las constantes se escriben normalmente con maysculas. El tipo de una
constante se reconoce automticamente por su tamao. 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
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 nmero 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 carcter. Las constantes de cadena se utilizan para representar cantidades no numricas
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 ejecucin de programa. Cada variable se declara bajo un nombre nicoque debe
ser un identificador vlido. Por ejemplo, para sumar dos nmeros (nmero1 + nmero2) en
el programa, es necesario tener una variable para representar qu es lo que llamamos suma
en vida cotidiana. En este caso, nmero1, nmero2 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 vlidos 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
SMBOLOS
Los smbolos en Basic permiten crear los macros simples sin parmetros. Cualquier lnea
de cdigo se puede reemplazar por un solo identificador. Los smbolos pueden aumentar
legibilidad y reutilizacin de cdigo cuando se utilizan correctamente.
Los smbolos deben ser declarados al principio del mdulo, bajo el nombre del mdulo y la
directiva opcional include. El mbito de un smbolo es siempre limitado al mdulo en el
que ha sido declarado.
symbol nombre_de_smbolo = cdigo
Aqu, nombre_de_smbolo debe ser un identificador vlido que se utilizar por todo el
cdigo. El especificador cdigo puede ser cualquier lnea de cdigo (literales,
asignaciones, llamadas de funcin etc.)
symbol MAXALLOWED = 216
numrico
symbol OUT = PORTA
symbol MYDELAY = Delay_ms(762)
procedimiento
dim cnt as byte
main:
if cnt > MAXALLOWED then
cnt = 0
OUT.1 = 0
MYDELAY
end if
...
Tamao (Nmero
Rango de valores
de bits)
1
0o1
1
0o1
8
0 ... 255
float
Punto flotante
0 ... 65535
-32768 ... 32767
0 ... 4294967295
32
32
1.17549435082*10-38 ...
6.80564774407*1038
si una sentencia requiere una expresin del tipo particular, y se utiliza la expresin
de tipo diferente;
PROMOCIN
Cuando los operandos son de tipos diferentes, mediante la conversin implcita se realiza la
promocin de tipo ms bajo a tipo ms alto, de la siguiente manera:
bit byte
RECORTE DE DATOS
En las sentencias de asignacin y en las sentencias que requieren una expresin de tipo
particular, el valor correcto ser almacenado en el destino slo si el resultado de expresin
no excede al rango del destino. Al contrario, si el resultado de la expresin resulta en un
tipo ms complejo de lo esperado, los datos que exceden se recortarn, o sea los bytes ms
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 ms alto $FF se pierde
Como no afecta a la representacin binaria de los datos, un caso especial es una conversin
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 representacin binaria %11111111
' pero el compilador la interpreta de la manera diferente
OPERADORES
Un operador es un smbolo que denota una operacin aritmtica, lgica u otra operacin
particular. Cada operacin se realiza sobre uno o ms operandos (variables o constantes) en
una expresin. Adems, cada operador dispone de la ejecucin de prioridad y de la
asociatividad. Si una expresin contiene ms de un operando, los operandos se ejecutarn
en orden de su prioridad. Hay 4 categoras de prioridad en Basic. Los operadores que
pertenecen a la misma categora tienen igual prioridad. Si dos o ms operandos tienen el
mismo nivel de prioridad, las operaciones se realizan de izquierda a derecha. Los parntesis
se utilizan para definir la prioridad de la operacin dentro de la expresin. A cada categora
se le asigna una de dos reglas de asociatividad: de izquierda a derecha o de derecha a
izquierda. Refirase a la siguiente tabla:
Prioridad
Alta
Baja
Operadores
@ not + * / div mod and << >>
+ - or xor
= <> < > <= >=
Asociatividad
de derecha a izquierda
de izquierda a derecha
de izquierda a derecha
de izquierda a derecha
OPERADORES ARITMTICOS
Los operadores aritmticos se utilizan para realizar operaciones aritmticas. Estas
operaciones se realizan sobre los operandos numricos y siempre devuelven los resultados
numricos. Las operaciones binarias se realizan sobre dos operandos, mientras que las
operaciones unitarias se realizan sobre un operando. Todos los operadores aritmticos se
asocian de izquierda a derecha.
Operador
+
*
/
div
mod
Operacin
Adicin
Resta
Multiplicacin
Divisin - punto flotante
Divisin - redondear
Remanente
Los operadores relacionales se utilizan para comparar dos variables y determinar la validez
de su relacin. En mikroBasic, todos los operadores relacionales devuelven 255 si la
expresin es evaluada como verdadera (true). Si una expresin es evaluada como falsa
(false), el operador devuelve 0. Lo mismo se aplica a las expresiones tales como si la
expresin es evaluada como verdadera, entonces...
Operador
>
>=
<
<=
=
<>
Significado
es mayor que
es mayor o igual que
es menor que
es menor o igual que
es igual que
no es igual que
Ejemplo
b>a
a >= 5
a<b
a <= b
a=6
a <> b
Condicin de veracidad
si b es mayor que a
si a es mayor o igual que 5
si a es menor que b
si a es menor o igual que b
si a es igual que 6
si a no es igual que b
Ejemplo
Resultado
A = B << 2 B = 11110011 A = 11001100
A = B >> 3 B = 11110011 A = 00011110
A=11100011
Y lgico para manejo de bits
C = A and B
C = 11000000
B=11001100
A=11100011
O lgico para manejo de bits
C = A or B
C = 11101111
B=11001100
NO lgico para manejo de bits
A = not B
B = 11001100 A = 00110011
A = 11100011
EXOR lgico para manejo de bits C = A xor B
C = 00101111
B = 11001100
Los operadores de manejo de bits y (and), o (or) y xor realizan las operaciones lgicas
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 nmero 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 2 n
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 expresin. En otras
palabras, Si se cumple la condicin (...), 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 expresin then
operaciones
end if
if expresin then
operaciones1
else
other operaciones2
end if
BUCLE WHILE
El bucle while aparece cuando el nmero de iteraciones no est especificado. Es necesario
comprobar la condicin de iteracin antes de ejecutar un bucle. En otras palabras, el bucle
while se ejecuta una vez cumplidas todas las condiciones necesarias para su ejecucin. La
sintaxis del bucle while se parece a lo siguiente:
while expresin
sentencias
wend
BUCLE FOR
El bucle for se utiliza cuando el nmero 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 iteracin de bucle.
El parmetro valor_de_paso es un valor entero opcional, que es igual a 1 si es omitido.
Antes de ejecutar la primera iteracin el contador se pone al valor_inicial y se incrementa
hasta llegar o exceder al valor_ final. Con cada iteracin 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
parmetro valor_de_paso puede ser negativo, lo que permite contar atrs.
for k=1 to 5 ' La variable k se incrementa cinco veces (de 1 a 5) y
operation ' cada vez sigue ejecutndose la "operacin"
...
next k
A veces el proceso de escribir un programa en Basic requiere las partes del cdigo escritas
en ensamblador. Esto permite ejecutar algunas partes del programa de una forma definida
con precisin en un perodo de tiempo exacto. Por ejemplo, cuando se necesita que los
pulsos muy cortos (de unos microsegundos) aparezcan peridicamente en un pin del
microcontrolador. En tales casos la solucin ms simple sera escribir el cdigo
ensamblador en la parte del programa que controla la duracin de pulsos.
El comando asm se utiliza para introducir una o ms 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:
MATRICES
Una matriz es una lista organizada y limitada de variables del mismo tipo denominadas
elementos. Este tipo es denominado tipo bsico. 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 nmero de sus elementos encerrados entre corchetes:
dim nombre_de_matriz as tipo_de_componente [nmero_de_componentes]
Los elementos de una matriz se identifican por su posicin. Los ndices van desde 0 (el
primer elemento de una matriz) a N-1 (N es el nmero de elementos contenidos en la
matriz). El compilador tiene que saber cuntas localidades de memoria debe alojar al
declarar una matriz. Por eso, el tamao de una matriz no puede ser variable.
Para explicar con ms claridad, una matriz puede ser pensada como una lista ms o menos
larga o corta de variables del mismo tipo en la que a cada una se le asigna un nmero
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
estante[0]
Contenido de elementos
7
estante[1]
estante[2]
estante[3]
estante[4]
estante[5]
estante[6]
...
...
estante[99]
23
34
0
0
12
9
...
...
23
En las matrices de constantes, a los elementos se les pueden asignar sus contenidos durante
la declaracin de matriz. En el siguiente ejemplo, una constante de matriz denominada
CALENDARIO se declara y a cada elemento se le asigna un nmero especfico de das:
const CALENDARIO as byte [12]= (31,28,31,30,31,30,31,31,30,31,30,31)
SENTENCIA GOSUB
Una subrutina es una parte del cdigo dentro de un programa largo ejecutado a peticin.
Realiza una tarea especfica, es relativamente independiente del resto del cdigo. El
intrprete 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 difciles de mantener, leer y manejar, igual que la sentencia
goto. Es recomendable utilizarla solo si no hay otra solucin.
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 - Habilitacin global de
interrupciones) por ejemplo. Es el sptimo 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
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
ms 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.Posicin_de_bit
program MyProgram ' Mdulo 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 mdulo donde se utiliza, la palabra
clave external debe ser utilizada. Adems, el especificador de memoria apropiado se debe
aadir:
dim nombre_de_bit as sbit sfr external
module MyModule ' Esto no es el mdulo 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 algn registro especfico. La
localidad exacta de la variable de tipo bit es desconocida al usuario.
Los tipos Bit y sbit se utilizan con los siguientes limitaciones:
No pueden ser utilizados para las listas de argumentos y como valores devueltos de
funciones
FUNCIONES Y PROCEDIMIENTOS
Las funciones y los procedimientos, denominados bajo el nombre comn de rutinas, son
subprogramas (bloques de sentencias autnomos) que ejecutan ciertas tareas a base de un
nmero de los parmetros de entrada. Las funciones devuelven un valor despus de la
ejecucin, mientras que los procedimientos no devuelven un valor.
PROCEDIMIENTOS
Un procedimiento es un bloque de cdigo nombrado, o sea, una subrutina con algunas
caractersticas adicionales. Por ejemplo, puede aceptar parmetros. Los procedimientos se
declaran de la siguiente manera:
sub procedure nombre_de_procedimiento (lista_de_parmetros)
[ declaraciones locales ]
cuerpo de procedimiento
end sub
El especificador nombre_de_procedimiento
procedimiento y debe ser un indentificador vlido.
representa
un
nombre
de
Ahora, podemos llamar al procedimiento add para hacer clculo del peso total de una carga,
por ejemplo:
add (peso_bruto, peso_neto, peso_tara)
FUNCIONES
Las funciones deben estar declaradas apropiadamente para ser interpretadas correctamente
durante el proceso de la compilacin.
sub function nombre_de_funcin (lista_de_parmetros) as valor_devuelto
[ declaraciones locales ]
cuerpo de funcin
end sub
for i = 1 to n
result = result*x
next i
end sub
end if
Ahora, podemos llamar a la funcin power para hacer clculo de 312 por ejemplo:
tmp = power(3, 12) ' Hacer clculo de 3*12
Lo
Hi
Higher
Highest
Inc
Dec
Chr
Ord
SetBit
ClearBit
TestBit
Delay_us
Delay_ms
Vdelay_Advanded_ms
Vdelay_ms
Delay_Cyc
Clock_KHz
Clock_MHz
Reset
ClrWdt
DisableContextSaving
SetFuncCall
SetOrg
GetDateTime
GetVersion
Las rutinas Delay_us y Delay_ms se generan en la parte del programa de la que se llaman.
Vdelay_ms, Delay_Cyc y Get_Fosc_kHz son las rutinas actuales en Basic. Sus fuentes se
pueden encontrar en el archivo Delays.mbas ubicado en el archivo uses del compilador.
PREPROCESADOR
Un preprocesador es una parte integral de cada compilador. Su funcin es de reconocer y
ejecutar las instrucciones del preprocesador. Qu son instrucciones del preprocesador? Son
instrucciones especiales que no pertenecen al lenguaje Basic, sino que estn integrados en
el compilador. Antes de compilar, el compilador inicia al preprocesador que pasa por el
programa en bsqueda de estas instrucciones. Si encuentra una, el preprocesador las
sustituir por otro texto que, dependiendo del tipo de comando, puede ser un archivo
(comando include) o slo una corta sentencia de caracteres (comando define). Entonces, el
proceso de compilar puede empezar. Las instrucciones pueden estar en cualquier parte del
programa fuente y se refieren solamente a la parte del programa en la que aparecen hasta el
final del programa.
COMPILACIN CONDICIONAL
Las directivas de la compilacin condicional se utilizan generalmente para facilitar la
modificacin y compilacin de los programas fuente para los diferentes
microcontroladores. El compilador mikroBasic PRO for PIC soporta a la compilacin
condicional. Todas las directivas de la compilacin condicional deben terminar dentro del
mdulo en el que han empezado.
DIRECTIVAS #IF, #ELIF, #ELSE, Y #ENDIF
Las directivas condicionales #if, #elif, #else y #endif se ejecutan de manera similar a las
sentencias condicionales comunes en Basic. Si una expresin escrita despus de #if tiene
un valor distinto de cero, las lneas de programa que siguen a la directiva #if sern
interpretadas como un cdigo de programa vlido y compiladas en cdigo hex. La sintaxis
es la siguiente:
#if constant_expression_1
<section_1>
[#elif constant_expression_2
<section_2>]
...
[#elif constant_expression_n
<section_n>]
[#else
secciones anteriores
<final_section>]
#endif
Cada directiva #if en un archivo fuente debe terminar por una directiva #endif de
cierre correspondiente. Entre las directivas #if y #endif puede haber cualquier
nmero de las directivas #elif, pero slo se permite una directiva #else. Si est
presente la directiva #else, debe ser la ltima directiva antes de la directiva #endif.
Por ltimo, resulta que solamente una seccin del cdigo ser compilada, aunque est
vaca.
PUNTEROS
Como ya hemos mencionado, a cada objeto en el programa (variable, procedimiento,
subrutina etc.) se le asigna una direccin de memoria particular. Al declarar una variable en
el programa el compilador le asigna automticamente una localidad de la memoria RAM
libre. Durante la programacin, estas direcciones no son visibles para los programadores.
La posibilidad de acceder a los diferentes objetos por sus nombres (identificadores) en vez
de por sus direcciones es una de las ventajas principales de los lenguajes de programacin
de alto nivel. En realidad, es ms fcil manejar las palabras (nombres) que los nmeros.
Adems, el compilador se encarga de los objetos asociados y de sus direcciones.
Direccionar los objetos al especificar sus nombres es denominado direccionamiento directo.
Sin embargo, a veces se necesita utilizar las direcciones de localidades de memoria. En este
caso se utilizan los punteros - variables que almacenan la direccin de memoria de un
objeto. Entonces, es posible acceder a los objetos que utilizan solamente los punteros. Por
eso esta forma de direccionar es denominada direccionamiento indirecto.
Antes de utilizar un puntero es necesario declarar su tipo de datos. Solo hay que anteponer
el signo de intercalacin (^) al tipo.
dim pointer_p as ^word
Para acceder a los datos en la localidad de memoria del puntero, necesita posponer el signo
de la intercalacin (^) al nombre del puntero. Veamos el ejemplo de la declaracin del
anteriormente mencionado puntero puntero_p , que apunta a la palabra (en este caso, es
anteriormente definida variable_a almacenada en la direccin 12 en la RAM). A la variable
apuntada variable_a se le asigna el valor 26:
dim pointer_p as ^word 'Puntero_p a punta al dato de tipo word
...
...
pointer_p = 12
'Puntero_p apunta a la direccin de memoria 12
...
puntero_p^ = 26
'Variable a en la localidad de memoria 12 tiene
valor 2
'Similar a la directiva absolute utilizada para las variables, la
'directiva org especifica la direccin inicial de una rutina en la
'memoria ROM. Se aade a la declaracin de la rutina. Por ejemplo:
sub procedure proc(dim par as word) org 0x200 ' El procedimiento empezar
...
' en la direccin 0x200
end sub
En este caso, al puntero puntero_p se le asigna el valor 12 (puntero_p =12), lo que significa
que la direccin de memoria 12 est especificada.
Si quiere cambiar el valor de una variable apuntada, basta con cambiar el valor del puntero
y posponer el signo de intercalacin (^) al valor. Veamos la figura a la derecha: a la variable
variable_a en la direccin 12 se le asigna el valor 26 por medio del puntero puntero_p.
Los punteros pueden apuntar a los datos almacenados en cualquier espacio de memoria
disponible y pueden residir en cualquier espacio de memoria disponible menos en el
espacio de memoria de programa (ROM).
@ OPERADOR
El operador @ devuelve la direccin de un objeto, o sea, crea un puntero sobre su
operando. Las siguientes reglas se aplican al operando @:
ptr_b = @arr
' operador @ devolver ^byte
temp = @arr
' operador @ devolver ^byte
ptr_arr = @arr ' operador @ devolver ^byte[10]
end.
al empezar a escribir su primer programa en Basic. El punto es que usted necesita ms que
una teora para que el microcontrolador haga algo til.
Teniendo en cuenta de que Es mejor prevenir que curar, hay que avisarle de todas las
cosas por resolver antes de que empiece a escribir un programa para el microcontrolador.
Antes que nada, necesita un programa instalado en la PC que eniende el lenguaje de
programacin a utilizar y que proporciona un entorno de trabajo apropiado. No hay un
compilador apropiado para un tipo de compilador, tampoco para todos los
microcontroladores. Normalmente se utiliza un software para programar los similares
microcontroladores
de
un
fabricante.
En las secciones anteriores hemos presentado el lenguaje mikroBasic, especialmente
diseado para programar los PIC. Ahora, cuando sabe lo suficiente sobre ese lenguaje, es
hora de presentar el software que utilizar para desarrollar y editar los proyectos. Este
software se le denomina Entorno de desarrollo integrado (Integrated Developement
Environment - IDE) e incluye todas las herramientas necesarias para desarrollar los
proyectos (editor, depurador etc.).
Como implica su nombre, mikroBasic PRO for PIC est pensado para escribir los
programas para los microcontroladores PIC en Basic. Este compilador contiene las
informaciones de arquitectura de los microcontroladores PIC (registros, sus direcciones
exactas, mdulos de memoria, funcionamiento de sus mdulos, juego de instrucciones,
disposicin de pines etc.). Adems incluye las herramientas apropiadas para programar los
microcontroladores PIC. Lo primero que tiene que hacer al iniciar el compilador es
seleccionar el chip y frecuencia de operacin de la lista. Esto no es un final, sino un
comienzo. Por fin puede empezar a escribir el programa en Basic.
El proceso de crear y ejecutar un proyecto contiene los siguientes pasos:
1. Crear un proyecto (nombre de proyecto, configuracin de proyecto, dependencias
entre archivos);
2. Editar un programa;
3. Compilar el programa y correccin de errores;
4. Depurar (ejecutar el programa paso a paso para asegurarse de que se ejecutan las
operaciones deseadas);
5. Programar un microcontrolador (cargar el archivo .hex generado por el compilador
en el microcontrolador utilizando el programador PICflash).
Basta con seguir las instrucciones y pulsar sobre Next, OK, Next, Next... En general, es el
mismo procedimiento menos la ltima opcin: 'Do you want to install PICFLASH v7.11
programmer?'. Para qu sirve este software? Como ya hemos dicho, el compilador
compila un programa escrito en Basic en cdigo hex. El siguiente paso es cargar ese cdigo
en el microcontrolador. Por eso es necesario instalar el programador PICFLASH. Hgalo!
Una vez ms: Next, OK, Next, Next...
El controlador a instalar depende del sistema operativo utilizado. En este caso, el ordenador
utiliza el sistema operativo de 32 bits Windows XP. Seleccione la carpeta Win 2000, XP,
2003 32-bit que contiene el controlador apropiado e inicie la instalacin.
Otra vez, Next, OK, Next, Next...Bueno, todo est instalado para iniciar a programar!
Desgraciadamente, una descripcin detallada de todas las opciones disponibles de este IDE
nos tomara mucho tiempo. Por eso vamos a describir slo lo ms importante del
compilador mikroBasic PROfor PIC. De todos modos, para obtener ms informacin
presione el botn de Ayuda (Help) [F1]. En el captulo cuatro se presentan varios ejemplos
y se da una explicacin detallada de cmo crear un nuevo proyecto y escribir un programa.
PROJECT MANAGER (Administrador de proyecto)
Las libreras contienen un gran nmero de funciones listas para ser utilizadas. Las libreras
en mikroBasic proporcionan muchas facilidades para escribir programas para los
microcontroladores PIC. El compilador debe conocer todas las dependencias del archivo
fuente de mikroBasic para compilarlo apropiadamente. Abra la ventana Library Manager, y
marque las que quiere utilizar en el programa. Al marcar una librera, se aade
automticamente al proyecto y se enlaza durante el proceso de la compilacin. As, no
necesita incluir las libreras manualmente en sus archivos del cdigo fuente por medio de la
directiva del preprocesador #include. Por ejemplo, si su programa utiliza un LCD no hace
falta escribir nuevas funciones ya que al seleccionar la librera Lcd, usted podr utilizar
funciones listas para ser utilizadas de la librera Lcd en su programa. Si esta librera no est
seleccionada en la ventana Library Manager, cada vez que intente utilizar una funcin de la
librera LCD, el compilador le informar de un error. Una descripcin de cada librera est
disponible al pulsar con el botn derecho del ratn sobre su nombre y seleccionar la opcin
Help.
CODE EXPLORER (Explorador de cdigo)
Build type - ICD debug: El archivo .hex generado contiene los datos adicionales que
permiten el funcionamiento del depurador. Una vez completado el proceso de la
compilacin y cargado el programa en la memoria del microcontrolador, el compilador se
queda conectado al microcontrolador por medio del cable USB y el programador, y todava
puede afectar a su funcionamiento. Una herramienta denominada mikroICD (Depurador en
circuito - In Circuit Debugger) permite ejecutar el programa paso a paso y proporcionar un
acceso al contenido actual de todos los registros del microcontrolador.
El simulador software se puede utilizar en ambos modos de compilacin para el propsito
de depurar. Le permite simular su programa al reproducir el comportamiento del
microcontrolador. El simulador no utiliza los dispositivos reales para simular el
funcionamiento del microcontrolador, as que algunas operaciones no pueden ser
reproducidas (por ejemplo, interrupcin). De todos modos, resulta ms rpido depurar un
programa por medio de un simulador. Adems, no se requiere ningn dispositivo destino.
Note que es posible modificar cualquier configuracin en cualquier momento mientras se
edita el programa. No se olvide de recompilar y reprogramar su dispositivo despus de
modificar una configuracin.
SIMULADOR SOFTWARE
Si quiere ser un programador y dedicarse a programar los microcontroladores, tenga en
cuenta de que los programas nunca funcionan al primer intento. Por eso, empiece a
funcionar un simulador. El simulador es una parte integral del compilador utilizado para
simular el funcionamiento del microcontrolador.
Step Into: Ejecuta una sola instruccin. Cuando la instruccin es una llamada a una
subrutina, el depurador har un salto a la subrutina y se detendr despus de ejecutar
la primera instruccin dentro de la subrutina.
Step Over: Se ejecuta una sola instruccin. Cuando la instruccin es una llamada a
una subrutina, el depurador no har un salto a la subrutina, sino que se ejecutar
toda la subrutina. El depurador se detiene a la primera instruccin despus de la
llamada a la subrutina. Parece como si se saltara una lnea de programa aunque se
ha ejecutado toda la subrutina. El estado de todos los registros ser cambiado. Este
comando se ejecuta cuando es necesario acelerar la ejecucin de los bucles de
programa largos.
Los puntos de ruptura hacen el proceso de depurar los programas de una manera ms
eficiente, puesto que permiten ejecutar el programa a toda velocidad y detenerlo
automticamente en una lnea especfica (punto de ruptura). Eso resulta muy til,
permitindole comprobar slo las partes crticas del programa y no perder el tiempo
probando todo el programa lnea a lnea. Para aadir o quitar un punto de ruptura basta con
pulsar sobre la lnea apropiada en el lado izquierdo del editor del cdigo, o presionar [F5].
Una pequea ventana denominada Breakpoints muestra dnde estn los puntos de ruptura.
Note que las lneas designadas como puntos de ruptura estn marcadas en rojo.
La lnea que se est ejecutando actualmente est marcada en azul. Es posible leer el
contenido de registros y variables seleccionados en la ventana Watch Values en cualquier
momento. Para saltar directamente a los puntos de ruptura, utilice el comando Run/Pause
Debugger.
STOPWATCH (Cronmetro)
Si quiere saber cunto tiempo tarda un microcontrolador en ejecutar una parte del
programa, seleccione la opcin Run/View Stopwatch. Aparecer una ventana como se
DEPURADOR EN CIRCUITO
La otra forma de comprobar la ejecucin de programa es al utilizar el depurador mikroICD
(depurador en circuito). El mikroICD (depurador en circuito) es una parte integral del
programador PICflash. Se utiliza con el propsito de probar y depurar los programas. El
proceso de probar y depurar se realiza al monitorizar los estados de todos los registros
dentro del microcontrolador durante su funcionamiento en entorno real. Para habilitar la
depuracin, es necesario seleccionar las opciones Build Type-ICD Debug y DebuggermikroICD antes de cargar el programa en el microcontrolador. Tan pronto como se inicie el
depurador mikroICD, aparecer una ventana como se muestra en la siguiente Figura. El
depurador mikroICD se comunica con el microcontrolador PIC por sus pines utilizados
para la programacin. Por eso no se pueden utilizar como pines de E/S durante la ejecucin
de la depuracin de programa. Durante la operacin del depurador mikroICD, el
programador y la PC deben estar conectados al utilizar un cable USB.
Cada de estos comandos se activa por medio de los atajos de teclado o al pulsar sobre el
icono apropiado en la ventana Watch Values.
El depurador mikroICD tambin ofrece funciones tales como ejecutar el programa paso a
paso, detener la ejecucin de programa para monitorear el estado de los registros
actualmente activos por medio de los puntos de ruptura, monitorear los valores de algunas
variables etc. El siguiente ejemplo muestra una ejecucin de programa paso a paso
utilizando el comando Step Over.
Paso1:
En este ejemplo la lnea de programa 31 est marcada por el azul, lo que quiere decir que es
la siguiente en ser ejecutada. El estado actual de todos los registros dentro del
microcontrolador se puede visualizar en la ventana Watch Values del mikroICD.
Paso 2:
El terminal USART representa una sustitucin para la estndar Windows Hyper Terminal.
Se puede utilizar para controlar el funcionamiento del microcontrolador que utiliza la
comunicacin USART. Tales microcontroladores estn incorporados en un dispositivo
destino y conectados al conector RS232 de la PC por medio de un cable serial. La ventana
USART terminal dispone de opciones para configurar la comunicacin serial y visualizar
los datos enviados/recibidos.
EDITOR EEPROM
Al seleccionar la opcin EEPROM Editor del men Tools, aparecer una ventana como se
muestra en la siguiente figura. As es cmo funciona la memoria EEPROM del
microcontrolador. Si quiere cambiar de su contenido despus de cargar el programa en el
microcontrolador, sta es la forma correcta de hacerlo. El nuevo contenido es un dato de un
tipo especfico (char, int o double), primero debe seleccionarlo, introducir el valor en el
campo Edit Value y pulsar sobre Edit. Luego, pulse sobre el botn Save para guardarlo
como un documento con extensin .hex. Si la opcin Use EEPROM in Project est activa,
los datos se cargarn automticamente en el microcontrolador durante el proceso de la
programacin.
VENTANA ASCII CHART
Si necesita representar numricamente un carcter ASCII, seleccione la opcin ASCII chart
del men Tools. Aparecer una tabla, como se muestra en la figura que est a continuacin.
Usted probablemente sabe que cada tecla de teclado est asociada con un cdigo (cdigo
ASCII). Como se puede ver, los caracteres que representan los nmeros tienen valores
diferentes. Por esta razn, la instruccin de programa para visualizar el nmero 7 en un
LCD no visualizar este nmero, sino el equivalente a la instruccin BEL. Si enva el
mismo nmero en forma de un carcter a un LCD, obtendr el resultado esperado - nmero
7. Por consiguiente, si quiere visualizar un nmero sin convertirlo en un carcter apropiado,
es necesario aadir el nmero 48 a cada dgito en el que consiste el nmero a visualizar.
EDITOR DE SIETE SEGMENTOS
Un cdigo generado que utiliza herramientas para controlar los visualizadores LCD y
GLCD contiene funciones de la librera Lcd. Si las utiliza en el programa, no se olvide de
marcar la caja de chequeo junto a esta librera en la ventana Library Manager. As el
compilador ser capaz de reconocer estas funciones correctamente.
LIBRARAS
Uno de los elementos ms importantes del compilador mikroBasic PRO for PIC es Library
Manager,
que
por
supuesto
merece
nuestra
atencin.
Para que una funcin o un procedimiento realice una cierta tarea al escribir un programa,
basta con encontrarla/encontrarlo en una de las libreras incluidas en el compilador y
utilizarla. Una librera representa un archivo llamado cabecera. Contiene un conjunto de
variables y constantes escritas en mikroBasic. Cada librera tiene un propsito especfico.
Por ejemplo, para que un procedimiento genere una seal de audio, abra la librera Sound
en la ventana Library Manager y pulse dos veces sobre el procedimiento apropiado
Sound_Play. Una descripcin detallada de este procedimiento aparece en la pantalla.
Copelo en su programa y ajuste los parmetros apropiados. Al marcar esta librera, sus
funciones estarn disponibles y no ser necesario utilizar la librera include.
El mikroBasic PRO for PIC incluye las libreras miscelneas y las libreras para el
hardware.
LIBRERAS MISCELNEAS
Las libreras miscelneas contienen algunas funciones de propsito general:
Librara
Button Library
Conversions Library
C Type Library
String Library
Descripcin
Eliminar la influencia del rebote de contacto
Rutinas para conversiones de nmeros en cadenas y BCD/decimal
Probar y convertir los caracteres
Automatizar las tareas relacionadas con las cadenas
Time Library
Trigon Library
Funciones trigonomtricas
Descripcin
Utilizada para el funcionamiento del convertidor A/D
Utilizada para las operaciones con el mdulo CAN
Utilizada para las operaciones con el mdulo CAN externo
CANSPI Library
(MCP2515 o MCP2510)
Utilizada para las operaciones con las tarjetas de memoria
Compact Flash Library
Compact Flash
Utilizada para las operaciones con la memoria EEPROM
EEPROM Library
incorporada
Ethernet PIC18FxxJ60
Utilizada para las operaciones con el mdulo Ethernet
Library
incorporado
Utilizada para las operaciones con la memoria Flash
Flash Memory Library
incorporada
Utilizada para las operaciones con el mdulo LCD grfico con
Graphic Lcd Library
resolucin 128x64
Utilizada para las operaciones con el mdulo de comunicacin
IC Library
serial I2C incorporado
Utilizada para las operaciones con el teclado (botones de
Keypad Library
presin 4x4)
Lcd Library
Utilizada para las operaciones con el LCD (de 2x16 caracteres)
Manchester Code Library Utilizada para la comunicacin utilizando el cdigo Manchester
Utilizada para las operaciones con las tarjetas multimedia MMC
Multi Media Card library
flash
Utilizada para las operaciones con los circuitos utilizando la
OneWire Library
comunicacin serial One Wire
Utilizada para las operaciones con el extensor de puertos
Port Expander Library
MCP23S17
PS/2 Library
Utilizada para las operaciones con el teclado estndar PS/2
PWM Library
Utilizada para las operaciones con el mdulo PWM incorporado
Utilizada para las operaciones con los mdulos utilizando la
RS-485 Library
comunicacin serial RS485
Software IC Library
Utilizada para simular la comunicacin I2C con software
Software SPI Library
Utilizada para simular la comunicacin SPI con software
Software UART Library Utilizada para simular la comunicacin UART con software
Sound Library
SPI Library