Вы находитесь на странице: 1из 47

Introducción a la programación

de microcontroladores PIC
usando mikroBasic

Manual
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

1. Introducción a los microcontroladores

Evitemos cuestiones filosóficas, y citemos a


wikipedia aquí:

“Un microcontrolador (abreviado μC, uC o


MCU) es un circuito integrado programable,
capaz de ejecutar las ordenes grabadas en su
memoria. Esta compuesto de varios bloques
funcionales, los cuales cumplen una tarea
especifica. Un microcontrolador incluye en su
interior las tres principales unidades
funcionales de una computadora: unidad
central de procesamiento, memoria y
periféricos de entrada/salida.”
Imagen 1.1: Diagrama de bloques de un
microcontrolador

1.1. Origen del microcontrolador

El desarrollo de la tecnología de fabricación de circuitos integrados ha sido responsable de la


situación de los microcontroladores hoy en día. Este desarrollo es el que permite la integración de
miles de transistores en un único chip. Gracias a este avance posteriormente se crearon los
microprocesadores, que al unirlos con otros dispositivos externos, como las memorias, puertos de
entrada/salida, temporizadores entre otros, dieron vida a las primeras micro-computadoras.
Debido a la rápida evolución de la fabricación de chips aumentó la cantidad de transistores que
podían integrarse en un chip, permitiendo crear un chip que incluía tanto al microprocesador como
a los dispositivos externos, así se dio origen a este chip llamado microcontrolador.

1
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

1.2. Ventajas y desventajas de los microcontroladores

Las principales ventajas y desventajas de los microcontroladores son:

Ventajas

• Actúan como una micro-computadora sin partes físicas externas.


• Como tiene dentro una alta integración, reduce el costo y tamaño de el sistema.
• Su uso es simple, fácil de solucionar problemas y dar mantenimiento.
• La mayoría de los puertos son programados para realizar las funciones deseadas.
• Requiere de poco tiempo para programar sus funciones.
• Tiene facilidad de interacción con dispositivos. (Memorias, expansiones, etc).

Desventajas

• A menudo tienen una arquitectura más compleja que los microprocesadores.


• Solo pueden realizar un número limitado de operaciones simultáneas.
• Incapaz de hacer interface con componentes de alta potencia por si solo.

1.3. Aplicaciones de los microcontroladores

Los microcontroladores son ampliamente usados en modernos equipos electrónicos. A


continuación se listan algunas aplicaciones básicas de estos.

• Instrumentos bio-médicos

Imagen 1.2: Equipos médicos electrónicos

2
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Hoy en día la medicina dispone de equipos más fiables y menos dañinos para la salud, esto
gracias a la integración principalmente de los microprocesadores, pero también de los
microcontroladores.

Dentro los aparatos utilizados en el mundo de la medicina se pueden encontrar los


tensiómetros, rayos X, resonancias magnéticas, electrocardiógrafos, ecografía, entre otros. Ahora
bien dentro de los principales equipos de médicos tenemos SIEMENS, TOSHIBA, PHILIPS, VARIAN,
GENERAL ELECTRIC, entre otros. La mayoría de estos equipos emplean técnicas de procesamientos
de imágenes y es por ello que compañías como INTEL, NEC, TEXAS INSTRUMETNS y ARM son las
que se ven más involucradas en este ámbito, pero aquellos equipos en los que se necesitan
controlar algún son los que dan participación a MICROCHIP que se especializa en la fabricación de
microcontroladores.

Por ejemplo un esfigmomanómetro, o tensiómetro es un aparato para medir la tensión


arterial. Gracias a la existencia de los microcontroladores hoy en día todo el mundo puede tener un
tensiómetro digital en su casa. La compañía microlife ofrece el tensiómetro BP 3BU1-3 el cual utiliza
un microcontrolador de 8 bits, según sus características técnicas. Gracias al microcontrolador este
aparato puede ser más compacto, incorpora una pantalla que muestra fecha y hora, se desconecta
automáticamente y hasta puede comprobar la carga de las baterías.

Imagen 2: Tensiómetro BP 3BU1-3 microlife

3
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

• Sistemas de comunicaciones

Imagen 3: Diversos equipos electrónicos que utilizan


microcontroladores

En el mundo de las comunicaciones los microcontroladores se enfocan en llevar a cabo


los protocolos de comunicación entre aquellos módulos que participan en la aplicación.
Algunos de los protocolos utilizados son:

RS-232. Es una interfaz que designa una norma para el intercambio de una serie de
datos binarios entre un “Equipo Terminal de Datos” y un “Equipo de Comunicación de Datos”,
aunque existen otras en las que también se utiliza RS-232. En particular, existen ocasiones en
que interesa conectar otro tipo de equipamientos, como pueden ser computadores.

USB. También conocido como Universal Serial Bus, es un bus estándar industrial que
define los cables, conectores y protocolos usados en un bus para conectar, comunicar y proveer
de alimentación electrónica entre computadoras, periféricos u dispositivos electrónicos. Este es
utilizado como estándar de conexión de periféricos como: teclados, mouses, memorias USB,
joysticks, escáneres, cámaras digitales, teléfonos móviles, reproductores multimedia, entre otros.

Otros protocolos de comunicación son RS-485 y el Ethernet.

4
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

• Controlador de los periféricos en una PC

Imagen 4: Periféricos de computadora con


microcontroladores

Una gran variedad de periféricos, que se acoplan a las computadoras, son controlados por
microcontroladores. Dentro de estos se pueden encontrar el teclado, el mouse, la webcam, equipos
de audio, micrófonos, inalambricos, y así por el estilo. Incluso es posible que un microcontrolador
se comporte como un mouse o un teclado, enviando comandos al computador, o letras.

• Robótica

Imagen 5: Diferentes tipos de robots que usan


microcontroladores

5
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

En su gran mayoría las aplicaciones de robótica son basadas en microcontroladores. Por


ejemplo en el caso de un Rover, que es un robot de 4ta generación, aquellos en que una
computadora controla sus movimientos y además poseen sensores que envían información a la
misma computadora sobre el estado del proceso y permite la toma inteligente de decisiones y
el control de proceso en tiempo real. Un robot de este tipo fue el que se envió a Marte, su
función era llevar a cabo una labor de exploración y de recolección de rocas.

Dentro de las funciones del robot están la de identificar los elementos que va a recolectar,
ya sea mediante el uso de sensores o por medio de una cámara, manejo eficiente de la batería
con capacidad de detectar bajo nivel carga y cargar la misma por medio de paneles solares,
controlar el movimiento de las ruedas y del brazo que recolecta las rocas; estas y muchas otras
funciones que son realizadas por microcontroladores.

• Campo Automovilístico

Imagen 6: Tablero de control de automovil

El automovilismo tampoco se queda detrás, un auto común usa entre 30 y 40


microcontroladores que sirven para manejar el sistema de suspensión, la mezcla de aire-
gasolina, la sincronización y frecuencia de la ignición en los cilindros, los frenos ABS y desplegar
información al usuario a través del tablero entre otras cosas. Un auto mas costoso puede incluir
hasta 80 microcontroladores, mucha más potencia de computo que la que era posible en las
primeras naves espaciales.

6
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

De forma más específica las funciones del microcontrolador en un automovil son:

• Comunicaciones. Las comunicaciones entre las unidades de control electrónico (ECU)


es una tendencia cada vez mayor. Las comunicaciones multiplexadas en los vehículos
se desarrollo originalmente para reducir el peso, las ínter-conexiones, el costo y la
complejidad. Pronto se hizo evidente, sin embargo que los sistemas de vehículos se
podrían mejorar en gran medida con la oportunidad de compartir los datos de
diferentes ECU’s, en tiempo real.

• Algoritmo de complejidad. La creciente complejidad de los sistemas electrónicos del


automóvil ha tenido un efecto dramático sobre los requisitos de rendimiento y la
integración de periféricos de los microcontroladores de automoción. Los algoritmos
están ahora obligados a manejar los aportes de muchos sensores y sistemas de
comunicación, ejecutar en tiempo real de los ciclos de control y el control de las
saldad de muchos actuadores.

