Pic
Pic
Pic
Usted seguramente sabe que no solo es suficiente conectar el microcontrolador a los otros componentes y
encender una fuente de alimentacin para hacerlo funcionar, verdad? Hay que hacer algo ms. se necesita
programar el microcontrolador para que sea capaz de hacer algo til. Este captulo trata de la programacin
en Basic, por lo que vamos a presentar lo bsico 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 LENGUAJ ES DE PROGRAMACIN
2.2 CARACTERSTICAS PRINCIPALES DEL LENGUAJ E DE PROGRAMACIN BASIC
2.3 COMPILADOR MIKROBASIC PRO FOR PIC
2.1 LENGUAJES DE PROGRAMACIN
El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el cdigo
ejecutable y est compuesto por una serie de ceros y unos, aparentemente sin significado.
Dependiendo de la arquitectura del microcontrolador, el cdigo binario est compuesto por
palabras de 12, 14 o 16 bits de anchura. Cada palabra es interpretada por la CPU como una
instruccin a ser ejecutada durante el funcionamiento del microcontrolador. Como es ms fcil
trabajar con el sistema de numeracin hexadecimal, el cdigo ejecutable se representa con
frecuencia como una serie de los nmeros hexadecimales denominada cdigo Hex. A todas las
instrucciones que el microcontrolador puede reconocer y ejecutar se le denominan colectivamente
J uego de instrucciones. En los microcontroladores PIC con las palabras de programa de 14 bits de
anchura, el conjunto de instrucciones tiene 35 instrucciones diferentes.
Normalmente los programas se escriben en el lenguaje ensamblador cuando se requiere controlar
completamente la ejecucin de programa.
Como el proceso de escribir un cdigo ejecutable era considerablemente arduo, en consecuencia
fue creado el primer lenguaje de programacin denominado ensamblador (ASM). El proceso de
programacin se hizo un poco ms 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 cdigo mquina (cdigo binario). Este programa compila instruccin a
instruccin sin optimizacin. La ventaja principal del lenguaje ensamblador es su simplicidad y el
hecho de que a cada instruccin cle orresponde una localidad de memoria. Como permite controlar
todos los procesos puestos en marcha dentro del microcontrolador, este lenguaje de programacin
todava sigue siendo popular.
Por otro lado, los programas se ejecutan siempre a alta velocidad y en la mayora 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
programacin similar al lenguaje utilizado en el habla cotidiana. Por ltimo, los lenguajes de
programacin 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 cmo se
ejecuta cada sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en el
programa una secuencia escrita en ensamblador.
El proceso de escribir un programa en Basic. Al seleccionar la opcin apropiada, el programa ser compilado
en el ensamblador y luego en el cdigo 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 cdigo mquina. A diferencia del ensamblador, los compiladores para los lenguajes de
programacin de alto nivel crean un cdigo ejecutable que no es siempre tan corto como el cdigo escrito en
ensamblador.
La figura anterior describe el proceso de la compilacin de programa escrito en Basic en cdigo hex.
Ejemplo de un programa simple escrito en Basic:
VENTAJAS DE LOS LENGUAJES DE PROGRAMACIN 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 instruccin apropiada
para multiplicar dos nmeros. Por supuesto, este problema se puede resolver gracias a la aritmtica que
permite realizar las operaciones complejas al descomponerlas en un gran nmero de operaciones ms
simples. En este caso, la multiplicacin se puede sustituir con facilidad por adicin 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 programacin de alto nivel como es Basic, porque el compilador encontrar
automticamente la solucin a ste problema y otros similares. Para multiplicar los nmeros a y b, basta con
escribir a*b.
2.2 CARACTERSTICAS PRINCIPALES DEL LENGUAJE DE
PROGRAMACIN BASIC
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 de escribir
programas en el compilador no empieza por seleccionar la opcin File>New, sino Project>New. Por qu?
Bueno, usted escribe un programa en un documento con extensin .mbas (mikroBasic). Una vez que se ha
escrito el programa, el mismo se debe compilar en cdigo HEX para crear un nuevo documento con extensin
.hex. Al mismo tiempo el compilador generar automticamente varios documentos aparte de se. Por ahora
el propsito 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 slo una parte del proyecto.
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.
module MyModul e ' Mdul o auxi l i ar Auxi l i ar y es denomi nado MyModul e
. . . ' *
. . . ' * I mpl ement os
. . . ' *
end.
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 MyPr ogr am ' I ni ci o de pr ogr ama ( mdul o pr i nci pal denomi nado
MyPr ogr am )
' Ot r os mdul os i ncl ui dos son:
include "ut i l s" ' Mdul o ut i l s
include "st r i ngs" ' Mdul o st r i ngs
include "MyUni t " ' Mdul o MyUni t
. . .
ORGANIZACIN DEL MDULO PRINCIPAL
El mdulo principal se puede dividir en dos secciones: declaraciones y el cuerpo de programa. Qu es una
declaracin en la programacin? Una declaracin es un proceso de definir las propiedades de los
identificadores que se utilizarn en el programa. Como la mayora de los dems lenguajes de programacin,
Basic tambin requiere que todos los identificadores estn declarados antes de ser utilizados en el programa.
Si no es as, el compilador no puede interpretarlos correctamente. Ejemplo de la declaracin de una variable
denominada distancia:
dim di st ance as float ' Decl ar ar l a var i abl e di st anci a
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:
ORGANIZACIN DE OTROS MDULOS
Los otros mdulos empiezan por la palabra clave module. Cada mdulo consiste en tres secciones: include,
interface e implementation. Solo la seccin implementation es obligatoria. Empieza por la palabra clave
implements. Vea el siguiente ejemplo:
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 '_'.
El primer carcter de un identificador no puede ser un dgito.
Ningn identificador puede contener caracteres especiales tales como ! [{#$ % & etc.
Basic no es sensible a la diferencia entre minsculas y maysculas, lo que significa que
FIRST, first y First son identificadores idnticos.
El smbolo ^(signo de intercalacin) se utiliza para denotar un operador exponencial, el
smbolo * (asterisco) se utiliza para denotar la multiplicacin, mientras que los dems
smbolos tienen el significado comn.
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
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 ms informacin al respecto. En Basic, cualquier texto que sigue a un apstrofo (') se considera
un comentario, Los comentarios no se compilan al cdigo ejecutable. El compilador es capaz de reconocer los
caracteres especiales utilizados para designar dnde los comentarios comienzan y terminan y no hace nada
de caso al texto entre ellos durante la compilacin. Aunque los comentarios no pueden afectar a la ejecucin
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.
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.
FORM AT O PREFI J O E J EMPL O
Decimal
const MAX = 100
Hexadecimal 0x o $ const MAX = 0xFF
Binario Punto flotante const MAX = %11011101
Las constantes se declaran en la parte de declaracin del programa o de la rutina. La sintaxis es la siguiente:
const nombr e_de_const ant e [ as t ype] = val or
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 MI NI MUM = - 1000 ' Decl ar ar l a const ant e MI NI MUM
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 MI N = 1000 ' Compi l ador supone el t i po wor d
const SWITCH = "n" ' Compi l ador supone el t i po 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 nmero 32.60.
const T_MAX = 32. 60 ' Decl ar ar t emper at ur a T_MAX
const T_MAX = 3. 260E1 ' Ot r a f or ma de decl ar ar l a const ant e 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 = "Pr ess t he START but t on" ' Mensaj e 1 par a LCD
const Message_2 = "Pr ess t he RI GHT but t on" ' Mensaj e 2 par a LCD
const Message_3 = "Pr ess t he LEFT but t on" ' Mensaj e 3 par a 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 nombr e_de_var i abl e as t ype
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 ' Def i ni r var i abl es i , j , k
dim count er , t emp as word ' Def i ni r var i abl es cont ador y t emp
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 nombr e_de_s mbol o = cdi go
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 ' S mbol o MAXALLOWED par a el val or
numr i co
symbol OUT = PORTA ' S mbol o OUT par a SFR
symbol MYDELAY = Del ay_ms( 762) ' S mbol o MYDELAY par a l l amada de
pr ocedi mi ent o
dim cnt as byte ' Variable cnt
mai n:
i f cnt > MAXALLOWED then ' Pr ogr ama compr ueba si cnt > 216
cnt = 0 ' Si l o es,
OUT. 1 = 0 ' l os si gui ent es t r es comandos
MYDELAY ' se ej ecut ar n
end if
. . . ' Si no l o es, el pr ogr ama cont i na
aqu
Los smbolos no se almacenan en la memoria RAM. El compilador reemplaza los smbolos por las lneas del
cdigo apropiadas asignadas durante la declaracin.
TIPOS DE DATOS EN BASIC
Hay varios tipos de datos que se pueden utilizar en el lenguaje de programacin Basic. La siguiente tabla
muestra el rango de valores que estos datos pueden tener cuando se utilizan en su forma bsica.
TI P O DE
D A TO
DES CRI P CI N
T A MA O ( NME RO D E
B I TS )
R ANGO DE V AL ORES
bit Un bit 1 0 o 1
sbit Un bit 1 0 o 1
byte, char Carcter 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*10
38
CONVERSIN DE TIPOS DE DATOS AUTOMTICA
El compilador automticamente realiza la conversin implcita en los siguientes casos:
si una sentencia requiere una expresin del tipo particular, y se utiliza la expresin de tipo
diferente;
si un operador requiere un operando de tipo particular, y se utiliza un operando de tipo
diferente;
si una funcin requiere un parmetro formal de tipo particular, y se le asigna el objeto de
tipo diferente; y
si el resultado de una funcin no corresponde al tipo del valor devuelto de la funcin
declarada.
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
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 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 ' Var i abl e i ocupa un sol o byt e de l a memor i a RAM
dim j as word ' Var i abl e j ocupa dos byt es de l a memor i a RAM
. . .
j = $FF0F
i = j ' i se convi er t e en $0F, el byt e ms al t o $FF se pi er de
CONVERSIN DE DATOS EXPLCITA
La conversin explcita se puede ejecutar bajo cualquier expresin en cualquier punto al escribir la palabra
clave de tipo deseado (byte, word, short, integer, longint, float...) delante de la expresin que ser
convertida. La expresin debe estar encerrada entre parntesis. La conversin explcita no puede ser
realizada bajo el operando de la izquierda del operador de asignacin.
a = word( b) ' Conver si n expl ci t a de l a expr esi n b
word( b) = a ' Compi l ador i nf or ma de un er r or
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 dat o no cambi a su r epr esent aci n bi nar i a %11111111
' per o el compi l ador l a i nt er pr et a de l a maner a di f er ent e
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:
PR I ORI D A D OPER AD OR ES A S OC I A T I V I D A D
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.
OPE R AD OR OPER AC I N
+ Adicin
- Resta
* Multiplicacin
/ Divisin - punto flotante
div Divisin - redondear
mod Remanente
DIVISIN POR CERO
Si un cero (0) se utiliza explcitamente como el segundo operando en la operacin de divisin (x div 0), el
compilador informa de un error y no generar un cdigo. En caso de una divisin implcita, 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 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...
OPER A D OR SI GN I F I C AD O E J EMPL O COND I C I N DE VER AC I D AD
> 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
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 LGICOS DE MANEJO DE BITS
Los operadores lgicos de manejo de bits se realizan sobre los bits de un operando. Se asocian de izquierda
a derecha. La nica excepcin es el complemento not que realiza un desplazamiento de derecha a izquierda.
Los operadores de manejo de bits se enumeran en la siguiente tabla:
OP ER AND O S I GN I F I C AD O EJ EMP L O RE SUL TA D O
<< desplazamiento a la izquierda A = B << 2 B = 11110011 A = 11001100
>> desplazamiento a la derecha A = B >> 3 B = 11110011 A = 00011110
and Y lgico para manejo de bits C = A and B
A=11100011
B=11001100
C = 11000000
or O lgico para manejo de bits C = A or B
A=11100011
B=11001100
C = 11101111
not NO lgico para manejo de bits A = not B B = 11001100 A = 00110011
xor EXOR lgico 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 lgicas sobre los pares de
bits de operandos apropiados. El operador not complementa cada bit de un solo operando.
$1234 and $5678 ' r esul t ado es $1230 por que:
' $1234 : 0001 0010 0011 0100
' $5678 : 0101 0110 0111 1000
' ----------------------------
' y : 0001 0010 0011 0000 ... eso es, $1230
$1234 or $5678 ' equi val e a $567C
$1234 xor $5678 ' equi val e a $444C
not $1234 ' equi val e 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 numas word ' decl ar ar l a var i abl e numcomo wor d
num= 1 ' asi gnar l e el val or deci mal 1 (00000000 00000001 bin.)
num<< 5 ' equi val e 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 2
n
.
dim numas integer ' decl ar ar var i abl e numcomo si gned i nt eger
num= 0xFF56 ' asi gnar l e el val or hex FF56 ( 11111111 01010110 bi n. )
num>> 4 ' equi val e a 0xFFF5 ( 11111111 11110101 bi n. )
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 expr esi n then
oper aci ones
end if
Si el resultado de la expresin es verdadero (distinto de 0), las operaciones se realizan y el programa contina
con la ejecucin. Si el resultado de la expresin es falso (0), las operaciones no se realizan y el programa
contina inmediatamente con la ejecucin.
El operador if se puede utilizar en combinacin con el operador else:
if expr esi n then
oper aci ones1
else
ot her oper aci ones2
end if
Si el resultado de la expresin es verdadero (distinto de 0), las operaciones1 se realizan. De lo contrario, las
operaciones2 se realizan. Despus de realizar estas operaciones, el programa contina con la ejecucin.
SENTENCIAS IF ANIDADAS
La sentencia if anidada necesita una atencin adicional. Es una sentencia utilizada dentro de otra sentencia if.
Siguiendo la regla, se descomponen empezando por la sentencia if ms anidada, mientras que cada
sentencia else se enlaza a la ms cercana sentencia if disponible a la izquierda.
SENTENCIA CASE STATEMENT
La sentencia select case es una sentencia condicional de ramificacin mltiple. Consiste en una expresin
(condicin) selector y una lista de los valores posibles de la expresin. La sntaxis de la sentencia select case
es la siguiente:
El especificador selector es una expresin 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 clusula case else es opcional.
Primero se evala el valor de la expresin selector. Despus se compara con todos los valores disponibles. Si
los valores son iguales (selector y uno de valores), se ejecutarn las sentencias que siguen a los valores
iguales y termina la sentencia select case. En el caso de que coincidan los valores mltiples se ejecutarn las
sentencias que siguen a los primeros valores iguales. Si no coincide ningn valor con el selector, se
ejecutarn las sentencias_por_defecto en la clusula case else (si hay alguna).
Ejemplo de la sentencia select case:
select case deci mal _di gi t ' El val or del d gi t o deci mal se est
compr obando
case 0
mask = %01111110 ' Vi sual i zar "0"
case 1
mask = %00110000 ' Vi sual i zar "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
Esta rutina de programa convierte los dgitos decimales en la combinacin binaria apropiada en el puerto para
visualizarlos en el LED.
BUCLES DE PROGRAMA
Algunas instrucciones (operaciones) deben ejecutarse ms de una vez en el programa. Un conjunto de
comandos que se repiten es denominado un bucle de programa. Cuntas veces se ejecutar, es decir cunto
tiempo el programa se quedar en el bucle, depende de las condiciones de salir del bucle.
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 expr esi n
sent enci as
wend
El especificador sentencias representa un grupo de sentencias que se ejecutan repetidamente hasta que el
valor del especificador expresin que representa una expresin siga siendo verdadero. En otras palabras, el
programa se queda en el bucle hasta que la expresin llegue a ser falsa. El valor de la expresin se
comprueba antes de que se ejecute la siguiente iteracin. Si el valor de la expresin es falso antes de entrar el
bucle, no se ejecuta ninguna iteracin, esto es las sentencias no se ejecutarn nunca. El programa contina
con la ejecucin desde el fin del bucle while (desde las instrucciones que siguen a la instruccin wend).
Un tipo especial del bucle de programa es un bucle infinito. Se forma si la condicin para salir del bucle sigue
sin cambios dentro del bucle.
La ejecucin 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 escr i bi r ver dader o en vez de 1
. . . ' Las expr esi ones se ej ecut ar n r epet i dament e ( bucl e i nf i ni t o)
. . .
wend
BUCLE FOR
El bucle for se utiliza cuando el nmero de iteraciones est especificado. La sintaxis del bucle for es la
siguiente:
for cont ador = val or _i ni ci al to val or _f i nal [ step val or _de_paso]
sent enci as
next cont ador
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 var i abl e k se i ncr ement a ci nco veces ( de 1 a 5) y
oper at i on ' cada vez si gue ej ecut ndose l a "oper aci n"
. . .
next k
Un conjunto de instrucciones (operacin) se ejecutar cinco veces. Despus, al comprobar que k<5 sea falsa
(despus de 5 iteraciones k=5) y el programa saldr del bucle for.
BUCLE DO
La sentencia do se utiliza cuando el nmero de iteraciones no est especificado. El bucle se ejecuta
repetidamente hasta que la expresin siga siendo verdadero. La sintaxis del bucle do es la siguiente:
do
sent enci as
loop until expr esi n
En este caso, el especificador sentencias representa un grupo de sentencias que se ejecutarn hasta que la
expresin 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 condicin es verdadera o falsa. En el siguiente ejemplo, el
programa se queda en el bucle do hasta que la variable a alcance 1E06 (un milln de iteraciones).
a = 0 ' Est abl ecer el val or i ni ci al
do
a = a+1 ' Oper aci n en mar cha
loop until a <= 1E06 ' Compr obar l a condi ci n
ESCRIBIR CDIGO EN LENGUAJE ENSAMBLADOR
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
i nst r ucci ones en ensambl ador
. . .
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 nombr e_de_mat r i z as t i po_de_component e [ nmer o_de_component es]
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.
EL E MENTOS DE L A MA T R I Z CONTEN I D O DE EL E MENT OS
estante[0] 7
estante[1] 23
estante[2] 34
estante[3] 0
estante[4] 0
estante[5] 12
estante[6] 9
... ...
... ...
estante[99] 23
En este caso, el contenido de una variable (elemento) representa un nmero de productos que contiene el
estante. A los elementos se les puede acceder por medio de la indexacin, o sea, al especificar sus ndices
encerrados entre corchetes:
dim shel f as byte [ 100] ' Decl ar ar l a mat r i z "est ant e" con 100
el ement os
shel f [ 4] = 12 ' 12 el ement os est n col ocados en el
est ant e [ 4]
t emp = shel f [ 1] ' Var i abl e est ant e [ 1] se copi a a l a
var i abl e t emp
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 CALENDARI O as byte [ 12] = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
El nmero 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 asignarn ceros.
SENTENCIA GOTO
La sentencia goto le permite hacer un salto absoluto a otro punto en el programa. Esta caracterstica se debe
utilizar con precaucin ya que su ejecucin puede causar un salto incondicional sin hacer caso a todos los
tipos de limitaciones de anidacin. El punto destino es identificado por una etiqueta, utilizada como un
argumento para la sentencia goto. Una etiqueta consiste en un identificador vlido seguido por dos puntos (:).
La sintaxis de la sentencia goto es:
goto: nombr e_de_et i quet a
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 funcin. 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 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 nombr e_de_et i quet a
. . .
. . .
. . .
nombr e_de_et i quet a:
. . .
r et ur n
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:
I NTCON. GI E = 0 ' Poner a cer o el bi t GI E
Para denotar la posicin de bit en un registro en lugar de un nombre de bit se pueden utilizar una variable, una
constante, una llamada a funcin o una expresin encerrada entre parntesis. Adems, 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 ms significante.
I NTCON. B0 = 0 ' Poner a cer o el bi t 0 del r egi st r o I NTCON
ADCON0. 5 = 1 ' Poner a uno el bi t 5 del r egi st r o ADCON0
i = 5
STATUS. ( i +1) = 1 ' Poner a uno el bi t 6 del r egi st r o STATUS
Por fin, a un bit deseado se le puede acceder al utilizar un nombre alias. En este caso, es el GIE_bit:
GI E_bi t = 1 ' Poner a uno el bi t GI E
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 Nombr e_de_bi t as sbit at Nombr e_de_r egi st r o. Posi ci n_de_bi t
program MyPr ogr am' Mdul o pr i nci pal
. . .
dim Out put 1 as sbit at PORTB. 0 ' Var i abl e Out put 1 es de t i po sbi t
. . .
Out put 1 = 1 ' Pi n del puer t o 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 nombr e_de_bi t as sbit sfr external
module MyModul e ' Est o no es el mdul o pr i nci pal y el bi t Out put 1
. . . ' no est def i ni do aqu
dim Out put 1 as sbit sfr external
. . .
Out put 1 = 1 ' Pi n PORTB. 0 ( def i ni do en el ej empl o ant er i or como
Out put 1) 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 bi t
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
No pueden ser utilizados como un miembro de estructuras
No pueden ser utilizados como elementos de matrices
No pueden ser inicializados
No se puede apuntar a ellos
Sus direcciones no se pueden leer, por eso el operador unitario @ no se puede utilizar con
variable de este tipo
dim pt r as ^bi t ' invlido
dim ar r as array[ 5] of bi t ' invlido
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 nombr e_de_pr ocedi mi ent o ( l i st a_de_par met r os)
[ decl ar aci ones l ocal es ]
cuer po de pr ocedi mi ent o
end sub
El especificador nombre_de_procedimiento representa un nombre de procedimiento y
debe ser un indentificador vlido.
La lista_ de_parmetros entre parntesis representa una lista de parmetros formales
declarados de manera similar a variables. En mikroBasic PRO for PIC, los parmetros se le
pasan a un procedimiento por valor. Para pasar los parmetros por direccin, es necesario
aadir la palabra clave byref al principio de la declaracin de los parmetros.
Las declaraciones locales son declaraciones opcionales de variables y constantes que se
refieren slamente al procedimiento dado.
El cuerpo de procedimiento es una secuencia de sentencias que se ejecutarn despus
de llamar al procedimiento.
Una llamada a procedimiento se realiza al especificar su nombre seguido por los parmetros actuales
colocados en el mismo orden que los parmetros formales correspondientes. Despus de llamar a
procedimiento, todos los parmetros formales se crean como los objetos locales inicializados por los valores
de los argumentos actuales.
' Aadi r dos nmer os
sub procedure add ( dim byref sumas word, dim x, y as byte)
sum= x + y ' aadi r l os nmer os x e y y al macenar el r esul t ado en l a
var i abl e sum
end sub ' f i n del subpr ocedi mi ent o
Ahora, podemos llamar al procedimiento add para hacer clculo del peso total de una carga, por ejemplo:
add ( peso_br ut o, peso_net o, peso_t ar a)
FUNCIONES
Las funciones deben estar declaradas apropiadamente para ser interpretadas correctamente durante el
proceso de la compilacin.
sub function nombr e_de_f unci n ( l i st a_de_par met r os) as val or _devuel t o
[ decl ar aci ones l ocal es ]
cuer po de f unci n
end sub
Cada declaracin contiene los siguientes elementos:
Nombre_de_funcin es un identificador utilizado para llamar a funcin (nombre_de_funcin
en el ejemplo)
Tipo de resultado (valor devuelto) es un tipo de dato de los datos devueltos (tipo_devuelto
en el ejemplo)
Declaracin de los parmetros: cada parmetro consiste en una variable, constante,
puntero o matriz precedidos por su tipo de dato especificado similar a una declaracin de
variable regular (lista_de_parmetros en este ejemplo). Se utilizan para pasar la
informacin de la funcin al llamarla.
Declaraciones locales son declaraciones opcionales de variables y constantes que se
refieren solamente a la funcin dada.
Cuerpo de funcin es una secuencia de sentencias que sern ejecutadas despus de
llamar a la funcin.
Aqu est un ejemplo de cmo definir y utilizar la funcin power:
' f unci n que hace cl cul o de xn basado en l os par met r os de ent r ada x y
n ( n > 0)
sub function power ( dim x, n as byte) as longint ' x y n son byt es,
r esul t ado es l ongi nt
dim i as byte ' i es un byt e
r esul t = 1 ' r esul t ado = 1 si n = 0
if n > 0 then
for i = 1 to n
r esul t = r esul t *x
next i
end if
end sub
Ahora, podemos llamar a la funcin power para hacer clculo de 3
12
por ejemplo:
t mp = power ( 3, 12) ' Hacer cl cul o de 3*12
LIBRERAS DE FUNCIONES Y PROCEDIMIENTOS
Las declaraciones de todas las funciones y procedimientos utilizados en Basic se almacenan normalmente en
los ficheros de mdulo especial y se les denominan libreras. Antes de utilizar una librera en el programa, es
necesario especificar el mdulo apropiado por medio de la clusula include al principio de programa. Esto es
una regla general. Si escribe un programa en el compilador mikroBasic PRO for PIC basta con marcar la
librera deseada en la lista y el mdulo apropiado ser automticamente incluido en el proyecto. El compilador
ya contiene un gran nmero de estas libreras. Si el compilador encuentra una funcin o procedimiento
desconocidos durante la ejecucin de programa, primero va a buscar su declaracin en las libreras
anteriormente marcadas.
RUTINAS INTEGRADAS EN EL COMPILADOR MIKROBASIC PRO FOR PIC
Aparte de las libreras de funciones y procedimientos, el compilador mikroBasic PRO for PIC proporciona un
conjunto de las funciones integradas y tiles:
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.
DIRECTIVA DEL PREPROCESADOR INCLUDE
Muchos programas repiten con frecuencia el mismo conjunto de comandos un par de veces. Para escribir un
programa ms rpidamente, estos comandos y declaraciones se agrupan normalmente en los mdulos
particulares que se pueden incluir en el programa con facilidad por medio de la directiva include. Para decir
con ms precisin, la directiva include importa el texto del otro documento en el programa, sea un conjunto de
comandos o bien un conjunto de comentarios etc.
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:
#i f const ant _expr essi on_1 ' Si expr esi n_de_const ant e_1 no es
cer o,
<sect i on_1> ' secci n_1 ser compi l ada
[ #el i f const ant _expr essi on_2 ' Si expr esi n_de_const ant e_2 no es
cer o,
<sect i on_2>] ' secci n_2 ser compi l ada
. . .
[ #el i f const ant _expr essi on_n ' Si expr esi n_de_const ant e_n no es
cer o,
<sect i on_n>] ' secci n_n ser compi l ada
[ #el se ' Si no se compi l a ni nguna de l as
secci ones ant er i or es
<f i nal _sect i on>] ' secci n_f i nal ser compi l ada
#endi f ' Fi nal de l a di r ect i va #i f
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.
Seccin puede ser cualquier cdigo de programa reconocido por el compilador o
preprocesador. El preprocesador selecciona una seccin al evaluar la
expresin_de_constante que sigue a cada directiva #if o #elif hasta encontrar una
expresin_de_constante verdadera (distinta de cero).
Si todas las expresiones-constantes son evaluadas como falsas o no aparecen ninguna
directiva #elif, el preprocesador selecciona la seccin_final que sigue a la clusula #else. Si
se omite la clusula #else y todas las expresiones_constantes en el bloque #if son
evaluadas como falsas, no se seleccionar ninguna seccin para un procesamiento
posterior.
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 poi nt er _p as ^word ' punt er o_p apunt a al dat o de t i po wor d
Se le recomienda almacenar una varible en una localidad de memoria RAM especfica, luego se debe utilizar
la directiva absolute en el programa de la siguiente manera:
dim var i abl e_a as word absolute 12 ' var i abl e_a ocupar una pal abr a
' ( 16 bi t s) en l a
di r ecci n 12
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 poi nt er _p as ^word ' Punt er o_p a punt a al dat o de t i po wor d
. . .
. . .
poi nt er _p = 12 ' Punt er o_p apunt a a l a di r ecci n de memor i a 12
. . .
punt er o_p^ = 26 ' Var i abl e a en l a l ocal i dad de memor i a 12 t i ene
val or 2
' Si mi l ar a l a di r ect i va absol ut e ut i l i zada par a l as var i abl es, l a
' di r ect i va or g especi f i ca l a di r ecci n i ni ci al de una r ut i na en l a
' memor i a ROM. Se aade a l a decl ar aci n de l a r ut i na. Por ej empl o:
sub procedure pr oc( dim par as word) or g 0x200 ' El pr ocedi mi ent o
empezar
. . . ' en l a di r ecci n 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 @:
Si X es una variable, @X devuelve la direccin de X.
Si F es una rutina (funcin o procedimiento), @F crea un puntero a F.
dim t emp as word
pt r _b as ^byte
pt r _ar r as ^byte[ 10]
ar r as byte[ 10]
mai n:
pt r _b = @ar r ' oper ador @devol ver ^byte
t emp = @ar r ' oper ador @devol ver ^byte
pt r _ar r = @ar r ' oper ador @devol ver ^byte[10]
end.
Si la variable X es de tipo matriz, el operador @ devolver el puntero a su primer elemento bsico, excepto en
el caso de que la parte izquierda de la expresin en la que se utiliza X sea el puntero a matriz. En este caso,
el operador @ devolver el puntero a matriz, y no a su primer elemento bsico.
Estructura de programa en mikroBasic PRO for PIC:
1. Cada programa normalmente empieza con un comentario que proporciona informacin sobre
el propsito del programa, fecha de programa, programador, versin, cambios a la versin
anterior etc. Estos comentarios (cabecera) no son obligatorios, pero es una buena costumbre
escribirlos y tenerlos en el programa.
2. Cada programa empieza con una directiva de programa seguida por el nombre de programa.
3. Si el programa contiene otros mdulos, aparte del mdulo principal, sus nombres se deben
especificar al utilizar la directiva include (una directiva inlcude para cada mdulo). Por
consiguiente, si el compilador durante la compilacin del mdulo principal llega a un objeto
que no es declarado (funcin, variable etc.), primero va a buscar su declaracin dentro de los
mdulos declarados. Si no encuentra la declaracin apropiada, el compilador informar de
error.
4. La directiva include (si hay alguna) es seguida por la parte de cdigo que sirve de declarar
variables, constantes, procedimientos, subprogramas, funciones y otros objetos que se
utilizarn ms tarde en el programa. Estas declaraciones se utilizan para reservar los
registros de la memoria RAM para almacenar los datos as como para ensear al compilador
cmo ejecutar una funcin o un procedimiento. Por ejemplo, un dato de tipo byte ocupa un
solo registro, mientras que un dato de tipo float ocupa cuatro registros.
5. El programa principal empieza con la directiva mai n: (siempre seguida por dos puntos).
Tambin es llamada cuerpo de programa.
6. Cada programa termina con la directiva end. (siempre seguida por un punto).
2.3 COMPILADOR MIKROBASIC PRO FOR PIC
Todo lo que usted ha ledo hasta ahora sobre la programacin en Basic es slo teora. Es til saberlo, pero no
se olvide de que este lenguaje de programacin no est tan relacionado con algo concreto y tangible. Podr
experimentar muchos problemas con los nombres exactos de los registros, sus direcciones, nombres de los
bits de control particulares, y muchos ms 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).
INSTALAR MIKROBASIC PRO FOR PIC
La instalacin del mikroBasic PRO for PIC es similar a la instalacin de cualquier programa en Windows. Todo
el procedimiento se lleva a cabo por medio de los wizards (asistentes de instalacin):
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...
Una vez completada la instalacin del PICFLASH, el sistema operativo le preguntar a instalar otro programa
similar. Es un software para programar una familia de los microcontroladores PIC que funcionan en modo de
bajo consumo (3.3 V). Salte este paso.
El ltimo paso - la instalacin del controlador (driver)!
Un controlador es un programa que permite al sistema operativo comunicarse con un perifrico. En este caso,
este dispositivo es el programador (hardware) del sistema de desarrollo. Lo necesita seguramente. Pulse
sobre Yes.
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!
IDE DEL MIKROBASIC PRO FOR PIC
Al iniciar el IDE del compilador mikroBasic PRO for PIC por primera vez, aparecer una ventana como se
muestra a continuacin:
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 PRO for 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)
Un programa escrito en el compilador mikroBasic PRO for PIC no es un archivo autnomo, sino
que forma parte de un proyecto que incluye un cdigo hex, un cdigo ensamblador y otros
archivos. Algunos de ellos se requieren para compilar el programa, mientras que otros se crean
durante el proceso de compilacin. La ventana Project Manager le permite manejar todos los
ficheros del proyecto. Basta con pulsar con el botn derecho del ratn sobre una carpeta y
seleccionar la opcin que necesita para su proyecto.
LIBRARY MANAGER
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)
La ventana Code Explorer le permite localizar funciones y procedimientos dentro de los programas
largos. Por ejemplo, si usted busca una funcin utilizada en el programa, basta con pulsar dos
veces sobre su nombre en esta ventana, y el cursor estar automticamente posicionado en la
lnea apropiada en el programa.
PROJECT SETTINGS (Configuracin de proyectos)
Al compilar un proyecto, el compilador genera el archivo .hex que se cargar en el
microcontrolador. Estos archivos sern diferentes ya que depende del tipo del microcontrolador as
como del propsito de la compilacin. Por esta razn es necesario ajustar algunos parmetros de
proyectos utilizando la ventana Project Settings.
Device (dispositivo): Al seleccionar el tipo del microcontrolador a utilizar permite al compilador
extraer el archivo de definicin asociado. El archivo de definicin de un microcontrolador contiene
la informacin especfica de sus registros SFR, de sus direcciones de memoria y algunas variables
de programacin especficas a ese tipo del microcontrolador. Es obligatorio crear un archivo .hex
compatible.
Oscillator (oscilador): Se debe especificar la velocidad de operacin del microcontrolador. Por
supuesto, este valor depende del oscilador utilizado. El compilador la necesita para compilar
rutinas, lo que requiere informacin del tiempo (por ejemplo, la funcin Delay_ms). Ms tarde, el
programador necesitar esta informacin tambin. La velocidad de operacin se configura de
modo que permita al oscilador interno del microcontrolador funcionar a una frecuencia
seleccionada.
Build/Debugger Type: Todo el proceso de compilar (building) est compuesto por anlisis sintctico
(parsing), compilar, enlazar (linking) y generar los archivos .hex. El tipo de compilacin le permite ajustar el
modo de compilacin. Dependiendo del modo seleccionado, difieren los archivos generados a cargar en el
microcontrolador.
Build type - release: Al elegir esta opcin, el compilador no puede afectar ms a la ejecucin de programa
despus de la compilacin. El programa a cargar en el microcontrolador no ser modificado de ninguna
manera.
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.
EDITAR Y COMPILAR PROGRAMAS
CODE EDITOR (Editor de cdigo)
El proceso de escribir y editar programas se debe realizar dentro de la ventana principal del IDE denominada
Code Editor. Un gran nmero de opciones utilizadas para configurar sus funciones y el diseo se encuentran
en el men Tools/Options [F12]. Al escribir el programa no se olvide de los comentarios. Los comentarios son
muy importantes para depurar y mejorar el programa. Adems, aunque el compilador no tenga las
restricciones de formateo, siempre debe seguir a las mismas reglas de editar (como en los ejemplos
proporcionados en este libro). Como no hay limitaciones de extensin, no vacile en utilizar los espacios en
blanco para hacer su cdigo ms legible.
Al escribir un programa, compile su cdigo de forma regular con el propsito de corregir cunto ms errores
de sintaxis. Asimismo usted puede compilar su programa cada vez que se complete la redaccin de una
nueva funcin as como probar su comportamiento al utilizar modo de depuracin. De este modo, resulta ms
fcil solucionar los errores de programa. De lo contrario, usted tendr que editar el programa entero.
COMPILAR Y SOLUCIONAR ERRORES
Para compilar su cdigo, pulse sobre la opcin Build en el men Project. En realidad, el proyecto entero se ha
compilado, y si la compilacin se ha realizado con xito, se generarn los archivos de salida (asm, .hex etc.).
Una compilacin se ha realizado con xito si no se ha encontrado ningn error. Durante el proceso de
compilacin se generan muchos mensajes que se visualizan en la ventana Messages. Estos mensajes
consisten en informacin, advertencia y errores. Cada error encontrado se asocia con su lnea de programa y
su descripcin. Como un error en su cdigo puede generar mucho ms errores, simplemente debe intentar
solucionar el primer error en la lista y despus recompile su programa. En otras palabras, es recomendable
solucionar los errores uno a uno.
En el ejemplo anterior el programa informa de un error de sintaxis en la lnea 80. La compilacin le permite
corregir su programa por medio de solucionar todos los errores en mikroBasic. Cuando todos los errores se
solucionen, su programa est listo para ser cargado en el microcontrolador. De todas formas, su tarea todava
no est terminada, porque an no sabe si su programa se comporta como se esperaba o no.
DEPURAR EL PROGRAMA
Como ya hemos visto, hay dos modos de depurar: un depurador software que simula el funcionamiento del
microcontrolador (modo por defecto) y depurador hardware (mikroICD) que lee directamente el contenido de la
memoria del microcontrolador. El procedimiento de depuracin es el mismo sin reparar en el modo elegido. En
caso de elegir la opcin ICD debug, hay que cargar el programa en el microcontrolador antes de depurarlo. La
depuracin es un paso muy importante ya que permite probar el programa despus de una compilacin
realizada con xito, o solucionar los errores descubiertos mientras se ejecuta el programa.
Para iniciar la depuracin, pulse sobre la opcin Start debugger del men Run. El editor del cdigo ser
ligeramente modificado automticamente y aparecer una ventana denominada Watch Values. El principio de
depuracin se basa en ejecutar el programa paso a paso y monitorear el contenido de los registros y los
valores de las variables. De este modo, es posible comprobar el resultado de un clculo y ver si algo
inesperado ha ocurrido. Al ejecutar el programa paso a paso, podr localizar los problemas con facilidad.
Durante una depuracin el programa ser modificado, por lo que usted siempre debe recompilar el programa
despus de cada correccin, y reiniciar el depurador para comprobar qu ha sido modificado.
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.
Antes de empezar a utilizar el simulador, seleccione el modo de funcionamiento en la ventana
Project Settings (Build type - release), compile el programa y pulse sobre la opcin Run /Start
Debugger.
El compilador se pone automticamente en el modo de simulacin. En este modo se monitorea el
estado de todos los bits de registros y se le permite ejecutar el programa paso a paso durante el
monitoreo del funcionamiento del microcontrolador en la pantalla.
Hay varios iconos, utilizados para el funcionamiento del simulador, que aparecern en la barra de
herramientas cuando el compilador entre en este modo.
Estos iconos tienen el siguiente significado:
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.
Run To Cursor: El programa se ejecuta hasta la lnea en la que se encuentre el cursor.
Step out: Se ejecutan las dems instrucciones dentro de la rutina. El depurador se detiene
inmediatamente al salir de la subrutina.
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.
VENTANA WATCH VALUES
El depurador software y hardware tienen la misma funcin de monitorear el estado de los registros
durante la ejecucin del programa. La diferencia es que el depurador software simula ejecucin de
programa en una PC, mientras que el depurador ICD (depurador hardware) utiliza el
microcontrolador. Cualquier cambio de estado lgico de los pines se indica en el registro (puerto)
apropiado. Como la ventana Watch Values permite monitorear el estado de todos los registros,
resulta fcil comprobar si un pin est a cero o a uno. La ltima modificacin est marcada en rojo
en la ventana Watch Values. Esto le permite localizar la modificacin en el archivo list durante el
proceso de la depuracin. Para visualizar esta ventana es necesario seleccionar la opcin
View/Windows/Watch Values. Entonces usted puede hacer una lista de re-gistros/variables que
quiere monitorear.
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 muestra en la figura a
la derecha.Cmo funciona un cronmetro? Eso es pan comido...El tiempo que tarda un comando
(step into, step over, run/pause etc.) en ejecutarse por el depurador se mide automticamente y se
visualiza en la ventana Stopwatch. Por ejemplo, se mide tiempo para ejecutar un programa, tiempo
para ejecutar el ltimo paso etc.
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 Debugger-mikroICD
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.
Opciones del depurador mikroICD:
Start Debugger [F9]
Run/Pause Debugger [F6]
Stop Debugger [Ctrl+F2]
Step Into [F7]
Step Over [F8]
Step Out [Ctrl+F8]
Toggle Breakpoint [F5]
Show/Hide Breakpoints [Shift+F4]
Clear Breakpoints [Ctrl+Shift+F4]
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:
Despus de ejecutar el comando Step Over [F8] el microcontrolador ejecutar la lnea de programa
31. La siguiente lnea en ser ejecutada (32) est marcada por el azul. El estado de los registros
cambiados durante la ejecucin de esta instruccin se puede visualizar en la ventana Watch
Values.
CARGAR EL PROGRAMA EN EL MICROCONTROLADOR
Si ha solucionado todos los errores en su cdigo y cree que su programa est listo para ser utilizado, el
siguiente paso es cargarlo en el microcontrolador. El programador PICflash se utiliza para este propsito. Es
una herramienta diseada para programar todos los tipos de microcontroladores PIC. Est compuesto por dos
partes:
La parte hardware se utiliza para poner en el bfer un cdigo hexadecimal (el programa a
ser cargado en el microcontrolador) y para programar el microcontrolador por medio de
niveles de voltaje especficos. Durante el proceso de la programacin, un nuevo programa
se escribe en la memoria flash del microcontrolador, mientras que el programa anterior se
borra automticamente.
La parte de software se encarga de enviar el programa (archivo .hex) a la parte hardware
del programador por medio de un cable USB. Se activa al pulsar sobre la opcin
mE_Programmer del men Tools o al pulsar [F11]. Por consiguiente, es posible modificar
algunas configuraciones del programador y controlar el funcionamiento de la parte
hardware (Cargar, Escribir, Verificar...).
Se puede reprogramar el microcontrolador tantas veces como se necesite.
HERRAMIENTAS DEL COMPILADOR
El compilador mikroBasic PRO for PIC proporciona herramientas que en gran medida simplifican el proceso
de escribir el programa. Todas estas herramientas se encuentran en el men Tools. En la siguiente seccin
vamos a darle una breve descripcin de todas ellas.
TERMINAL USART
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 editor de siete segmentos le permite determinar con facilidad el nmero a poner en un puerto de salida con
el propsito de visualizar un smbolo deseado. Por supuesto, se da por entendido que los pines del puerto
deben estar conectados a los segmentos del visualizador de manera apropiada. Basta con colocar el cursor
en cualquier segmento del visualizador y pulsar sobre l. Se visualizar inmediatamente el nmero a introducir
en el programa.
LCD CUSTOM CHARACTER (Caracteres LCD definidos por el usuario)
Adems de los caracteres estndar, el microcontrolador tambin puede visualizar los caracteres creados por
el programador. Al seleccionar la herramienta LCD custom character, se evitar un pesado trabajo de crear
funciones para enviar un cdigo apropiado a un visualizador. Para crear un smbolo, pulse sobre los cuadros
pequeos en la ventana LCD custom character, luego seleccione la posicin y la fila y pulse sobre el botn
generate. El cdigo apropiado aparece en otra ventana. No es necesita pulsar ms. Copy to Clipboard (copiar
al portapapeles) - Paste (pegar)...
GENERADOR DE MAPA DE BITS PARA UN LCD GRFICO
El generador de mapa de bits para un LCD grfico es una herramienta insustituible en caso de que el
programa que escribe utilice el visualizador LCD (GLCD). Esta herramienta le permite visualizar un mapa de
bits con facilidad. Seleccione la opcin Tools/Glcd Bitmap Editor aparecer la ventana apropiada. Para
utilizarlo, seleccione el tipo de visualizador a utilizar y cargue un mapa de bits. El mapa de bits debe ser
monocromtico y tener la resolucin apropiada del visualizador (128 x 64 pxeles en este ejemplo). El
procedimiento a seguir es igual que en el ejemplo anterior: Copy to Clipboard...
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:
L I B R AR A DES CRI PCI N
Button Library Eliminar la influencia del rebote de contacto
Conversions Library Rutinas para conversiones de nmeros en cadenas y BCD/decimal
C Type Library Probar y convertir los caracteres
String Library Automatizar las tareas relacionadas con las cadenas
Time Library Rutinas para calcular el tiempo en el formato de tiempo UNIX
Trigon Library
Funciones trigonomtricas
LIBRARIES LIBRERAS PARA EL HARDWARE
Las libreras para el hardware incluyen las funciones utilizadas para controlar el funcionamiento de los
mdulos hardware:
L I B R AR A DE SCRI PCI N
ADC Library Utilizada para el funcionamiento del convertidor A/D
CAN Library Utilizada para las operaciones con el mdulo CAN
CANSPI Library Utilizada para las operaciones con el mdulo CAN externo (MCP2515 o MCP2510)
Compact Flash Library Utilizada para las operaciones con las tarjetas de memoria Compact Flash
EEPROM Library Utilizada para las operaciones con la memoria EEPROM incorporada
Ethernet PIC18FxxJ60 Library Utilizada para las operaciones con el mdulo Ethernet incorporado
Flash Memory Library Utilizada para las operaciones con la memoria Flash incorporada
Graphic Lcd Library Utilizada para las operaciones con el mdulo LCD grfico con resolucin 128x64
IC Library Utilizada para las operaciones con el mdulo de comunicacin serial I
2
C incorporado
Keypad Library Utilizada para las operaciones con el teclado (botones de 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
Multi Media Card library Utilizada para las operaciones con las tarjetas multimedia MMC flash
OneWire Library Utilizada para las operaciones con los circuitos utilizando la comunicacin serial One Wire
Port Expander Library Utilizada para las operaciones con el extensor de puertos 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
RS-485 Library Utilizada para las operaciones con los mdulos utilizando la comunicacin serial RS485
Software IC Library Utilizada para simular la comunicacin I
2
C 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 Utilizada para generar las seales de audio
SPI Library Utilizada para las operaciones con el mdulo SPI incorporado
SPI Ethernet Library Utilizada para la comunicacin SPI con el mdulo ETHERNET (ENC28J 60)
SPI Graphic Lcd Library Utilizada para la comunicacin SPI de 4 bits con el LCD grfico
SPI Lcd Library Utilizada para la comunicacin SPI de 4 bits con el LCD (de 2x16 caracteres)
SPI Lcd8 Library Utilizada para la comunicacin SPI de 8 bits con el LCD
SPI T6963C Graphic Lcd Library Utilizada para la comunicacin SPI con el LCD grfico
UART Library Utilizada para las operaciones con el mdulo UART incorporado
USB HID Library Utilizada para las operaciones con el mdulo USB incorporado
Captulo 3: Microcontrolador PIC16F887
El PIC16F887 es un producto conocido de la compaa Microchip