Logo Studenta

Practica reloj

¡Estudia con miles de materiales!

Vista previa del material en texto

Universidad Tecnológica de Querétaro
Alum. Rodríguez Del Castillo Kevin Martin
Micro-Controladores 
Practica 3.- Reloj
Programación
// Practica 3.- Reloj
//Se utiliza la técnica de multiplexar
//Autor: Kevin Martin Rodriguez Del Castillo
// declarar variables
int display[10]= {0X3F,0X06,0x5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
int minutos, horas, segundos;
// declara funciones
void imprimir(void);
// estructura de interrupciónon
void interrupt() {
 // Preguntar quien hizo la interrupción
 if(INTCON.TMR0IF == 1) // el timer se desvordó?
 {
 // Indica la frecuencia en la que se imprime en una pantalla
 PORTC.F0 = ~PORTC.F0;
 segundos++;
 if(segundos>59)
 {
 segundos = 0;
 minutos++;
 if(minutos>59)
 {
 minutos = 0;
 horas++;
 if(horas>23)
 {
 horas = 0;
 }
 }
 }
 }
 INTCON.TMR0IF = 0; // limpiar la bandera
 TMR0H = 0X67;
 TMR0L = 0X6A;
}
void main() {
 TRISB = 0X00; // Puerto B como salida
 ADCON1= 0x0F; // Puerto B como digital
 PORTB = 0X00; // Limpiar puerto B
 TRISD = 0X00; // Puerto D como salida
 PORTD = 0X00; // Limpiar puerto D
 trisc=0;
 portc=0;
 // Valores iniciales
 horas = 23;
 minutos = 58;
 segundos = 0;
 // Interrupcion
 INTCON = 0B11100000; // 1-Habilita Interrupciones (bit 7)
 // 2-Habilita Interrupciones periféricas (bit 6)
 // 3-Habilita Interrupcion por Timer (bit 5)
 // Timer0
 T0CON = 0B10000110; // 1-Habilita el timer (bit 7)
 // 2-Configurado a 16 bits (bit 6)
 // 3-Preescaladro (bit 3 al bit 0)
 while(1)
 {
 imprimir();
 }
}
// estructura de funciones
void imprimir(void)
{
 PORTD = 0B00000010; // Prende las decenasde los segundos
 PORTB = display[segundos/10];
 delay_ms(500);
 PORTD = 0B00000001; // Prende las unidades de los segundos
 PORTB = display[segundos%10];
 delay_ms(500);
 PORTD = 0B00001000; // Prende las decenas de los minutos
 PORTB = display[minutos/10];
 delay_ms(500);
 PORTD = 0B00000100; // Prende las unidades de los minutos
 PORTB = display[minutos%10];
 delay_ms(500);
 PORTD = 0B00100000; // Prende las decenas de las horas
 PORTB = display[horas/10];
 delay_ms(500);
 PORTD = 0B00010000; // Prende las unidades de las horas
 PORTB = display[horas%10];
 delay_ms(500);
}
Simulación

Continuar navegando