• Nodos inteligentes. Los nodos inteligentes de hoy se componen generalmente de un


paquete que contiene un microcontrolador, sensor y a veces un dado de interfaz
analógico (según la cantidad de funcionalidad se incluye en la matriz del sensor). Se
prevé que será rentable en un futuro no muy lejano la integración de sensores
micro-electro-mecánicos (MEMS) y los microcontroladores en un chip de silicio único
y monolítico.

• Tendencias de memoria. Entre los tipos de microcontroladores de memoria estándar


que se han establecido en sistemas de automoción están ROM, EPROM y Flash
EEPROM para almacenar programas, la RAM y la memoria para la pila de cero-pad,
y la EEPROM para el almacenamiento de datos de calibración y de seguridad. Como
la memoria Flash EEPROM cada vez es más rentable, terminará reemplazando la
memoria ROM.

7
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

2. Estudio de casos y soluciones

Al momento de solucionar problemas a través de los microcontroladores, al igual que en


otros campos del saber, es necesario realizar un análisis de la situación. En este caso en especial,
el análisis se efectúa con la intención de obtener una serie de informaciones que al final
ayudará a determinar cuales son los recursos necesarios y las mejores soluciones que se
pueden dar a la situación.

2.1. Método de solución de problemas

Para llegar a la solución de problemas es necesario agotar una serie de pasos que se
listarán a continuación.

Identificar el problema. La solución de problemas comienza reconociendo que existe una


situación que hay que solucionar.

Describir el problema. Este paso es sumamente importante porque es la base sobre la


que se trabajaran los siguientes pasos. En esta fase es necesario recolectar información para
describir de forma exacta de que se trata el problema, una mala recolección de datos puede
llevar a dar con una solución equivocada del problema.

Análisis del problema. Analizando el problema es la manera en que se obtiene un


entendimiento más profundo acerca de la situación, de forma que una vez terminado este paso
se conocerá tanto el tipo de situación como su naturaleza. El proceso se desglosa en las
siguientes cinco preguntas:

• Qué o quiénes están involucrados?


• Qué aspectos se pueden controlar?
• Qué aspectos no se pueden controlar?
• Qué restricciones provocan los aspectos?
• Cuáles son los posibles soluciones y sus consecuencias?

El rol del programador en este caso es lograr una compresión lo suficientemente buena
del caso y proponer una o varias soluciones sustentadas en razones lógicas y validas.

Diseño del algoritmo. Este paso posee cuatro partes.

• Análisis del proceso. Es el resultado del paso anterior, el cual culmina con una posible
solución a la situación, que se debe conocer a detalle sobre que trata.

8
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

• Diseño del proceso. Este se refiere a la manera en que se abordará el problema, que en este
curso será de manera determinista. Cuando se habla de trabajo determinista en
programación quiere decir que el comportamiento del algoritmo es lineal, que cada paso
del algoritmo se ejecutará uno a continuación del otro.

• Vista general del proceso. Una forma muy común y útil a la vez, es la estudiar la solución de
la situación desde un punto de vista general, desde un todo, que describe el conjunto de
implicaciones que se tiene y a partir de ese punto ir hacia un panorama más particular,
dividiendo ese todo del proceso en procesos simples y pequeños.

• Vista partes del proceso. Una vez se tiene el proceso separado en sus partes más simples,
es momento de trabajar con la programación de las partes, también llamadas módulos.
Este tipo de programación se conoce por tanto como programación modular.

Programación. Consiste en traducir el algoritmo a un lenguaje de programación y


terminada la traducción se graba en el microcontrolador.

Una vez terminada la traducción, se procede a compilar el programa. Compilar consiste


traducir de un lenguaje de programación a otro lenguaje de programación, donde en gran parte
de los casos el primer lenguaje es de mayor nivel que el segundo. El nivel en los lenguajes de
programación es una medida que de que tan fácil de comprender o que tanto se parece un
lenguaje de programación al lenguaje coloquial, al que utilizan las personas en su diario vivir.
Mientras más bajo sea el nivel del lenguaje, más se acerque al lenguaje que entienden las
máquinas, los microcontroladores.

Luego del proceso de traducción es posible que se produzcan errores por causa del mismo.
Los errores de compilación, que son causados por un uso incorrecto del lenguaje de
programación, por lo que la computadora no será capaz de entender el programa. Los errores de
ejecución se producen por instrucciones, ordenes, que la computadora puede entender, pero no
ejecutar. Por último están los errores lógicos, los cuales se producen en la lógica del programa, esto
suele ser ocasionado por el propio diseñador del programa, en la etapa de diseño de algoritmo.

Para resolver estos errores se procede a realizar una depuración del código, donde por
medio de análisis y pruebas se pretende encontrar los errores existentes, donde los errores lógicos
terminan siendo los más difíciles de encontrar.

9
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Luego de lograr resolver todos los errores y poner en operación la solución escogida,
viene el mantenimiento, etapa en la cual el programador se dispone a realizar actualizaciones o
mejoras en la medida en que se presenten nuevas necesidades o mejores dispositivos que
puedan hacer algún aporte.

Ejemplos

Ejemplo 2.1.1

Identificar el problema.

Rosa tiene un planta con problemas de crecimiento.

Este problema resulta ser simple o por lo menos aparenta serlo. En la práctica los
problema no siempre resultan ser tan sencillos, incluso a veces es difícil hasta identificarlos si no
se está atento.

Descripción del problema.

En este caso, es importante hacer preguntas que conduzcan a la causa del problema.
Una buena pregunta sería: qué necesita una planta para crecer? En general las plantas solo
necesitan agua, buena tierra, luz solar y un clima adecuado. Conversando con Rosa se recolecto
la siguiente información.

Rosa tiene una planta decorativa en el balcón de su apartamento en el segundo piso de


la torre Alma II, en el centro de la ciudad, al cual recién se acaba de mudar. Esta planta está
sembrada en buena tierra y además es roseada con suficiente agua cada mañana antes de que
Rosa se dirija hacia su oficina. A pesar de que a la planta le afectan los climas húmedos, el clima
de la ciudad, que es tropical húmedo, no debería ser un problema.

Un domingo, Rosa, tratando de encontrar una respuesta, se pasó gran parte del día
observando y descubrió que la sombra de los demás edificios no dejaba que la planta recibiera
suficiente luz.

Gracias a esta buena recolección de información ya se conoce la causa del problema.


Ahora es posible pasar a analizar el problema.

10
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Análisis del problema.

A continuación se da respuesta a las preguntas pautadas para realizar un buen análisis.

• Quiénes enfrentan el problema y quiénes toman decisiones?

◦ Rosa

• Qué aspectos se pueden controlar?

◦ agua
◦ tierra
◦ ubicación
◦ humedad

• Qué aspectos no se pueden controlar?

◦ clima
◦ luz solar
◦ tipo de planta, condiciones que requiere

• Qué restricciones o limitaciones provocan los aspectos?

◦ Es un apartamento, en el lugar que recibe mayor cantidad de luz solar es el


balcón.
◦ El tipo de planta, trae consigo limites en la combinación de agua, tierra,
humedad y luz que se le pueden suministrar a la misma.
◦ El clima, también pone restricciones en cuanto a aspectos como la humedad y
cantidad de luz solar que recibe la planta.

• Cuáles son las posibles soluciones y sus consecuencias?

Solución 1:

Mudarse a un lugar donde las edificaciones no interfieran con la luz solar, que llegue a la
planta, y que no interfiera con las demás de intereses de Rosa.

11
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Consecuencias. El hecho de tener que cambiar de vivienda no es una solución rentable


para Rosa, debido a que tiene un costo muy elevado, y este problema no es tan importante
como para hacer este gasto.

Solución 2:

Ya que es un planta decorativa, se puede cambiar por otra que si puede vivir bajos esas
condiciones.

Consecuencias. Esta solución no posee ninguna consecuencia evidente, solo tal vez el
hecho de que Rosa no encuentre otra planta que le guste o que cumpla sus requisitos. En
cuanto a costos no tiene una gran repercusión.

Solución 3:

