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
Ir a la versión completa