hola, aqui el programa comentado, de esta forma me funciona sin problemas.
#include <16CR84.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOWDT
#nolist
#byte port_A=05
#byte port_b=06
#use fixed_io(A_OUTPUTS=PIN_A0,PIN_A1,PIN_A2,PIN_A3,PIN_A4)
#use fixed_io(B_OUTPUTS=PIN_B0,PIN_B4,PIN_B5,PIN_B6,PIN_B7)
int a=0,dptoAtiempo=0,dptoAstatus=0;
//variable a para que cuente las interrupciones
//dptoAtiempo para que inicie el conteo de interrupciones con la variable a
//dptoAstatus para saver cuando ya transcurrio el tiempo que queria.
#int_RTCC
RTCC_tiempo()
{
if(dptoAtiempo!=0) a++;
set_rtcc(0);
}
void main() {
setup_counters(RTCC_INTERNAL,RTCC_DIV_256);
enable_interrupts(global);
enable_interrupts(INT_RTCC);
set_rtcc(0);
port_a=0;
port_b=0;
while(true)
{
if(input(pin_b1)==1 && dptoAstatus==0) dptoAtiempo=1; //inicio el conteo de interrupciones siempre que no aya hercho este proceso antes, en este caso 77 interrupciones equivalen a 10 seg.
if(a>=77 && input(pin_b1)==1 && dptoAstatus==0) //verifica que variable a sea igual o superios a 77 y que el pin_b1 este en 1, para saver que ya paso el tiempo que yo queria (10seg)
{
dptoAstatus=1; //paso dptoAstatus a 1 para que no vuelva a entrar en este if()
dptoAtiempo=0; //paro el conteo de interrupciones
a=0; //vuelvo el contador de interrupciones a 0
}
if(a>=77 && input(pin_b1)==1 && dptoAstatus==1) //cuando sueltan el boton en pin_b2 se activa el contador de interrupciones nuevamente y este if espera a que llegue a 77 o mas para entrar, para prender el led en pin_a0.
{
output_high(pin_a0);
dptoAtiempo=0; //para el conteo de interrupciones
a=0; //vuelvo el contador de interrupciones a 0
}
if(input(pin_b1)==0) //si el boton en pin_b1 n o esta precionado se anula todo lo anterior
{
dptoAstatus=0;
dptoAtiempo=0;
output_low(pin_a0);
}
//aqui verifico los estados de los pines b2, b3 y el valor de dptoAstatus para saver que lla conto los primeros 10seg.
if((input(pin_b2)==0 && input(pin_b3)==1) && dptoAstatus==1) dptoAtiempo=1;
if((input(pin_b2)==1 && input(pin_b3)==0) && dptoAstatus==1) output_high(pin_a0);
if((input(pin_b2)==0 && input(pin_b3)==0) && dptoAstatus==1) output_high(pin_a0);
}
}
no se si se entendio lo que quise hacer, pero funciona superbien.
ahora me gustaria saver como mejorar el codigo para la eficiencia y que no haga cosas extrañas o para que el codigo use menos enpacio.
saludos...