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

Instituto Politcnico Nacional

Escuela Superior de Ingeniera Mecnica y Elctrica U.P. Ticomn


Ingeniera Aeronutica
Sistemas Electrnicos Digitales
Profesor Raymundo Hernndez Brcenas

Prctica 9
Programacin de Microcontroladores
Primer Contacto y Display de 7 Segmentos
Daniel Baltazar Ordez
Carlos Carbajal Gutirrez
Jorge Haffif Mendoza Blanco
Rodrigo Varona Garca
Jess Alberto Miranda Garca
6AV2
Fecha de elaboracin: Lunes 7 de Abril 2014
Fecha de entrega:




Objetivo
Tener un primer contacto con la programacin de microprocesadores, su compilacin y
manejo. A su vez, se editarn programas previos y se conocer el display de 7 segmentos y lo
que su programacin implica.
Introduccin
El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el
cdigo ejecutable y est compuesto por una serie de ceros y unos, aparentemente sin
significado. Dependiendo de la arquitectura del microcontrolador, el cdigo binario est
compuesto por palabras de 12, 14 o 16 bits de anchura. Cada palabra se interpreta por la CPU
como una instruccin a ser ejecutada durante el funcionamiento del microcontrolador. Todas
las instrucciones que el microcontrolador puede reconocer y ejecutar se les denominan
colectivamente Conjunto de instrucciones. Como es ms fcil trabajar con el sistema de
numeracin hexadecimal, el
cdigo ejecutable se
representa con frecuencia
como una serie de los
nmeros hexadecimales
denominada cdigo Hex. En
los microcontroladores PIC
con las palabras de programa
de 14 bits de anchura, el
conjunto de instrucciones
tiene 35 instrucciones
diferentes.
Como el proceso de escribir un cdigo ejecutable era considerablemente arduo, en
consecuencia fue creado el primer lenguaje de programacin denominado ensamblador
(ASM). Siguiendo la sintaxis bsica del ensamblador, era ms fcil escribir y comprender el
cdigo. Las instrucciones en ensamblador consisten en las abreviaturas con significado y a cada
instruccin corresponde una localidad de memoria. Un programa denominado ensamblador
compila (traduce) las instrucciones del lenguaje ensamblador a cdigo mquina (cdigo
binario).
Este programa compila instruccin a instruccin sin optimizacin. Como permite controlar en
detalle todos los procesos puestos en marcha dentro del chip, este lenguaje de programacin
todava sigue siendo popular.
A pesar de todos los lados buenos, el lenguaje ensamblador tiene algunas desventajas:



Incluso una sola operacin en el programa escrito en ensamblador consiste en muchas
instrucciones, hacindolo muy largo y difcil de manejar.
Cada tipo de microcontrolador tiene su propio conjunto de instrucciones que un
programador tiene que conocer para escribir un programa.
Un programador tiene que conocer el hardware del microcontrolador para escribir un
programa
Programa escrito en C (El mismo programa compilado al cdigo ensamblador):

Los lenguajes de programacin de alto nivel (Basic, Pascal, C etc.) fueron creados con el
propsito de superar las desventajas del ensamblador. En lenguajes de programacin de alto
nivel varias instrucciones en ensamblador se sustituyen por una sentencia. El programador ya
no tiene que conocer el conjunto de instrucciones o caractersticas del hardware del



