Práctica 4
Práctica 4
UNIVERSIDAD DE GUANAJUATO
D. I. C. I. S.
Laboratorio de Microprocesadores y
Microcontroladores
Práctica de Laboratorio No. 4:
Objetivo:
Programar el microcontrolador para que utilice el temporizador TMR0 y una tabla de conversión
para la operación del exhibidor de 7 segmentos.
Componentes:
1 Microcontrolador PIC 18f45K50
1 Exhibidor 7 segmentos
Equipo:
1 Fuente de +5V
1 Punta lógica
1 Multímetro
1 Plantilla
1 Programa MPLAB X IDE
1 Laptop
1 Progamador para PIC 18F45K50
1 Hoja de datos del PIC18F45K50
4.1 Introducción
En esta práctica se programará el PIC para que genere un contador que será desplegado en un exhibidor de 7
segmentos. El contador se implementará utilizando el temporizador TIMER0 que tiene la opción de utilizar
un divisor de frecuencia con razones de 1:2 a 1:256. Además, puede trabajar como temporizador/contador de
8 o 16 bits.
El temporizador se programa mediante el registro T0CON. Todos los bits de este registro están en ‘1’ por
default.
Bit 7 habilita el TIMER0.
Bit 6 configura el TIMER0 como un temporizador/contador de 8 o 16-bit.
Bit 5 selecciona la fuente de reloj: pin T0CKI (RA4) o la señal interna del ciclo de instrucción.
Bit 4 selecciona el incremento por disparo positivo o negativo en el pin T0CKI.
Bit 3 asigna el divisor (prescaler) al TIMER0
Bits 2-0 Seleccionan la razón del divisor (prescaler).
Si se trabaja con una frecuencia de reloj de 4 MHz, el temporizador trabaja de 0000h a FFFFh y utiliza el
divisor con una razón 1:16, generará una interrupción cada 1.048 S. El temporizador generará una
interrupción al desbordarse (al pasar de FFFFh a 0000h) y en la rutina de interrupción se incrementará el
registro auxiliar. La interrupción se programa al cargar el registro INTCON con el valor A0h.
La interrupción del temporizador TMR0 no despierta al procesador del modo “Sleep” ya que el temporizador
se apaga en este modo.
Para manejar el exhibidor de 7 segmentos se tiene que transformar el número en binario del contador en el
valor de salida que desplegará el exhibidor en decimal. Esto se refleja en la siguiente tabla que representa los
valores para un exhibidor de cátodo común:
Valor Valor RB6 RB5 RB4 RB3 RB2 RB1 RB0 Hexadecimal
Decimal Binario A B C D E F G output
0 0000 1 1 1 1 1 1 0 7E
1 0001 0 1 1 0 0 0 0 30
2 0010 1 1 0 1 1 0 1 6D
3 0011 1 1 1 1 0 0 1 79
4 0100 0 1 1 0 0 1 1 33
5 0101 1 0 1 1 0 1 1 5B
6 0110 1 0 1 1 1 1 1 5F
7 0111 1 1 1 0 0 0 0 70
8 1000 1 1 1 1 1 1 1 7F
9 1001 1 1 1 0 0 1 1 73
Los valores de esta tabla se cargarán en una variable tipo arreglo para ser llamados en función del valor del
argumento de la variable.
4.2 Desarrollo
A. Se programa el PIC con el siguiente código en xC8 (en caso de duda de cómo hacerlo consulte la Práctica
No. 1).
#include <xc.h>
#include <pic18f45k50.h>
//#include <pic18f45k50.h>
El desbordamiento del temporizador generará el salto a la función de interrupción de alta prioridad. En esta se
incrementa la variable global Value que será utilizada en la función main. Value se incrementará cada 1.048
segundos y, cuando alcance un valor mayor a 9 se regresa nuevamente a 0. Observar la última instrucción que
limpia la bandera de interrupción del temporizador.
char Value;
if (Value > 9)
{
Value = 0;
}
INTCONbits.TMR0IF=0;
}
En la sección de configuración se definen los puertos A y D como salidas digitales. Se activa la interrupción
por desbordamiento del temporizador TMR0, se define de 16 bits, para su operación se selecciona como señal
de reloj el reloj del microcontrolador y se define una razón del divisor de 1:16.
void Configuracion(void)
{
TRISA=0;
TRISD=0;
ANSELA=0;
ANSELD=0;
LATA = 0;
Finalmente, en la función main se declara la constante tipo char como un arreglo unidimensional de 10
valores. Estos valores formarán la “look-up table” que permitirá desplegar en el exhibidor de 7 segmentos los
valores en decimal del contenido de la variable Value. Entre cada llamado a la look-up table se tendrá un
retardo de 50 microsegundos.
void main(void) {
const char Dis7seg[10] = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x73};
Configuracion();
while(1)
{
PORTD = Dis7seg[Value]; // Parpadea LED RA0
__delay_ms(50);
}
return;
}
B. Ya que se haya programado el PIC, este se inserta en la plantilla de trabajo y se conectará de acuerdo con
el siguiente diagrama que es para el PIC18F4550. Tenga cuidado al manejar el PIC de no dañarlo con
electricidad estática (utilizar pinzas para su manejo). El voltaje que se utilizará es de 5V para VDD y 0V para
VSS. Si utiliza un exhibidor de 7 segmentos de ánodo común debe cambiar los valores de la tabla de
conversión (1s por 0s y 0s por 1s). Los pines del microcontrolador generan, cada uno, una corriente de 25mA.
Si los LEDs del exhibidor no soportan esta magnitud conecte una resistencia en serie en cada línea con un
valor de 220 ohm.
2. Investigue y reporte los registros necesarios para utilizar la memoria EEPROM, así como el significado de
EEPROM.