¿Cómo puedo detectar la entrada ALTA o BAJA en un microcontrolador NXP?

1

Estoy usando el microcontrolador NXP P89V51RD2 . Necesito detectar ALTO o BAJO a partir de 2 bits individuales. ¿Cómo almaceno el estado de entrada en una dirección predefinida para que mis funciones puedan detectarla como datos?

Necesito usar 2 emisores acoplados a la base para detectar cambios en la resistencia (indirectamente al medir la corriente y el voltaje) en una celda de carga. El acoplamiento es un intento de un tipo rudimentario de conmutación. Esto necesito dar un poco en e.g. puerto P1 para detección. Tengo problemas para obtener el código correcto ( H / L identificación de bits) para esta Y la configuración de la conexión (¿se necesita un búfer u otro acondicionador de señales?) Para esto.

La compilación del código se realiza en Keil μVision v4 .

El sitio web oficial de Keil dice que puede hacerse mediante el código: sbit b1 = P1^0 . Sin embargo, no sé cómo proceder después, ya que este código no da los resultados requeridos.

    
pregunta VedVals

2 respuestas

1

He consultado la guía a la que está vinculado y su problema es que ha confundido una declaración con una declaración del programa. Cuando escribe sbit b1 = P1^0; , le ha dicho al compilador cómo obtener el bit que desea, pero aún no ha creado ningún código. La forma en que lo usaría, entonces, es tratar este "b1" declarado como si fuera una variable que representa el bit de puerto que deseaba. Entonces,

if(b1) {
  led_on();
}
else {
  led_off();
}

Cuando el compilador encuentre b1, irá a leer el puerto y extraerá el bit, según la declaración anterior.

Esa forma particular de declarar bits de puerto es particular para ese compilador, por lo que confunde a cualquiera que no lo haya visto antes (incluido yo).

    
respondido por el gbarry
1

Su código no es correcto. b1 = P1^0 significa P1 XOR 0. Cualquier cosa XOR 0 da el valor original.

Para asignar el bit 0 a b1, debe escribir b1 = P1 & 1 , o preferiblemente:

b1 = P1 & (1<<0)

La última forma es universal, para obtener el bit 1 escribiría 1 < < 1. Para el bit 2, escribirías 1 < < 2, y así sucesivamente.

    
respondido por el Lundin

Lea otras preguntas en las etiquetas