microcontrolador utilizado. Ya no es posible conocer exactamente cmo se ejecuta cada
sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en el programa
una secuencia escrita en ensamblador.
Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje ensamblador,
probablemente sepa que la arquitectura RISC carece de algunas instrucciones. Por ejemplo, no
hay instruccin apropiada para multiplicar dos nmeros. Por supuesto, para cada problema
hay una solucin y ste no es una excepcin gracias a la aritmtica que permite realizar las
operaciones complejas al descomponerlas en un gran nmero operaciones ms simples. En
este caso, la multiplicacin se puede sustituir con facilidad por adicin sucesiva (a x b = a + a +
a + ... + a). Ya estamos en el comienzo de una historia muy larga... No hay que preocuparse al
utilizar uno de estos lenguajes de programacin de alto nivel como es C, porque el compilador
encontrar automticamente la solucin a ste problema y otros similares. Para multiplicar los
nmeros a y b, basta con escribir a*b.
Lenguaje C
El lenguaje C dispone de todas las ventajas de un lenguaje de programacin de alto nivel
(anteriormente descritas) y le permite realizar algunas operaciones tanto sobre los bytes como
sobre los bits (operaciones lgicas, desplazamiento etc.). Las caractersticas de C pueden ser
muy tiles al programar los microcontroladores. Adems, C est estandarizado (el estndar
ANSI), es muy portable, as que el mismo cdigo se puede utilizar muchas veces en diferentes
proyectos. Lo que lo hace accesible para cualquiera que conozca este lenguaje sin reparar en el
propsito de uso del microcontrolador. C es un lenguaje compilado, lo que significa que los
archivos fuentes que contienen el cdigo C se traducen a lenguaje mquina por el compilador.
Todas estas caractersticas hicieron al C uno de los lenguajes de programacin ms populares.
Materiales y Equipo
PCW (Compilador)
ISIS de Proteus 8 Professional








Desarrollo
Ejercicio 1
Analizar el cdigo fuente.
Compilar el cdigo fuente.
Probar el archivo con extensin .hex.
Escribir el cdigo fuente de un programa escrito en lenguaje C, el cual gobierne un
micro controlador (PIC16F84). El programa debe configurar las lneas de la PUERTAA
como entradas y las lneas de la PUERTAB como salidas, dicho programa debe enviar el
siguiente tren de informacin hacia la PUERTAB del PIC: 1, 2, 4 ,8, 16,32,64 y 128. Esto
en intervalos de 3 milisegundos.













#include <16F84.H> /*LIBRERIA DEL PIC A UTILIZAR*/
#fuses XT /*TIPO DE OSCILADOR*/
#use delay( clock = 4000000 ) /* Especifica reloj de 4 MHz */

void main(void)
{

int32 x = 0; /*DECLARACION DE VARIABLE*/
int32 ciclos = 255, i =0; /* Declaracion de Valriables */
int *p_puertaa= 0x05; /* Puntero a PuertaA */
int *p_puertab= 0x06; /* Puntero a PuertaB */

SET_TRIS_A (0xff); /* 0xff --> TRISATODAS LAS PUERTAS A SON ENTRADAS*/
SET_TRIS_B (0x00); /* 0x00 --> TRISB TODAS LAS PUERTAS B SON SALIDAS */


/*inicio */

for (i =1; i <= ciclos; i=i*2)

{

x = i; /*INICIA CUENTA*/
*p_puertab = x;
delay_MS(30);

}

x = 0;
*p_puertab = x;
delay_MS(2000);

puerta:

x = *p_puertaa;
*p_puertab = x;

goto puerta;

}




Ejercicio 2
Analizar el cdigo fuente.
Compilar el cdigo fuente.
Probar el archivo con extensin .hex.
Editar el cdigo fuente del programa llamado DOS.c escrito en lenguaje C, el cual
gobierne un micro controlador(PIC16F84). Este programa configurar las lneas de la
PUERTAA como entradas y las lneas de la PUERTAB como salidas. El programa debe
activar un display de 7 segmentos de ctodo comn, es decir la terminal comn. Debe
visualizarse un conteo ascendente en el display de 0 a 9 en intervalos de 2 segundos.
Una vez concluido el conteo debe detenerse y apagarse el display.















#include <16F84.H> /*LIBRERIA DEL PIC A UTILIZAR*/
#fuses XT /*TIPO DE OSCILADOR*/
#use delay( clock = 4000000 ) /* Especifica reloj de 4 MHz */

