TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RaDoN en 20 de Diciembre de 2005, 07:20:00

Título: Timer, interrupcion, If-Case
Publicado por: RaDoN en 20 de Diciembre de 2005, 07:20:00
En el siguiente programa (el temporizador para la insoladora) ando de pruebas con un solo display 7-segmentos:

Codigo:
#INT_RTCC
  void control_rtcc(void)
  {
   set_timer0(131);
   switch(contador)
   {
      case 0:  contador = 125;
               --seg;
   }

   --contador;
  }

  void main(void)
  {
   set_tris_a(0x00); // Puerto A todo salidas
   port_b_pullups(TRUE); // Resistencias de polarización
   set_tris_b(0xFE); // Todo entradas excepto RB0 (zumbador)
   set_tris_c(0x00); // Puerto C todo salidas
 
   port_a=0;
   port_b=0;
   port_c=0;

   seg = 9;
   Disp4_On;
   contador = 125;

   setup_counters(RTCC_INTERNAL, RTCC_DIV_64);
   enable_interrupts(INT_RTCC);
   set_timer0(131);          // (256-131)*125*64 = 10000uS
   enable_interrupts(GLOBAL);

   while(1) port_c = digitos[seg];


Como vereis, el switch del codigo (en negrita) es un poco estraño, aunque valido, de hecho funciona bien, pero cuando lo cambio por un if(contador = 0) deja de funcionar, por lo que no entiendo nada de nada loco esto me supera Llorando
Título: RE: Timer, interrupcion, If-Case
Publicado por: Nocturno en 20 de Diciembre de 2005, 10:09:00
Es que si has probado esto tal cual if(contador = 0) no te va a funcionar. Prueba esto:
if(contador ==  0)
Título: RE: Timer, interrupcion, If-Case
Publicado por: pocher en 20 de Diciembre de 2005, 10:12:00
Pués tienes razón, tampoco le veo sentido que no funcione.

Supongo que en if habrás puesto 2 iguales en la comparación, no?
Título: RE: Timer, interrupcion, If-Case
Publicado por: RaDoN en 20 de Diciembre de 2005, 13:02:00
Ahora me estais haciendo dudar, pero supongo que sí (hasta ahí llego, o eso creo) HeladoMuchas risasMuchas risas
Título: RE: Timer, interrupcion, If-Case
Publicado por: elmasvital en 20 de Diciembre de 2005, 19:44:00
No falta un break del case?. El --seg creo que se ejecuta SIEMPRE... tal cual está puesto así.

También es lo que dice nocturno... la comparacion en c es == no = que es SIEMPRE de asignación aunque esté dentro de una condición.

Esto es lo mismo

if (contador==0)
if (!contador)

revisa eso 1 saludo.