USB AVR Downloader

USBasp merupakan in-circuit programmer untuk mikrokontroler Atmel AVR. Rangkaiannya menggunakanATMega48 atau ATMega8 dan beberapa komponen pasif lainnya. Programmer atau downloader ini menggunakan sebuah penggerak USB hanya-firmware (firmware-only USB driver), tidak memerlukan pengontrol USB khusus.




Fitur-fitur

  • Bisa digunakan untuk berbagai macam platform, sudah diuji untuk Linux, Mac OS dan Windows;
  • Tidakmemerlukan pengontrol atau komponen smd khusus;
  • Kecepatan pemrograman bisa mencapai 5kByte/detik;
  • Opsi SCK untuk mendukung mikrokontroler target yang berkecepatan rendah.


PCB layouts

Dibawah ini beberapa layout PCB yang sudah siap pakai :
Official USBasp kit  Official USBasp kit
Oleh Fisch und Fischl GmbH
Official USBasp kit with case and preprogrammed controller. No smd parts.

de Offiziellen USBasp Bausatz bestellen
USBasp: single-side PCB  usbasp_single_side.t3001.zip (Yang direkomendasikan)
Oleh Thomas Fischl
Single-Side PCB, TARGET 3001! layout file
Size: 90x40 mm (optimized for case Hammond 1591ATBU)
LV-USBasp  lv_usbasp.tar.gz
by Pawel Szramowski (11/2007)
With Low-voltage front-end.
Single-Side PCB, EAGLE layout files, some SMD components
Bernhard Walle  http://bwalle.de/docs/usbasp/
by Bernhard Walle
Double-Side PCB, EAGLE layout files, part list with order numbers for Reichelt.de and Conrad.de
Size: optimized for case Hammond 1591ATBU
Thomas Pfeifer  http://thomaspfeifer.net/atmel_usb_programmer.htm
by Thomas Pfeifer
Single-Side PCB, PDF layout files, SMD components
Tomasz Ostrowski  http://ostry.w.szu.pl/misc.php#USBasp
by Tomasz Ostrowski
Single-Side PCB, PDF and EPS layout files, only four 0805 SMD parts, rest discrete components
USBasp by Christian Heigemeyr  USBasp_CH.zip
by Christian Heigemeyr
Single-Side PCB, with some SMD 0805 components, PDF-files
With additional buttons for reset and disconnection of the target
Zhurov Pavel  USBasp.schUSBasp.pcb
ComponentSide.pdfTopSide.pdfSchematics.pdf
by Zhurov Pavel
Single-Side PCB, P-CAD 2002 format and PDF files
Crosspiece TXD and RXD are added for the ISP connector
J.A. de Groot  usbasp_gr.rar
by J.A. de Groot
The board is single sided (EAGLE format), measures 3 by 8 cm and uses only regular components.

USBasp Howto (in Dutch). There is also a pdf file with 6 devices on one euro-card.



Semoga bermanfaat.
Matthias Goerner  usbasb_mg.zip
by Matthias Görner
Single-Side PCB, eagle-format, with PS/PDF-files
integrated sockets for target chips ATmega8 and ATmega32
USBasp by Hannes Östlund  Tarball with layout
by Hannes Östlund
Doubleside-Side PCB, SMD components, very small
USBasp by Sergiy Bogdancev  http://mcuusage.org.ua/ForAmateurs/Miscellaneous/USBasp_eng.aspx
by Sergiy Bogdancev (01/2010)
3.3V version, ATMega48 only. Single-side PCB, ExpressPCB layout format + socket board for varies AVRs. Without future serial interface, chip initially must be programmed with another programmer.
USBasp by Hans Hafner  Eaglefiles (sch/brd) and CAD case design (dxf)
by Hans Hafner, HTL Mössingerstrasse-Klagenfurt, Österreich, hans.hafner (at) htl-klu (dot) at
(01/2010)
CNC-milled case (DXF file available), Eagle layout, only a few SMD parts

Downloader mikrokontroler AT89C2051

AT89C2051 Flash PEROM Programmer ini sangat sederhana, hanya memakai sebuah IC 74HC574 ditambah dengan sistem catu daya dan dihubungkan ke komputer PC lewat Parallel Port, dikendalikan lewat program yang ditulis dengan Pascal.

Program untuk AT89C2051 disimpan di dalam ROM yang terdapat dalam chip IC tersebut, ROM yang dipakai AT89C2051 termasuk jenis Flash PEROM (Programmable Eraseable Read Only Memory). Diperlukan cara dan rangkaian khusus untuk mengisi Flash PEROM tersebut, berikut ini akan dibahas cara pengisian Flash PEROM AT89C2051 dan pembuatan alat pengisi Flash PEROM AT89C2051.
Selain diisi, Flash PEROM tersebut bisa pula dibaca isinya, dihapus bahkan bisa diproteksi sehingga isinya tidak bisa dibaca lagi untuk mencegah pembajakan program. Selain itu semua microcontroller produksi Atmel masing-masing punya kode produksi sendiri, sehingga program Pascal di komputer bisa dengan mudah mengenali chip microcontroller jenis apa yang dipasangkan pada alat ini.
Tabel 1 memperlihatkan kombinasi sinyal yang harus diberikan pada kaki-kaki P3.7..P3.3, tegangan VPP yang harus diberikan ke kaki RESET dan sinyal PROG pada kaki P3.2 untuk berbagai keperluan dengan Flash PEROM di dalam chip AT89C2051.
 Tabel 1 Mode Pemrograman Flash PEROM AT89Cx051

Pengisian data ke PEROM

Gambar 1 merupakan susunan rangkaian untuk mengisi Flash PEROM AT89C2051, dalam susunan ini Port 1 (P1.0..P1.7) dipakai sebagai saluran penerima data yang akan diisikan ke PEROM, P3.7..P3.3 dipakai untuk memilih mode kerja, kaki RESET dipakai untuk catu daya tambahan (VPP) sebesar 12 Volt. 

 Gambar 1
Mengisi Flash PEROM AT89Cx051

AT89C2051 dilengkapi ‘address counter’ di dalam chip, yang berfungsi sebagai ganti address bus pada saat pengisian atau pembacaan Flash PEROM. Kedudukan ‘address counter’ ini akan reset menjadi 000(hex) saat tegangan VPP pada kaki RESET berubah dari 0 Volt menjadi 5, dan nilai ‘address counter’ ini naik satu setiap kali ada pulsa positip NEXT diumpankan pada kaki XTAL1.
Proses pengisian Flash PEROM, dilakukan dengan urutan sebagai berikut :
1.   AT89C2051 diberi catu daya 5 Volt lewat kaki Vcc, kaki RESET dan XTAL1 diberi tegangan 0.
2.   Menjelang proses pengisian akan dimulai, tegangan VPP dinaikkan menjadi 5 Volt agar ‘address counter’ reset menjadi 000(hex), dan sinyal PROG pada kaki P3.2 dijadikan H.
3.  AT89C2051 disiapkan kerja pada mode pengisian dengan memberi sinyal HHHL pada kaki P3.7..P3.3.
4.   Setelah urutan persiapan ini selesai, VPP dinaikkan menjadi 12 Volt sebagai catu daya yang diperlukan untuk pengisian PEROM.
5.   Selanjutnya data yang akan diisikan disiapkan di Port 1 (P1.0..P1.7)
6.   Pulsa negatip PROG pada P3.2 dipakai sebagai perintah agar data pada Port 1 diisikan ke dalam PEROM, proses pengisian ini memerlukan waktu relatip lama lebih kurang selama 1,2 mili-detik, selama proses pengisian ini kaki P3.1 menjadi ‘0’ menandakan AT89C2051 sedang sibuk (BUSY). Saat kaki P3.1 menjadi ‘1’ kembali berarti selesai sudah proses pengisian data 1 byte ke dalam PEROM, dan AT89C2051 siap menerima data lagi.
7.  Setelah proses pengisian 1 byte ini, dikirim sinyal NEXT yang berupa pulsa positip ke kaki XTAL1, dengan maksud menaikkan nilai ‘address counter’, agar pengisian data berikutnya diisikan ke lokasi PEROM berikutnya.
8.  Urutan 5 sampai 7 di atas diulang untuk mengisikan data 1 byte demi 1 byte, sampai semua PEROM dalam AT89C2051 sebanyak 2048 byte selesai diisikan.

