Ya que conozco bien el 8051, hablaré de ello ya que al principio me encontré con un problema similar.
Los pines del puerto (al menos los que estoy usando para la respuesta) están diseñados para permitir la entrada y salida en ciertas condiciones:
Si ese pin se establece en un código lógico alto, entonces el pin mismo se configurará en alta impedancia. Si intenta conectar el LED y la resistencia en serie desde el pin hasta el suelo, entonces obtendrá cualquier cosa, desde una luz tenue a ninguna luz. Si establece el pin en el código de lógica baja, entonces el LED no se enciende en la misma configuración.
El enfoque más sencillo sería conectar el estilo de LED invertido. En mi circuito, su LED y resistencia (LED2 y R3) en serie se conectaron entre VCC (que está regulado a 5 V) y un pin de puerto. Al hacer esto, el LED se encenderá normalmente (si el pin se establece en bajo en código) o se apagará (si el pin se establece en alto en código).
La razón por la que el enfoque más sencillo funciona es porque el micro tiene resistencias de pull-up internas. Si el pin se establece en lógica alta, entonces el LED y la resistencia se conectarán de VCC a VCC a través de la resistencia de pull-up interna del microcontrolador, lo que dará un voltaje cero al LED (lo que significa que el LED está apagado). Si el pin se establece en lógica baja, entonces el LED se encenderá porque entonces tiene un circuito de LED normal que es VCC a LED con resistencia conectada a tierra.
una respuesta a tu manera
Bueno, puede que no sea la mejor respuesta, pero como la micro puede proporcionar muy poca salida (a través de un pull-up interno) y cero, puede ejecutar la salida a través de un amplificador operacional y ajustar el potenciómetro para crear una referencia. voltaje y si el voltaje del pin del microcontrolador es mayor que el voltaje de referencia, entonces el LED se enciende. de lo contrario no lo hace. Es posible que deba jugar un poco con los valores de la resistencia para obtener el efecto deseado.