Professional Documents
Culture Documents
ASIGNATURA:
MICROPROCESADORES Y MICROCONTROLADORES
NRC: 3713
TEMA:
Programacin en C en Microcontrolador 16F877A
DOCENTE: Ing. LUIS MONTOYA
INTEGRANTES DE GRUPO:
Alexis Sinailin
Andrs Hidalgo
Henry Huaraca
Fecha: 21/Julio/2017
Tabla de contenido
Tabla de contenido............................................................................................................ 2
1. Tema: ............................................................................................................................ 4
2. Antecedentes................................................................................................................. 4
3. Objetivos: ..................................................................................................................... 4
Lenguaje C ................................................................................................................ 7
6. Desarrollo ..................................................................................................................... 9
7. Recomendaciones ....................................................................................................... 23
8. Conclusiones............................................................................................................... 23
2
Tabla de figuras
3
1. Tema:
Programacin en C en Microcontrolador 16F877A
2. Antecedentes
3. Objetivos:
4. Marco terico.
TIPOS DE PROGRAMACIN.
4
LENGUAJE ENSAMBLADOR
5
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.
6
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
Figura 3. Lenguaje C
7
MPLAB
8
LCD 16x2.
Deepswitches.
Display de 7 segmentos, ctodo comn.
Teclado matricial 4x4.
Capacitores de 15pF.
Resistencias de distintos valores.
Cristal de 4000 Mhz
6. Desarrollo
Programacin
Simulacin
Implementacin
Pruebas de
funcionamiento
6.1 Programacin
9
permitindonos una mayor facilidad de programacin en comparacin con lo que es
lenguaje ensamblador.
Opcin 1
Enunciado: Disear un programa que lea 8 bits con Switches de los puertos A y E,
a su vez muestre el dato en decimal en un en un LCD que se encuentra conectado en el
puerto D.
Solucin: Para esta parte del proyecto hemos planteado una programacin en MPLAB,
con una lectura del dato ingresado en 8 bits en la cual mediante operaciones matemticas
hacemos la transformacin para poder visualizar el nmero en el LCD, con valores que
van desde 0 a 255, el cdigo se lo puede ver detallado a continuacin:
Lcd_Clear();
Lcd_Set_Cursor(1,1);
n=1*RA0+2*RA1+4*RA2+8*RA3+16*RA4+32*RA5+64*RE0+128*RE1;
sprintf(NString,"%i",n);
Lcd_Write_String("OPCION1 = ");
Lcd_Set_Cursor(2,1);
Lcd_Write_String(NString);
__delay_ms(200);
10
Figura 6. Extracto de la programacin de la Opcin 1 en MPLAB
Opcin 2
Enunciado: Ingresar nmeros decimales de un dgito desde el teclado, que a la vez son
mostrados en el display de 7 segmentos, hasta digitar el carcter *; pero al pulsar una
tecla que no sea dgito decimal debe mostrar el siguiente mensaje en el LCD: Tecla
no usada. Estos nmeros digitados deben ser almacenados en la memoria de datos,
luego mostrar secuencialmente todos los nmeros almacenados en el display de 7
segmentos, con un tiempo de 2,5 seg. entre nmero, y al final mostrar el carcter E.
Solucin: En esta parte del programa usamos una serie de condicionales, los cuales me
permiten primeramente hacer la lectura del dato y botn que est siendo ingresado a travs
del teclado, condicionando aquellos que no corresponden a un nmero decimal con
nmeros negativos para determinar el mensaje de dato No permitido, una vez que el
programa obtiene el dato que ha sido ingresado por teclado a travs de un array y de un
contador, vamos guardando el nmero de datos que sean ingresados y el valor de los datos
ingresados hasta que dejemos de ingresar ms nmeros y aplastemos el botn que
corresponda al asterisco. Una vez los datos han sido guardados luego de presionar
asterisco usamos una programacin parecida a la de la opcin uno para poder desplegar
los datos en el LCD, as como tambin en el display de 7 segmentos, el cdigo es el
siguiente:
C1=1;
if(F1==1){
n=7;
11
}
if(F2==1){
n=4;
if(F3==1){
n=1;
if(F4==1){
n=-1;
C1=0;
C2=1;
if(F1==1){
n=8;
if(F2==1){
n=5;
if(F3==1){
n=2;
12
if(F4==1){
n=0;
C2=0;
C3=1;
if(F1==1){
n=9;
if(F2==1){
n=6;
if(F3==1){
n=3;
if(F4==1){
n=-2;
C3=0;
C4=1;
if(F1==1){
n=-1;
if(F2==1){
13
n=-1;
if(F3==1){
n=-1;
if(F4==1){
n=-1;
C4=0;
if(n==-1){
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("No permitido");
n=-3;
if(n>=0){
num[cont]=n;
Lcd_Clear();
Lcd_Set_Cursor(1,1);
sprintf(NString,"%i",num[cont]);
Lcd_Write_String(NString);
cont=cont+1;
14
n=-3;
__delay_ms(350);
if(n==-2){
Lcd_Clear();
for(int i=0;i<cont;i=i+1){
Lcd_Set_Cursor(1,1);
sprintf(NString,"%i",num[i]);
Lcd_Write_String(NString);
__delay_ms(2500);
Lcd_Set_Cursor(1,1);
Lcd_Write_String("E");
__delay_ms(350);
cont=0;
n=-3;
15
Figura 7. Extracto de la programacin de la Opcin 2 en MPLAB
Opcin 3
Enunciado: Multiplicar dos nmeros A y B, de 4 bits cada uno. Los operandos para la
operacin son ingresados desde un teclado, que a la vez son mostrados en el display
de 7 segmentos. Visualizar los operandos y el resultado en un LCD, hasta que se realice
un nuevo clculo.
Solucin: Para esta solucin usaremos una mezcla de la programacin que ya se ha usado
en la solucin de las opciones 1 y 2, primeramente programamos el teclado para poder
leer el botn que corresponda a la multiplicacin, una vez que se ha presionado este botn,
nuestro programa analiza el valor de los datos de 4 bits ingresados a travs de los
deepswitches, con el fin de obtener su valor en decimal, y una vez que ha ledo estos datos
con una programacin parecida a la de la opcin uno determinamos el valor del dgito
uno y dos a multiplicarse, y realizamos la operacin matemtica, cuyo resultado ser
desplegado a travs del LCD, la programacin descrita se puede leer a continuacin:
16
if(B1==1 && B2==0){
C1=0;
C2=0;
C3=0;
C4=1;
if(F2==1){
n1=1*RA0+2*RA1+4*RA2+8*RA3;
n2=1*RA4+2*RA5+4*RE0+8*RE1;
int r=n1*n2;
Lcd_Clear();
Lcd_Set_Cursor(1,1);
sprintf(NString,"%i",n1);
Lcd_Write_String(NString);
Lcd_Write_String("X");
sprintf(NString,"%i",n2);
Lcd_Write_String(NString);
Lcd_Write_String("=");
sprintf(NString,"%i",r);
Lcd_Write_String(NString);
__delay_ms(350);
17
Figura 8. Extracto de la programacin de la Opcin 3 en MPLAB
6.2 Simulacin
Una vez que hemos elaborado y compilado satisfactoriamente nuestro cdigo en MPLAB,
procedemos con lo que concierne a la simulacin del circuito mediante el software de
National Instruments, Proteus Profesional en su versin 8.6 el cual me permitir verificar
el funcionamiento correcto del cdigo en conjunto con los integrados y dispositivos que
se pretenden usar para implementar el circuito en protoboard, a continuacin se muestra
el circuito a ser implementado en Proteus:
18
Figura 9. Presentacin de la simulacin en conjunto realizada en Proteus 8.6
Opcin 1
A continuacin se presenta en la Fig. la simulacin de la Opcin 1, donde por los pines
25 y 26 enviamos como entradas 0 que corresponden a dicha opcin, y por los puertos
A y E ingresan los datos de 8 bits, mostrando los resultados de la siguiente manera:
19
Opcin 2
En la opcin 2, que corresponde a los pines 25 y 26 con valores de 0 y 1
respectivamente, ingresamos nmeros decimales por el teclado, los cuales son ledos y
luego desplegados en forma secuencial de la misma manera como fueron ingresados con
una E al terminar la muestra en pantalla, tal funcionamiento se puede ver en las Fig. a
continuacin:
20
Opcin 3
Para la tercera opcin ingresamos dos nmeros de 4 bits mediante los deepswitches, y
mediante el teclado ingresamos el signo de multiplicacin, el cual una vez ingresado
realizar la operacin matemtica, desplegando por el LCD los valores a multiplicarse
junto con su resultado correspondiente, as como se muestra en la Fig. a continuacin:
6.3 Implementacin
Una vez que tanto el cdigo como la simulacin hayan funcionado en conjunto con la
ayuda de los softwares respectivos, vamos a proceder a plasmar lo que es nuestra solucin
a los enunciados planteados de manera fsica, armando los circuitos en el protoboard,
usando diferentes dispositivos como el LCD, el teclado, el PIC y diferentes dispositivos
que sern necesarios para el correcto armado y funcionamiento de nuestro circuito, a
continuacin en la Fig, se presenta el circuito armado en protoboard, con las conexiones
correctas para comenzar con las pruebas de funcionamiento:
21
Figura 14. Imagen que muestra el circuito final armado en protoboard
22
7. Recomendaciones
8. Conclusiones
9. Referencias bibliogrficas
23