Loop se está ejecutando infinitas veces

0

Estoy trabajando con un ATmega32-A . Al usar la comunicación USART, estoy mostrando datos en el monitor y estoy usando la caja del interruptor para seleccionar diferentes comandos. En uno de los comandos he escrito el siguiente código:

 case(DATA):

  init_io();
  statusreg = AD7798_8(0x40, 0xFF); 
  printf("status register %02x\r\n", statusreg); 

  if (statusreg != 0x80) 
      printf("unexpected power on status %02x\r\n", statusreg); 

  while(1){
            while ((statusreg & 0x80) != 0);                 // wait till ADC is ready 
            adc = AD7798_16(0x58, 0xFFFF);                   // read register 
            printf("ADC value is %04x\r\n", adc); 
          } 
  Command=0;
  break;

Pero el código anterior está imprimiendo el valor de ADC infinitas veces. He cambiado el bucle while a lo siguiente

   while(1){
            while ((statusreg & 0x80) != 0);                 // wait till ADC is ready 
            adc = AD7798_16(0x58, 0xFFFF);                   // read register 
            printf("ADC value is %04x\r\n", adc); 
          } 

Después de eso, se imprime solo una vez, pero no acepta más comandos. Tengo que reconstruir si quiero ingresar cualquier otro comando. Cualquier ayuda apreciada.

    
pregunta verendra

1 respuesta

6

Un bucle while(1){} nunca sale, (a menos que tenga un break dentro), así que siempre se quedará allí. ¿Por qué necesitas el while(1) de todos modos? Parece que solo estás leyendo una vez desde el ADC.
Si desea realizar un bucle más de una vez, debe agregar una condición igual a 0 cuando haya finalizado lo que quiera hacer dentro.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas