He realizado un programa para que un elevador vaya de la planta 5 a la planta 0 y viceversa. El programa que vereis a continuación, si el elevador empieza en la planta 0 sube a la 5º y baja correctamente. En cambio si empieza en la 5º planta el motor no se pone en marcha. Repito si lo primero que haces es pulsar el pulsador 5 funciona correctamente el programa
#include <16f887.h> //Pic a utilizar
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOLVP //Configuracion inicial del pic.
#use delay(clock=4000000) //Frecuencia del oscilador 4Mhz
#use RS232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //Configuracion del puerto serie; Velocidad 9600 baudios; Pin_C6 transmision y Pin_C7 recepcion.
#byte osccon=0x8f
#use fast_io(B)
#use fast_io(D)
#bit detect0=0x06.0
#bit detect1=0x06.1
#bit detect2=0x06.2
#bit detect3=0x06.3
#bit detect4=0x06.4
#bit detect5=0x06.5
#bit puls0=0x05.0
#bit puls1=0x05.1
#bit puls2=0x05.2
#bit puls3=0x05.3
#bit puls4=0x05.4
#bit puls5=0x05.5
void subir (void);
void bajar (void);
void parar (void);
main()
{
set_tris_A(0xff);
set_tris_B(0xff);
set_tris_D(0x00);
output_D(0);
osccon=0x61;
while(1)
{
while(puls5==0) //Si el pin puls5 está a 0 que no haga nada.
{
delay_ms(50);
}
while(puls5==1) //Si el pin puls5 está a 1 que no haga nada.
{
delay_ms(50);
}
subir(); //Subir
while(detect5==0); //Subir mientras que el detector 5 sea 0.
parar(); //Parar
while(puls0==0) //Si el pin puls0 está a 0 que no haga nada.
{
delay_ms(50);
}
while(puls0==1) //Si el pin puls5 está a 1 que no haga nada.
{
delay_ms(50);
}
bajar(); //Bajar
while(detect0==0); //Bajar mientras el detector 0 sea 0.
parar(); //Parar
}
}
void subir (void)
{
output_bit(PIN_D0, 1);
output_bit(PIN_D1, 0);
return;
}
void parar (void)
{
output_bit(PIN_D0, 0);
output_bit(PIN_D1, 0);
return;
}
void bajar (void)
{
output_bit(PIN_D0, 0);
output_bit(PIN_D1, 1);
return;
}