Está en la página 1de 15

UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

UNIVERSIDAD PÚBLICA DE EL ALTO


INGENIERÍA DE SISTEMAS
INGENIERÍA DE CONTROL LABORATORIO No. 4

PROGRAMACION EN LENGUAJE C, MIKROC


1. OBJETIVO
✓ Conocer creación de proyectos, Realizar la Edición, Compilación y Depuración de un programa en el IDE
MikroC en lenguaje Ensamblador
✓ Mostrar en simulación Virtual y también en Hardware su funcionamiento de los ejemplos propuestos.

2. EQUIPOS Y MATERIALES
✓ PC equipado con: MikroC Pro for PIC v.7.6, Proteus última versión y otros
✓ Guía de laboratorio y manual de Microcontrolador Pic18F4550
✓ Grabador Bootloader
✓ Otros

3. MARCO TEÓRICO
3.1. COMPILADOR MIKROC PRO

La programación de microcontroladores se basa en un código de máquina que es conocido como código


ensamblador, este código contiene una a una las instrucciones del programa, este código ensamblador o también
conocido como código assembler es minucioso, y tedioso de editar. El assembler crea códigos de programa
extensos y de difícil comprensión.
La creación de compiladores de alto nivel facilitó la edición y creación de programas en todo modo de
programación lógica, por supuesto los microcontroladores no fueron la excepción, comercialmente existen
varios compiladores de diferentes fabricantes y diferentes lenguajes de alto nivel. Es posible adquirir
compiladores como el PICC, CCS, PIC Basic, entre otros. El estudio de este guía se centra en el compilador
MikroC PRO, que es un compilador en lenguaje C para microcontroladores PIC Micro de la familia 12F, 16F,
y 18F. MikroC PRO es un paquete de software con una amplia variedad de ayudas y herramientas que facilita
la creación de proyectos y aplicativos para los microcontroladores PIC Micro. El estudio de este entorno de
desarrollo es posible debido a que el estudiante puede descargar una versión demo o estudiantil, que tiene las
mismas características de la versión completa, la única limitación es la dimensión del código de máquina que
no puede exceder 2K bytes, sin embargo es una capacidad suficiente al tratarse de un prime aprendizaje. La
versión demo se puede descargar de la página: www.mikroe.com.

3.2. CREACIÓN DE PROYECTO EN MIKROC PRO FOR PIC


1) Crear una carpeta con nombre “LAB. INGENIERIA DE CONTROL” en mi escritorio
2) Abrir software mikroC PRO for PIC v 7.5

1
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

3) Cerrar cualquier proyecto previo: ‘Project – Close Project’


4) Crear un nuevo Proyecto: ‘Project – New Project’ o la combinación de teclas Shift+Ctrl+N y presione
‘Next’

5) ‘Configuración del Proyecto’: llenar los datos como indica la figura y luego presionar ‘Open Edit Project
window to set Configuration bits’. Next

6) ‘Añadir archivos’: Si se disponen de librerías o módulos adicionales se pueden agregar en este punto. Las
prácticas de laboratorio no incluyen dichos elementos por lo que basta con presionar. Finish

7) ‘3. Librerías’: Se usará la opción por omisión ‘Include All (Default)’ en las prácticas de laboratorio.
Presionar

8) El Wizard ha terminado y MikroC genera la plantilla para iniciar todos los proyectos a realizar en esta
asignatura.

9) El Wizard ha terminado y MikroC genera la plantilla para iniciar todos los proyectos a realizar en esta
asignatura

2
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

10) Compilar el programa seleccionando del menú ‘Build – Build ‘ (también se puede digitar Ctrl+9 o hacer
click en el ícono)

11) En la ventana de Mensajes (parte inferior de la pantalla) aparecerá el resultado de la compilación. En caso
de no existir errores, indicará un mensaje de Compilación Exitosa (se genera el archivo .hex en el folder
del proyecto), así como el tamaño en ROM y RAM del código resultante. Si existen errores de sintaxis
se indicarán en líneas rojas indicando el número de línea y el tipo de error. Además, en el editor aparecerán
las líneas de código donde se encontraron errores de sintaxis.

3.3. PROGRAMAR LOS PIC UTILIZANDO MIKROC PRO FOR PIC


