TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: perikote 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???...
-
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
-
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:
loop
movf i,w
incf i,f
xorlw 0x00
btfss STATUS,Z
goto loop
Es una manera "rebuscada" y "elegante" a la vez de hacer demoras.
Saludos.
-
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:
-
Ahh joer. yo pense q estabamos en lenguaje C para uC...:D :D :D
-
Hola en FreeScale deberia quedar algo asi:
L6:
LDHX i
AIX #1
STHX i
CPHX #0
BNE L6
Saludos !
-
Ahora entiendo, muchas gracias muchachos.