Comprar o crear un dispositivo que pueda recrear las condiciones necesarias para la
planta pueda vivir, con enfoque en la cantidad de luz que se requiere.

Consecuencias. Esta solución implica un gasto primario, que sería el costo inicial del
dispositivo, un gasto secundario menor que sería la energía que consume para funcionar. En
este caso los costos podrían variar en base a la decisión de comprar un dispositivo ya
desarrollado o desarrollar uno, donde desarrollar uno implica gastos mucho mayores.

Además es posible que el dispositivo solo pueda llevar la planta hasta cierto tamaño, lo
cual a la larga conducirá a otro problema de no existir otro dispositivo como el anterior, pero
para plantas más grandes.

Solución escogida: Solución 2

Dado que la solución escogida es la número 2, este proceso termina en este paso,
porque no se requiere de programar o diseñar dispositivo.

Ejemplo 2.1.2

Identificar el problema.

El consumo eléctrico de la Farmacia Santiago se ha elevado demasiado en los


últimos dos meses.

12
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Descripción del problema.

En los últimos dos meses la Farmacia Santiago ha experimentado un incremento del 10%, el
análisis contratado para buscar solución a esta situación recolecto la siguiente información.

Esta farmacia se encuentra en un sector donde la energía eléctrica es 24 horas, lo cual


representa una ventaja para el negocio que solo trabaja durante 12 horas. Las luces se encienden
cada día a más tardar a las 8:00 am y son apagadas a las 8:00 pm por la persona encargada.

Luego de medir el consumo de las diferentes áreas, se descubrió que un letrero de exterior,
que se había instalado hace aproximadamente dos meses, estaba consumiendo más lo habitual
porque se quedaba encendido en el día. Por la hora de entrada no se percibía que el letrero ya
estaba encendido y ya a la hora de salida tenía que estar encendido.

La causa del problema es simple, se está olvidando apagar y encender el letrero.

Análisis del problema.

• Quiénes enfrentan el problema y quiénes toman decisiones?

◦ La persona encargada de abrir y cerrar y el propietario del negocio son quienes enfrenta
el problema.
◦ El propietario es quien toma las decisiones.

• Qué aspectos se pueden controlar?

◦ Encendido de las luces, los equipos en el establecimiento y el letrero.

• Qué aspectos no se pueden controlar?

◦ La persona encargada de abrir y cerrar, puede olvidar apagar o encender algunas luz o
aparato.

• Qué restricciones provocan los aspectos?

◦ Las luces y el letrero son únicos dispositivos, que consumen energía eléctrica, que se
puede encender o apagar mediante un interruptor.

13
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

• Cuáles son las posibles soluciones y sus consecuencias?

Solución 1:

Designar a dos personas como encargadas de la labor de encender y apagar todas las
luces y equipos.

Consecuencias. En cuanto a gastos esta solución no representa ningún gasto adicional,


por tanto no existen consecuencias evidentes.

Solución 2:

Comprar o crear un equipo de administración de energía, que se encargue de encender


y apagar los equipos que se encienden mediante interruptores en los horarios convenientes.

Consecuencias. Conlleva un gasto inicial, que es el costo y la instalación del dispositivo, y


un gasto secundario, la energía eléctrica que consuma el equipo. En caso crear el equipo en
lugar de comprarlo, se tomarían en cuenta los gastos de desarrollo.

Si no existe instalación eléctrica donde las luces estén aisladas de los demás aparatos,
entonces el equipo solo se puede usar en el letrero, a menos que se realice una re-instalación
para separar las luces en el cableado eléctrico.

Solución escogida: Solución 2

Como esta solución evita designar esta tarea a los empleados y ofrece la seguridad que
cumplirá su función, el propietario de la farmacia opto por esta opción. El hecho de que el
establecimiento contaba con el requerimiento eléctrico, explicado más arriba, favoreció esta
opción.

2.2. Diagramas de flujo

2.2.1. Algoritmos

Se define un algoritmo como el conjunto ordenado y finito de operaciones que permite


hallar la solución de un problema, este constituye un método para resolver un problema
mediante una secuencia de pasos. Dicha secuencia puede ser expresada en forma de diagrama
de flujo con el fin de seguirlo de una forma más sencilla.

14
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Los algoritmos cuentan con cuatro características que describen calidad. La finitud, que
expresa que se debe lograr la solución en un tiempo determinado. Precisión, las instrucciones
deben ser claras, precisas y no deben permitir ambigüedades. Entradas y salidas definidas, las
entradas son la puerta a los datos, informaciones y variables que al ser procesados darán una
respuesta final, la salida. Efectividad, el algoritmo debe conducir a la solución de la situación
original.

Se pueden definir cuatro elementos fundamentales que construyen un algoritmo, estas


piezas son:

• Variables. Nombres o letras reservados para asignar y guardar datos.


• Control de entradas y salidas. Manejo del flujo de la información desde fuera hacia
dentro del proceso o viceversa.
• Operaciones. Aquellas acciones a través de las cuales se procesan los datos, como
puede ser una operación lógica o matemática.
• Comparación y selección. Es la manera en que se evalúan los datos, poniendo
condiciones que de cumplirse o no, terminan en la selección de alguna de las
acciones posibles.

Ejemplos.

Ejemplo 2.2.1.1

Se quiere saber que edad tiene una persona solo con su fecha del nacimiento.

Algoritmo

Inicio
Constante anoActual = 2015
Entero = anoNacimiento, Edad
Escribir(“Escriba su año de nacimieto”)
Leer(anoNacimiento)
Edad = anoActual – anoNacimiento
Escribir(“Su edad es”, Edad)
Final

15
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Ejemplo 2.2.1.2

Una tienda de celulares vende dos modelos de celulares Iphone 5 y Galaxy S4, se desea
saber la cantidad de dinero que se recauda mensualmente a partir de la cantidad de celulares
vendidos. El Iphone 5 cuesta RD$ 19 000.00 y el Galaxy S4 cuesta RD$ 16 000.00.

Algoritmo

Inicio
Constante Costoi = 19 000.00
Constante CostoS = 16 000.00
Entero = canti, cants
Real = total
Escriba(“Digite cuantos Iphones se vendieron”)
Lea (canti)
Escriba(“Digite cuantos Galaxy se vendieron”)
Lea (cants)
Total = (Costoi * canti) + (Costos * cants)
Escriba(“Este mes se han vendido RD$”, Total)
Final

Ejemplo 2.2.1.3

Como cruzar la calle sin ser atropellado.

Inicio
Dirigirse hacia la calle
Detenerse frente a la calle
Mirar a la izquierda
Si vienen vehículos, mirar a la izquierda
Si no vienen vehículos, mirar hacia a la derecha
Si vienen vehículos, mirar a la izquierda
Si no vienen vehículos, cruzar la calle
Final

Ejemplo 2.2.1.4

Continuación ejemplo 2.1.2 sobre el consumo de energía eléctrica en una farmacia.

16
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Diseño de algoritmo.

• Análisis del proceso.

Una vez se tiene la solución, es importante recordar todas informaciones recopiladas


anteriormente y otras que se puedan necesitar para implementar la solución.

Para este caso se encontró un equipo que cumple con los requerimientos establecidos y
solo requiere ser programado. Las luces están divididas en tres grupos, las de interior, las de
exterior y las del letrero. Las luces de interior deben estar encendidas desde las 8.00 am hasta las
8.00 pm, las luces de exterior deben estar encendidas desde las 7.00 pm hasta las 6.00 am, y el
letrero debe estar encendido desde las 7.00 pm hasta las 8.00 am, esto es de lunes a sábados. Los
domingos las luces de interior deben estar encendidas desde las 8.00 am hasta las 2.00 pm, las
luces de exterior y el letrero, deben seguir el mismo horario que de lunes a viernes.

• Diseño del proceso.

A continuación se encuentra proceso diseñado en forma de algoritmo.

Inicio
Salidas = Exterior, Interior, Letrero
Configurar Hora y Fecha
Mientras es Lunes
Si son las 8.00 am
Interior = Encendido
Si son las 8.00 pm
Interior = Apagado
Si son las 7.00 pm
Exterior = Encendido
Si son las 6.00 am
Exterior = Apagado
Si son las 7.00 pm
Letrero = Encendido
Si son las 8.00 am
Letrero = Apagado

17
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Mientras es Martes
Si son las 8.00 am
Interior = Encendido
Si son las 8.00 pm
Interior = Apagado
Si son las 7.00 pm
Exterior = Encendido
Si son las 6.00 am
Exterior = Apagado
Si son las 7.00 pm
Interior = Encendido
Si son las 8.00 am
Exterior = Apagado

...
Mientras es Domingo
Si son las 8.00 am
Interior = Encendido
Si son las 2.00 pm
Interior = Apagado
Si son las 7.00 pm
Exterior = Encendido
Si son las 6.00 am
Exterior = Apagado
Si son las 7.00 pm
Interior = Encendido
Si son las 8.00 am
Exterior = Apagado

Fin

• Vista general del proceso.

La mayor parte del algoritmo esta expresada de forma simple, por lo no es necesario
dividirlo en partes más pequeñas, a excepción del paso de Configurar Hora y Fecha, que se
expresar como se ve a continuación

18
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Entero = Día, Mes, Año


Entero = Hora, Minutos
Escribir (“Introduzca el día”)
Leer (Día)
Escribir (“Introduzca el mes”)
Leer (Mes)
Escribir (“Introduzca el año”)
Leer (Año)
Escribir (“Introduzca la hora”)
Leer (Hora)
Escribir (“Introduzca los minutos”)
Leer (Minutos)

• Vista partes del proceso.

Este paso se irá viendo a medida que se siga avanzado en el curso, por el ejemplo quedará
en este punto.

2.2.2. Diagramas de flujo

Los diagramas de flujo son una manera de representar gráficamente el flujo de datos a
través de sistemas de tratamiento de información, describen que operaciones y en que secuencia
se requieren para solucionar un problema dado.

Los diagramas de flujo se dibujan generalmente antes de comenzar a programar el código


frente a la computadora, facilitan la comunicación entre los programadores y demás involucrados.

Estos diagramas de flujo representan un papel vital en la programación de un problema y


facilitan la compresión de problemas complicados y sobre todo muy largos. Una vez que se dibuja
el diagrama de flujo, llega a ser fácil escribir el programa en cualquier lenguaje de alto nivel.

Simbología

Los diagramas de flujo se dibujan generalmente usando algunos símbolos entandares; sin
embargo algunos símbolos especiales pueden también ser desarrollados cuando sean requeridos.

19
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Inicio/Fin Inicio o fin del programa.

Procesos Pasos, procesos o líneas de instrucción de programas de computo.

Entrada/Salida Operaciones de entrada y salida.

Decisión Toma de decisiones.

Salida Display, para mostrar datos.

Líneas de flujo.

Diagramas lógicos de flujo

Los diagramas lógicos se tratan de una técnica de modelización, que muestra un sistema
como una red de procesos conectados entre ellos por flujos y almacenamiento de datos, es un
modelo que proporciona en forma gráfica el punto de vista funcional de un sistema.

Estos diagramas describen los lugares de origen y destino de los datos (límites del
sistema), las transformaciones a las que son sometidos los datos (procesos internos), los lugares
en los que se almacena los datos dentro del sistema, y los canales por donde circulan los datos.

Además de ser utilizados en los sistemas de información, también lo son en tarea de


modelar organizaciones enteras, es decir, como una herramienta para la planeación estratégica
y de negocios.

20
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

2.3. Lenguajes de programación

Un lenguaje de programación es un lenguaje formal diseñado para expresar procesos que


pueden ser llevados a cabo por máquinas como las computadoras.

Pueden usarse para crear programas que controlen el comportamiento físico y lógico de
una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.

Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su
estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se
prueba, se depura, se compila (de ser necesario) y se mantiene el código fuente de un programa
informático se le llama programación.

A continuación veremos tres de los lenguajes de programación más utilizados en el mundo


de los microcontroladores y haremos una comparación entre ellos.

2.3.1. Ensamblador (Assembler)

Ventajas

• Permite escribir un código más conciso. En aplicaciones profesionales se usa sobre


todo para escribir drivers para interfaces de periféricos o para escribir rutinas
altamente optimizadas que requieren velocidad, tamaño reducido y/o precisión.
• Controla con precisión la operación del microcontrolador y permite al programador
manejar las operaciones con más detalle.
• Es valioso como herramienta educacional, ya que para escribir ensamblador uno
debe conocer a detalle la arquitectura interna del microcontrolador, el set de
instrucciones, los registros y su funcionamiento interno.

Desventajas

• No posee estructura ni control de tipos, por lo cual, el programador debe cuidar por
sí mismo de proveer una estructura adecuada a su programa y controlar los tipos de
datos.
• No es portable, debido a que depende de la estructura interna del microcontrolador,
el código de un microcontrolador no puede correr en otro de diferente arquitectura.
• El mantenimiento del código (revisión, modificación, ampliación) es más complicado.

21
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

2.3.2. MikroC

Ventajas

• Es portable. Generalmente un programa escrito para un tipo de microcontrolador


puede correr con mínimas modificaciones en otro microcontrolador de diferente
arquitectura.
• mikroC proporciona estructura, abstracción y control de tipos de datos (aunque
no tan estrictamente como otros lenguajes de alto nivel).
• Permite también cierto acceso de bajo nivel, similar al ensamblador, combinando
en general ciertas características de bajo nivel del ensamblador y otras ventajas
ofrecidas por los lenguajes de alto nivel.
• Es más rápido y eficiente que otros lenguajes de alto nivel usados también para
programar microcontroladores y su uso está altamente difundido en aplicaciones
profesionales.
• Existen muchísimas librerías libremente disponibles para el uso de cualquier
programador, lo cual facilita el desarrollo de una aplicación.

Desventajas

• Es menos veloz que el ensamblador.


• El código escrito en mikroC ocupa más memoria, dada una misma aplicación en
Ensamblador.

2.3.3. mikroBasic

Ventajas

• Los programas en mikroBasic son más fáciles de mantener (revisar, modificar, ampliar).
• Proporciona a los estudiantes un alto ritmo de aprendizaje en comparación con otros
lenguajes. Este es tan fácil de entender como el lenguaje común.
• Es portable. Al igual que el mikroC.
• mikroBasic proporciona estructura, abstracción y control de tipos de datos.
• Permite también cierto acceso de bajo nivel, similar al ensamblador, combinando en
general ciertas características de bajo nivel del ensamblador y otras ventajas ofrecidas
por los lenguajes de alto nivel.
• Existen muchísimas librerías libremente disponibles para el uso de cualquier
programador, lo cual facilita el desarrollo de una aplicación.

22
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Desventajas

• Es menos veloz que el ensamblador.


• El código escrito en mikroBasic ocupa más memoria que ensamblador, dada una misma
aplicación.

El desempeño y uso tanto de un compilador como de un microcontrolador dependerá en la


mayoría de las ocasiones de las habilidades que tenga el programador por lo que las ventajas y
desventajas presentadas en la parte anterior son pueden variar. De manera que siendo mikroBasic
un lenguaje menos preciso que Ensamblador, en manos de una persona inexperta este último
puede perder esta ventaja.

En conclusión, evaluando las ventajas y desventajas de estos tres lenguajes, se concluye que
cada lenguaje tienes sus pro y sus contra, así la elección de uno dependerá de las condiciones de
trabajo o del gusto del propio programador. Para el caso de este curso, que tiene un enfoque
básico, el lenguaje mikroBasic representa la elección idónea para la programación de
microcontroladores.

23
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

3. Sistemas de numeración

Un sistema de numeración es un conjunto de símbolos y reglas que permiten formar


números, expresar cantidades. Dentro de los sistemas de numeración más conocidos están el
sistema de numeración decimal (1, 2, 3, 4, 5, 6,..., 28, 29, 30, 31,..., 1023, 1024, 1025, ...) y el
sistema de numeración romano (I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII,...). Además de estos existen
otros sistemas de numeración como son el sistema binario y hexadecimal que son más
utilizados en el mundo de la programación. El compilador mikroBasic solo admite los sistemas
decimal, binario y hexadecimal, los cuales se mostrarán a continuación.

3.1. Sistema decimal

Este sistema consta de los dígitos de 0 a 9, con estos 10 símbolos se forman los
números. (1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, …). El 397 es un
número expresado en sistema decimal. Como se aprendió en la primaria los números en este
sistema también se escriben en forma desarrollada, de manera que 397 = 300 + 90 + 7.
Otra forma de escribir los números es en notación científica, tal que 397 = 3*102 + 9*101
+ 7*100, el hecho de que cada posición sea una potencia de 10 denota el porque este sistema
es también llamado sistema de numeración base 10, es decir que utiliza 10 dígitos, 10 símbolos.

3.2. Sistema binario

Este sistema es muy utilizado en la informática y otras ciencias afines, principalmente


donde hay un flujo de información que es manejado por máquinas. El sistema de numeración
binario utiliza tan solo los dígitos 0 y 1, estos dos símbolos son los que forman todos los
números. (1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000,
10001, 10010, 10011, 10100, 10101, 10110, ...). Solo los números 0 y 1 son iguales para ambos
sistemas, de manera que el número 2 en decimal sería el 10 en binario, el 3 sería 11, el 4 sería
100 y así sucesivamente. Cada dígito o posición en este sistema se llama bit y al unir 8-bits se
obtiene un byte, que puede representar un valor máximo de 255.

3.2.1. Conversión de binario a decimal

Es común en la práctica la necesidad de convertir de un sistema de numeración a otro.


En el sistema binario cada posición es potencia de 2, es decir que es un sistema base 2. Si se
tiene el caso del número 1110, escrito en notación científica 1110 = 1*23 + 1*22 + 1*21 +
0*20 y en forma desarrollada 1110 = 1*8 + 1*4 + 1* 2 + 0*1 = 8 + 4 + 2 + 0 = 14. El proceso
anterior es la forma es la cual se convierte de sistema binario a decimal.

24
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Una forma de facilitar el trabajo es creando un tabla con tres filas y tantas columnas como
dígitos tenga el número. En la primera fila se colocan las potencias de las posiciones o sus valores,
en la segunda fila cada dígito va debajo en la columna correspondiente a su posición y en la última
fila se pone el resultado de multiplicar los valores las primeras dos filas, la suma de estos resultados
es el número en sistema decimal.

Potencias o valores de posición

23 22 21 20
1 1 1 0
Número Binario
8 4 2 0 = 14

Resultado

3.2.2. Conversión de decimal a binario

Para convertir de sistema binario a decimal se hace mediante un proceso de división, donde
se divide el número decimal de forma consecutiva entre 2, que es la base del sistema binario, y se
va tomando el residuo de la división hasta que el cociente sea igual a 0. El residuo siempre debe
ser 1 ó 0. Al final el número binario queda invertido, es decir, que si el resultado es 011 el número
en binario es 110.

Base Decimal Cocientes

2 9 4 2 1 0
1 0 0 1

Residuos y Número Binario invertido

Otra forma de hacer la conversión es la siguiente. Si se quiere llevar el número 10 a binario


se tiene

2 10
Al dividir 10/2 el cociente es 5 y el residuo 0.
2 10 5
0 Al dividir 5/2 el cociente es 2 y el residuo 1.

25
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

2 10 5 2
0 1 Al dividir 2/2 el cociente es 1 y el residuo 0.
2 10 5 2 1
0 1 0
Al dividir 1/2 el cociente es 0 y el residuo 1, como el
cociente es 0 se termina la operación y en la fila de abajo queda el número en binario, 10 =
1010.

Base Decimal Cocientes

2 10 5 2 1 0
0 1 0 1

Residuos y número binario invertido

3.3. Sistema hexadecimal

Este sistema utiliza 16 símbolos o dígitos de los cuales 10 son números, de 0 a 9 y los
otros 6 son las primeras 6 letras del abecedario, de A hasta F. (1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D,
E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, …, A8, A9, AA, AB, AC, AD, AE, AF, B0, B1,
B2, ...) De manera que A en hexadecimal es igual a 10 en decimal, B = 11, C = 12, D = 13, E =
14, F = 15 y el 10 = 16.

3.3.1. Conversión de hexadecimal a decimal

Este proceso de conversión es el mismo que se aplica para la conversión de binario a


decimal, la única diferencia es que este sistema es de base 16, por tanto los valores a multiplicar
serán en potencias de 16. Si se tiene el número 2F3, entonces 2F3 = 2*162 + F*161 + 3*160
y escrito en forma desarrollada 2F3 = 2*256 + F*16 + 3*1 = 2*256 + 15* 16 + 3*1 = 512 + 240
+ 3 = 755. En este caso es necesario recordar sustituir las letras por sus valores numéricos.

Para la tabla que se muestra a continuación se han hecho unos cambios, como que en la
primera fila se han colocado las potencias, en la segunda fila los valores de las potencias, en la
tercera el número en hexadecimal y en la cuarta el resultado.

26
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Potencias o valores de posición

162 161 160


256 16 1
2 F 3
Número hexadecimal
512 240 3 = 755

Resultado

3.3.2. Conversión de hexadecimal a decimal

Para convertir de sistema hexadecimal a decimal se hace mediante un proceso de división,


donde se divide el número decimal se divide de forma consecutiva entre 16, que es la base del
sistema hexadecimal, y se va tomando el residuo de la división hasta que el cociente sea igual a 0.
El residuo siempre debe estar entre 0 y 15. Al final el número hexadecimal queda invertido, es decir
que si el resultado es 3F2 el número es 2F3.

Si se quiere llevar el número 755 a binario. Se tendría

16 755
Al dividir 755/16 el cociente es 47 y el residuo 3.
16 755 47
3 Al dividir 47/16 el cociente es 2 y el residuo 15.
16 755 47 2
3 15 Al dividir 2/16 el cociente es 0 y el residuo 2, como el
cociente es 0 se termina la operación y en la fila de abajo queda el número invertido.

Base Decimal Cocientes

16 755 47 2 0
3 15 2

Residuos y número binario invertido

En hexadecimal, 755 = 2F3.

27
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

3.4. Sistemas de numeración en mikroBasic

El compilador mikroBasic admite tres sistemas de numeración como se había


mencionado antes, pero cómo distingue que el número 11, por ejemplo, esta en sistema
decimal, binario o hexadecimal. Para el compilador los números en sistema decimal se escriben
de la forma habitual y para diferenciar los otros sistemas utiliza prefijos, el signo de $ ó 0x
indica que el número esta en hexadecimal y el signo % indica que el número esta en binario. De
manera que el compilador interpretará 11 tal cual esta escrito, es sistema decimal. Ahora bien si
se coloca el prefijo 0x11 ó $11 este lo interpretará en sistema hexadecimal como 17 y si fuera
%11 será interpretado como un 3 en sistema binario.

Además el mikroBasic integra una herramienta llamada Quick Converter, la cual puede
realizar conversiones entre los tres sistemas de manera rápida y fácil.

Para hacer la conversión tan solo es necesario colocar el número en la casilla del sistema
original y presionar Enter, inmediatamente la herramienta convierte el número presentando este
en las casillas de los sistemas restantes.

28
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

4. Tipos de datos

Así como en las matemáticas existen los tipos o familias de números, tales como los
números naturales, enteros, decimales, así mismo en programación existen lo que son tipos de
datos que además de tener características parecidas a las de las familias de números también
sirven para determinar la cantidad de memoria que debe alocarse, reservarse para cada constante
y/o variable.

Existen dos categorías para los tipos de datos: simples y derivados. Entre estos últimos
podemos encontrar:
- Arreglos (arrays)
- Cadenas (strings)
- Apuntadores (Pointers)
- Estructuras (Structures)

4.1. Tipos de datos simples

Los tipos simples representan tipos que no pueden dividirse en elementos más básicos y
que son el modelo para datos elementales a nivel de máquina. La unidad básica de memoria en
mikroBasic for PIC tiene un tamaño de 8-bits, un byte, esto quiere decir que los demás tipos de
datos se creando al hacer combinaciones de bytes. Así se tienen los siguientes tipos:

Operador Tamaño Rango


bit 1-bit 0ó1
sbit 1-bit 0ó1
byte, char 8-bit 0 .. 255
short 8-bit -128 .. 127
word 16-bit 0 .. 65,535
integer 16-bit -32,768 .. 32,767
longword 32-bit 0 .. 4,294,967,295
longint 32-bit -2,147,483,648 .. 2,147,483,647
float, double 32-bit ±2.17549435082 * 10-38 hasta ±6.80564774407 * 1038

29
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

En la tabla anterior, se pueden observar dos tipos de datos cuyos tamaño es un 1-bit,
esto es porque el compilador puede manejar individualmente cada bit de un byte y se
aprovecha esta cualidad para crear este tipo, que resulta útil en casos donde el dato que se va a
guardar solo tiene dos valores posibles.

Cada tipo se emplea de acuerdo al dato a guardar y/o manejar, para los tipos byte y
char el dato o información a guardar debe estar entre 0 y 255, además de que tiene que ser
entero. Un ejemplo práctico es cuando se quiere guardar la información de que cantidad de
carros que hay en un parqueo, también los dígitos de una contraseña o un carácter (letra) de
un nombre.

El tipo short tiene un rango desde -128 hasta 127, es decir que a diferenciar de los tipos
byte y char, admite números negativos. Se puede emplear en casos donde la información
representa ausencia o presencia de algo, por ejemplo 5 estudiantes faltaron a una clase donde
el total son 30 estudiantes, esta información podría ser guardada en un variable con el valor de
-5. Otro ejemplo es la cantidad de días que faltan para terminar el mes o el número de
bombillas en un edificio, donde si el número es negativo indica que hacen falta, si es positivo es
que sobran y si es cero, es que están completas.

El tipo word tiene un rango de 0 hasta 65 535, esta formado por 2 bytes y el longword
va desde 0 hasta 4 294 967 295, esta formado por 4 bytes, ambos tipos poseen las mismas
características que los tipos byte y char.

El tipo integer tiene un rango de -32 768 hasta 32 767, esta formado por 2 bytes y el
tipo longint va desde -2 147 483 648 hasta 2 147 483 647, esta formado por 4 bytes, ambos
poseen las mismas características que el tipo short.

Los tipos float y double tienen un rango desde ±2.17549435082 * 10-38 hasta
±6.80564774407 * 1038, están formados por 4 bytes y se emplean para guardar y/o manipular
información que tenga punto flotante o decimal. Un ejemplo puede ser para guardar cual es la
temperatura en una habitación, la cantidad de agua en un recipiente y situaciones parecidas
donde no siempre se pueden representar la información con números enteros.

Para declarar un tipo de dato se hace en esta forma dim nombre_variable as tipo_dato.
Ejemplo:

dim listo as bit


dim carros as word
dim temperatura as float

30
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

4.2. Tipos de datos derivados

Los tipos de datos derivados también se conocen como tipos estructurados. Se utilizan para
crear tipos de datos complejos definidos por el usuario.

4.2.1. Arreglos (Arrays)

Un arreglo representa una colección indexada de elementos de un mismo tipo de dato.


Indexado quiere decir que el conjunto esta organizado de forma tal que cada elemento se puede
identificar por medio de un número, donde el primer elemento del arreglo se identifica con el
índice 0. Esto es como en un edificio de apartamentos de 5 pisos, donde cada piso es un elemento
del edificio, el primer piso esta la posición 0, el segundo en la posición 1, … y el último en la
posición 4.

dim samples as word[10]

main:
' Para accesar a un elemento de un arreglo de variables ..
samples[3] = 1500 ' Asigna el valor 1500 al 4to elemento del arreglo

Arreglos Multi-dimensionales

Los arreglos multi-dimensionales se construyen al declarar arreglos de un tipo de arreglo.


Por ejemplo, un arreglo bi-dimensional:

dim m as byte[5][10] ' Arreglo de tamaño 5x10

main:
' Para accesar a un elemento de un arreglo de variables ..
m[3][0] = 1 ' Asigna el valor 1 al 1er elemento de la 4ta fila

Como ejemplo, teniendo el mismo edificio de apartamentos que en la parte anterior,


suponiendo que cada piso posee 3 apartamentos, entonces el apartamento A del piso 1 esta en la
posición 0, el B del mismo piso en la posición 1 y el C en la posición 2. Entonces para referirse al
apartamento B del tercer piso sería Apartamento[2][1], donde el primer número indica que el piso
esta en la posición 2 y el apartamento esta en la posición 1.

31
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

4.2.2. Cadenas (Strings)

Una cadena representa una secuencia de caracteres equivalentes a un arreglo del tipo
char. El tipo char se emplea para guardar caracteres alfanumericos, que a menudo son
mostrados en una pantalla.

La representación de cada carácter del alfabeto esta dada por el código ASCII, que es un
estándar para la transmisión de información, donde cada carácter tiene un número asignado.
La mayoría de las persona que utilizan el idioma español y han estado frente a una
computadora, en algún momento se han encontrado con el problema de que la letra ñ no esta
en el teclado, o tienen la necesidad de poner la tilde a una vocal o colocar el carácter @ y
como solución a esto presionan Alt + 64 para @, Alt + 164 para ñ, Alt + 160 para á. Estos
números que se presionan en conjunto con la tecla Alt son los números que representan cada
carácter.

Caracteres de control ASCII

Estos caracteres se reservan para caracteres de control: códigos no pensados


originalmente para representar información imprimible, sino para controlar dispositivos (como
impresoras) que usaban ASCII.

Ejemplo, el carácter 10 representa la función “nueva línea” (line feed), que hace que una
impresora avance el papel, y el carácter 27 representa la tecla “escape” que a menudo se
encuentra en la esquina superior izquierda de los teclados comunes.

32
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Binario Decimal Hex Abreviatura Repr AT Nombre/Significado


0000 0000 0 0 NUL ␀ ^@ Carácter Nulo
0000 0001 1 1 SOH ␁ ^A Inicio de Encabezado
0000 0010 2 2 STX ␂ ^B Inicio de Texto
0000 0011 3 3 ETX ␃ ^C Fin de Texto
0000 0100 4 4 EOT ␄ ^D Fin de Transmisión
0000 0101 5 5 ENQ ␅ ^E Consulta
0000 0110 6 6 ACK ␆ ^F Acuse de recibo
0000 0111 7 7 BEL ␇ ^G Timbre
0000 1000 8 8 BS ␈ ^H Retroceso
0000 1001 9 9 HT ␉ ^I Tabulación horizontal
0000 1010 10 0A LF ␊ ^J Salto de línea
0000 1011 11 0B VT ␋ ^K Tabulación Vertical
0000 1100 12 0C FF ␌ ^L De avance
0000 1101 13 0D CR ␍ ^M Retorno de carro
0000 1110 14 0E SO ␎ ^N Mayúsculas fuera
0000 1111 15 0F SI ␏ ^O En mayúsculas
0001 0000 16 10 DLE ␐ ^P Enlace de datos / Escape
0001 0001 17 11 DC1 ␑ ^Q Dispositivo de control 1 — oft. XON
0001 0010 18 12 DC2 ␒ ^R Dispositivo de control 2
0001 0011 19 13 DC3 ␓ ^S Dispositivo de control 3 — oft. XOFF
0001 0100 20 14 DC4 ␔ ^T Dispositivo de control 4
0001 0101 21 15 NAK ␕ ^U Confirmación negativa
0001 0110 22 16 SYN ␖ ^V Síncrono en espera
0001 0111 23 17 ETB ␗ ^W Fin de Transmisión del Bloque
0001 1000 24 18 CAN ␘ ^X Cancelar
0001 1001 25 19 EM ␙ ^Y Finalización del Medio
0001 1010 26 1A SUB ␚ ^Z Substituto
0001 1011 27 1B ESC ␛ ^[ or ESC Escape
0001 1100 28 1C FS ␜ ^\ Separador de fichero
0001 1101 29 1D GS ␝ ^] Separador de grupo
0001 1110 30 1E RS ␞ ^^ Separador de registro
0001 1111 31 1F US ␟ ^_ Separador de unidad
0111 1111 127 7F DEL ␡ ^?, Delete o Backspace Eliminar

33
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Caracteres imprimibles ASCII

El carácter 'espacio', designa al espacio entre las palabras, y se produce normalmente


por la barra espaciadora de un teclado. Los códigos del 33 al 126 se conocen como caracteres
imprimibles, y representan letras, dígitos, signos de puntuación y varios símbolos.

Binario Dec Hex Representación Binario Dec Hex Representación


0010 0000 32 20 espacio ( ) 0100 0000 64 40 @
0010 0001 33 21 ! 0100 0001 65 41 A
0010 0010 34 22 " 0100 0010 66 42 B
0010 0011 35 23 # 0100 0011 67 43 C
0010 0100 36 24 $ 0100 0100 68 44 D
0010 0101 37 25 % 0100 0101 69 45 E
0010 0110 38 26 & 0100 0110 70 46 F
0010 0111 39 27 ' 0100 0111 71 47 G
0010 1000 40 28 ( 0100 1000 72 48 H
0010 1001 41 29 ) 0100 1001 73 49 I
0010 1010 42 2A * 0100 1010 74 4A J
0010 1011 43 2B + 0100 1011 75 4B K
0010 1100 44 2C , 0100 1100 76 4C L
0010 1101 45 2D - 0100 1101 77 4D M
0010 1110 46 2E . 0100 1110 78 4E N
0010 1111 47 2F / 0100 1111 79 4F O
0011 0000 48 30 0 0101 0000 80 50 P
0011 0001 49 31 1 0101 0001 81 51 Q
0011 0010 50 32 2 0101 0010 82 52 R
0011 0011 51 33 3 0101 0011 83 53 S
0011 0100 52 34 4 0101 0100 84 54 T
0011 0101 53 35 5 0101 0101 85 55 U
0011 0110 54 36 6 0101 0110 86 56 V
0011 0111 55 37 7 0101 0111 87 57 W
0011 1000 56 38 8 0101 1000 88 58 X
0011 1001 57 39 9 0101 1001 89 59 Y
0011 1010 58 3A : 0101 1010 90 5A Z
0011 1011 59 3B ; 0101 1011 91 5B [
0011 1100 60 3C < 0101 1100 92 5C \
0011 1101 61 3D = 0101 1101 93 5D ]
0011 1110 62 3E > 0101 1110 94 5E ^
0011 1111 63 3F ? 0101 1111 95 5F _

34
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Binario Dec Hex Representación


0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~

Para asignar valor a una variable tipo char se puede hacer de dos maneras, una es asignar
el carácter directamente entre comillas dobles, = “a”, y la otra es asignarle el número
correspondiente a ese carácter, = 97. Si se asigna cualquiera de estos dos valores a una variable y
se imprime, en la pantalla aparecerá la letra a.

35
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Por ejemplo,

dim mensaje as string[20]

main:
mensaje = “Hola Mundo!”

Al momento de emplear este tipo se debe contemplar cual es la cantidad máxima de


caracteres que tendra la información a guardar. En el ejemplo pasado la variable mensaje tiene
suficiente espacio para guardar el texto “Hola Mundo!”, que posee un total de 11 caracteres. Es
importante recalcar que el texto a guardar se coloca entre comillas dobles.

4.2.3. Apuntadores (Pointers)

Un apuntador es un tipo de dato que almacena una dirección de memoria. Mientras que
una variable accesa el contenido de una dirección de memoria directamente, un apuntador sólo
contiene la dirección de memoria per se.

Para declarar un tipo de dato apuntador, se agrega el símbolo (^) antes del tipo. Por
ejemplo, para crear un apuntador a un word:

dim p as ^word

Para accesar el dato en la dirección de memoria a la que apunta un apuntador, agregue


el símbolo (^) después del nombre de la variable. Por ejemplo, para asignarle el valor 5, al
registro de memoria al que apunta el apuntador p, en este caso la posición de memoria dónde
se aloja la variable b:

dim p as ^word
dim a as word
dim b as word

p = @b
p^ = 5

36
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

4.2.4. Estructuras (Structures)

Una estructura representa un juego heterogeneo de elementos. Cada elemento es llamado


un miembro; la declaración de una estructura específica un tipo de datos y un nombre para cada
miembro. Por ejemplo:

structure dot
dim x as float
dim y as float
end structure

dim m as dot ' La estructura se aloca en memoria sólo si es instanciada

' Una estructura también puede contener tipos de datos derivados


structure circle
dim radius as float
dim center as dot
end structure

dim circle1, circle2 as circle

main:
circle1.radius = 3.7
circle1.center.x = 5.4
circle1.center.y = 0.0

m.x = 236.985

' También es posible realizar asignaciones entre variables complejas si son


del mismo tipo
circle2 = circle1 ' Esto copiará el valor de todos los miembros

37
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

5. Tokens

Un token es el elemento más pequeño de un programa con sentido para el compilador.

mikroBasic reconoce los siguientes tipos de tokens:


- Palabras clave (keywords)
- Identificadores (identifiers)
- Constantes (constants)
- Operadores (operators)
- Separadores (punctuators/separators)

Ejemplo de extracción de tokens por parte del compilador.

Fíjese en la siguiente línea de código (sentencia):

my_var = 0

El compilador identificaría los siguientes 4 tokens:

my_var ' como identificador de variable


= ' como operador de asignación
0 ' como literal ó constante
nueva línea ' como terminador de la sentencia.

5.1. Identificadores (Identifiers)

Son nombres arbitrarios de cualquier longitud dados a funciones, procedimientos,


variables, constantes simbólicas, tipos de datos definidos por el usuario y etiquetas.

Los Identificadores pueden contener letras desde la A hasta la Z (en mayúsculas y/o
minúsculas), el carácter guión bajo “_” y los dígitos del 0 al 9. El primer carácter siempre debe
ser una letra o el guión bajo, es decir, un identificador no puede comenzar con un número.

mikroBasic no distingue entre mayúsculas y minúsculas, de manera que Sum, sum y sUM
son identificadores equivalentes. Utilizar nombres duplicados para designar distintos
Identificadores dentro de un mismo alcance (scope) no está permitido.

38
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

5.2. Palabras clave (Keywords)

Son palabras de propósito especial que están reservadas por el compilador y no pueden
utilizarse como nombres de identificadores normales.

Además de las palabras claves estándares de BASIC, todos los Registros de Funciones
Especiales (SFR – Special Function Registers) del microcontrolador seleccionado están definidos
como variables globales y representan palabras reservadas que no pueden ser re-definidas (por
ejemplo: PORTA, TRISA, TMR0, etc.)

También, otras palabras reservadas pudieran estar presentes en función de las librerías que
tenga habilitadas en su proyecto.

5.3. Literales

Son tokens que representan un valor numérico fijo o de caracteres (son constantes). El tipo
de dato de una constante es deducido por el compilador mediante el valor numérico y el formato
utilizado.

5.3.1. Literales Enteros (Integer Literals)

Los valores enteros pueden ser representados en decimal, hexadecimal o notación binaria.

11 ' literal decimal 11


$11 ' literal hexadecimal, equivale a 17 decimal
0x11 ' literal hexadecimal, equivale a 17 decimal
%11 ' literal binario, equivale a 3 decimal

El valor máximo de un literal es aquel impuesto por el tipo de dato más grande en
mikroBasic (longword). Es decir 4,294,967,295 (0xFFFFFFFF).

5.3.2. Literales de Punto Flotante (Floating Point Literals)

Las constantes de punto flotante están limitadas al rango desde ±2.17549435082 * 10 -38
hasta ±6.80564774407 * 1038.

39
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

0. ' = 0.0
-2.23 ' = -2.23
23.45e6 ' = 23.45 * 10^6
2e-5 ' = 2.0 * 10^-5
3E+10 ' = 3.0 * 10^10
.09E34 ' = 0.09 * 10^34

5.3.3. Literales de Carácter

