#include <xc.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC=HS
#pragma config WDT=OFF
#pragma config PBADEN=OFF //Liberar pines analogos del puerto B
#pragma config LVP=OFF //Para utilizar el pin RB5
#define display PORTD
int A, B, C, D, cuenta, segundos;
int numeros[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
int retardoLED, retardo1, minuto, minuto1, segundo, segundo1, hora, hora1;
int led[]={0x01,0x00};
void main(void){
ADCON1=7;//Apagar I/O Analogicas
TRISA=0; //Puerto A como salida
TRISC=0; //Puerto C como salida
TRISD=0; //Puerto D como salida
LATA=0; //Salida del puerto A inicia en '0'
LATC=0; //Salida del puerto C inicia en '0'
LATD=0; //Salida del puerto D inicia en '0'
TRISB=0xff; //Puerto B como entrada
INT0IF=0; // Borrar la bandera de la interrupcion del pin RB0
INT0IE=1; //Habilitar interrupcion del pin RB0
INTCON3bits.INT1IF=0; // Borrar la bandera de la interrupcion del pin RB1
INTCON3bits.INT1IE=1; //Habilitar interrupcion del pin RB1
INTCON3bits.INT2IF=0; // Borrar la bandera de la interrupcion del pin RB2
INTCON3bits.INT2IE=1; //Habilitar interrupcion del pin RB2
GIE=1; //Habilitar interrupciones globales
//Se deja la configuracion estandar (se dispara enflancos de subida)
while(1){
for(hora1=0; hora1<=2; hora1++){
for(hora=0; hora<=9; hora++){
for(minuto1=0; minuto1<=5; minuto1++){
for(minuto=0; minuto<=9; minuto++){
for(segundo1=0; segundo1<=5; segundo1++){
for(segundo=0; segundo<=9; segundo++){
for(retardoLED=0; retardoLED<=1; retardoLED++){
for(retardo1=0; retardo1<=25; retardo1++){
//configuracion LED a modo de CPU
LATC=led[retardoLED];
__delay_ms(10);
//configuracion numeros horas, minutos y segundos
LATA=0x01;
display=numeros[segundo];
__delay_ms(1);
LATA=0x02;
display=numeros[segundo1];
__delay_ms(1);
LATA=0x04;
display=numeros[minuto];
__delay_ms(1);
LATA=0x08;
display=numeros[minuto1];
__delay_ms(1);
LATA=0x10;
display=numeros[hora];
__delay_ms(1);
LATA=0x20;
display=numeros[hora1];
__delay_ms(1);
if(hora==4 & hora1==2){
hora=0;
hora1=0;
}
}
}
}
}
}
}
}
}
}
}