Hola nuevamente a
los tutoriales de Artes
Electrónicas Pachani, continuamos con el curso de programacion de microcntroladores 16f887A en MkroC, aquí en adelante iremos aprendiendo sobre las
características de C por ello este tutorial está dirigido a
lectores novatos, aficionados (hobbistas), estudiantes, que deseen
implementar programas para microcontroladores en lenguaje C.
Un lenguaje de alto nivel
Bien
sabemos por lo dicho antes
que el compilador de alto nivel en lenguaje C utiliza estructuras que
facilitan la programación, optimiza las operaciones matemáticas y
los procesos, por medio del uso de funciones predefinidas y las no
predefinidas que nosotros
mismos podemos crear, así
como el uso de un conjunto de variables, de tipo carácter, entero, y
punto decimal.
Mis
proyectos
en C
Ahora trataremos de continuar con la estructura de un programa en
lenguaje C, este relativamente simple, por lo cual trataremos de
respetar esta plantilla que lo veremos un par de tutoriales mas y
luego lo dejaremos de lado:
1er
Paso.- Es indispensable
declarar las variables globales que el desarrollador considere
necesarias para el funcionamiento del programa, estás variables
globales son reconocidas por todos los puntos de código del programa
incluidas las funciones propias del desarrollador y la función main.
2do
paso.- El paso a seguir
es hacer las declaraciones de funciones diseñadas por el
desarrollador para las tareas específicas en su programa.
3er
paso.- Posteriormente se
declara la función main
y al comienzo de está se deben declarar las variables que se
requieran dentro de la misma. El código que sigue debe configurar e
inicializar los puertos y módulos del microcontrolador que sean
indispensables en la aplicación.
4to
paso.- Por último se
edita el código que contiene el aplicativo concreto del programa. En
el siguiente ejemplo se puede ver cómo hacer una estructura para un
programa:
Problema
3.-
Realizar un
programa que controle
las luces de un juego
de baile por medio de botoneras las cuales están colocados en el
suelo y que se vea en la parte superior del juego de modo que cuando
jueguen ademas de la pantalla se vean los cambios en la iluminación
de la pista .
Solución.-
De
la misma manera como iniciamos en nuestros anteriores proyectos
primero vamos a etiquetar nuestro proyecto para
las
instrucciones.
Esto nos ayudara para tener información de nuestro programa tanto
para poder hacer modificaciones nuestras o bien para que otra
persona, tenga información sobre como funciona nuestro código.
El problema debemos de interpretarlo a nivel del microcontrolador,
las lamparas puede ser un bit de cualquier puerto de nuestro
microcontrolador de modo que yo escogeré el puerto B como entrada de
datos, de modo que cumpla con las características de nuestro
programa. Ahora los interruptores están colocados de modo que
controlan solo una lampara lo cual facilita nuestro programa pues
controlan solo un bit. En este caso las lamparas de colores lo pondré
en la salida del puerto C.
Ahora
escribamos el siguiente código según nuestra receta anterior, para
facilitar las instrucciones del programa, yo lo muestro primer en un
editor de programas llamado Pluma, luego lo copiare en MicroC:
1).-
Inicializamos el
puerto C
de modo que es como ir al banco 1, para
llamarlo.
2).- Habilitamos a los puertos B como entrada de datos
y puerto C como salida de datos, por medio de la instrucción TRIS
como lo hemos estado haciendo.
3).- Acá vemos adicionalmente la instrucción
NOT_RBPU_bit=0, debido a que el puerto B es bidireccional de 8 bits.
El registro de sentido de datos es TRISB. Al programar un bit de
TRISB con un valor de 1 se consigue que el pin correspondiente del
puerto B trabaje como entrada es decir, coloca el driver de salida en
alta impedancia. Al programar un bit de TRISB con 0 se logra que el
pin correspondiente del puerto B opere como salida es decir, coloca
el contenido del latch de salida en el pin seleccionado. Cada pin de
este puerto tiene un pull up interno (resistencia conectada a V DD ).
El bit #RBPU del registro OPTION_REG puede activar o desactivar esta
función. Cuando el puerto se configura como salida las pull ups se
desactivan automáticamente y también cada vez que se enciende el
PIC (Power On Reset POR).
4).- Ahora por medio de la sentencia WHILE (1) ,
siempre verdad, se cumple que el puerto C es igual al contenido del
puerto B, de este modo siempre se mostrara los datos del puerto B en
el puerto C.
Por
ultimo una
ves escrito el archivo en ejer01.c
lo copiaremos a nuestro IDE de MikroC, lo compilaremos y luego
obtendremos el archivo ejer01.hex.
Simulación
en MikroC
Una
vez
obtenido el archivo ejer01.hex . Ya
que no hemos tenido problemas dentro de las instrucciones para
nuestro programa ahora debemos de comprobar que nuestro código
funciona de manera adecuada en el simulador proteus.
Simulación
en Proteus
Una vez simulado y compilado en MikroC obtendremos los siguientes
archivos:
Los archivos mas importantes son el ejer01.hex y ejer01.c
, el primero para poder instalar en nuestro microcontrolador y
simular en Proteus , el segundo es el archivo que facilita crear
nuestro archivo para compilar que seria como el archivo *.asm pero
para la versión en C, ya que el interprete se encargar de realizar
la traducción para obtener el archivo ejer01.hex .
Primero cargamos el archivo ejer01.hex para que se pueda
iniciar con la simulación, para lo cual primero cargamos solamente
el archivo HEX, si nuestras instrucciones son las adecuadas la mejor
manera sera verla en la simulación.
Algunas observaciones que tenemos que tener en mente son las
siguientes:
1).- Cuando trabajamos con el puerto B se debe tener en mente las
caracteristicas del mismo. Este puerto se puede programar por medio
de 4 registros: PORTB, TRISB, OPTION_REG (activar/desactivar las pull
ups) y ANSEL. En la tabla 4.1 se indican las tecnologías de entrada
y salida de cada pin de este puerto.
![]() |
Tabla 4.1. Tecnologías E/S del puerto B del PIC16F877A en modo
digital.
|
Cuando se habiliten las funciones de periféricos de este puerto B,
se debe tener cuidado al definir los bits del registro TRISB. Algunos
periféricos modifican estos bits para hacer que algunos pines operen
como salida y otros como entrada. Esta modificación tiene vigencia
mientras el periférico está habilitado.
Con todas estas observaciones se trata de aprender mas de los
microntroladores, ahora en cuanto a la configuración de los
microcontroladores todo dependerá de la hoja de datos que ellos
poseen pues el microcontrolador 16F877A casi no varia del 18F4550
pues ambos tienen las mismas entradas salvo que a cada puerto se le
han adicionado mas características, de a poco con los ejemplo iremos
viendo estas características. A medida que suba otro tutorial iré
subiendo mas información con otro ejemplo, espero que toda la
información te sea de utilidad y los espero en otro tutorial.
Todo el material que aquí se encuentra es de mi autoría, ademas de
una recopilación de información de Internet de recursos que se
pueden descargar como libros los cuales son usados como referencia
para los ejercicios y los ejemplos. Cualquier consulta la puedes
realizar en la parte de comentarios.
Bibliografia:
1.- Juan Ricardo Clavijo Mendoza, Diseño y simulación de sistemas
microcontrolados en lenguaje C; Publicado el año 2011;[Fecha de
consulta 8 de Abril de 2017].
2.-Juan Ricardo Penagos Plazas; Cómo programar en lenguaje C los
microcontroladores PIC16F88, 16F628A y 16F877A; Publicado
el año 2010; [Fecha de consulta 8
de Abril de 2017].
Software
utilizados:
1.-
MikroC_PRO_PIC_2016_Build.6.6.3
descargado de la pagina oficial de Microchip;
2.-
Pluma. Editor de texto libre, se puede descargar de Internet, es un
editor GNU Linux;