void main(void)
{

int32 x = 0; /*DECLARACION DE VARIABLE ENTERA DE 32 BITS*/

int *p_puertaa= 0x05; /* Puntero a PuertaA */
int *p_puertab= 0x06; /* Puntero a PuertaB */

SET_TRIS_A (0xff); /* 0xff --> TRISA PUERTAS A COMO ENTRADA*/
SET_TRIS_B (0x00); /* 0x00 --> TRISB PUERTAS B COMO SALIDA*/

DYSPLAY:


x = 63; /* mandamos un 0 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 6; /* mandamos un 1 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 91; /* mandamos un 2 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 79; /* mandamos un 3 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 102; /* mandamos un 4 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;




x = 109; /* mandamos un 5 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 125; /* mandamos un 6 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 7; /* mandamos un 7 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 127; /* mandamos un 8 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

x = 103; /* mandamos un 9 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;



goto DYSPLAY;;

}














Ejercicio 3
Editar el programa del ejercicio anterior para permitir que el usuario accione los cinco
interruptores conectados a la PUERTAA del micro controlador (el usuario puede
accionar uno o varios interruptores a la vez), dependiendo del estado del o los
interruptores accionados (abierto o cerrado), en el display de debe visualizarse el
nmero correspondiente.


















#include <16F84.H> /*LIBRERIA DEL PIC A UTILIZAR*/
#fuses XT /*TIPO DE OSCILADOR*/
#use delay( clock = 4000000 ) /* Especifica reloj de 4 MHz */

void main(void)
{
int32 x = 0; /*DECLARACION DE VARIABLE ENTERA DE 32 BITS*/
int32 caso=0;
int *p_puertaa= 0x05; /* Puntero a PuertaA */
int *p_puertab= 0x06; /* Puntero a PuertaB */

SET_TRIS_A (0xff); /* 0xff --> TRISA PUERTAS A COMO ENTRADA*/
SET_TRIS_B (0x00); /* 0x00 --> TRISB PUERTAS B COMO SALIDA*/

DYSPLAY:
caso=*p_puertaa;
switch (caso)
{
case 0:
x = 63; /* mandamos un 0 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 1:
x = 6; /* mandamos un 1 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 2:
x = 91; /* mandamos un 2 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 3:
x = 79; /* mandamos un 3 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 4:
x = 102; /* mandamos un 4 al display de 7 segmentos*/



*p_puertab = x;
delay_MS(2000);
break;

case 5:
x = 109; /* mandamos un 5 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 6:
x = 125; /* mandamos un 6 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 7:
x = 7; /* mandamos un 7 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 8:
x = 127; /* mandamos un 8 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

case 9:
x = 103; /* mandamos un 9 al display de 7 segmentos*/
*p_puertab = x;
delay_MS(2000);
break;

default:
x=118;
*p_puertab=x;
delay_MS(2000);
break;

}
goto DYSPLAY;
}



Observaciones
Para usar un display de 7 segmentos resulta muy conveniente tener una tabla donde
se pueda obtener el numero binario que se necesita pata encender el display con el
carcter deseado.
Conclusiones
Saber programar ayuda al ser humano en todos los aspectos de su vida. Nos aporta
aprendizaje y capacidades las cuales nos permite llevar nuestro pensamiento a otro nivel y nos
ayuda a desarrollar ideas para diferentes ocasiones que se presentan en la vida cotidiana. En
todos los campos de la produccin y la enseanza es necesario desarrollar en los estudiantes la
capacidad de poder aplicar la programacin para el desarrollo de todas las actividades
humanas. Por esto y por el rpido incremento en la aplicacin de la electrnica digital en la
aviacin es de suma importancia el aprender a programar tanto dentro de un mismo
ordenador como para un microcontrolador.
Referencias
http://www.mikroe.com/chapters/view/80/capitulo-2-programacion-de-los-
microcontroladores/

Вам также может понравиться