Es un caracter del juego de caracteres extendidos ASCII, encerrado entre comillas (por
ejemplo, “A”).

5.3.4. Literales de Cadena (String Literals)

Son una secuencia de caracteres del juego de caracteres extendidos ASCII, encerrado
entre comillas.

“Hello world!” ' 12 caracteres de longitud


“ ” ' 2 caracteres de longitud
“” ' cadena nula, 0 caracteres de longitud

5.4. Operadores (Operators)

Los operadores son tokens que inician alguna computación (operación lógica o
matemática) cuando son aplicados a variables y otros objetos en una expresión.

Existen cuatro tipos de operadores en mikroBasic:

- Operadores Aritméticos
- Operadores Bit a Bit (Bitwise Operators)
- Operadores Boleanos (Boolean Operators)
- Operadores Relacionales

5.4.1. Operadores Aritméticos

Los operadores aritméticos son utilizados para realizar computaciones matemáticas.


Tienen operandos numéricos y retornan resultados numéricos.

40
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Todos los operadores aritméticos se asocian de izquierda a derecha.

Operador Operación Operandos Resultado


byte, short, word, byte, short, word,
+ suma integer, longint, integer, longint,
longword, float longword, float
byte, short, word, byte, short, word,
- resta integer, longint, integer, longint,
longword, float longword, float
byte, short, word, word, integer,
* multiplicación integer, longint, longint, longword,
longword, float float
byte, short, word,
/ división (punto-flotante) integer, longint, float
longword, float
división, (redondeada hacia byte, short, word, byte, short, word,
div abajo al entero más integer, longint, integer, longint,
cercano) longword longword

módulo, (retorna el residuo byte, short, word, byte, short, word,


mod de una división de enteros, integer, longint, integer, longint,
div) longword longword

División entre Cero

Si se utiliza 0 (cero) explicitamente como divisor (por ejemplo: x div 0), el compilador
reportará un error de compilación.

Sin embargo, en el caso de una división implicita por cero: x div y, donde y es 0 (cero), el
resultado será el entero máximo del tipo de dato del resultado (es decir 255, si el resultado es del
tipo byte; 65535, si el resultado es del tipo word; etc.)

Operadores Aritméticos Unarios

El operador – puede usarse como operador unario de prefijo para cambiar el signo de un
valor con signo. Por ejemplo:

b = -c ' Si c=5, entonces b=-5

41
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

5.4.2. Operadores Bit a Bit (Bitwise Operators)

Se utilizan para modificar los bits individuales de operandos numéricos.

Los Operadores Bit a Bit se asocian de izquierda a derecha, con la excepción el operador
de complemento not, el cual se asocia de derecha a izquierda.

Operador Operación
AND bit a bit; realiza la operación lógica AND entre cada bit de ambos operandos.
and
Retorna 1, si ambos bits son 1, de lo contrario, retorna 0.
OR bit a bit; realiza la operación lógica OR entre cada bit de ambos operandos.
or
Retorna 1, si cualquiera de los bits es 1, si ambos son 0, retorna 0.
OR exclusiva bit a bit; realiza la operación lógica XOR entre cada bit de ambos
xor
operandos. Retorna 1, si ambos bits son distintos, de lo contrario, retorna 0.
not Complemento bit a bit (unario); invierte el valor de cada bit.
Desplazar a la izquierda; mueve los bits hacia la izquierda, descartando el bit del
<<
extremo izquierdo y asignando 0 al del extremo derecho.
Desplazar a la derecha; mueve los bits hacia la derecha, descartando el bit del
>> extremo derecho y asignando 0 al del extremo izquierdo (si es un dato sin signo). Si
el dato posee signo, entonces el signo se extiende.

Por ejemplo:

0x1234 and 0x5678 ' es igual a 0x1230

' porque ...

' 0x1234 : 0001 0010 0011 0100


' 0x5678 : 0101 0110 0111 1000
' –---------------------------
' and : 0001 0010 0011 0000

' ... lo que es igual a 0x1230

' De igual forma:

0x1234 or 0x5678 ' es igual a 0x567C


0x1234 xor 0x5678 ' es igual a 0x444C
not 0x5678 ' es igual a 0xEDCB

42
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Para los casos de los operadores de desplazamiento:

dim a as byte
dim b as short
dim c as word

a = 16 ' binario : 0001 0000


b = -8 ' binario : 1111 1000
c = %0011001100010001

a = a << 2 ' a será igual a 64, es decir 0100 0000


b = b >> 1 ' b será igual a -4, es decir 1111 1100
c = c >> 5 ' c será igual a 0000 0001 1001 1000

5.4.3. Operadores Booleanos (Boolean Operators)

A pesar de que mikroBasic no soporta el tipo de dato boolean, usted posee los operadores
booleanos a su disposición para construir expresiones condicionales complejas. Estos operadores
responden a la lógica booleana estándar y retornan ya sea TRUE (verdadero) ó FALSE (falso).

Operador Operación
and AND lógica
or OR lógica
xor OR exclusiva lógica
not Negación lógica

Los operadores booleanos se asocian de izquierda a derecha, con la excepción el operador


de negación not, el cual se asocia de derecha a izquierda.

if ((a > b) and (c = FALSE)) then


' ...

while (not b) or (c > 100)


' ...

43
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

5.4.4. Operadores Relacionales

Utilice los operadores relacionales para probar la igualdad o inigualdad de las


expresiones. Todos los operadores relacionales devuelven TRUE (verdadero) ó FALSE (falso), y
todos se asocian de izquierda a derecha.

Operador Operación
= Igual a
<> Distinto de
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

La precedencia de los operadores aritméticos y relaciones está designada de manera


que permite que expresiones complejas sin paréntesis tengan el significado esperado:

if a + 5 >= b – 2.0 / c then ' igual que: (a + 5) >= (b – (2.0 / c))


z = Mi_Func()
end if

6. Expresiones

Una expresión es una secuencia de operadores, operandos y separadores que retornan


un valor. Por ejemplo,

c * (a + 5)

Las expresiones primarias incluyen: literales, constantes, variables y llamados de


funciones. A partir de estos, utilizando operadores, es posible crear expresiones más complejas.

Las expresiones son evaluadas de acuerdo a ciertas reglas de conversión, agrupamiento,


asociatividad y precedencia que dependen de los operadores en uso, la presencia de paréntesis
y los tipos de datos de los operandos.

44
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

Evaluación de las Expresiones

Regla General

Las expresiones son evaluadas de acuerdo con el operando de la derecha. Las operaciones
se realizan en el nivel de operando más alto, con los operandos con signos tomando precedencia.
Por ejemplo,

dim a as byte
dim b as word
dim c as integer

a * b ' en el nivel word


a * c ' en el nivel integer
b * c ' en el nivel integer

Excepción del lado izquierdo

En una sentencia de asignación con una expresión aritmética, el lado izquierdo es


considerado de la siguiente manera:

Si el tamaño en bytes de la variable de la izquierda es mayor que el tamaño del operando


mayor, entonces la evaluación se realiza un nivel por encima del operando mayor (para obtener los
cálculos correctos). Por ejemplo:

dim a as longword
dim b as byte

a = b * 5 ' esto se realiza en el nivel word


a = b * 5000 ' esto se realiza en el nivel longword

Expresiones condicionales

Las expresiones condicionales pueden diferir del mismo código en sentencias de asignación
(debido a la excepción del lado izquierdo). Por ejemplo,

45
INTRODUCCIÓN A LA PROGRAMACIÓN DE MICROCONTROLADORES PIC USANDO mikroBasic

dim a as longword
dim b as byte

if b*5 then ' se realiza en el nivel byte, no dará el mismo resultado que...

a = b * 5 ' se realiza en el nivel word por la excepción del lado izq.

Encasillamiento Explícito (Explicit Typecasting)

Cualquier expresión puede ser evaluada a un nivel específico mediante el uso de


encasillamiento explícito. Partiendo del ejemplo anterior, para obtener el mismo cálculo en la
expresión condicional, podría hacerse lo siguiente:

if (word(b*5)) then ' se realiza en el nivel word

7. Sentencias
8.

46