Lenguaje mikroC, especialmente diseñado para programar los PIC. Ahora, lo que hemos revisado es suficiente
para empezar a programar, 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.). Por extensión,
IDE es a veces llamado compilador. En esta sección le enseñaremos lo básico que debe saber para empezar a
desarrollar su primer proyecto en mikroC utilizando el IDE del compilador mikroC PRO for PIC. Aparte de
todas las características comunes de cualquier IDE, mikroC PRO for PIC contiene las informaciones de
arquitectura de los microcontroladores PIC (registros, módulos de memoria, funcionamiento de circuitos
particulares etc.) para compilar y generar un archivo legible por un microcontrolador PIC. Además, incluye las
herramientas específicas para programar los microcontroladores PIC. El proceso de crear y ejecutar un proyecto
contiene los siguientes pasos:
✓ Crear un proyecto (nombre de proyecto, configuración de proyecto, dependencias entre archivos)
✓ Editar un programa
✓ Compilar el programa y corrección 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 Universal.

INSTALAR MIKROC PRO FOR PIC


Antes que nada, usted debe instalar el compilador (con su IDE) en la PC. La instalación del mikroC PRO for
PIC es similar a la instalación de cualquier programa en Windows.
Basta con seguir las instrucciones y pulsar sobre Next, OK, Next, Next...

3
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

CARACTERÍSTICAS PRINCIPALES DEL MIKROC PRO FOR PIC


Al iniciar el IDE del compilador mikroC PRO for PIC por primera vez, aparecerá una ventana como se muestra
a continuación:

MANEJAR LOS PROYECTOS


Antes de empezar a escribir el código, usted debe crear un proyecto. Un programa escrito en el compilador
mikroC PRO for PIC no es un archivo fuente autónomo, sino que forma parte de un proyecto que incluye un
código hex, un código ensamblador, cabecera y otros archivos. Algunos de ellos se requieren para compilar el
programa, mientras que otros se crean durante el proceso de compilación. Un archivo con extensión .mcppi le
permite abrir cualquiera de estos proyectos. Para crear un proyecto, basta con seleccionar la opción Project/New
Project, y un wizard aparecerá automáticamente. ¿Qué hacer entonces? Siga las instrucciones...

PROJECT MANAGER (ADMINISTRADOR DEL PROYECTO)


Una vez creado el proyecto, es posible manejar todos los archivos que contiene al utilizar la ventana Project
Manager. Basta con pulsar con el botón derecho del ratón sobre una carpeta y seleccionar la opción que necesita
para su proyecto.

PROJECT SETTINGS (CONFIGURACIÓN DE PROYECTOS)


Al compilar un proyecto, el compilador genera el archivo .hex que se cargará en el microcontrolador. Estos
archivos serán diferentes lo que depende del tipo del microcontrolador así como del propósito de la compilación.
Por esta razón es necesario ajustar algunos parámetros de proyectos utilizando la ventana Project Settings.
DEVICE (dispositivo): Al seleccionar el tipo de microcontrolador a utilizar permite al compilador extraer el
archivo de definición (archivo .def) asociado. El archivo de definición de un microcontrolador contiene las
informaciones específicas de sus registros SFR, de sus direcciones de memoria y algunas variables de
programación específicas a ese tipo del microcontrolador. Es obligatorio crear un archivo .hex compatible.

4
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

OSCILLATOR (oscilador): Se debe especificar la velocidad de operación del microcontrolador. Por supuesto,
este valor depende del oscilador utilizado. El compilador la necesita para compilar rutinas, lo que requiere
información del tiempo (por ejemplo, la función Delay_ms). Más tarde, el programador necesitará esta
información también. La velocidad de operación 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 análisis sintáctico
(parsing), compilar, enlazar (linking) y generar los archivos .hex. El tipo de compilación le permite ajustar el
modo de compilación. Dependiendo del modo seleccionado, difieren los archivos generados a cargar en el
microcontrolador. Release: Al elegir esta opción, el compilador no puede afectar más a la ejecución de programa
después de la compilación. El programa a cargar en el microcontrolador no será modificado de ninguna manera.
ICD debug: Al elegir esta opción, una vez completado el proceso de la compilación 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 todavía puede afectar a su funcionamiento. El archivo .hex generado contiene los
datos adicionales que permiten el funcionamiento del depurador. 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 de un microcontrolador real. El simulador no utiliza los dispositivos
reales para simular el funcionamiento del microcontrolador, así que algunas operaciones no pueden ser
reproducidas (por ejemplo, interrupción). De todos modos, resulta más rápido depurar un programa por medio
de un simulador. Además, no se requiere ningún dispositivo destino. Note que es posible modificar cualquier
configuración en cualquier momento mientras se edita el programa. No se olvide de recompilar y reprogramar
su dispositivo después de modificar una configuración.

