Figura 1.

PIC16F877A tipo PDIP
Universidad de las Américas Puebla
Reporte: 95%
Nombre: Jorge Diego Guzmán Sosa. ID: 146957.
Ricardo Sinuhé Acevedo Baleón. ID: 146577.
Materia: LMT3021 Laboratorio de electrónica digital.
Profesor: Edgar Guevara.
Fecha: 04/09/14.

Práctica No. 1 "Simulador con el programa MPLAB"

Objetivo
El objetivo principal es conocer el programa MPLAB, sus funciones básicas, así
como el uso del compilador adecuado y activar funciones del PIC16F877A.

Introducción
Para poder realizar esta práctica solo se hace uso del programa MPLAB X
Integrated Development Environment (IDE), el cual es un software que permite
desarrollar aplicaciones para los microcontroladores desde un ordenador
(PC).Además, está basado en la
fuente abierta NetBeans IDE de
Oracle, lo que hace que las
aplicaciones tengan un lenguaje muy
cómodo para programar.

También se dió un vistazo al
PIC16F877A (Figura 1), el cual tiene
las siguientes características:
 Cinco puertos I/O.
 Tres Timers.
 Ocho convertidores analógico-digital
 Dos módulos Capture-Compare_PWM (CCP).
 Puerto serial sincronizado (SSP).
 100,000 ciclos de escribir/borrar en la memoria flash.

Cabe mencionar que existen muchas más características que se pueden
leer con más detalle en el datasheet correspondiente.
Figura 2.Lazo de control
Tabla 1. Secuencia de parpadeo en el puerto B
Resumen
En la práctica se conoció el ambiente general del software anteriormente
mencionado, además se aplicó conocimientos básicos de programación en C que
es una de las ventajas, ya que es muy amigable para programar en comparación
al ensamblador. Con todo esto se realizó una aplicación que básicamente era una
serie de parpadeo, con el cual se logró observar cómo se puede generar un ciclo.

Análisis teórico
Para empezar, se implementó un lazo de control
(Figura 2), cada bloque muestra una función que
permite visualizar de una manera ordenada todas las
tareas que se deben hacer.

El grupo main() es la función principal que llama
a los demás, la sección inicializar() es la que se
encarga de configurar el microcontrolador, la siguiente
obtener_entradas() recopila información externa que
pueda necesitar el microcontrolador, decidir() realizar
cualquier tipo de manipulación de datos,
ejecutar_salidas() muestra visualmente a través de las
terminales declaradas como salidas la función que se
modificó en el punto anterior y por último se tiene el
temporizador() el cual determina la rapidez con la cual
se ejecuta el bucle de control.
Algunas funciones se deben declarar ya que son parte de
las funciones básicas de un PIC, si se elimina alguna como la de inicializar() no
podría funcionar de manera correcta el dispositivo ya que no se le dice de qué
manera van a funcionar sus puertos, aunque algunas puedes omitirse
dependiendo del objetivo del programa.

Ahora, se realizó un programa el cual hace una serie que hace parpadear el
puerto B de 8 bits de forma alternada (Tabla 1), con lo cual se puede ver los
comandos básicos que se requieren para hacer funcionar cualquier programa


Procedimiento
En esta sección se realizó el código de la serie anteriormente descrita en el
programa MPLAB X IDE, este código se encuentra en anexo 1.

Los pasos para realizar esto son los siguientes:

 En la sección inicializar() se debe configurar el puerto B como salida con el
comando TRISB =0x00 y por seguridad se pone todos los bits del puerto en
0 con el comando PORTB = 0x00.
 Para generar el ciclo de la secuencia de parpadeo se generó
ejecutar_salida_1() donde se le dio los valores específicos en binario
PORTB= 0b01010101 y ejecutar_salida_2() donde se especificó como
PORTB= 0b10101010. Esto se hizo básicamente para tener los dos tipos
de salidas deseadas.
 En la sección de temporizador() se añadió el comando __delay_ms(50) el
cual da un retraso pero modificado para que lo tome como milisegundos,
también existen otros diferentes como __delay, __delay_us, etcétera.
 Todo lo anterior se debe anexar a main() de la siguiete forma:

void main(void){

inicializar();
while (1) {
obtener_entradas();
decidir();
ejecutar_salida_1();
temporizador();
ejecutar_salida_2();
temporizador();
}
}
Para métodos de conocer otra manera de programación también se realizó
un código en lenguaje ensamblador el cual se encuentra en el Anexo 2.

Resultados
El resultado del primer código se muestra en las siguientes imágenes:


 Para la sección ejecutar_salida_1() se obtiene:

 Para ejecutar_salida_2() se observa:

Con lo cual se verifica el funcionamiento correcto dl código. Para tener una mejor
idea de cómo funciona se creó el mismo código para el PIC16f84A ya que con el
programa Proteus ISIS se puede anexar el archivo .hex para poderlo simular, con
lo cual se obtuvo:











Conclusión
Lo que se puede concluir sobre esta práctica es que al hacer uso del lenguaje C
simplifica de manera muy grande el código y lo hace más sencillo de programar,
aunque para algunos comandos existen unos más sencillos en ensamblador y se
pueden utilizar en C con el comando asm(). Además, se puede observar que
existen diferentes formas de obtener el mismo resultado todo depende de cómo se
piense el problema.

Bibliografía
Palacios E., Remiro F., López L. J.. (2004).” Microcontrolador pic16f84 desarrollo
de proyectos”. México, D.F.: Ediciones Alfaomega grupo editor, S.A. de C.V.

Microchip Technology Inc. (2014). “Delay_ms function ??”. Consultado el 27 de
Agosto de 2014. Disponible en http://www.microchip.com/forums/m666857.aspx.


Anexo 1
/*
* File: Práctica_1.c
* Author: Jorge Diego Guzmán Sosa
*
* Created on 28 de agosto de 2014, 01:36 PM
*/


#include <stdio.h>
#include <stdlib.h>
#include <xc.h>


/*
* Declaraciòn de constantes
*/
// Frecuencia del oscilador (20MHz) para el retraso


#define _XTAL_FREQ 20000000


void inicializar(void) {

TRISB = 0x00;
PORTB = 0x00;
}

void obtener_entradas(void){

}

void decidir(void){

}

void ejecutar_salida_1(void) {

PORTB=0b01010101;
}

void ejecutar_salida_2(void) {

PORTB=0b10101010;
}


void temporizador(void) {

__delay_ms(50);
}

void main(void){

inicializar();
while (1) {
obtener_entradas();
decidir();
ejecutar_salida_1();
temporizador();
ejecutar_salida_2();
temporizador();
}
}


Anexo 2

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC;

list p=16f84a;
include <p16f84a.inc>;
porta equ 05h;
portb equ 06h;
trisa equ 85h;
trisb equ 86h;
status equ 03h;
rp0 equ 5;

org 0;
bsf status,rp0;
movlw b'00000000';
movwf trisa;
movwf trisb;
bcf status,rp0;

inicio
movlw b'01010101';
movwf portb;
movlw b'10101010';
movwf portb;
goto inicio;

end;

Sign up to vote on this title
UsefulNot useful