Hola a todos! Me propuse hacer un proyecto supuestamente simple pero aquí me encuentro pidiéndoles ayuda
Uso un pic12f629, mi finalidad es que el micro "espere un tiempo determinado", y si durante este intervalo NO detecta un cambio de estado en alguno de los puertos [GP0:GP3], apague la salida GP4. Ese tiempo lo setea según el nivel, alto o bajo, del puerto GP5 que son 10 o 30 seg respectivamente. Esto lo programé usando las interrupciones por cambio de estado en puerto y por desborde de TMR0. Ya lo simulé con el Proteus y con el Picsimulator y no cambia el nivel de la salida. Desde ya agradezco cualquier ayuda o corrección.
Les paso el código:
Uso un pic12f629, mi finalidad es que el micro "espere un tiempo determinado", y si durante este intervalo NO detecta un cambio de estado en alguno de los puertos [GP0:GP3], apague la salida GP4. Ese tiempo lo setea según el nivel, alto o bajo, del puerto GP5 que son 10 o 30 seg respectivamente. Esto lo programé usando las interrupciones por cambio de estado en puerto y por desborde de TMR0. Ya lo simulé con el Proteus y con el Picsimulator y no cambia el nivel de la salida. Desde ya agradezco cualquier ayuda o corrección.
Les paso el código:
Código:
int contint=0;
void interrupt () {
if (INTCON.F0) { //Interrup por cambio de estado
GPIO.GP4 = 0; //Desactiva salida
contint=0;
INTCON.F0=0;
}
if (INTCON.F2) { //Interrup por derborde de TMR0
contint++;
INTCON.F2=0;
}
}
void main () {
CMCON = 7; //Desactiva comparador
OPTION_REG = 0x00; //Establece preescaler de TMR0 1:2
OSCCAL = 0xFC; //Osc interno a 4Mhz
TRISIO = 0x2F; //Configura GP4 como salida
INTCON = 0xA8; //Interrupciones: Global, por desborde de TMR0 y cambio de estado
IOC = 0x0F; //Habilita interrup por cambio de estado en GP0, GP1, GP2 y GP3
GPIO = 0x00; //Inicializa puertos
TMR0=0;
while (1) {
if ((GPIO.GP5==1)&&(contint==610)) { //10 seg de Inactividad
contint=0; //Reinicia el contador de interrup.
TMR0=0;
GPIO.GP4=1; //Activa salida
}
else if ((GPIO.GP5==0)&&(contint==1830)) { //30 seg de Inactividad
contint=0; //Reinicia el contador de interrup.
TMR0=0;
GPIO.GP4=1; //Activa salida
}
}
}
Última edición por un moderador: