You can still use the 89C51 MCU, all my projects are based on this series.
To drive your fan, a suitable NPN transistor could be used, as BC337.
Its emitter is connected to GND.
Its collector is connected to the load (which in turn is connected to 12V).
Its base is connected directly to the MCU pin. And an external pull-up resistor (Rb) of 1K or 820R, for example, is connected between the pin and Vcc (5V).
I assumed the ratio Ic/Ib for Vsat (close to 200mV) of the transistor (collector to emitter) is about 20.
So Ib = 120/20 = 6 mA
But Vcc = Ib * Rb + Vbe
Rb = ( Vcc - Vbe ) / Ib
where:
Vcc = 5V
Vbe = 0.7 (approximated)
Ib = 6 mA (estimated)
Rb = 716 Ohm
I think using 1K or 820R is also ok.
You can do the calculation in reverse and find out the new Ic/Ib. It will be a bit higher than the estimated value of 20.