Sábado 21 de Diciembre de 2024, 10:02
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Específica
»
Microcontroladores
»
Programación en C
(Moderador:
© Jonathan ©
) »
16f877, Algunos Comportamientos No Deseados
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: 16f877, Algunos Comportamientos No Deseados (Leído 1482 veces)
Guito
Nuevo Miembro
Mensajes: 4
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
#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
Tweet
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Específica
»
Microcontroladores
»
Programación en C
(Moderador:
© Jonathan ©
) »
16f877, Algunos Comportamientos No Deseados