puerto D de un pic 16f877a

tengo un problema con el puerto D de el pic 16877a, lo declaro como salida pero no cumple con lo que yo le programo que haga.. se queda habilitado el puerto ve este es mi programa por si alguien me pudiese ayudar:

#include <16f877.h>
#fuses xt,nowdt,nolvp
#use delay(clock=4000000)
#use fast_io(B)
#use fast_io(d)
int a;

void main(){
set_tris_B(0b11111111);
set_tris_D(0b00000000);

inicio:
a=0;
if(input(pin_b0==1)){
delay_ms(20);
if(input(pin_b0==1))
output_high(pin_d0);
}
}
 
Asegurate que el bit 4 del registro TRIS E este a cero, ya que con el seleccionas el modo de operacion del puerto D
 
orecones, no entiendo muy bien que es lo que querés hacer, pero supongo que querés que el bit 0 del puerto D se ponga en "1" o "0" dependiendo de la entrada en el bit "0" del puerto B...??
Por empezar creo que le falta el ciclo infinito para que el micro esté siempre testeando el puerto B para ver en qué estado está la entrada que le pusiste, o sea, que al final le faltaría un "goto inicio". Otra de las cosas para corregir es que en el if, no tenés que poner el "==1" dentro del paréntesis de la función "input()".
No entiendo muy bien que es lo que querés hacer llamando dos veces a la función "if". Esto es lo que yo modifiqué de tu programa y me funciona correctamente:


#include <16f877.h>
#fuses xt,nowdt,nolvp
#use delay(clock=4000000)
#use fast_io(B)
#use fast_io(d)

int a;

void main(){
set_tris_B(0b11111111);
set_tris_D(0b00000000);

inicio:
a=0;
if(input(pin_b0) == 1){ //Acá es donde tenés que sacar el "==1" fuera de la función "input"
delay_ms(20);
output_high(pin_d0); //Le saqué el "if" que iba acá, porque me parece que sobra :D
}
else //Esta parte se la agregué para que puedas corroborar que se prende y se
output_low(pin_d0); //apaga cuando activas o desactivas el pin 0 del puerto B
goto inicio; //Esto produce el ciclo infinito para que el pic siempre corra el programa
} //y no lo corra solamente una vez


Bueno, espero que esto sea lo que necesitas, ojala te sirva. Cualquier cosa avisá!.

Saludos!!

Rodnog!
 
seeeeee ya vi! gracias! lo que me faltaba mas bien era lo del goto inicio.. por que enviaba a todos los go to que yo tenia en otro programa y pues hacia lo que segun yo tendria que hacer... pero gracias por el detalle lo checare ahi estamos en contacto :)
 
Solo como sugerencia: No es una buena práctica depender de la instrucción GOTO, esto es C no basic y cuanto más grande sea al programa, la instrucción GOTO les va a dar problemas. En todo caso usen la mezcla de las funciones goto_address( ) + label_address( ) hasta que se acostumbren a no depender de eso.
salu2
 
Atrás
Arriba