Tu comprensión está bastante cerca de la realidad. El 89C51 tiene E / S 'pseudo-bidireccional', bastante familiar para los antiguos que han trabajado con la serie NMOS MCS-51 Intel. No hay modo de entrada vs. modo de salida, no hay registro DDR (TRIS). Para usar un pin pseudo-bidireccional como entrada, simplemente escriba un 1 en el pestillo de salida y lea el estado del pin.
De hecho, no hay una resistencia de pull-up, sino que hay un MOSFET de canal p débil que actúa de manera similar a una resistencia pull-up. El transistor está hecho para tener un Idss muy bajo, por lo que actúa más o menos como una fuente de corriente constante cuando la salida del pestillo es alta y el pin es más bajo que un par de voltios debido a la carga externa.
simular este circuito : esquema creado usando CircuitLab
El máximo actual a tierra es 50uA, por lo que el Idss de M1 < 50uA. La corriente mínima a 0.75 Vcc es de 25uA y a 0.9Vcc es de 10uA como mínimo. Eso acentúa bastante bien el comportamiento actual de la salida. Con el seguro de salida establecido en 1, tenemos (suponiendo un suministro de 5 V):
Vo = 0V 50uA máximo - > Requiv > 100K con 5V a través de él
Vo = 3.75 25uA mínimo - > Requiv < 50K con 1.25V a través de él
Vo = 4.5V 10uA mínimo - > Requiv < 50K con 0.5V a través de él
(Obtengo estos números directamente de la hoja de datos)
Así que es similar a una resistencia de 50-100K en el comportamiento.
Tienesrazón,esoesmuchoparaconducircualquiercosacuandoestáalto.Dehecho,nisiquieraessuficienteparaimpulsarrápidamentelacargacapacitivadeunatrazayunaspocasentradas.Poresarazón,cuandoellatchdesalidacambiadebajoaalto,eltransistorM2,queesunMOSFET"fuerte", se enciende brevemente para suministrar la corriente de carga. Luego se apaga y M1 permanece encendido. Entonces, un breve pico de corriente sale del pin cuando se supone que va a subir. Esa corriente (a través de M2 en mi esquema) es un máximo de 650uA cuando la salida es de 2V. Entonces, M2 se comporta un poco como una resistencia que tiene más de 4.6K por el breve tiempo que está encendido.
TL; DR
Usted tiene razón en que las salidas (puertos 1, 2, 3) tienen muy poca capacidad de unidad de origen. Si desea cambiar una gran cantidad de corriente (como un LED + resistencia), conéctela entre Vdd y la salida. Puede conducir la base de un transistor PNP con resistencia de base o la puerta de un MOSFET de canal P si necesita generar mucha corriente. El puerto 0 no tiene M1 o M2, es una E / S de drenaje abierto.