3.4. LIBRARY MANAGING (EDITOR DE LIBRERÍAS)


El compilador tiene que conocer todas las dependencias de su archivo fuente en mikroC para compilarlo
apropiadamente. Por ejemplo, si las librerías forman parte de su proyecto, debe especificar cuáles de ellas se
utilizan. Las librerías contienen un gran número de funciones listas para ser utilizadas. Las librerías en mikroC
proporcionan muchas facilidades para escribir programas para los microcontroladores PIC. Abra la ventana
Library Manager, y marque las que quiere utilizar en el programa. Al marcar una librería, se añade
automáticamente al proyecto y se enlaza durante el proceso de la compilación. Así, no necesita incluir las
librerías manualmente en sus archivos del código fuente por medio de la directiva del preprocesador #include.

EDITAR Y COMPILAR PROGRAMAS


CODE EDITOR (editor de código), El proceso de editar programas se debe realizar dentro de la ventana
principal del IDE denominada Code Editor. Al escribir el programa no se olvide de los comentarios. Los
comentarios son muy importantes para depurar y mejorar el programa. Además, 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 tamaño, no vacile en utilizar los espacios en blanco
para hacer su código más legible.

5
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

Al escribir un programa, no espere que termine la redacción del programa para compilarlo. Compile su código
de forma regular con el propósito de corregir cuánto más errores de sintaxis. Asimismo usted puede compilar
su programa cada vez que se complete la redacción de una nueva función así como probar su comportamiento
al utilizar modo de depuración (ver la próxima sección). De este modo, resulta más fácil solucionar los errores
de programa para no “tomar un camino erróneo” en redactar su programa. De lo contrario, usted tendrá que
editar el programa entero.

CODE EXPLORER (EXPLORADOR DEL CÓDIGO), La ventana Code Explorer le permite localizar
funciones y procedimientos dentro de los programas largos. Por ejemplo, si usted busca una función utilizada
en el programa, basta con pulsar dos veces sobre su nombre en esta ventana, y el cursor estará automáticamente
posicionado en la línea apropiada en el programa.
COMPILAR Y SOLUCIONAR LOS ERRORES, Para compilar su código, pulse sobre la opción Build en
el menú Project. En realidad, el proyecto entero se ha compilado, y si la compilación se ha realizado con éxito,
se generarán los archivos de salida (asm, .hex etc.). Una compilación se ha realizado con éxito si no se ha
encontrado ningún error. Durante el proceso de compilación se generan muchos mensajes que se visualizan en
la ventana Messages. Estos mensajes consisten en información, advertencia y errores. Cada error encontrado se
asocia con su línea de programa y su descripción. Como un error en su código puede generar mucho más errores,
simplemente debe intentar solucionar el primer error en la lista y después recompile su programa. En otras
palabras, es recomendable solucionar los errores uno a uno.

DEPURAR EL PROGRAMA
La depuración es un paso muy importante ya que permite probar el programa después de una compilación
realizada con éxito, o solucionar los errores descubiertos mientras se ejecuta 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 depuración es el mismo sin reparar en el modo elegido. En caso de elegir
la opción ICD debug, hay que cargar el programa en el microcontrolador antes de depurarlo. Para iniciar la
depuración, pulse sobre la opción Start debugger del menú Run. El editor del código será ligeramente
modificado automáticamente y aparecerá una ventana denominada Watch Values. El principio de depuración 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 cálculo y ver si algo inesperado ha ocurrido. Al ejecutar
el programa paso a paso, podrá localizar los problemas con facilidad. Durante una depuración el programa será
modificado, por lo que usted siempre debe recompilar el programa después de cada corrección, y reiniciar el
depurador para comprobar qué ha sido modificado.

COMANDOS DEL DEPURADOR


Hay varios comandos disponibles para depurar el código:
- Step Into - Ejecuta una sola instrucción. Cuando la instrucción es una llamada a una rutina, el depurador
hará un salto a la rutina y se detendrá después de ejecutar la primera instrucción dentro de la rutina.

6
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

- Step Over - Se ejecuta una sola instrucción. Cuando la instrucción es una llamada a una rutina, el depurador
no hará un salto a la rutina, sino que se ejecutará toda la rutina. El depurador se detiene a la primera
instrucción después de la llamada a la rutina.
- Run To Cursor - El programa se ejecuta hasta la línea en la que se encuentre el cursor.
- Step out - Se ejecutan las demás instrucciones dentro de la rutina. El depurador se detiene inmediatamente
al salir de la rutina.

PUNTOS DE RUPTURA (BREAKPOINTS)


Los puntos de ruptura hacen el proceso de depurar los programas de una manera más eficiente, puesto que
permiten ejecutar el programa a toda velocidad y detenerlo automáticamente en una línea específica (punto de
ruptura). Eso resulta muy útil, permitiéndole comprobar sólo las partes críticas del programa y no perder el
tiempo probando todo el programa línea a línea. Para añadir o quitar un punto de ruptura basta con pulsar sobre
la línea apropiada en el lado izquierdo del editor del código, o presionar [F5]. Una pequeña ventana denominada
Breakpoints muestra dónde están los puntos de ruptura. Note que las líneas designadas como puntos de ruptura
están marcadas en rojo. La línea 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
ejecutar la parte de programa desde la línea en la que está el cursor hasta el punto de ruptura, utilice el comando
Run/Pause Debugger.

VENTANA WATCH VALUES


El depurador software y hardware tienen la misma función de monitorear el estado de los registros durante la
ejecución del programa. La diferencia es que el depurador software simula ejecución de programa en una PC,
mientras que el depurador ICD (depurador hardware) utiliza un microcontrolador real. Cualquier cambio de
estado lógico de los pines se indica en el registro (puerto) apropiado. Como la ventana Watch Values permite
monitorear el estado de todos los registros, resulta fácil comprobar si un pin está a cero o a uno. La última
modificación está marcada en rojo en la ventana Watch Values. Esto le permite localizar la modificación en la
lista de variables y registros durante el proceso de la depuración.

Para visualizar esta ventana es necesario seleccionar la opción View/Debug Windows/Watch Values. Entonces
usted puede hacer una lista de registros/variables que quiere monitorear y la manera de visualizarlos.

STOPWATCH (CRONÓMETRO)
Si quiere saber cuánto tiempo tarda un microcontrolador en ejecutar una parte del programa, seleccione la opción
Run/View Stopwatch. Aparecerá una ventana como se muestra en la figura a la derecha. ¿Cómo funciona un
cronómetro? Eso es pan comido... El tiempo que tarda un comando (step into, step over, run/pause etc.) en
ejecutarse por el depurador se mide automáticamente y se visualiza en la ventana Stopwatch. Por ejemplo, se
mide tiempo para ejecutar un programa, tiempo para ejecutar el último paso etc.

7
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

3.5. DECLARACIÓN DE VARIABLES EN LENGUAJE C


Las variables básicas en este compilador específico son:

No TIPO DE VARIABLE TAMAÑO EN BYTES VALORES QUE SOPORTA


1 bit 1 0ó1
2 char 1 -127 a 127
3 short 1 -127 a 127
4 int 2 - 32767 a 32767
5 long 4 - 2147483647 a 2147483647
6 float 4 -1.5x10^45 a 3.4x10^38
7 double 4 -1.5x10^45 a 3.4x10^38
8 unsigned char 1 0 a 255
9 unsigned short 1 0 a 255
10 unsigned int 2 0 a 65535
11 unsigned long 4 0 a 4294967295

3.6. OPERADORES EN LENGUAJE C


El lenguaje C permite hacer operaciones aritméticas o matemáticas básicas entre números contenidos en
variables o constantes. Las operaciones aritméticas disponibles son las siguientes:

No DESCRIPCIÓN DE LA OPERACIÓN OPERADOR


1 Suma +
2 Resta -
3 División /
4 Módulo o residuo de la división entera %
5 Incremento ++
6 Decremento --
7 Operación OR |
8 Operación AND &
9 Operación XOR ^
10 Complemento a 1 ~
11 Corrimiento a la derecha >>
12 Corrimiento a la izquierda <<

3.7. INSTRUCCIONES BÁSICAS DE MIKROC PARA PIC


INSTRUCCIÓN DE ASIGNACIÓN =
Permite asignar a una variable un valor constante, el contenido de otra variable o el resultado de una expresión
matemática. La asignación va de derecha a izquierda.
Ejemplos:
suma = 0; //El valor 0 se almacena en la variable suma
x0 = x1; //El contenido de la variable x1 se almacena en la variable x0
dx = (b-a)/n; //El resultado de la expresión matemática se almacena en dx

INSTRUCCIÓN DE CONFIGURACIÓN DE PUERTOS COMO ENTRADA O SALIDA TRISx

8
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

Donde x, se refiere al puerto del microcontrolador (RA, RB, RC, RD o RE). El registro TRIS indica si el puerto
será de Entrada o Salida. Al poner Ceros en los bits de TRIS, los correspondientes bits del puerto serán de Salida
y al poner Unos, los bits del puerto serán de Entrada.
Ejemplos:
TRISB=255; //RB será de Entrada (255 equivale a 11111111 en binario)
TRISC.F2=0; //El bit 2 del puerto RC será de Salida
TRISD=0x0F; //El nibble inferior de RD es Entrada y el superior es Salida

INSTRUCCIÓN DE ENTRADA DE DATOS POR PUERTO PORTx


Permite el ingreso de datos a través de los puertos del microcontrolador y almacenarlos en una o más variables.
Ejemplos:
var= PORTA; //Los bits del puerto A se almacenan en var
LATB = PORTA; //Los bits de RA se envían hacia los pines de RB
También se puede leer el estado individual de cada bit de un puerto usando cualesquiera de las siguientes
instrucciones:
variable =PORTB.F3; //Leer el pin RB.3 y guardar en la variable
variable=RB3_bit;

INSTRUCCIÓN DE SALIDA DE DATOS POR PUERTO LATx


Permite el envío de datos, el contenido de una variable o el resultado de una expresión matemática hacia los
pines de un puerto.
Ejemplos:
LATA=0x00; //Todos los pines del puerto RA se ponen en 0
LATB=var; //El valor de var sale por el puerto RB
LATB=LATA+70; //El valor del puerto RA más 70 se envía hacia el puerto RB
También se pueden poner a 1 o 0 bits individuales de un puerto usando las siguientes instrucciones:
LATB.F0=0; //El pin 0 del puerto RB se pone en 0
RB0_bit=0;

INSTRUCCIÓN DE DECISIÓN if...else (si ... entonces)


Permite la ejecución de las instrucciones1 si la condición es verdadera, de lo contrario se ejecutan las
instrucciones2. Las llaves { } no son necesarias cuando hay una sola instrucción.
if (condición) {
instrucciones1;
} else {
instrucciones2;
}
Ejemplo 1: Si el contenido de la variable ‘código’ es igual al contenido de la variable ‘clave’, se ejecutan las
primeras cuatro instrucciones; de lo contrario se ejecutan únicamente las dos últimas instrucciones.
if (codigo==clave) {
intentos=0;
RA7_bit=1;
Delay_ms(1000);
RA7_bit=0;
} else {
intentos++;
Delay_ms(200);
}

Ejemplo 2: Instrucción de decisión sin ‘else’. Esta es una variante muy utilizada cuando se desea condicionar
la ejecución de un grupo de instrucciones. Las dos instrucciones se ejecutarán únicamente si la variable
‘contador’ es igual a 2, de lo contrario la ejecución continúa a partir de la línea //Aquí

9
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

if (contador==2) {
RB6_bit=~RB6_bit;
contador=0;
}
//Aquí

Ejemplo 3: Similar al caso anterior, pero con una sola instrucción. Si la variable ‘horas’ es igual a 24 se asigna
a esta variable con un valor de cero.
if (horas==24) horas=0;
Nota: Las condiciones se obtienen por medio de los operadores de relación y los operadores lógicos.

✓ OPERADORES DE RELACIÓN:
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual a (nótese la diferencia con el operador de asignación =)
!= No es igual a

✓ OPERADORES LÓGICOS BOOLEANOS: (devuelven un bit: 1 o 0)


&& Y (AND)
|| O (OR)
! No (NOT)

✓ OPERADORES LÓGICOS bit a bit: (devuelven un byte: 0 a 255)


