• Sábado 21 de Diciembre de 2024, 10:02

Autor Tema:  16f877, Algunos Comportamientos No Deseados  (Leído 1482 veces)

Guito

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
16f877, Algunos Comportamientos No Deseados
« en: Viernes 29 de Septiembre de 2006, 21:31 »
0
Estoy usando el PCWH para programar un pic 16F877 y la verdad que hace cosas raras. Por ejemplo con esta rutina:

Código: Text
  1.  
  2. #include <16F877A.h>
  3. #include <C:\_Proyectos\02\definiciones.h>
  4.  
  5. #bit Sal_Lamp_1 = PORTC.4
  6. #bit Sal_Lamp_2 = PORTC.5
  7.  
  8. #fuses HS,NOWDT,NOLVP
  9. #use delay(clock=20000000)
  10.  
  11.  
  12. // --- Declaracion Variables -----
  13.  
  14. int1 Valor_anterior_RS_M1,Valor_anterior_RS_M2,Aux_Lamp,Seguridad_Activada,Aux_Negat;
  15. int Cont_dSeg,Cont_dSeg_2;
  16. long Pulsos_M1,Pulsos_M2;
  17. int1 boton01,boton02,boton03,boton04,boton05,boton06,boton07,boton08,boton09,boton10,boton11,boton12,boton13,boton14,boton15,boton16,boton17,boton18,boton19,boton20,boton21,boton22,boton23,boton24;
  18.  
  19.  
  20.  
  21. // --- Subrutinas ----------------
  22. #include <C:\_Proyectos\02\DeteccionBotones.c>
  23. #include <C:\_Proyectos\02\IniciarPuertos.c>
  24. //etc...
  25.  
  26.  
  27.  
  28. void main() {
  29.  
  30.  
  31. // --- Inicializaciones ----------
  32.  
  33.   IniciarPuertos();
  34.   setup_timer_1( T1_INTERNAL | T1_DIV_BY_8 );    //Inicio del Timer1, cuenta el clock/4 y pone el prescaler en 8
  35.  
  36. // --- Inicio Rutina Principal ---
  37.  
  38.   while(true){    //bucle infinito
  39.  
  40.       DetectarBotonPresionado();
  41.  
  42.       Rutina_Lampara_1(20);  //el argumento es el tiempo que queda la lampara 1 prendida
  43.  
  44.       Rutina_Lampara_2();  //esta lampara es ON-OFF
  45.          
  46.  
  47.   }
  48.  
  49. }
  50.  
  51.  
  52.  
  53.  
  54. //Archivo del include
  55. //-------------------
  56.  
  57.  
  58.  
//en esta funcion tuve que crear un bit Aux_Negat porque si en el if ponía como argumento la salida, no anda!!!??
// por que? no se...

Código: Text
  1.  
  2.  
  3. void Rutina_Negat(Tiempo){
  4.  
  5.       if(boton_Negat){          //   && !Seguridad_Activada){
  6.         Sal_Negat = 1;
  7.         Aux_Negat = 1;
  8.         Cont_dSeg = 0;
  9.         set_timer1(0xBDC);
  10.       }
  11.        
  12.       if(Aux_Negat && (Cont_dSeg < Tiempo)){    
  13.           if(get_timer1() < 3036){    //dio la vuelta
  14.             Cont_dSeg++;
  15.             set_timer1(0xBDC);    //if(!Seguridad_Activada) {set_timer1(0xBDC);}
  16.           }
  17.      
  18.       }
  19.       else{
  20.       Sal_Negat = 0;
  21.       Aux_Negat = 0;
  22.       }
  23. }
  24.  
  25. }
  26.  
  27.  
  28.  


// Rutina On-Off
// presiono una vez y enciende, otra vez y apaga, este SI ACEPTA la salida como argumento del if.
// por que la otra Funcion no???


Código: Text
  1.  
  2.       void Rutina_Lampara_B(){
  3.  
  4.         if(boton_Lampara_B && !Aux_Lamp_B){
  5.             if(Sal_Lamp_B)
  6.               Sal_Lamp_B = 0;
  7.             else
  8.               Sal_Lamp_B = 1;  
  9.         }
  10.  
  11.         Aux_Lamp_B = boton_Lampara_B;    //memorizo el ultimo estado del boton
  12.  
  13.       }  
  14.  
  15.  

por ultimo, cuando presiono primero el boton de la lampara on-off y luego el de la temporizada,
enciende la on off, enciende la temporizada, pero cuendo apaga la temporizada apaga la on-off!!!??? porq que???
si primero presiono el boton de la temporizada, esta se prende y cuando presiono el de la on-off se prende la on-off
pero se apaga la temporizada antes de que termine el tiempo!?!?!

AYUDA POR FAVOR