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.

(I will still occasionally update this guide when I try out something new.)

Step 1: Wire the AT89S52 As You Would Normally Do

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.

Step 2: Wire the AT89S52 to the Arduino

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).

Step 3: Programming Using My Software (Skip to Step 4 If You Want to Use Avrdude)

From here:

Upload the sketch contained in the repository and you can start programming your AT89S51(52)!

Step 4: Programming Using Avrdude

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.)

Step 5: Programming Using Avrdude (Cont'd)

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:


To verify, run avrdude with:


For further information regarding the usage of avrdude, consult its manual at:


<p>I lost my code (one of many) with failure of hdd. I need to modify something and i can't. Its 8051 (AT89S52), is there any chance to read it back ? Thanks</p>
<p>cool Arduino project.</p>

About This Instructable



More by tobychen:Program 8051 (AT89 Series) with Arduino 
Add instructable to: