Sunteți pe pagina 1din 59

CAPTULO 2: PROGRAMACIN DE LOS MICROCONTROLADORES

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 LENGUAJE 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 Juego de instrucciones. En los microcontroladores PIC
con las palabras de programa de 14 bits de anchura, el conjunto de instrucciones
tiene 35 instrucciones diferentes.

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
PROGRAMACIN BASIC

PRINCIPALES

DEL

LENGUAJE

DE

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.
nombres
secciones
programa

Los comentarios no estn incluidos,


de etiquetas no tienen significado,
del cdigo no estn agrupadas...Este
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 MyModule
...
...
...
end.

' Mdulo auxiliar Auxiliary es denominado MyModule


'*
'* Implementos
'*

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
include "utils"
include "strings"
include "MyUnit"
...

' Inicio de programa (mdulo principal denominado MyProgram)


' Otros mdulos incluidos son:
' Mdulo utils
' Mdulo strings
' Mdulo MyUnit

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 distance as float

' Declarar la variable distancia

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

PREFIJO

Decimal

EJEMPLO
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 nombre_de_constante [as type] = valor

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 ' Declarar la constante MINIMUM

El tipo de constante se especifica opcionalmente. En la ausencia de tipo, el


compilador lo considera el menor tipo conveniente al valor de constante.
const MAX as longint = 10000
const MIN = 1000
const SWITCH = "n"

' Compilador supone el tipo word


' Compilador supone el tipo char

En el siguiente ejemplo, una constante denominada T_MAX se declara de modo


que tenga el valor fraccional 32.60. Ahora, el programa puede comparar la

temperatura anteriormente medida con la constante con el nombre con significado


en vez del nmero 32.60.
const T_MAX = 32.60
const T_MAX = 3.260E1

' Declarar temperatura T_MAX


' 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"
const Message_2 = "Press the RIGHT button"
const Message_3 = "Press the LEFT button"

' Mensaje 1 para LCD


' Mensaje 2 para LCD
' 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
dim counter, temp as word

'Definir variables i, j, k
'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
symbol OUT = PORTA
symbol MYDELAY = Delay_ms(762)
dim cnt as byte
main:
if cnt > MAXALLOWED then
cnt = 0
OUT.1 = 0
MYDELAY
end if
...

' Smbolo MAXALLOWED para el valor numrico


' Smbolo OUT para SFR
' Smbolo MYDELAY para llamada de procedimiento
' Variable cnt
' Programa comprueba si cnt > 216
' Si lo es,
' los siguientes tres comandos
' se ejecutarn

' Si no lo es, el programa contina 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.

TIPO DE
DATO

DESCRIPCIN

TAMAO (NMERO
DE BITS)

RANGO DE VALORES

bit

Un bit

0o1

sbit

Un bit

0o1

byte, char

Carcter

0 ... 255

short

Entero con signo


corto

word

Entero sin signo

16

0 ... 65535

integer

Entero con signo

16

-32768 ... 32767

longword

Palabra de 32 bits

32

0 ... 4294967295

longint

Palabra de 32 bits
asignada

32

-2147483648 ... 2147483647

float

Punto flotante

32

1.17549435082*10-38 ...
6.80564774407*1038

-127 ... 128

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
dim j as word
...
j = $FF0F
i=j

'Variable i ocupa un solo byte de la memoria RAM


' Variable j ocupa dos bytes de la memoria RAM

' i se convierte en $0F, el byte ms alto $FF se pierde

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)
word(b) = a

' Conversin explcita de la expresin b


' Compilador informa de un error

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

OPERADORES

ASOCIATIVIDAD

Alta

@ not + -

de derecha a izquierda

* / div mod and << >>

de izquierda a derecha

+ - or xor

de izquierda a derecha

= <> < > <= >=

de izquierda a derecha

Baja

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

OPERACIN

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

SIGNIFICADO

EJEMPLO

CONDICIN DE VERACIDAD

>

es mayor que

b>a

si b es mayor que a

>=

es mayor o igual que

a >= 5

si a es mayor o igual que 5

<

es menor que

a<b

si a es menor que b

<=

es menor o igual que

a <= b

si a es menor o igual que b

es igual que

a=6

si a es igual que 6

<>

no es igual que

a <> b

si a no es igual que b

OPERADORES 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:
OPERANDO

SIGNIFICADO

EJEMPLO

RESULTADO

<<

desplazamiento a la izquierda

A = B << 2

B = 11110011

A = 11001100

>>

desplazamiento a la derecha

A = B >> 3

B = 11110011

A = 00011110

and

Y 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

$1234 or $5678
$1234 xor $5678
not $1234

' resultado es $1230 porque:


' $1234 : 0001 0010 0011 0100
' $5678 : 0101 0110 0111 1000
' ---------------------------' y : 0001 0010 0011 0000 ... eso es, $1230
'equivale a $567C
' equivale a $444C
' 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 2n si todos los bits descartados son ceros. Lo mismo se
puede aplicar a los operandos con signo si todos los bits descartados son iguales
que el signo de bit.

dim num as word