Rancangan Rangkaian

Gambar 3 merupakan skema rangkaian AT89C2051 Flash PEROM Programmer yang dibuat, rangkaian ini dikendalikan oleh Komputer PC lewat Parallel Port.
Dari Gambar 1 dan 2 bisa diperhitungkan banyaknya jalur yang diperlukan untuk mengendalikan chip AT89C2051, antara lain diperlukan 8 jalur data yang dua arah, diperlukan 4 jalur pengatur mode, jalur PROG, jalur NEXT dan 2 jalur pengatur VPP, dan 1 jalur BUSY untuk memantau apakah AT89C2051 sudah siap menerima data.
Parallel Port  komputer PC mempunyai 8 jalur data yang dua arah, 4 jalur kontrol (sebagai output dari PC) dan 5 jalur status (sebagai input ke PC), dengan demikian memakai Parallel Port untuk mengendalikan chip AT89C2051, masih kekurangan jalur output.
Untuk mengatasi kekurangan ini pada rangkaian dipakai IC 74HC574, IC ini menampung 4 jalur pengatur mode dan 2 jalur pengatur tegangan VPP. Data pengatur ini disiapkan di jalur data Parallel Port D0..D7, kemudian dikirim sinyal LATCH yang dibangkitkan di kaki nomor 17 konektor DB25 (dikendalikan dengan bit 3 dari Control Register Parallel Port), sehingga  data di D0..D7 tersimpan output 74HC574.
Sinyal PROG dibangkitkan dikaki nomor 14 konektor DB25 (dikendalikan dengan bit 1 dari Control Register Parallel Port), dan sinyal NEXT dibangkitkan dikaki nomor 1 (dikendalikan dengan bit 0 dari Control Register Parallel Port). Sinyal BUSY yang dibangkitkan AT89C2051, dipantau lewat kaki nomor 11 konektor DB25  (bit 7 dari Status Register Parallel Port)
Pengatur tegangan VPP terdiri dari sinyal VPP_5VOLT dan sinyal VPP_OFF.
·        Jika sinyal VPP_5VOLT=1 tegangan output LM317 menjadi 5 Volt, sebaliknya jika sinyal VPP_5VOLT=0 tegangan output LM317 menjadi 12 Volt.
·        Jika sinyal VPP_OFF=1 transistor Q1 menjadi off, VPP menjadi 0 Volt lewat tahanan R7, sebaliknya jika sinyal VPP_OFF=1 transistor Q1 menjadi on dan menyalurkan tegangan dari LM317, sehingga tegangan VPP menjadi 5 Volt atau 12 Volt, sesuai dengan kondisi sinyal VPP_5VOLT.
Nilai tahanan R1 dan R3 termasuk ‘aneh’, dipilih nilai ini untuk menyesuaikan agar tegangan output LM317 tepat 5 Volt atau 12 Volt, tahanan ini dibentuk dengan menghubungkan seri 2 tahanan, R1 dibentuk dengan tahanan  250 + 4,7 = 254.7 Ohm dan R3 dibentuk dengan tahanan 1000 + 120 = 1120 Ohm.
 Klik pada gambar untuk ukuran sebenarnya
Gambar 3
Skema Rangkaian AT89Cx051
Kabel yang dipakai untuk menghubungkan alat ini ke Parallel Port  komputer PC bisa dibeli jadi, di pasaran kabel ini dikenal dengan nama ‘Kabel LPT’, dikedua ujung kabel ini terdapat konektor DB25 (male), masing-masing kaki pada konektor ini dihubungkan secara langsung, yakni kaki 1 konektor pertama dihubungkan dengan kaki 1 konektor lainnya dan seterusnya.

Program Pascal pengatur Parallel Port

Berikut ini dibahas potongan-potongan program pembentuk sinyal-sinyal di atas, program-program ini merupakan program dasar yang mengendalikan Parallel Port  secara langsung.
Perlu diperhatikan sinyal-sinyal pada Parallel Port  bersifat logika negatip, kalau bit pada Control Register bernilai ‘1’ maka tegangan kaki bersangkutan pada konektor DB25 adalah 0 Volt, sebaliknya jika bit pada Control Register bernilai ‘0’ maka tegangan pada kaki konektor DB25 adalah 5 Volt.

Potongan Program 1 Mengatur arah data
01: PROCEDURE SetupOutput;
02: BEGIN
03:      { Control Register
04:        00001001
05:          | | ||_ NEXT      : normally LOW  positive pulse
06:          | | |__ PROG*     : normally HIGH negative pulse
07:          | |____ Latch     : normally LOW  positive pulse
08:          |______ Direction : 0 as ouput Port
09:      }
10:      ControlByte   := 9;                         {00001001}
11:      Port[Control] := ControlByte;
12: END;
13:  
14: PROCEDURE SetupInput;
15: BEGIN
16:      { Control Register
17:        00101001
18:          | | ||_ NEXT      : normally LOW  positive pulse
19:          | | |__ PROG*     : normally HIGH negative pulse
20:          | |____ Latch     : normally LOW  positive pulse
21:          |______ Direction : 1 as input port
22:      }
23:      ControlByte   := $29;                       {00101001}
24:      Port[Control] := ControlByte;
25: END;

PROCEDURE SetupInput dan PROCEDURE SetupOutput dipakai untuk menentukan nilai awal :
·        sinyal NEXT (kaki nomor 1 konektor DB25 terhubung ke bit 0 dari Control Register Parallel Port)
·        sinyal PROG (kaki nomor 14 konektor DB25 terhubung ke bit 1 dari Control Register Parallel Port)
·        sinyal LATCH (kaki nomor 17 konektor DB25 terhubung ke bit 3 dari Control Register Parallel Port)

tapi mengingat  sinyal-sinyal pada Parallel Port  bersifat logika negatip, maka :
·        sinyal NEXT nilai awalnya ‘0’, bit 0 Control Register malah diberi nilai ‘1’ (baris 5 dan 18)
·        sinyal PROG nilai awalnya ‘1’, bit 1 Control Register malah diberi nilai ‘0’ (baris 6 dan 19)
·        sinyal LATCH nilai awalnya ‘0’, bit 3 Control Register malah diberi nilai ‘1’ (baris 7 dan 20)

 Hal yang lebih penting dari kedua procedure di Potongan Program 1 ini adalah mengatur arah 8 jalur data dwi-arah Parallel Port, pada saat mengisi data ke Flash PEROM 8 jalur data ini akan menjadi output untuk menyalurkan data dari PC ke AT892051, dan pada saat membaca data dari Flash PEROM 8 jalur data ini berfungsi sebagai input untuk menyalurkan data dari AT89C2051 ke PC.
Pengaturan ini dilakukan lewat bit 5 Control Register, jika bit 5 Control Register bernilai 0 (baris 8) jalur data dwi-arah menjadi output dari Parallel Port, sebaliknya jika bit 5 Control Register bernilai 1 (baris 21) jalur data dwi-arah akan menjadi input ke Parallel Port.
Kemampuan untuk mengubah jalur data Parallel Port  menjadi input, hanya dimiliki oleh Enhance Parallel Port  (EPP). EPP umumnya dibuat menjadi satu dengan mother board PC, sedangkan Parallel Port  dalam Super I/O Card tidak termasuk EPP. Agar kemampuan ini bisa digunakan, Parallel Port  ini harus ditentukan sebagai Enhance Parallel Port  (EPP) lewat setup BIOS komputer.
Komputer yang tidak dilengkapi dengan EPP tetap bisa dipakai untuk mengisi PEROM, tapi tidak bisa membaca isi PEROM, sehingga program yang diisikan tidak bisa di-verifikasi apakah sudah masuk dengan benar.
Program yang dibuat dilengkapi dengan PROCEDURE MemeriksaPrinterPort yang berfungsi menentukan apakah Parallel Port  yang dipakai termasuk EPP.

Potongan Program 2 Pembangkitan pulsa dasar
01: PROCEDURE NEXT;
02: BEGIN
03:    Port[Control]:=ControlByte and $FE; {bit 0 Control Regiter}
04:    Port[Control]:=ControlByte;
05: END;
06:  
07: PROCEDURE PROG;
08: BEGIN
09:    Port[Control]:=ControlByte or $02; {bit 1 Control Regiter}
10:    Port[Control]:=ControlByte;
11: END;
12:  
13: PROCEDURE EraseStrobe;
14: BEGIN
15:    Port[Control]:=ControlByte or $02;  {bit 1 Control Regiter}
16:    Delay(30);
17:    Port[Control] := ControlByte;
18: END;

PROCEDURE Next membangkitkan pulsa positip di kaki nomor 1 konektor DB25, kaki nomor 1 ini dikendalikan lewat bit 0 di Control Register Parallel Port, bit 0 Control Register ini diberi nilai awal =1 oleh PROCEDURE SetupInput dan PROCEDURE SetupOutput, dibaris 3 bit 0 di-‘nol’-kan dan dibaris 4dikembalikan ke nilai awalnya, dengan cara ini kaki 1 konektor DB25 bertegangan 5 Volt sebentar dan kemudian menjadinya 0 Volt kembali.
PROCEDURE PROG membangkitkan pulsa negatip dikaki nomor 14 konektor DB25, kaki nomor 14 ini dikendalikan lewat bit 1 di Control Register Parallel Port, bit 1 Control Register ini diberi nilai awal =0 oleh PROCEDURE SetupInput dan PROCEDURE SetupOutput, dibaris 9 bit 1 di-‘satu’-kan dan dibaris 10 dikembalikan ke nilai awalnya, dengan cara ini kaki 14 konektor DB25 bertegangan 0 Volt sebentar dan kemudian menjadinya 5 Volt kembali. 
PROCEDURE EraseStrobe sama dengan PROCEDURE PROG, hanya saja pulsa negatip yang dibangkitkan jauh lebih lebar, sekitar 30 mili-detik yang ditentukan di baris 16. Pulsa ini dipakai untuk menghapus isi Flash PEROM, lebar pulsa yang diperlukan paling tidak selebar 10 mili-detik.

Potongan Program 3 Memantau kesiapan AT89C2051
01: FUNCTION Ready:BOOLEAN;
02: BEGIN   
03:      Ready := (Port[Status] and $80) = 0;
04: END;

Potongan Program 3 dipakai untuk memeriksa apakah AT89C2051 siap menerima data lagi.
Di atas dikatakan:
Saat kaki P3.1 menjadi ‘1’ kembali berarti selesai sudah proses pengisian data 1 byte ke dalam PEROM, dan AT89C2051 siap menerima data lagi.

