Hola. ¿Alguien me podría ayudar con el siguiente trabajo?
Debo programar en ccs y controlar un motor pap, por ahora solo una velocidad y debe girar a la izquierda durante 5 minutos, detenerse 5 minutos, luego girar a la derecha 5 minutos.
Lo realizado hasta ahora es:
Lo que me ha pasado es que no puedo hacer que se cumplan los if.
Al sacar la secuencia y dejar solo b3,d5 y d7, lo hace pero en un sentido todo bien, en sentido contrario b3 empieza a parpadear y ahí queda y no avanza sin cumplir con la secuencia.
Cualquier ayuda se agradece infinitamente.
Juan carlos.
Debo programar en ccs y controlar un motor pap, por ahora solo una velocidad y debe girar a la izquierda durante 5 minutos, detenerse 5 minutos, luego girar a la derecha 5 minutos.
Lo realizado hasta ahora es:
Código:
# include <16f877a.h>
# device *=16
# use delay(clock=4M)
# fuses xt,NOWDT
int32 Cont = 0; //Variable que Cuenta.
int32 Cont1 = 0;
//Interrupcion del Timer1.
#int_Timer1
void TIMER0_isr( void )
{
Cont++; //Incrementa el Contador.
Cont1++;
set_timer0(3036 ); //Carga el Timer0.
}
void main( )
{
set_tris_c(0b11110000); //Puerto c pin 4 rntrada resto salida.
set_tris_D(0b11111000); //Puerto c pin 4 rntrada resto salida.
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);; //Preescaler de 64.
enable_interrupts( INT_TIMER1 ); //Habilita la Interrupcion del Timer0.
enable_interrupts( GLOBAL ); //Habilita la Interrupcion Global.
set_timer1( 3036 ); //Carga el Timer0.
while( true )
{
if (input(pin_d3)==1)// pulsador de partida
{
if( 0<Cont >=5 ) //cuando llegue 5 min parta ( los valores los modifico despues)
{
output_high ( pin_b3 );//led indivador
output_high (pin_d5);//idem anterior
/^*******secuencia
output_high( pin_c4 );
output_high (pin_c5);
output_high (pin_c6);
output_low (pin_c7);
delay_ms(1);
output_low ( pin_c4 );
output_high (pin_c5);
output_high ( pin_c6 );
output_low (pin_c7);
delay_ms(1);
output_low ( pin_c4 );
output_low (pin_c5);
output_high ( pin_c6 );
output_high (pin_c7);
delay_ms(1);
output_hihg ( pin_c4 );
output_low (pin_c5);
output_low ( pin_c6 );
output_high (pin_c7);
delay_ms(1);
}
else if( 5<Cont>=10 ) //aqui han pasado 5 debe detenerse y esperar.
{
output_low ( pin_b3 );
output_low (pin_d5);
output_low ( pin_c4 );
output_low (pin_c5);
output_low ( pin_c6 );
output_low (pin_c7);
}
if( Cont1 ==15 ) //pasaron los 5 min, funcione en sentido contrario por 5 min
{
// output_high ( pin_b3);
output_high (pin_d7);
// falta secuencia
}
else if( Cont1 >20) //si han pasado 5 min pare.
{
//output_low ( PIN_b3 );
output_low (pin_d7);
output_low (pin_d5);
Cont = 0;
Cont1 = 0;
}
}
if (input(pin_d3)==0)// todo detenido
{
//output_low ( PIN_b3 );
output_low (PIN_d5);
output_low (PIN_d7);
}
}
}
Al sacar la secuencia y dejar solo b3,d5 y d7, lo hace pero en un sentido todo bien, en sentido contrario b3 empieza a parpadear y ahí queda y no avanza sin cumplir con la secuencia.
Cualquier ayuda se agradece infinitamente.
Juan carlos.
Última edición por un moderador: