Es así, tengo este bloque de funcion
if (flag_autoconfigurando == FALSE && flag_motores_frenados == TRUE){
var_decrementa_delay_en_slide_timer_1--;
if (var_decrementa_delay_en_slide_timer_1 == 0){
var++;
cambio_de_slide();
var_decrementa_delay_en_slide_timer_1 = delay_en_slide_timer_1;
}
}
que me lleva a la funcion
void cambio_de_slide(void)
{
////controlo primero el numero de slide, si es el último, cambio el sentido
////de giro y reseteo la cuenta. Luego acelero
if (slide_actual == num_de_slides){
sentido_de_giro = !sentido_de_giro;
slide_actual = 0;
}
var_decrementa_arranque = 50; //dependiente de Timer 1
acelerar (sentido_de_giro);
}
y finalmente a este
void acelerar (int sentido)
{
int1 flag_hecho = 0;
//var_decrementa_arranque = 50; //dependiente de Timer 1
flag_motores_frenados = FALSE;
enable_interrupts(INT_TIMER1);
set_timer1(0);
while(var_decrementa_arranque > 1){
if (sentido == sentido_abajo && flag_hecho == 0){
marcha (motor_Sup, sentido, veloc_retencion); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_baja);
flag_hecho = 1;
}
if (sentido == sentido_arriba && flag_hecho == 0){
marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_baja);
flag_hecho = 1;
}
}
if (sentido == sentido_abajo){
marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_media);
}
if (sentido == sentido_arriba){
marcha (motor_Sup, sentido, veloc_media); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_baja);
}
}
en esta última funcion se queda dando vueltas en el while y nunca salta la Interrupcion del timer 1. Simulando en Proteus me fijo por las dudas todas las banderas y supuestamente están bien. Inclusive probé (se ve en este ultimo código borrar el flag del interrupt pero nada.
void acelerar (int sentido)
{
int1 flag_hecho = 0;
//var_decrementa_arranque = 50; //dependiente de Timer 1
flag_motores_frenados = FALSE;
set_timer1(0);
clear_interrupt(int_timer1);
while(var_decrementa_arranque > 1){
if (sentido == sentido_abajo && flag_hecho == 0){
marcha (motor_Sup, sentido, veloc_retencion); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_baja);
flag_hecho = 1;
}
if (sentido == sentido_arriba && flag_hecho == 0){
marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_baja);
flag_hecho = 1;
}
}
if (sentido == sentido_abajo){
marcha (motor_Sup, sentido, veloc_baja); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_media);
}
if (sentido == sentido_arriba){
marcha (motor_Sup, sentido, veloc_media); //ya que le alcanza para girar sumado el peso de la lona
marcha (motor_Inf, sentido, veloc_baja);
}
}
alguna ayudita... sigo intentando
Grazie mille!