P1 port: P1 port is an 8-bit bidirectional I/O port with pull-up resistor inside. P1 port buffer can receive and output 4 TTL gate current. After writing the P1 port pin to 1, unplug it internally and use it as input. As the P1 port pulls down from the outside to low power, it will output current due to the internal pull up. port P1 received as a low 8 bit address during FLASH programming and validation. P2 port: P2 port is an 8-bit bidirectional I/O port with an internal pull-up resistor. P2 port buffer can receive and output 4 TTL gate currents. when the P2 port is written as "1", its pin is pulled up by the internal pull-up resistor and used as input. as input, the pin of the P2 port is pulled low from the outside to output current. this is caused by internal pull-up. When using a P2 port to access external program memory or 16-bit address external data memory, the upper 8 bits of P2 port output address. given address "1", it will use internal pull up advantage. when reading and writing external 8-bit address data memory, the port P2 outputs the contents of its special function registers. during flash programming and verification, P2 ports receive high 8-bit address signals and control signals. P3 port: the pin P3 the port is 8 bidirectional I /O ports with internal pull-up resistor that can receive and output 4 TTL gate currents. As P3 ports are written as "1", they are pulled up internally and used as inputs. as input, the P3 port will output current (ill) due to pull-up due to lower external pull-down resistance. P3 mouth can also be used as some special functional mouth of AT89C51.