Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
También, las instrucciones se pueden organizar de tal forma que algunas de ellas se ejecuten sólo
cuando una condición específica (o conjunto de condiciones) sea verdadera, otras instrucciones se
repitan un cierto número de veces y otras pueden ser agrupadas en bloques que se ejecutan en
diferentes partes de un programa.
Lo anterior constituye una breve descripción de los siete elementos básicos de la programación: entrada
de datos, tipos de datos, operaciones, salida, ejecución condicional, lazos y funciones.
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;
Ejemplo B: 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í
if (contador==2) {
RB6_bit=~RB6_bit;
contador=0;
}
//Aquí
Ejemplo C: 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
Ejemplo D: 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 F: 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 G: 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;
6.8 EJEMPLO A: Creación del primer PROYECTO ‘Led’ con MikroC Pro for PIC
6.8.1 Enunciado
Para demostrar el desarrollo de proyectos con MikroC, se iniciará con el proyecto más simple
posible que consiste en hacer parpadear infinitamente, cada ¼ segundo, 8 leds conectados a un
puerto del PIC18F4550.
6.8.3 Flujograma
6.9 Procedimiento de creación del proyecto ‘Led’ con MikroC Pro for PIC
a) Iniciar el IDE
b) Cerrar cualquier proyecto previo: ‘Project – Close Project’
c) Crear un nuevo Proyecto: ‘Project – New Project’. El ‘New Project Wizard’ se iniciará.
d) En ‘1. Tipo de Proyecto’, seleccionar `Proyecto Estándar` y hacer click en
e) En ‘2. Configuración del Proyecto’: llenar los datos como indica la figura y luego presionar
. Si se va a programar el microcontrolador con el USB Bootloader entonces NO ACTIVAR
la opción ‘Open Edit Project window to set Configuration bits’.
Nota: Siempre se debe crear un folder diferente para cada nuevo proyecto. Un error común es
crear un proyecto dentro del folder actual lo que tiene como resultado que los archivos se
desordenen y se hace necesario cerrar el proyecto y comenzar uno nuevo.
f) En ‘3’ Añadir archivos’: Si se disponen de librerías del usuario adicionales se pueden agregar en
este punto. Las prácticas de laboratorio no incluyen dichos elementos por lo que basta con
presionar
g) El Wizard ha terminado y MikroC genera la plantilla para iniciar todos los proyectos en C:
h) Aunque el código aún no ha sido escrito, ir al menú ‘File – Save’ para grabar el archivo (con
extensión .c) y en la ventana emergente hacer click en Guardar.
j) Compilar el programa seleccionando del menú ‘Build – Build ‘(también se puede digitar
Ctrl+9 o hacer click en el ícono)
l) Para subir el código al microcontrolador usando el Bootloader USB, seleccionar del menú ‘Tools
– USB HID Bootloader’ y proceder como se explicó en la guía P04.
m) Armar el Circuito Mínimo con PIC18F4550 (descrito en la guía P04) y añadir 8 leds cada uno con
una resistencia de 220 Ohm al puerto RB del PIC18F4550
n) Finalmente, después de esperar 3 segundos para que el Bootloader deje de funcionar, se
observarán los 8 leds parpadeando cada ¼ segundo.
Operación Salida
00 Dato A + Dato B
01 Dato A - Dato B
10 Dato A * Dato B
11 Dato A / Dato B
6.10.2 Diagrama en bloques
6.10.3 Flujograma
Componentes
Proteus:
d) En la ventana ‘Watch Values’ hacer click en la flecha en la línea ‘Select variable from
list’
e) De la lista emergente seleccionar el registro TRISB (para un acceso más rápido digitar la primera
letra del elemento a seleccionar (en este caso ‘T’))
f) Seleccionar TRISB y hacer click en ‘Add’
g) En el área inferior aparece el Nombre del registro, el Valor actual (en binario) y su dirección en la
SRAM (en hexadecimal)
h) Para cambiar la base numérica de visualización, hacer click en la columna ‘Value’. Al aparecer el
pequeño ícono hacer click en este y emerge la siguiente ventana:
j) Para ejecutar el programa instrucción por instrucción, seleccionar del menú ‘Run’ y elegir el modo
de Paso (Step) y observar los valores que toman los registros y variables. También es posible
seleccionar el Valor de una variable o registro y modificar su valor actual digitando el nuevo valor
deseado.
Para este ejemplo se usará ‘Step Over’ (Tecla F8) y se ingresará los valores de DatoA, DatoB y
operación modificando el valor de PORTD
k) Para detener la depuración, una vez que se ha comprobado el funcionamiento correcto del
programa, seleccionar la opción ‘Stop Debugger’ del menú ‘Run’
l) Si se realiza alguna modificación al código, se debe volver a compilar el proyecto antes de realizar
una nueva depuración.
Si usamos un display 7-Seg CC manejaremos lógica directa, es decir, el terminal común debe tener
un 0 lógico (conectado a tierra) y para prender cada segmento se requiere un 1 lógico.
Si usamos un display 7-Seg AC manejaremos lógica inversa, es decir, el terminal común debe tener
un 1 lógico (conectado a VCC) y para prender cada segmento se requiere un 0 lógico.
El display visualizará los dígitos del 0 al 9 de acuerdo a la siguiente figura:
Cada dígito se codifica asignando un segmento del display a cada bit de un puerto del
microcontrolador. El punto (dot) no será visualizado. Para facilitar la codificación, se usará la
herramienta en MikroC ‘Tools - Seven Segment Editor’
Para facilitar la codificación, se usará la herramienta en MikroC ‘Tools - Seven Segment Editor’
La tabla muestra la codificación para un display 7-Seg CC usando el puerto RB del PIC18F4550: