Programación Específica > Programación en C

 16f877, Algunos Comportamientos No Deseados

(1/1)

Guito:
Estoy usando el PCWH para programar un pic 16F877 y la verdad que hace cosas raras. Por ejemplo con esta rutina:


--- Código: Text --- #include <16F877A.h>#include <C:\_Proyectos\02\definiciones.h> #bit Sal_Lamp_1 = PORTC.4#bit Sal_Lamp_2 = PORTC.5 #fuses HS,NOWDT,NOLVP#use delay(clock=20000000)  // --- Declaracion Variables ----- int1 Valor_anterior_RS_M1,Valor_anterior_RS_M2,Aux_Lamp,Seguridad_Activada,Aux_Negat;int Cont_dSeg,Cont_dSeg_2;long Pulsos_M1,Pulsos_M2;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;   // --- Subrutinas ----------------#include <C:\_Proyectos\02\DeteccionBotones.c>#include <C:\_Proyectos\02\IniciarPuertos.c>//etc...   void main() {  // --- Inicializaciones ----------   IniciarPuertos();  setup_timer_1( T1_INTERNAL | T1_DIV_BY_8 );    //Inicio del Timer1, cuenta el clock/4 y pone el prescaler en 8 // --- Inicio Rutina Principal ---   while(true){    //bucle infinito       DetectarBotonPresionado();       Rutina_Lampara_1(20);  //el argumento es el tiempo que queda la lampara 1 prendida       Rutina_Lampara_2();  //esta lampara es ON-OFF             } }    //Archivo del include//-------------------   //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 ---  void Rutina_Negat(Tiempo){       if(boton_Negat){          //   && !Seguridad_Activada){        Sal_Negat = 1;        Aux_Negat = 1;        Cont_dSeg = 0;        set_timer1(0xBDC);      }              if(Aux_Negat && (Cont_dSeg < Tiempo)){              if(get_timer1() < 3036){    //dio la vuelta            Cont_dSeg++;            set_timer1(0xBDC);    //if(!Seguridad_Activada) {set_timer1(0xBDC);}          }            }      else{      Sal_Negat = 0;      Aux_Negat = 0;      }} }   

// 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 ---       void Rutina_Lampara_B(){         if(boton_Lampara_B && !Aux_Lamp_B){            if(Sal_Lamp_B)              Sal_Lamp_B = 0;            else              Sal_Lamp_B = 1;          }         Aux_Lamp_B = boton_Lampara_B;    //memorizo el ultimo estado del boton       }    
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa