Autor Tema: AYUDA SOY NUEVO EN ATMEL STUDIO 7  (Leído 2309 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jhordy

  • PIC10
  • *
  • Mensajes: 5
AYUDA SOY NUEVO EN ATMEL STUDIO 7
« en: 30 de Septiembre de 2018, 20:32:24 »

#include <avr/io.h>
#include "util/delay.h"
 

 int main(void){

   DDRD=0XFF;
   PORTD=0x00;
   
    /* Replace with your application code */
    while(1){
      for(int i=1;i<=128;i=i*2){ 
         PORTD=i;
         _delay_ms(300);
       }
      for(int j=128;j>=1;j-=j/2){
         PORTD=j;
         _delay_ms(300);
                }
     };
   return 0 ;
}


   


// alguien sabe por que mi codigo no se ejecuta de manera infinita si esta dentro del while, solo hace los dos lasos for y nada mas
espero me puedan ayudar con esto soy nuevo  en el tema.


Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:AYUDA SOY NUEVO EN ATMEL STUDIO 7
« Respuesta #1 en: 01 de Octubre de 2018, 00:03:41 »

Prueba a hacer un Debug, y verás de inmediato si realmente no se está ejecutando el bucle infinito, o es un problema de la manera de programar el puerto.

Quita ese punto y coma que hay tras la llave de cierre del While, no tiene utilidad y no se si puede afectar al bucle, en principio no debería.

Desconectado jhordy

  • PIC10
  • *
  • Mensajes: 5
Re:AYUDA SOY NUEVO EN ATMEL STUDIO 7
« Respuesta #2 en: 01 de Octubre de 2018, 12:10:51 »
suena curioso pero lo unico que ise para que funcionara fue cambiar en el ultimo lazo "for" , la parte de la  condición j>=1 por j>1 ,  y  el lazo funciona la perfección  de adelante para atrás y así infinitamente.

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re:AYUDA SOY NUEVO EN ATMEL STUDIO 7
« Respuesta #3 en: 01 de Octubre de 2018, 12:56:53 »
Estás haciendo una división (1/2) que da de resultado 0.5 y guardandola en una variablede tipo int, es decir ese 0.5 se ha de truncar, si en lugar de guardarse en el int como 0 (que sería lo suyo) se guardase como 1 (u otro valor distinto de cero) te pasaría lo que inicialmente comentas.

Puedes dejar el código inicial, correr el debugger y visualizar el estado de la variable, o ver el código en ensamblador generado para ver lo que estaba haciendo el compilador.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re:AYUDA SOY NUEVO EN ATMEL STUDIO 7
« Respuesta #4 en: 03 de Octubre de 2018, 04:45:20 »
El código original si se ejecuta de manera infinita. El detalle está en el segundo for que es infinito pues j nunca es menor a 1 (como ya notaste y corregiste).

Revisando la que se supondría última iteración cuando j vale 1, el siguiente valor de j se calcula:

Código: [Seleccionar]
j -= j / 2j vale 1, por lo que la división sería 1/2, como se está manejando enteros la división resulta en 0, con lo que la operación quedaría:
Código: [Seleccionar]
j -= 0por lo que j no sufre ningún cambio al no restarle nada.

Por lo tanto, en lugar de terminar el ciclo for se continúa de manera indefinida pues j se mantiene en 1.

La corrección es la que ya realizaste, cambiar la condición.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re:AYUDA SOY NUEVO EN ATMEL STUDIO 7
« Respuesta #5 en: 03 de Octubre de 2018, 10:01:48 »
Es mejor escribir el código con la herramienta de código como ha hecho Geo, el "-" del "-=" yo ni lo había visto en el mensaje inicial.