ARDUINO AS a 8051 PROGRAMMER - CHEAPEST PROGRAMMER IN THE WORLD
Intro: ARDUINO AS a 8051 PROGRAMMER - CHEAPEST PROGRAMMER IN THE WORLD
ITS TO HARD TO FIND 8051 PROGRAMMER WITH USB CONNECTIVITY.
YOU WILL FIND SO MANY CIRCUITS FOR 8051 PROGRAMMING BY MAX232 BUT IT WILL NOT WORK IF ITS NOT ICSP OR THE BOOTLOADER IS NOT INSTALLED ON CHIP.
BUT IF YOU HAVE ARDUINO YOU CAN USE IT AS PROGRAMMER FOR 89S52(ATMEGA89S52).
I HAVE CREATED ARDUINO SHIELD.
THIS IS THE CHEAPEST PROGRAMMER IN THE WORLD
COST WILL BE VERY LOW IF YOU HAVE ARDUINIO ALREADY.
STEP 1: WHAT YOU NEED?
ARDUINO UNO (ANY ARDUINO)
AT89S52
IC STAND
PCB
22PF CAPACITOR 2 NO.
CRYSTAL 12Mhz(8Mhz to 16Mhz can work)
MALE PIN HEADER
USB CABLE
10K OHM RESISTOR
10uF capacitor
STEP 2: TOTAL PRICE
CURRENCY IN INDIAN Rs.
IC STAND:- 5Rs
CRYSTAL:- 10Rs
CAPACITOR:- 3Rs
PCB:- 10Rs
MALE PIN
HEADER:- 5Rs
AT89S52 40Rs
TOTAL ONLY:-70Rs.
STEP 3: Circuit Diagram and Software
upload at89s52program skatch to arduino
connect the circuit as per diagram
open 89s52programmer.exe
select com port of your arduino
click open hex file, and browse it ..
then click on identify chip you will see the message at bottom of the window (chip detected)
then click on upload hex
wait for a moment and message to diplay(finished writting).
now enjoy....
STEP 4: Here Is Program for Arduino
#define dummyData 0xAA
#define RDY 75 #define NRDY 76
const int _MISO = 4; const int _MOSI = 5; const int _CLK = 3; const int RST = 2;
/* Variable definition block */
byte data; byte AL,AH; // 16-bit address byte lockByte; // embed lock bits here byte SigH,SigL; // Signature Bytes
void setup() { pinMode(_MISO, INPUT); pinMode(_MOSI, OUTPUT); pinMode(_CLK, OUTPUT); pinMode(RST, OUTPUT); Serial.begin(115200); // depends on the setting of the host PC
}
void loop() { while (!Serial.available()); // wait for character if (Serial.available() > 0) switch (Serial.read()) { case 'p': Serial.write(progEnable()); break; case 'r': readProgmem(); Serial.write(data); break; case 'a': while(!Serial.available()); AL = Serial.read(); break; case 'A': while(!Serial.available()); AH = Serial.read(); break; case 'd': while(!Serial.available()); data = Serial.read(); break; case 'S': AH = 0; AL = 0; SigH = readSign(); Serial.write(SigH); break; case 's': AH = 2; AL = 0; SigL = readSign(); Serial.write(SigL); AH = 1; AL = 0; SigL = readSign(); Serial.write(SigL); break; // read SigL case 'o': digitalWrite(RST,1);break; case 'c': digitalWrite(RST,0);break; case 'e': eraseChip(); Serial.write(RDY); break; case 'j': break; case 'w': writeProgmem(); break; }
}
unsigned char SendSPI(unsigned char data) { uint8_t retval = 0; uint8_t intData = data; int t; for (int ctr = 0; ctr < 7; ctr++) { if (intData & 0x80) digitalWrite(_MOSI,1); else digitalWrite(_MOSI,0);
digitalWrite(_CLK,1); delayMicroseconds(1);
t = digitalRead(_MISO); digitalWrite(_CLK,0);
if (t) retval |= 1; else retval &= 0xFE; retval<<=1; intData<<= 1; delayMicroseconds(1); }
if (intData & 0x80) digitalWrite(_MOSI,1); else digitalWrite(_MOSI,0); digitalWrite(_CLK,1); delayMicroseconds(1);
t = digitalRead(_MISO); digitalWrite(_CLK,0); if (t) retval |= 1; else retval &= 0xFE;
return retval; }
byte progEnable() { SendSPI(0xAC); SendSPI(0x53); SendSPI(dummyData); return SendSPI(dummyData); }
void eraseChip() { SendSPI(0xAC); SendSPI(0x9F); SendSPI(dummyData); SendSPI(dummyData); delay(520); }
void readProgmem() {
SendSPI(0x20); SendSPI(AH); SendSPI(AL); data = SendSPI(dummyData); }
void writeProgmem() { SendSPI(0x40); SendSPI(AH); SendSPI(AL); SendSPI(data); }
void writeLockBits() { SendSPI(0xAC); SendSPI(lockByte); SendSPI(dummyData); SendSPI(dummyData); }
void readLockBits() { SendSPI(0x24); SendSPI(dummyData); SendSPI(dummyData); lockByte = SendSPI(dummyData); }
byte readSign() { SendSPI(0x28); SendSPI(AH); SendSPI(AL); return SendSPI(dummyData); }
STEP 5: Refrence
http://tiktakx.wordpress.com/2014/04/19/programmin...
and
www.facebook.com/SparkingElectronics
like this page for more projects like this.
how to generate hex file and make shield like this will be updated soon .. keep visiting..
42 Comments
SudarshanH3 6 years ago
Hello!
Will this work for AT89C51?
Thank you.
Afzal cassim 4 years ago
Try this hyperlink:- https://www.keil.com/dd/docs/datashts/atmel/at89s52_ds.pdf
Ri5ux 5 years ago
This is not an 8051 programmer, this is an AT89C51 programmer, which happens to be an 8951 (hence the name), and NOT an 8051. 8051 microcontrollers do not have a fancy built in set of ISP pins. Perhaps you should adjust your instructable. 8051 Microcontrollers are OTP, which means they are not re-programmable. The only way to re-use an 8051 is to run code from an external EEPROM.
ali bhi 6 years ago
I will Try this
ali bhi 6 years ago
If It works Thanks
ZAEEM6549 9 years ago
@tapan mojidra, great work bro, i have following questions,
1- did u try this circuit yourself, by uploading simple program?
2- suppose i want to make a program for blinking led,
can i make the led blinking program in arduino language?
in other words can we upload arduino sketch to 89s52?
Waiting for your valuable reply....
TAPAN MOJIDRA 9 years ago
you cant use arduino lenguage to program 89s52 chip.
this is just only a programmer for 8051 you have to generate hex file for that separately. you can upload hex file using this programmer.
the arduino chip will behave like as a isp programmer for 89s52 .
and 89s52 can be programmed with this programmer.
PremPrem4042 6 years ago
I have a doubt. How to dump the hex file to 8051 using arduino. Am I supposed to copy the hex file content and paste in the serial monitor in the arduino. Please clearly explain the steps you have followed one by one.
Thanks
TAPAN MOJIDRA 9 years ago
i have use kail simmulater to make program for 89s52 chip...
TAPAN MOJIDRA 9 years ago
KshitijK22 7 years ago
How to check whether if the program is get uploaded or not ?
sowais672 7 years ago
compiling is done but error is occurring during uploading..
what to do??
veera123 7 years ago
i got an error while compiling arduino code..
'lockByte' was not declared i this scope.. can you help me??
getabyte 7 years ago
reorganize the code, and then will be ok. Since the first few lines of code are comment out, fix that will be fine.
mujahidabdullah 7 years ago
can I program 89c51?
TAPAN MOJIDRA 7 years ago
ZeeshanR3 7 years ago
i am using AT89C51 BUT programmer is NOT Working,can u help?
pedrobneto 7 years ago
AbinashD3 7 years ago
Not working on linux under wine. Is there anything I'm missing?
AbinashD3 7 years ago
Works fine on Windows!!! good tutorial. I used a ready-made dev. board, with 12mhz xtal ,caps and reset circuit. only connected the required VCC,GND,MISO,MOSI and reset to Arduino and uploaded hex files.
However, it's not working on linux under Wine. Is there anything i need to do to make it work on linux(I'm on Xubuntu 16.04)?