Autor Tema: Timer, interrupcion, If-Case  (Leído 1762 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Timer, interrupcion, If-Case
« 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
Si juegas contra el mejor, pierdes como los demás.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Timer, interrupcion, If-Case
« Respuesta #1 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)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Timer, interrupcion, If-Case
« Respuesta #2 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?

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Timer, interrupcion, If-Case
« Respuesta #3 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
Si juegas contra el mejor, pierdes como los demás.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
RE: Timer, interrupcion, If-Case
« Respuesta #4 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.



 

anything