Autor Tema: Duda con programa en C  (Leído 3094 veces)

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

Desconectado perikote

  • PIC10
  • *
  • Mensajes: 17
Duda con programa en C
« en: 29 de Abril de 2009, 01:48:34 »
Hola estube viendo un programita de un video tutorial de code warrior que tengo y hace esto
for(;;) {
PTAD_PTAD0=0;
while(i++);
PTAD_PTAD0=1;
while(i++);
}

previamente habia puesto unsigned int i=1

mi duda es una vez que el ptda0 se pone en 0 y despues se mete en el while que es lo que hace ? no entiendo cuando saldra del while ,  mientras incremente i???...

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Duda con programa en C
« Respuesta #1 en: 29 de Abril de 2009, 02:42:59 »
no tiene mucho sentido el programa, ya que no hay ninguna condicionante de que haga algo, cuando llegue a una cantidad en especifico para i, seguira incrementandose infinitamente, y nunca veras si destella el puerto, por que lo hara tan rapido que no te daras cuenta
saludos
te recomiendo q leas algun libro de C
te recomiendo

Lenguaje de programacion en C
Kernighan

saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Duda con programa en C
« Respuesta #2 en: 29 de Abril de 2009, 02:45:41 »
Hola!

wile(i++); se cumplirá siempre y cuando i sea distinto de cero. Una vez que i valga cero, se incrementará por última vez, haciendo que i luego del while tenga un valor final de 1. Eso sirve para poder volver a entrar al próximo while(i++); pero es necesario inicializar a i con un valor distinto de cero(como por ejemplo 1) la primera vez. Si se inicializa a i con el valor 0, entonces saldrá inmediatamente del primer while valiendo 1, y recorrerá todos los posibles valores en el segundo while, hasta volver a valer cero, no cumplir con la condición e incrementarse por ultima vez valiendo finalmente, y nuevamente: 1.

Lo explico lógicamente:

el while(i++); hace esto:

Denuevo:
guardar i en registro temporal(W)
incrementar i
Si W!=0 volver a Denuevo

en asm sería:
   
Código: ASM
  1. loop
  2.     movf i,w
  3.     incf i,f
  4.     xorlw 0x00
  5.     btfss STATUS,Z
  6.     goto loop


Es una manera "rebuscada" y "elegante" a la vez de hacer demoras.

Saludos.


« Última modificación: 29 de Abril de 2009, 02:52:08 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Duda con programa en C
« Respuesta #3 en: 29 de Abril de 2009, 11:20:03 »
Cierto, el while hace una prueba del contenido de i. Mientras que i valga algo diferente a cero, se ejecutará el contenido del while. En este caso el while(i++); es un simple generador de retardos.

Bruno, creo que la explicación en asm no se usa igual en Freescale  :shock:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Duda con programa en C
« Respuesta #4 en: 29 de Abril de 2009, 12:23:03 »
Ahh joer. yo pense q estabamos en lenguaje C para uC...:D :D :D
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Duda con programa en C
« Respuesta #5 en: 29 de Abril de 2009, 14:12:44 »
Hola en FreeScale deberia quedar algo asi:
Código: ASM
  1. L6:
  2.   LDHX  i
  3.   AIX   #1
  4.   STHX  i
  5.   CPHX  #0
  6.   BNE   L6


Saludos !

Desconectado perikote

  • PIC10
  • *
  • Mensajes: 17
Re: Duda con programa en C
« Respuesta #6 en: 29 de Abril de 2009, 19:32:30 »
Ahora entiendo, muchas gracias muchachos.