Hola, estoy haciendo un programa para que un robot avance 5cm se pare y me devuelva 100 valores de un sonar y un infrarrojo. El código es este:
int main(void)
{
ini_port();
while(1)
{
while(PORTC==1)
{
PORTB=0b1;
tim0=0;
while(tim0<253);
tim0=0;
while(tim0<200);
PORTB=0;
for(i=0;i<100;i++)
{
tim0=0;
ADCIR=medidaIR();
//while(tim0<3);
enviarIR(ADCIR);
//while(tim0<8);
ADCSO=medidaSO();
enviarSO(ADCSO);
}
}
}
}
ISR(TIMER0_COMP_vect)
{
tim0++;//Interrupción cada 1ms
}
unsigned int medidaIR()
{
ADMUX=(0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA|=(1<<ADSC);
while(ADCSRA & (1<<ADSC));
return ADC;
}
unsigned int medidaSO()
{
ADMUX=(0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA|=(1<<ADSC);
while(ADCSRA & (1<<ADSC));
return ADC;
}
void enviar_texto(char *texto)
{
while(*texto != 0)
{
UDR0=*texto;
while((UCSR0A & (1<<UDRE0)) == 0);
texto++;
}
}
void enviarIR(unsigned int ADCIR)
{
sprintf(texto,"I %d \n\r",ADCIR);
enviar_texto(texto);
}
void enviarSO(unsigned int ADCSO)
{
sprintf(texto,"S %d \n\r",ADCSO);
enviar_texto(texto);
}
Nse xk si pongo un while(tim0<8); que esta comentado en el codigo el programa no pasa de hay se realiza todo el rato la parte superior igual que si pongo otro printf arriba del todo luego como tengo el delay de 453ms el programa vuelve a petar.
Aer si alguien me puede ayudar a saber porque si envió texto al USART si pongo después o delante un delay me peta el programa. Gracias
int main(void)
{
ini_port();
while(1)
{
while(PORTC==1)
{
PORTB=0b1;
tim0=0;
while(tim0<253);
tim0=0;
while(tim0<200);
PORTB=0;
for(i=0;i<100;i++)
{
tim0=0;
ADCIR=medidaIR();
//while(tim0<3);
enviarIR(ADCIR);
//while(tim0<8);
ADCSO=medidaSO();
enviarSO(ADCSO);
}
}
}
}
ISR(TIMER0_COMP_vect)
{
tim0++;//Interrupción cada 1ms
}
unsigned int medidaIR()
{
ADMUX=(0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA|=(1<<ADSC);
while(ADCSRA & (1<<ADSC));
return ADC;
}
unsigned int medidaSO()
{
ADMUX=(0<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA|=(1<<ADSC);
while(ADCSRA & (1<<ADSC));
return ADC;
}
void enviar_texto(char *texto)
{
while(*texto != 0)
{
UDR0=*texto;
while((UCSR0A & (1<<UDRE0)) == 0);
texto++;
}
}
void enviarIR(unsigned int ADCIR)
{
sprintf(texto,"I %d \n\r",ADCIR);
enviar_texto(texto);
}
void enviarSO(unsigned int ADCSO)
{
sprintf(texto,"S %d \n\r",ADCSO);
enviar_texto(texto);
}
Nse xk si pongo un while(tim0<8); que esta comentado en el codigo el programa no pasa de hay se realiza todo el rato la parte superior igual que si pongo otro printf arriba del todo luego como tengo el delay de 453ms el programa vuelve a petar.
Aer si alguien me puede ayudar a saber porque si envió texto al USART si pongo después o delante un delay me peta el programa. Gracias