Encienda un LED: ¿por qué no funciona este código?

1

Estoy usando DEMO9S08AW60E y estoy usando Codewarrior (Version: 5.9) con Experto en procesadores.

PTFDD = 0x00;  // to activate/intialize the port F and D   
PTDDD = 0x00;

if ((PTDD_PTDD2 |= 0x02))
{
    PTFD_PTFD0 |=0x01;
} 
else
{
    PTFD_PTFD0 &=0x01;
}

Enlace para DEMO9S08AW60E .

De acuerdo con el esquema de la placa, el Switch 4 está conectado a PortD / Pin2. Y el conjunto de LED están conectados al PortF / Pin (0-7). La idea es encender el LED cuando se presiona el botón: He utilizado una resistencia de extracción con la ayuda de PROCESSOR EXPERT. Lógicamente, siento que mi código está bien, pero no parece haber ningún efecto.

Me gustaría saber dónde me equivoco y espero que pueda ayudar.

    
pregunta sheetansh

2 respuestas

1
if ((PTDD_PTDD2 |= 0x02))

Esto es igual a:

PTDD_PTDD2 |= 0x02;
if (1)

Esto probablemente tampoco hace lo que quieres:

PTFD_PTFD0 &=0x01;

El valor resultante de PTFD_PTFD0 es 0x00 o 0x01 , dependiendo del valor del bit menos significativo.

Parece que querías:

PTFD_PTFD0 &= ~ 0x01;

Esto establece el LSB en cero.

    
respondido por el Turbo J
0

Finalmente he entendido la razón por la que no funcionó de la manera indicada anteriormente. Después de usar técnicas de depuración, me di cuenta de que el control del programa nunca cruza la condición del bucle if, por lo tanto, la condición para mi bucle "if" debe escribirse como: PTDD_PTDD2 & 0x02. Eso es. Sé que algunas de las respuestas estaban en la misma línea pero esta funcionó. Todavía no estoy seguro de si fue el problema con el software o la lógica. funciona y mis colegas también confirmaron que el USO DE MÁSCARA es preferible cuando se trabaja con la codificación de la CPU. ¡¡Gracias de nuevo!!

    
respondido por el sheetansh

Lea otras preguntas en las etiquetas