como cambiar efectos de un led con un pulsador en mikroc

#1
tengo esto


void main() {

trisa=1;
trisb=0;
portb=0;

for ( ;; ) {
if( porta.f0==1 ) {

portb.f5=1;
delay_ms(5000);
portb.f5=0;

}

}
}

aqui lo mantengo encendido durante 5 segundo pero quiero que con el mismo boton haga otro efecto por ejemplo las luces navideñas por favor nececito ayuda gracias ...
 
Última edición:
#2
pues con un delay no logras mas que trabar el micro
puedes usar el delay pero muy pequeño

lo ideal para manejar el brillo del led es con PWM con un periodo de 20ms
no nesesariamente el pic debe tener comparador para hacer el PWM
puedes hacerlo por software mas que por hardware
 
#3
usa un contador(declaralo global) y programa una interrupción para el pulsador de ser posible, la interrupción debe incrementar el contador o si solo programaras 8 efectos puedes usar desplazamientos por ejemplo
Código:
/** registro para los efectos **/
char efecto = 1;
/** interrupción del boton **/
void boton(void){
  if(efecto & 0x80) efecto = 1;
  else efecto = efecto << 1;
}
/** Codigo principal **/
void main(void){
  /** Codigo para los efectos **/
  while(efecto & 0x01){ 
     /** Efecto 1 **/
  }
  while(efecto & 0x02){ 
     /** Efecto 2 **/
  }
  while(efecto & 0x04){ 
     /** Efecto 3 **/
  }
  while(efecto & 0x08){ 
     /** Efecto 4 **/
  }
  while(efecto & 0x10){ 
     /** Efecto 5 **/
  }
  while(efecto & 0x20){ 
     /** Efecto 6 **/
  }
  while(efecto & 0x40){ 
     /** Efecto 7 **/
  }
  while(efecto & 0x80){ 
     /** Efecto 8 **/
  }
}
No se como declares interrupciones pero es más apropiado que usar encuesta sobre todo si usas retrasos grandes, a nadie le hará mucha gracia tener que esperar varios segundos presionando el botón hasta que se detecte el intento de cambiar de efecto.
 
#4
muchas gracias nuyel pero otra pregunta hay como llamo la funcion boton si lo voy a utilizar en porta.f0
es decir el purto RA0= entrada es donde voy a utilizar a el boton y/o pulsador
 
Última edición:
#5
No se que PIC estas usando y no sabría si admite interrupción en el puerto A la mayoría que he visto la usan el el puerto B (de hecho incluyen una resistencia pull-up interna para facilitar trabajar con botones), habría que revisar la hoja de datos.
 
Arriba