Memprogram Atmel AT89 Series dengan Arduino Uno – Panduan Langkah demi Langkah
Komponen dan Perlengkapan
Arduino UNO
×
1
LED (generic)
×
1
Alat dan Mesin yang Diperlukan
Soldering iron (generic)
Aplikasi dan Layanan Online
Arduino IDE
8051 SPI Programmer
Tentang Proyek Ini
Dalam tutorial ini saya akan menunjukkan kepada Anda cara Membakar File Hex Ke AT89c52 menggunakan Arduino Uno dalam beberapa langkah mudah. Untuk ini kita harus menghubungkan AT89c52 ke Arduino Uno dan memberikan indikasi led melalui menghubungkan LED ke At89c52.
Langkah 1: Daftar Bahan
Arduino UNO
AT89C52 Microcontroller
10uF Capacitor
Jumper Wires
8.2kohm Resistor
510 ohm Capacitor
LED
12 MHz Crystal
2 x 33pF Capacitor
Langkah 2: Menghubungkan Mikrokontroler
Hubungkan mikrokontroler seperti yang disebutkan di bawah ini:
At89c52 Arduino Uno
Pin 6 Pin 5
Pin 7 Pin 4
Pin 8 Pin 3
Pin 9 Pin 2
Langkah 3: Crystal
Hubungkan Crystal di antara Pin 18 dan 19 Atmel dan kemudian hubungkan dua kapasitor 33pf dari pin 18 dan 19 ke Ground Atmel. Lihat Bagian Skema Untuk Diagram Rangkaian Lengkap.
Langkah 4: VCC dan GND
Hubungkan Pin 5v Arduino Uno ke pin ke-40 Atmel dan pin GND ke pin ke-20 Atmel.
Langkah 5: Interfacing LED
Interface LED dengan bantuan Diagram Rangkaian yang disediakan di Bagian Skema.
Langkah 6: Software
Kami membutuhkan 8051 SPI Programmer untuk Membakar File Hex Ke 89c52. Tautan disediakan di Bagian Software. Unggah Kode yang disediakan ke Arduino UNO dan Programmer Anda siap.
Kode
Untitled file
Untitled fileC/C++
#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); }