PRÁCTICA 1.
Universidad Veracruzana
Ingenieria en Electrónica y Comunicaciones
Docente: Dr. Adrián Sánchez Vidal
Facultad Ingenieria Eléctrica y Electrónica
Experiencia educativa: Microprocesadores y
microcontroladores
Equipo: 5
Autores:
Castillo Campomanes Kenya
Hernandez Hernandez Liliana Lizbeth
Montillo Balderas Miguel Angel
I. Introducción
Durante la experiencia microprocesadores y microcontroladores hemos aprendido a
programar el microcontrolador dsPIC30f4011 para diferentes aplicaciones que este
puede tener, en la siguiente práctica presentaremos el código fuente con el cual
lograremos que un display cátodo común enumere la secuencia de 1 a 9 cambiando
cada segundo dichos números.
II. Código
//ARCHIVOS DE CABECERA
#include<p30f4011.h>
#define FCY 5000000UL
#include <libpic30.h>
En esta parte del código definimos las diferentes librerías que necistamos para la
ejecución del programa.
//ETIQUETAS
#define sega PORTBbits.RB0 // DEFINE EL PUERTO RB0 PARA
ENCENDER EL SEGMENTO A DEL DISPLAY
#define segb PORTDbits.RD3 // DEFINE EL PUERTO RD3 PARA
ENCENDER EL SEGMENTO B DEL DISPLAY
#define segc PORTBbits.RB2 // DEFINE EL PUERTO RB2 PARA
ENCENDER EL SEGMENTO C DEL DISPLAY
#define segd PORTEbits.RE8 // DEFINE EL PUERTO RE8 PARA
ENCENDER EL SEGMENTO D DEL DISPLAY
#define sege PORTBbits.RB4 // DEFINE EL PUERTO RB4 PARA
ENCENDER EL SEGMENTO E DEL DISPLAY
#define segf PORTEbits.RE0 // DEFINE EL PUERTO RE0 PARA
ENCENDER EL SEGMENTO F DEL DISPLAY
#define segg PORTBbits.RB6 // DEFINE EL PUERTO RB6 PARA
ENCENDER EL SEGMENTO G DEL DISPLAY
Definimos los diferentes puertos que asignaremos a cada segmento para el
encendido del display.
//PROTOTIPO DE FUNCIONES
void PUERTOS_IO(); //FUNCION PRINCIPAL QUE ENCENDERA LOS
SEGMENTOS DEL 0 AL 9 POR CADA SEGUNDO.
Le presentamos al compilador el nombre de la función que hará funcionar nuestro
display para después solo llamarla en la función principal.
//FUNCION PRINCIPAL
void main (){
PUERTOS_IO(); //FUNCION QUE SE VA A REPETIR
INFINITAMENTE
while(1){
//Inicia con el 0
sega=1;
segb=1;
segc=1;
segd=1;
sege=1;
segf=1;
segg=0;
__delay_ms(5000);
//NUMERO 1
sega=0;
segb=1;
segc=1;
segd=0;
sege=0;
segf=0;
segg=0;
__delay_ms(5000);
//NUMERO 2
sega=1;
segb=1;
segc=0;
segd=1;
sege=1;
segf=0;
segg=1;
__delay_ms(5000);
//NUMERO 3
sega=1;
segb=1;
segc=1;
segd=1;
sege=0;
segf=0;
segg=1;
__delay_ms(5000);
//NUMERO 4
sega=0;
segb=1;
segc=1;
segd=0;
sege=0;
segf=1;
segg=1;
__delay_ms(5000);
//NUMERO 5
sega=1;
segb=0;
segc=1;
segd=1;
sege=0;
segf=1;
segg=1;
__delay_ms(5000);
//NUMERO 6
sega=1;
segb=0;
segc=1;
segd=1;
sege=1;
segf=1;
segg=1;
__delay_ms(5000);
//NUMERO 7
sega=1;
segb=1;
segc=1;
segd=0;
sege=0;
segf=0;
segg=0;
__delay_ms(5000);
//NUMERO 8
sega=1;
segb=1;
segc=1;
segd=1;
sege=1;
segf=1;
segg=1;
__delay_ms(5000);
//NUMERO 9
sega=1;
segb=1;
segc=1;
segd=1;
sege=0;
segf=1;
segg=1;
__delay_ms(5000);
}
}
Dentro de la función principal insertamos el nombre la función prototipo que
habiamos generado previamente y posterior a ello creamos un while quien será el
encargado de repetir infinitamente el contenido de la función. Podemos observar que
para generar cada número debemos encender distintos segmentos del display y
posterior a el encendido que mostrará el número insertamos un delay que nos
ayudará a que permanezca apagado durante un segundo.
//IMPLEMENTACION DE FUNCIONES
void PUERTOS_IO(){
TRISBbits.TRISB0=0; //ASIGNA EL PUERTO B0 COMO SALIDA
ADPCFGbits.PCFG0=1; //ASIGNA EL PUERTO B0 COMO DIGITAL
TRISDbits.TRISD3=0; //ASIGNA EL PUERTO D3 COMO SALIDA
TRISBbits.TRISB2=0; //ASIGNA EL PUERTO B0 COMO SALIDA
ADPCFGbits.PCFG2=1; //ASIGNA EL PUERTO B0 COMO DIGITAL
TRISEbits.TRISE8=0; //ASIGNA EL PUERTO E8 COMO SALIDA
TRISBbits.TRISB4=0; //ASIGNA EL PUERTO B0 COMO SALIDA
ADPCFGbits.PCFG4=1; //ASIGNA EL PUERTO B0 COMO DIGITAL
TRISEbits.TRISE0=0; //ASIGNA EL PUERTO E0 COMO SALIDA
TRISBbits.TRISB6=0; //ASIGNA EL PUERTO B0 COMO SALIDA
ADPCFGbits.PCFG6=1; //ASIGNA EL PUERTO B0 COMO DIGITAL
}
Finalmente asignamos los distintos puertos como salidas o entradas según los
requerimentos, en este caso ocuparemos todos los puertos como salidas digitales, es
importante observar y recordar que los puertos B deben asignarse no solo como
salidas sino como salidas digitales también debido a que dichos puertos también
pueden ser análogicos, mientras que los demás puertos son digitales por default.
III. Imágenes
IV. Conclusiones
Podemos concluir que la función delay tiene muchas aplicaciones y bondades,
observamos dentro de la práctica como realizando diferentes cálculos podemos
generar un retraso en la implementación de las diferentes instruciones de nuestro
código lo cual podemos manipular a nuestro antojo y beneficio.