Dalam rangkaian Gambar 3 kaki P3.1 terhubung ke kaki 11 konektor DB25, dalam Parallel Port  kaki 11 itu terhubung ke bit 7 Status Register. Tapi hubungan tersebut dalam kondisi berlawanan, artinya jika tegangan pada kaki 11 konektor DB25 = 0 Volt maka bit 7 Status Register bernilai ‘1’, sebaliknya jika tegangan pada kaki 11 konektor DB25 = 5 Volt maka bit 7 Status Register bernilai ‘0’.
Dengan demikian dalam FUNCTION Ready untuk memeriksa apakah AT89C2051 sudah siap menerima data, yang diperiksa adalah apakah bit 7 dari Status Register Parallel Port  bernilai ‘0’, jika bit 7 bernilai ‘0’ maka Ready bernilai true, sebaliknya jika bit 7 bernilai ‘1’ maka Ready bernilai false.

Potongan Program 4 Pengaturan Tegangan VPP
01: PROCEDURE TeganganVPP(V:BYTE);
02: BEGIN
03:      { Pemakaian 74HC574
04:        x1x1MMMM
05:        ||||||||_ Atmel Programming Mode bits
06:        |||||||__ Atmel Programming Mode bits
07:        ||||||___ Atmel Programming Mode bits
08:        |||||____ Atmel Programming Mode bits
09:        ||||_____ always 1
10:        |||______ VPP_5VOLT : true-VPP=5 V, false-VPP=12 V
11:        ||_______ Reset External Address Counter
12:        |________ VPP_OFF   : true-VPP=0 V, false-VPP=5 or 12 V
13:      }
14:      case V of
15:           0 : V:=$B0;           {10110000}
16:           5 : if ModeSelect=$0B
17:                  THEN V:=$70    {01110000}
18:                  ELSE V:=$30;   {00110000}
19:          12 : V:=$10;           {00010000}
20:          ELSE EXIT;
21:      END;
22:      SetupOutput;
23:      Port[Data]    := V + ModeSelect;
24:      Port[Control] := ControlByte and $F7; { bit 3 }
25:      Port[Control] := ControlByte;
26:      SetupInput;
27: END;
28:  
29: PROCEDURE ResetAddressCounter(Mode:BYTE);
30: BEGIN
31:      ModeSelect := $0B; { any illegal Mode }
32:      TeganganVPP(0);
33:      Delay(100);
34:      ModeSelect := Mode;
35:      TeganganVPP(5);
36:      Delay(100);
37: END;
38:  
39: PROCEDURE MatikanTegangan;
40: BEGIN
41:      ModeSelect := $0B; { any illegal Mode }
42:      TeganganVPP(0);
43: END;

PROCEDURE TeganganVPP untuk menentukan tegangan VPP yang diumpankan ke kaki RESET AT89C2051, sekali gus mengatur mode kerja AT89C2051.
Sinyal kontrol untuk keperluan di atas disimpan dalam IC 74HC574, data yang akan disimpan disiapkan di Port Data (baris 23), setelah itu bit 3 Control Register di-nol-kan (baris 24) dan dikembalikan ke nilai asalnya (baris 25), hali ini mengakibatkan terjadinya pulsa positip pada kaki nomor 17 konektor DB25, sebagai perintah bagi IC 74HC574 untuk mereka data dari Parallel Port.
Kombinasi data yang disimpan tergantung pada bit-bit pengatur mode kerja AT89C2051 seperti terlihat pada Tabel 1, dan sesuai dengan pengatur tegangan VPP terdiri dari sinyal VPP_5VOLT dan sinyal VPP_OFF yang sudah dibahas di atas.
PROCEDURE ResetAddressCounter untuk menyiapkan tegangan kerja AT89C2051 sekaligus me-reset ‘address counter’ dalam chip AT89C2051, mula-mula tegangan VPP dibuat menjadi 0 Volt dan setelah itu dijadikan 5 Volt, waktu tunda selama 100 mili-detik di baris 33 dimaksud menunggu sebentar agar catu daya stabil baru menaikkan tegangan itu menjadi 5 Volt (baris 35). Untuk kestabilan tegangan, mula-mula mode kerja AT89C2051 diberi kombinasi yang tidak dikenal di Tabel 1 (baris 31), baru kemudian diberikan kombinasi yang sesunguhnya (baris 34).
PROCEDURE MatikanTegangan untuk mematikan tegangan VPP dengan mode kerja yang tidak dikenal di Tabel 1 (baris 41).

Program Pascal pengatur AT89C2051

Program dasar pengatur Parallel Port  di atas, dipakai untuk membangun program pengatur AT89C2051 sebagai berikut:

Potongan Program 5 Pengisian PEROM
01: ResetAddressCounter($0E);
02: TeganganVPP(12);
03: SetupOutput;
04: Delay(100);
05: for I := 0 to PEROMsize do
06:      BEGIN
07:           Port[Data] := Buffer[I];
08:           PROG;
09:           REPEAT UNTIL Ready;
10:           NEXT;
11:      END;
12: MatikanTegangan;

Potongan Program  5 sepenuhnya mengikuti tata cara pengisian PEROM yang sudah dibahas, baris 1 mempersiapkan tegangan-tegangan yang diperlukan sambil menentukan mode kerja : Pengisian PEROM (=$0E, lihat Tabel 1). Setelah itu tegangan VPP dinaikkan jadi 12 Volt (baris 2) dan Parallel Port  dijadikan output (baris 3). Sebelum proses pengisian PEROM dimulai, ditunggu sebentar selama 100 mili-detik (baris 4), diharapkan setelah itu tegangan VPP stabil 12 Volt.
Pengisian 1 byte data ke PEROM dilaksanakan di baris7 sampai dengan 10,
·        data yang diisikan diletakkan di jalur data pada baris 7
·        kemudian baris 8 membangkitkan pulsa PROG agar data tadi disimpan di PEROM, AT89C2051 memerlukan waktu sekitar 1.2 mili-detik untuk menyimpan data ke PEROM,
·        baris 9 menunggu sampai AT89C2051 siap menerima data lagi
·        setelah itu dikirimkan pulsa positip NEXT untuk menaikkan nilai ‘address counter’
Proses di atas diulang sampai semua PEROM selesai diisi, proses pengulangan ini dibentuk dengan baris 5, 6 dan 11. Selesai mengisi PEROM, tegangan VPP dimatikan di baris 12.

Potongan Program 6 Membaca isi PEROM
01: ResetAddressCounter($0C);
02: for I := 0 to PEROMSize do
03:      BEGIN
04:           Buffer[I] := Port[Data];
05:           NEXT;
06:      END;
07: MatikanTegangan;

Membaca isi PEROM caranya jauh lebih sederhana dari pada mengisi PEROM, mula-mula baris 1 mempersiapkan tegangan-tegangan yang diperlukan sambil menentukan mode kerja : Pengisian PEROM (=$0C, lihat Tabel 1). Selesai mengerjakan perintah baris 1, isi PEROM sudah siap diambil (baris 4), untuk membaca isi PEROM dikirim pulsa NEXT pada baris 5, pulsa NEXT ini akan mengakibatkan ‘address counter’ nilainya bertambah 1.
Proses di atas diulang sampai semua PEROM selesai dibaca, proses pengulangan ini dibentuk dengan baris 2, 3 dan 6. Selesai membaca isi PEROM, tegangan VPP dimatikan di baris 7.

Penutup

Program yang dibuat mencakup fasilitas untuk mengenali apakah chip AT89C2051 sudah terpasang ditempatnya, juga dilengkapi fasilitas untuk menghapus program yang sudah tersimpan dalam PEROM, membaca isi PEROM, memeriksa apakah PEROM masih kosong, dan tentu saja fasiltas utama untuk pengisian data ke PEROM, program ini disajikan selengkapnya dalam situs.
Flash PEROM Programmer ini merupakan alat kunci dalam bermain AT89C2051, tanpa adanya alat ini tidak mungkin dibuat alat berbasiskan AT89C2051.

Software programmer At89C2051 yang siap pakai dapat anda download disini
Gambar PCB yang telah jadi dan siap pakai anda bisa download disini