This guide provides a complete solution to program the AT89S51 or AT89S52 (these are what I have tested) with an Arduino. Multiple setups are included in this guide; the easiest setup requires no additional software other than the Arduino IDE.
Feel free to skip this step if it is already wired.
What you usually need to set up a minimum system for AT89S52:
For clock:
1x Crystal Oscillator, less than 33Mhz
2x Capacitors, about 33pF depending on which crystal you use
For the reset circuit:
1x 10kOhm Resistor
1x 10μF Capacitor
The microcontroller can definitely run without the reset circuit, you just have to manually reset it after powering it up.
You can also use one of those minimum system boards. If this is the case, go ahead and skip to the next step.
The AT89S52 (AT89S51 too) uses SPI as the ISP protocol. It enters ISP mode when RST pin is pulled high.
Wiring in addition to that of Step 1:
RST pin on the 8051 to pin 10 on the Arduino;
Pin 8 (P1.7) on the 8051 to pin 13 on the Arduino (SCK);
Pin 7 (P1.6) on the 8051 to pin 12 on the Arduino (MISO);
Pin 6 (P1.5) on the 8051 to pin 11 on the Arduino (MOSI).
From here:
https://github.com/cyj0912/AT89ISP
Upload the sketch contained in the repository and you can start programming your AT89S51(52)!
The Arduino IDE comes with avrdude preinstalled. Even better, ArduinoISP, which also comes with the IDE, supports AT89S51(AT89S52).
First, upload the sketch named "ArduinoISP" onto your arduino. The sketch can be found under "File" -> "Examples" -> "11.ArduinoISP" in the Arduino IDE.
Then, you have to customize the configuration file of avrdude in order to enable support for our AT89S51(52). You can download an already modified configuration on this page.
Double check your wiring, if everything seems OK, run the following:
"C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe" -C E:/avrdude8051.conf -c stk500v1 -P COM3 -p 89s51 -b 19200
(You might want to replace the path to "avrdude.exe" with your installation path of the Arduino IDE. Replace "COM3" with the serial port name of the arduino you use as the programmer. Replace 89s51 with 89s52 if you have an AT89S52. Replace "E:/avrdude8051.conf" with path to the configuration you just downloaded.)
Your setup is correct if avrdude outputs the device signature correctly.
To upload a program, run the command in the previous step with one extra option:
-U flash:w:YOURPROGRAM.HEX
To verify, run avrdude with:
-U flash:v:YOURPROGRAM.HEX
For further information regarding the usage of avrdude, consult its manual at: