Hola, gracias a todos por la ayuda,
nocturno66 dice que
Llevado al ejemplo de Pikman, es lo mismo decir:
while ((minuter!=30) && (!input(_alarm)));
mientras ( minuter no sea igual a 30 "AND" la entrada _alarm no sea igual a 1 )
que
while ((minuter==30) || (input(_alarm));
mientras ( minuter sea igual a 30 "OR" la entrada _alarm sea igual a 1 )
Sin embargo el codigo generado para
while ((minuter!=30) && (!input(_alarm)));
es una OR
0676: MOVF 58,W
0678: SUBLW 1E ; resta para comparar si es igual
067A: BZ 0680 ; sale del bucle
; "OR"
067C: BTFSC 00.0 ; Si la entrada es 0 a cero salta y sale del bucle
067E: BRA 0676 ; si no sigue en el while
0680: BRA 0590
Por lo tanto lo que yo entiendo es que si se cumplen 30 minutos "O" que la
entrada es cero sale del bucle y salta a la linea 590, no hay dudas que se cumple
una condicion "O" y el operador empleado en el codigo es AND.
Esto seria lo mismo?, odeberia generar el mismo codigo?
while ((minuter==30) || (input(_alarm));
esto es lo que genera el compilador
0676: MOVF 58,W
0678: SUBLW 1E ; resta para comparar el valor
067A: BZ 0676 ; y se queda esperando que sea 30!!??
"AND" y
067C: BTFSC F81.3 ; espera que la
067E: BRA 0676 ; entrada se convierta en cero
0680: BRA 0590
Por lo tanto hasta que no se cumplan los 30 minutos no revisa la entrada
entonce es SI se cumplen 30 minutos "AND" la entrada es un bajo sale del
WHILE???, es correcto, entonces porque se utiliza el operador logico OR
en el codigo, ademas el comportamiento de
while ((minuter!=30) && (!input(_alarm)));
y
while ((minuter==30) || (input(_alarm));
no es el mismo, el compilador NO genera el mismo codigo.
Entonces como escribo correctamente el codigo, en la practica si yo escribo
while ((minuter!=30) && (input(!_alarm))); ( utilizo el operador Y )
y corro el programa en el micro, si se cumplen 30 minutos O sube el pin _alarm
salta a la rutina siguiente.
si en su lugar escribo
while ((minuter!=30) || (input(!_alarm))); ( utilizo el operador O )
y corro el programa en el micro, hasta que no se cumplen los treinta minutos,
el pin puede hacer lo que le de la gana que no se sale de ahi, y el ASM lo dice clarito, la verdad si que estoy epeso o soy muy bruto.
gracias de nuevo..
ARIEL