& Y (AND)
| O (OR)
~ No (NOT)

INSTRUCCIÓN DE CICLO CONTROLADO for (para)


Permite ejecutar un grupo de instrucciones de manera repetitiva, una determinada cantidad de veces.
for (expresión de inicio; expresión de condición, expresión de cambio) {
instrucciones;
}

Ejemplo 1: La variable ‘i’ tiene un valor inicial de 7 (i=7) y un valor de condición final de 1 (i>=1). Esta variable
va disminuyendo de 1 en 1 (i--). Por lo tanto, las dos instrucciones se ejecutarán en 7 ocasiones. La primera vez
cuando i=7, la segunda cuando i=6, la tercera cuando i=5 y así sucesivamente hasta la séptima vez cuando i=1.
Luego la ejecución continúa en //Aquí
for (i=7; i>=1; i--) {
PORTB=PORTB<<1;
Delay_ms(500);
}
//Aquí

Ejemplo 2: El valor inicial de var es 1 y su valor final es 3. La variable var se va incrementando de 1 en 1


(var++). Por lo tanto, la instrucción se ejecuta tres veces, lo que da como resultado un retardo de 3 segundos.
Luego la ejecución continúa en //Aquí
for (var=1; var<=3; var++)
Delay_ms(1000);
//Aquí

10
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

INSTRUCCIÓN ITERATIVA WHILE (mientras)


Permite ejecutar un grupo de instrucciones de manera repetitiva, mientras una condición sea verdadera. Primero
se revisa la condición para determinar su valor de verdad (verdadero o falso) y luego se ejecutan las
instrucciones.
while (condición) {
instrucciones;
}

Ejemplo 1: La ejecución del programa permanece indefinidamente en esta línea mientras el bit menos
significativo del puerto RB sea igual a cero (Falso). Como caso particular no se ejecuta ninguna instrucción (la
cual debería estar antes del punto y coma).
while ( !PORTB.F0 ) ;

Ejemplo 2: Ejemplo de un lazo infinito. En MikroC, cualquier valor distinto de cero se considera
VERDADERO, y un valor igual a cero se considera FALSO. Al valor en RA se le suma 65 y el resultado se
envía hacia RB. Este proceso es infinito ya que la condición siempre es verdadera (1).
while (1)
LATB=PORTA+65;

Ejemplo 3: Las cuatro instrucciones encerradas por { } se ejecutarán indefinidamente mientras el valor del bit
RD7 sea igual a 1 (Verdadero).
while (PORTD.F7) {
RB1_bit=1;
Delay_ms(500);
RB1_bit=0;
Delay_ms(200);
}

INSTRUCCIÓN ITERATIVA do...while (hacer...mientras)


Permite ejecutar un grupo de instrucciones de manera repetitiva, mientras la condición sea verdadera.
La diferencia con ‘while’ es que primero se ejecutan las instrucciones y luego se revisa la condición.
do {
instrucciones;
} while(condición);

Nota: A diferencia de ‘while’, en ‘do...while’ las instrucciones se ejecutan por lo menos una vez.

Ejemplo 1: La variable tipo byte ‘kp’ tiene un valor inicial de cero (FALSO). La instrucción kp++; se ejecuta y
luego se revisa la condición (kp). Mientras kp sea distinto de cero la condición será VERDADERA. Como
resultado se tendrá un lazo infinito mientras la variable kp sea verdad (distinto de cero). Cuando la variable kp
llegue nuevamente a cero, la condición será FALSA (después de 256 ciclos) y la ejecución continuará en la
línea //Aquí
char kp=0;
do
kp++;
while (kp);
//Aquí

Ejemplo 2: La instrucción Xval++; se ejecutará infinitamente mientras ‘valor’ sea diferente a 1.


valor=0;
do {
val++;

11
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

}while (valor != 1);

INSTRUCCIÓN DE SELECCIÓN switch ... case (revisar ... caso)


Ejecuta de un grupo de instrucciones de varios grupos posibles, dependiendo del valor de una variable.
switch (var) {
case 1: instrucciones1; break;
case 2: instrucciones2; break;
...
default: instrucciones_por_omision;
}

Si la ‘var’ es igual a 1 se ejecutan únicamente las instrucciones1, si es igual a 2 se ejecutan únicamente


las instrucciones2 y así sucesivamente. Si la variable no es igual a ninguno de los casos (case) entonces
se ejecutan las instrucciones_por_omision (default).

Ejemplo 1: Si ‘digito’ es igual a 0, ‘valor’ es 0x3F. Si ‘digito’ es igual a 1, ‘valor’ es 0x06. Si ‘digito’ no es 0 o
1 entonces valor será 0.
switch (digito)
{
case 0: valor=0x3F; break;
case 1: valor=0x06; break;
default: valor=0;
}

3.8. DETALLES IMPORTANTES DE MIKROC


En la programación de PIC en C existen pequeños detalles que se deben tener muy en cuenta y que permitirán
que los programas realizados cumplan las tareas para los cuales fueron diseñados.
✓ Los comentarios de una sola línea se inician con la doble barra diagonal //
✓ Los comentarios de varias líneas (o de bloques) inician con /* y terminan con */
✓ Los signos de agrupación siempre deben estar en pareja, es decir si hay tres llaves de apertura {{{, debe
haber tres llaves de cierre correspondientes}}}. Lo mismo ocurre con los paréntesis ( )
✓ Los números hexadecimales se escriben comenzando con 0x, por ejemplo, 0x0A, 0x16, 0xFD, etc.
✓ Los números binarios se escriben comenzando con 0b, por ejemplo, 0b001110, 0b11101111, etc.
✓ Los números decimales se escriben sin ningún símbolo adicional, por ejemplo 64, 126, 12.75, etc.
✓ No se debe confundir el operador de asignación = con el operador de comparación igual ==
✓ El punto y coma ‘;’ indica el final de una instrucción, por lo tanto, se debe tener en claro su uso.
Ejemplo: for(i=0; i<5; i++); no es un bucle de 5 repeticiones debido al ‘;’ al final.
✓ Las llaves { } no son necesarias en aquellos casos en los que únicamente se va a ejecutar una sola instrucción.
✓ Todo programa en mikroC debe tener una función principal main, y su nombre no debe ser cambiado.
✓ Si se requiere ayuda referente a una instrucción o función de librería, en MikroC basta con escribir el nombre
de la instrucción o función y, con el cursor dentro de texto escrito, presionar la tecla F1. Esto nos llevará a
la ventana de Ayuda donde, además de una explicación detallada se tiene también un ejemplo de código y
esquemático.

4. PRE INFORME
4.1. Objetivos de laboratorio.
4.2. Resumen para flujo de programa: La sentencia condicional if e if else, la sentencia switch case, el ciclo
iterativo while y do while.

12
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

5. PROCEDIMIENTO
5.1. Diseño de programa en mikroC de LED INTERMITENTE que muestre por el puerto RB (RB.0 al RB.7) y
demostrar su funcionamiento en plataforma virtual y en hardware.

DIAGRAMA DE FLUJO

///////////////////////////////////////////////////////////////
// UNIVERSIDAD PUBLICA DE EL ALTO
// CARRERA: INGENIERIA DE SISTEMAS
// MATERIA: INGENIERIA DE CONTROL
// PROYECTO: LED INTERMITENTE
// AUTOR: M.Sc. GREGORIO MAMANI M:
/////////////////////////////////////////////////////////////////
void main(){ // INICIO DE PROGRAMA
TRISB=0;
while(1)
{
LATB = ~ LATB; // PUERTO RB COMO SALIDA
Delay_ms(250); // TIEMPO DE ESPERA
}
}

13
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

5.2. Diseñar programa en lenguaje C de “DECODIFICACIÓN DE DISPLAY DE 7 SEGMENTOS - CÁTODO


COMÚN”. Demostrar su funcionamiento en plataforma virtual y en hardware.

14
UPEA - INGENIERÍA DE CONTROL M.Sc. Gregorio Mamani M.

5.3. Diseñar en lenguaje C de “ACTIVAR Y DESACTIVAR UN MOTOR DC”. Demostrar su funcionamiento


en plataforma virtual y en hardware.

5.4. Diseñar un programa en lenguaje C para mostrar en hardware los procesos básicos de control doméstico e
industrial a elección del estudiante.

6. CUESTIONARIO
6.1. Manual de referencia rápida a MIKROC PRO PIC

7. CONCLUSIONES:
8. BIBLIOGRAFÍA

15

También podría gustarte