num = 1
num << 5

' declarar la variable num como word


' asignarle el valor decimal 1 (00000000 00000001 bin.)
' 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 2 n.
dim num as integer
num = 0xFF56
num >> 4

' declarar variable num como signed integer


'asignarle el valor hex FF56 (11111111 01010110 bin.)
' 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

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 expresin then
operaciones1
else
other operaciones2
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 decimal_digit
case 0
mask = %01111110
case 1
mask = %00110000
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

'El valor del dgito decimal se est comprobando


'Visualizar "0"
'Visualizar "1"

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 expresin
sentencias
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
...
...
wend

' Se puede escribir verdadero en vez de 1


' Las expresiones se ejecutarn repetidamente (bucle infinito)

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
operation
...
next k

' La variable k se incrementa cinco veces (de 1 a 5) y


' cada vez sigue ejecutndose la "operacin"

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
sentencias
loop until expresin

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
do
a = a+1
loop until a <= 1E06

' Establecer el valor inicial


' Operacin en marcha
' Comprobar la condicin

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

CONTENIDO DE ELEMENTOS

estante[0]

estante[1]

23

estante[2]

34

estante[3]

estante[4]

estante[5]

12

estante[6]

...

...

...

...

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 shelf as byte [100]
shelf [4] = 12
temp = shelf [1]

' Declarar la matriz "estante" con 100 elementos


' 12 elementos estn colocados en el estante [4]
' Variable estante [1] se copia a la variable temp

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)

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: nombre_de_etiqueta

La sentencia ejecuta un salto al especificador nombre_de_etiqueta que representa


una etiqueta. La sentencia goto puede preceder o seguir a una etiqueta. Por lo
tanto, no es posible hacer un salto hacia o desde un procedimiento o 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 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

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.

INTCON.B0 = 0
ADCON0.5 = 1
i=5
STATUS.(i+1) = 1

' Poner a cero el bit 0 del registro INTCON


' Poner a uno el bit 5 del registro ADCON0
' Poner a uno el bit 6 del registro STATUS

Por fin, a un bit deseado se le puede acceder al utilizar un nombre alias. En este
caso, es el GIE_bit:
GIE_bit = 1 ' Poner a uno el bit GIE

TIPO SBIT
El compilador mikroBasic PRO for PIC tiene un tipo de dato sbit. Esto es un tipo de
dato 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
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 ptr as ^bit


dim arr as array[5] of bit

' invlido
' 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
[ declaraciones locales ]
cuerpo de procedimiento
end sub

nombre_de_procedimiento (lista_de_parmetros)

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.
'Aadir dos nmeros
sub procedure add (dim byref sum as word, dim x, y as byte)
sum = x + y
' aadir los nmeros x e y y almacenar el resultado en la variable sum
end sub
' fin del subprocedimiento

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

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:
'funcin que hace clculo de xn basado en los parmetros de entrada x y n (n > 0)
sub function power(dim x, n as byte) as longint ' x y n son bytes, resultado es longint
dim i as byte
' i es un byte
result = 1
' resultado = 1 si n = 0
if n > 0 then
for i = 1 to n
result = result*x
next i
end if
end sub

Ahora, podemos llamar a la funcin power para hacer clculo de 312 por ejemplo:
tmp = power(3, 12) ' Hacer clculo 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:
#if constant_expression_1
<section_1>
[#elif constant_expression_2
<section_2>]
...
[#elif constant_expression_n
<section_n>]
[#else
<final_section>]
#endif

'Si expresin_de_constante_1 no es cero,


'seccin_1 ser compilada
'Si expresin_de_constante_2 no es cero,
'seccin_2 ser compilada
'Si expresin_de_constante_n no es cero,
'seccin_n ser compilada
'Si no se compila ninguna de las secciones anteriores
'seccin_final ser compilada
'Final de la directiva #if

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 RAMlibre. 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
direccionamiento

objetos

al

especificar

sus

nombres

es

denominado
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 ' puntero_p apunta al dato de tipo word

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 variable_a as word absolute 12

' variable_a ocupar una palabra


' (16 bits) en la direccin 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 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 @:

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 temp as word


ptr_b as ^byte

ptr_arr as ^byte[10]
arr as byte[10]
main:
ptr_b = @arr
temp = @arr
ptr_arr = @arr
end.

' operador @ devolver ^byte


' operador @ devolver ^byte
' operador @ devolver ^byte[10]

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 main: (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:


Crear un proyecto (nombre de proyecto, configuracin de proyecto,
dependencias entre archivos);
Editar un programa;
Compilar el programa y correccin de errores;
Depurar (ejecutar el programa paso a paso para asegurarse de que se
ejecutan las operaciones deseadas);
Programar un microcontrolador (cargar el archivo .hex generado por el
compilador en el microcontrolador utilizando el programador PICflash).

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 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)

Un programa escrito en el compilador mikroBasic PROfor 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:
LIBRARA

DESCRIPCIN

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:
LIBRARA

DESCRIPCIN

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 2C


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

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


(ENC28J60)

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

S-ar putea să vă placă și