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

Sejarah dan Ulasan MIkrokontroler

  • Judul : Sejara dan Ulasan Seputar Mikrokontroler
  • Bahasa : Indonesia
  • Jenis File : PDF (Adobe reader)
  • Jumlah Halaman : 20
  • Lain-lain :
  • Isi :
  1. Pengendali mikro 1
  2. Atmel AVR 6
  3. ATMega8535 7
  4. Intel 8051 8
  5. PIC16F84
Anda bisa mendownloadnya disini

Dasar Pemrograman PIC (Bagian 1)

Mikrokontroler saat ini memberikan suatu cara baru kepada kita dalam merancang sirkuit, dahulu kita membutuhkan banyak IC Digital dan perhitungan Aljabar sekarang semua itu dapat dipogram dan di masukkan kedalam satu IC yaitu mikrokontroler. Misalnya satu set lampu lalu lintas membutuhkan satu osilator sirkuit, penghitung, IC dekoding, dan berbagai macam IC logika sekarang dapat dibuat dengan mudah dalam satu IC Mikrokontroler.

Disini kita akan belajar bagaimana memprogram mikrokontroler itu, saya memilih mikrokontroler jenis PIC16F84 yang dapat di flashing atau tulis hapus secara elektrik tanpa memerlukan ultraviolet eraser, yang memiliki 18pin dan oscilator sampai 4Mhz.

(masih direlease)

Mikrokontroler dengan Ladder diagram

Pemrograman Mikrokontroler menggunakan ladder diagram (ladder logic micro).
Bagi anda yang terbiasa memprogram PLC itu akan sangat membantu menggunakan software ini. karena dengan software ini pemrograman mikrokontroler bisa dilakukan layaknya memprogram PLC.

Berikut ialah screenshotnya
Berikut ialah jenis mikrokontroler yang didukung:
  • PIC16F628(A)
  • PIC16F88
  • PIC16F819
  • PIC16F877(A)
  • PIC16F876(A)
  • PIC16F887
  • PIC16F886
  • ATmega128
  • ATmega64
  • ATmega162
  • ATmega32
  • ATmega16
  • ATmega8
Cara menggunakan software ini cukup mudah, pertama anda memasukan kontak (LD,LD not, And, Andnot, timer, ataupun output) melalui label instruction lalu pilih tipe kontak yang anda inginkan, setelah itu isi parameternya apakan kontak input/output dari pin IC atau input/output virtual layaknya PLC.
 setelah itu compile maka ladder pun akan berubah menjadi bentuk intel hex file (.hex) yang siap dimasukan ke dalam IC mikrokontroler.

terima kasih
software Ladder logic nya bisa anda download disini

Dasar Pemrograman AT89C2051 (Bagian 3)

Special Function Register (SFR) AT89Cx051

Random Access Memory (RAM) dalam AT89Cx051 hanya 256 byte, hanya setengahnya yang dipakai sebagai memori-data biasa, setengahnya lagi dipakai untuk register-register untuk mengatur perilaku MCS51 dalam hal-hal khusus, misalnya tempat untuk berhubungan dengan port paralel P1 atau P3, dan sarana input/output lainnya, tapi tidak dipakai untuk menyimpan data seperti layaknya memori-data. Meskipun demikian, dalam hal penulisan program SFR diperlakukan persis sama dengan memori-data.
Nomor memori-data yang disediakan untuk Special Function Register mulai dari $80 sampai dengan $FF, area sebanyak 128 byte ini tidak semuanya dipakai, hal ini digambarkan dalam Denah Special Function Register, Gambar 5. Masing-masing register dalam Special Function Register mempunyai nomor dan nama.
Dianjurkan agar nomor-nomor yang tidak dipakai jangan dipergunakan, karena bisa mengakibatkan terjadinya sesuatu yang tidak terduga.
Sebagian register dalam Special Function Register sudah dibicarakan sebagai Register Dasar, merupakan piranti dasar untuk penulisan program. Register-register dasar tersebut antara lain adalah Akumulator (ACC), Stack Pointer Register (SP), Program Status Register (PSW), Register B, Data Pointer High Byte (DPH) dan Data Pointer Low Byte (DPL). Di dalam area Special Function Register. Register-register ini diperlakukan sebagai memori dengan nomor yang sudah tertentu.
Akumulator menempati memori-data nomor $E0, Stack Pointer Register menempati memori-data nomor $81, Program Status Register ada di $D0, Register B di $F0, DPL di $82 dan DPH di $83.
Kemampuan MCS51 untuk menomori memori-data dalam level bit, dipakai juga dalam Special Function Register. Secara keseluruhan nomor bit yang disediakan dalam MCS51 sebanyak 256, nomor bit 0 sampai 127 sudah dipakai untuk  nomor bit memori-data nomor $20 sampai $2F, sisanya sebanyak 128 nomor dipakai di Special Function Register.
Special Function Register yang bisa dinomori dengan nomor bit, adalah yang mempunyai nomor memori dengan digit heksadesimal kedua adalah 0 atau 8, misalnya nomor $80, $88, $90, $98..$F0 dan $F8.
Akumulator merupakan Special Function Register dengan nomor $E0, sehingga semua bit dalam Akumulator bisa di-nomor-i satu per satu.  Dalam penulisan program bit 0 Akumulator bisa dituliskan sebagai A.0, bit 1 Akumulator ditulis sebagai A.1 dan seterusnya. Instuksi SETB A.0 mengakibatkan bit 0 dari Akumulator menjadi ‘1’ sedangkan bit-bit lainnya tidak terpengaruh. Instruksi CLR A.6 mengakibatkan bit 6 dari Akumulator menjadi ‘0’ tapi tidak memengaruhi bit-bit yang lain.

Pengelompokan SFR

Selain register yang berfungsi sebagai register dasar yang sudah dibicarakan diatas, register-register dalam SFR dipakai untuk mengatur Input/Output dari MCS51 yang dikelompokan menjadi :
·        Register Penampung Data Input/Output, misalnya data yang diisikan ke register P1 akan diteruskan (di-output-kan) ke Port 1 yang terdapat di kaki IC AT89Cx051.
·        Register Pengatur Input/Output dan Register Status Input/Output, misalnya register SCON dipakai untuk mengatur UART dan dipakai untuk memantau kondisi UART, register TCON dipakai untuk mengatur kerja Timer.

Gambar 5
Denah Special Function Register

Uraian Singkat SFR

Berikut ini dibahas secara singkat fungsi dan sifat masing-masing register dalam Special Function Register, pembahasan secara rinci akan dilakukan dibagian lain.
P1 (Port 1, nomor $90, bisa dinomori dengan nomor bit): merupakan sarana input/output port 1, masing-masing bit dalam register ini setara dengan salah satu kaki IC AT89Cx051. Misalnya bit 3 dari register P1 terhubung ke kaki P1.3 (kaki nomor 15 AT89Cx051), instruksi SETB P1.3 mengakibatkan kaki nomor 15 tersebut menjadi ‘1’ dan instruksi CLR P1.3 akan membuatnya menjadi ‘0’.
P3 (Port 3, nomor $B0, bisa dinomori dengan nomor bit): merupakan sarana input/output port 3, masing-masing bit dalam register ini setara dengan salah satu kaki IC AT89Cx051. Misalnya bit 5 dari register P3 terhubung ke kaki P3.5 (kaki nomor 9 AT89Cx051), instruksi SETB P3.5 mengakibatkan kaki nomor 9 tersebut menjadi ‘1’ dan instruksi CLR P3.5 akan membuatnya menjadi ‘0’.
SBUF (Serial Buffer, nomor $99): Register Serial Buffer (SBUF) dipakai untuk mengirim data dan menerima data dengan UART yang terdapat dalam IC AT89Cx051. Angka yang disimpan ke SBUF akan dikirim keluar secara seri lewat kaki TXD (kaki nomor 3 IC AT89Cx051). Sebaliknya data seri yang diterima di kaki RXD (kaki nomor 2 IC AT89Cx051) bisa diambil di register SBUF. Jadi SBUF akan berfungsi sebagai port output pada saat register ini diisi data, dan SBUF akan menjadi port input kalau isinya diambil.
SCON (Serial Control, nomor $98, bisa dinomori dengan nomor bit): register SCON dipakai untuk mengatur perilaku UART di dalam IC AT89Cx051, hal-hal yang diatur meliputi penentuan kecepatan pengiriman data seri (baud rate); mengakitpkan fasilitas penerimaan data seri (fasilitas pengiriman data seri tidak perlu di atur), disamping itu register ini dipakai pula untuk memantau proses pengiriman data seri dan proses penerimaan data seri.
TL0/TH0 (Timer 0 Low/High, nomor $8A/$8C): Kedua register ini bersama membentuk Timer 0, yang merupakan pencacah naik (count up counter). Perilaku kedua register ini diatur oleh register TMOD dan register TCON. Hal-hal yang bisa diatur antara lain adalah sumber clock untuk pencacah, nilai awal pencacah, bilamana proses pencacahan mulai atau berhenti,  dan lain sebagainya.
 TL1/TH1 (Timer 1 Low/High, nomor $8B/$8D): Kedua register ini bersama membentuk Timer 1, yang merupakan pencacah naik (count up counter). Perilaku kedua register ini diatur oleh register TMOD dan register TCON. Hal-hal yang bisa diatur antara lain adalah sumber clock untuk pencacah, nilai awal pencacah, bilamana proses pencacahan mulai atau berhenti,  dan lain sebagainya.
TMOD (Timer Mode, nomor $89): register TMOD dipakai untuk mengatur mode kerja Timer 0 dan Timer 1, lewat register ini masing-masing timer bisa diatur menjadi timer 16-bit, timer 13-bit, timer 8-bit yang bisa isi ulang secara otomatis,  atau 2 buah timer 8 bit yang terpisah. Di samping itu bisa diatur agar proses proses pencacahan timer bisa dikendalikan lewat sinyal dari luar IC AT89Cx051, atau timer dipakai untuk mencacah sinyal-sinyal dari luar IC.
TCON (Timer Control, nomor $88, bisa dinomori dengan nomor bit): register TCON dipakai untuk memulai atau menghentikan proses pencacahan timer dan dipakai untuk memantau apakah terjadi limpahan dalam proses pencacahan. Disamping itu masih tersisa 4 bit dalam register TCON yang tidak dipakai untuk mengatur Timer, melainkan dipakai untuk mengatur sinyal interupsi yang diterima di INT0 (kaki nomor 6) atau INT1 (kaki nomor 7), dan dipakai untuk memantau apakah ada permintaan interupsi pada kedua kaki itu.
IE (Interrupt Enable, nomor $A8, bisa dinomori dengan nomor bit): register ini dipakai untuk mengaktipkan atau me-non-aktipkan sarana interupsi,  bit 0 sampai bit 6 dari register IE (IE.0..IE.6) dipakai untuk mengatur masing-masing sumber interupsi (sesungguhnya IE.6 tidak dipakai) sedangkan IE.7 dipakai untuk mengatur sistem interupsi secara keseluruhan, jika IE.7 =’0’ akan sistem interupsi menjadi non-aktip tidak mempedulikan keadaan IE.0.. IE.6.
IP (Interrupt Priority, nomor $B8, bisa dinomori dengan nomor bit): register ini dipakai untuk mengatur perioritas dari masing-masing sumber interupsi. Masing-masing sumber interupsi bisa diberi perioritas tinggi dengan memberi nilai ‘1’ pada bit bersangkutan dalam register ini. Sumber interupsi yang perioritasnya tinggi bisa menginterupsi proses interupsi dari sumber interupsi yang perioritasnya lebih rendah.
PCON (Power Control, nomor $87): Register PCON dipakai untuk mengatur pemakaian daya IC AT89Cx051, dengan cara ‘menidurkan’ IC tersebut sehingga memerlukan arus kerja yang sangat kecil. Satu satu bit dalam register ini dipakai untuk menggandakan kecepatan pengiriman data seri (baud rate) dari UART di dalam AT89Cx051.

Variasi dari SFR

Seperti sering disebut, MCS51 merupakan satu keluarga IC mikrokontroler yang terdiri dari ratusan macam IC, ratusan macam IC tersebut umumnya mempunyai fasilitas input/output yang berlainan. Keragaman ini ditampung dalam Special Function Register.
Register baku dalam keluarga MCS51, ada yang tidak dimiliki oleh keluarga AT89Cx051, register-register tersebut antara lain adalah :
P0 (Port 0, nomor  $80, bisa dinomori dengan nomor bit): merupakan sarana input/output port 0, masing-masing bit dalam register ini setara dengan salah satu kaki IC AT89C51. Sifat Port 0 mirip sekali dengan sifat Port 1 dan Port 3 milik AT89Cx051.
P2 (Port 2, nomor $A0, bisa dinomori dengan nomor bit): merupakan sarana input/output port 2, masing-masing bit dalam register ini setara dengan salah satu kaki IC AT89C51. Sifat Port 2 mirip sekali dengan sifat Port 1 dan Port 3 milik AT89Cx051
Kaki IC AT89Cx051 hanya 20, hanya setengah dari jumlah kaki AT89C51, berkurangnya kaki ini mengakibatkan AT89Cx051 tidak punya Port 0 dan Port 2 dan dengan demikian juga tidak punya register P0 dan register P2.
Di samping dipakai sebagai port input/output, Port 0 dan Port 2 bisa pula dipakai untuk saluran-data (data bus) dan saluran-alamat (address bus) yang diperlukan AT89C51 untuk bisa menambah memori diluar chip.

Dasar Pemrograman AT89C2051 (Bagian 2)

RAM dan Register dalam AT89Cx051

Bagi mereka yang sudah terbiasa memakai komputer, kapasitas Random Access Memory (RAM) yang dimiliki AT89Cx051 ‘mengerikan’ karena sangat sedikit, hanya 256 byte! Itupun tidak semuanya bisa dipakai sebagai memori penyimpan biasa, lebih dari setengahnya merupakan memori dengan keperluan khusus yang biasa dikenal sebagai register. Meskipun demikian bagi mikrokontroler kapasitas itu sudah mencukupi.
Dalam pengertian MCS51, Random Access Memory dalam chip AT89Cx051 adalah memori-data, yaitu memori yang dipakai untuk menyimpan data, sedangkan Flash PEROM merupakan memori penampung program pengendali AT89Cx051, dikenal sebagai memori-program.
Karena kedua memori itu memang dibedakan dengan tegas, maka kedua memori itu mempunyai penomoran yang terpisah. Memori-program dinomori sendiri, pada AT89C2051 mulai dari nomor $0000 sampai $07FF. Sedangkan memori-data yang hanya 256 byte dinomori dari nomor $00 sampai $FF.
Gambar 3
Denah Memori-data
Seperti terlihat dalam denah memori-data Gambar 3, memori-data dibagi menjadi dua bagian, memori nomor $00 sampai $7F merupakan memori seperti RAM selayaknya meskipun beberapa bagian mempunyai kegunaan khusus, sedangkan memori nomor $80 sampai $FF dipakai sangat khusus yang dinamakan sebagai Special Function Register (akan dibahas tersendiri dibagian lain).
Memori-data nomor $00 sampai $7F bisa dipakai sebagai memori penyimpan data biasa, dibagi menjadi 3 bagian:
·        Memori nomor $00 sampai $18 selain sebagai memori-data biasa, bisa pula dipakai sebagai Register Serba Guna (General Purpose Register).
·        Memori nomor $20 sampai $2F selain sebagai memori-data biasa, bisa dipakai untuk menyimpan informasi dalam level bit.
·        Memori nomor $30 sampai $7F (sebanyak 80 byte) merupakan memori-data biasa, bisa dipakai untuk menyimpan data maupun dipakai sebagai Stack.

Register Serba Guna

Register Serba Guna (General Purpose Register) menempati memori-data nomor $00 sampai $18, memori sebanyak 32 byte ini dikelompokkan menjadi 4 Kelompok Register (Register Bank), 8 byte memori dari masing-masing Kelompok itu dikenali sebagai Register 0, Register 1 .. Register 7 (R0, R1, R2, R3, R4, R5, R6 dan R7).
Dalam penulisan program memori-memori ini bisa langsung disebut sebagai R0, R1, R2, R3, R4, R5, R6 dan R7, tidak lagi dengan nomor memori. Dengan cara ini instruksi yang terbentuk bisa lebih sederhana dan bekerja lebih cepat. Pengertian ini bisa diperjelas dengan contoh 2 instruksi berikut :
MOV A,$04
MOV A,R4
Instruksi pertama mempunyai makna isi memori-data nomor 4 di-copy-kan ke Akumulator A, sedangkan instruksi kedua artinya isi R4 di-copy-kan ke Akumulator A. Karena R4 menempati memori-data nomor 4, jadi kedua instruksi itu berakibat sama bagi Akumulator A.
Tapi saat diterjemahkan ke kode mesin, intruksi pertama dirubah menjadi E5 04 (heksadesimal) dan instruksi kedua menjadi E6 (heksadesimal), jadi instruksi kedua lebih sederhana dari instruksi pertama.
Selain itu, khusus untuk Register 0 dan Register 1 (R0 dan R1) masih punya mempunyai kemampuan lain, kedua register ini bisa dipakai sebagai register penampung alamat yang dipakai dalam penyebutan memori secara tidak langsung (indirect memori addressing), hal ini akan dibicarakan lebih lanjut di belakang.
Empat kelompok Register Serba Guna itu tidak bisa dipakai secara bersamaan, saat setelah reset yang aktip dipakai adalah Kelompok Register 0 (Register Bank 0).
Kalau yang diaktipkan adalah Kelompok Register 1, maka yang dianggap sebagai R0 bukan lagi memori-data nomor 0 melainkan memori-data nomor 8, demikian pula kalau yang diaktipkan Kelompok Register 3 maka memori-data nomor 18h yang menjadi R0.
Kelompok Register yang aktip dipilih dengan cara mengatur bit RS0 dan RS1 yang ada di dalam Register PSW (Program Status Word), hal ini akan dibicarakan lebih lanjut di bagian lain.

Memori level Bit

Memori-data nomor $20 sampai $2F bisa dipakai menampung informasi dalam level bit. Setiap byte memori di daerah ini bisa dipakai menampung 8 bit informasi yang masing-masing dinomori tersendiri, dengan demikian dari 16 byte memori yang ada bisa dipakai untuk menyimpan 128 bit (16 x 8 bit) yang dinomori dengan bit nomor $00 sampai $7F.
Informasi dalam level bit tersebut masing-masing bisa di-‘1’-kan,  di - ‘0’-kan dengan instruksi.
Pengertian di atas bisa dipikirkan seolah-olah MCS51 mempunyai jenis memori yang lain, tapi sesungguhnya kedua jenis memori itu tetap sama, hanya saja cara penyebutannya saja yang berlainan.
Instruksi SETB $00 mengakibatkan memori-bit nomor 0 menjadi ‘1’, atau sama dengan membuat bit nomor 0 dari memori-data nomor $20 menjadi ‘1’, sedangkan bit-bit lainnya dalam memori nomor $20 tidak berubah nilai.
Sedangkan instruksi CLR $7F mengakibatkan memori-bit nomor $7F menjadi ‘0’, satau sama dengan membuat bit nomor 7 dari memori-data nomor $2F menjadi ‘0’, sedangkan bit-bit lainnya dalam memori nomor $2F tidak berubah nilai.
Pengertian ini dipertegas dengn intsruksi-instruksi berikut:
MOV $21,#$0F
Sama dengan hasil kerja instruksi-instruksi berikut :
SETB $08
SETB $09
SETB $0A
SETB $0B
CLR  $0C
CLR  $0D
CLR  $0E
CLR  $0F
Instruksi MOV $21,#$0F mempunyai makna mengisi memori-data nomor $21 dengan nilai $0F (atau bilangan biner 00001111), berarti mengisi memori-bit nomor $0F sampai $08 dengan bilangan biner 00001111 yang bisa dinyatakan dengan 8 baris instruksi berikutnya.

Special Function Register (SFR)

Register Khusus (SFR - Special Function Register) adalah satu daerah  RAM dalam IC keluarga MCS51 yang dipakai untuk mengatur perilaku MCS51 dalam hal-hal khusus, misalnya tempat untuk berhubungan dengan port paralel P1 atau P3, dan sarana input/output lainnya, tapi tidak umum dipakai untuk menyimpan data seperti layaknya memori-data.
Meskipun demikian, dalam hal penulisan program SFR diperlakukan persis sama dengan memori-data. Untuk mengisi memori-data nomor $60 dengan bilangan $0F, instruksi yang dipergunakan adalah :
MOV $60,#$0F
Sedangkan untuk memenyimpan $0F ke Port 1 yang di SFR menempati memori-data nomor $90, instruksi yang dipergunakan adalah :
MOV $90,#$0F
Membandingkan kedua instruksi di atas bisa dimengerti dalam segi penulisan program SFR diperlakukan persis sama dengan memori-data.
Meskipun demikian, dalam menyebut memori-data bisa dipakai dua cara, yakni penyebutan nomor memori secara langsung (direct memory addressing) dan penyebutan nomor memori secara tidak langsung (indirect memory addressing) lewat bantuan R0 dan R1. Tapi untuk SFR hanya bisa dipakai penyebutan nomor memori secara langsung (direct memory addressing) saja. Hal ini akan dibahas lebih lanjut di bagian lain.

Register Dasar MCS51

Untuk keperluan penulisan program, setiap mikroprosesor/mikrokontroler selalu dilengkapi dengan Register Dasar. Ada beberapa macam register merupakan register baku yang bisa dijumpai disemua jenis mikroprosesor/ mikrokontroler, ada register yang spesifik  pada masing-masing prosesor.
Yang termasuk Register Baku antara lain Program Counter, Akumulator, Stack Pointer Register, Program Status Register. MCS51 mempunyai semua register baku ini.
Sebagai register yang khas MCS51, antara lain adalah Register B, Data Pointer High Byte dan Data Pointer Low Byte. Semua ini digambarkan dalam Gambar 4.
Di samping itu MCS51 masih mempunyai Register Serba Guna R0..R7 yang sudah disebut dibagian atas.
Dalam mikroprosesor/mikrokontroler yang lain, register-register dasar biasanya ditempatkan ditempat ter­sendiri dalam inti prosesor, tapi dalam MCS51 register-register itu ditempatkan secara terpisah.
·        Program Counter ditempatkan ditempat tersendiri di dalam inti prosesor
·        Register Serba Guna R0..R7 ditempatkan di salah satu bagian dari memori-data
·        Register lainnya ditempatkan dalam Special Function Register (SFR).

Gambar 4
Susunan Register Dasar MCS51

Kegunaan dan pemakaian register-register dasar tersebut antara lain sebagai berikut:

Program Counter

Program Counter (PC) dalam AT89C2051 merupakan register dengan kapasitas 11 bit (dalam AT89C51 atau keluarga MCS51 lainnya kapasitas PC adalah 16 bit). Di dalam PC dicatat nomor memori-program yang menyimpan instruksi berikutnya yang akan diambil (fetch) sebagai instruksi untuk dikerjakan (execute).
Saat setelah reset PC bernilai 0000h, berarti MCS51 akan segera mengambil isi memori-program nomor 0 sebagai instruksi. Nilai PC otomatis bertambah 1 setelah prosesor mengambil instruksi 1 byte. Ada instruksi yang hanya 1 byte, ada instruksi yang sampai 4 byte, dengan demikian pertambahan nilai PC setelah menjalankan instruksi, tergantung pada jumlah byte instruksi bersangkutan.

Akumulator

Sesuai dengan namanya, Akumulator adalah sebuah register yang berfungsi untuk menampung (accumulate) hasil hasil pengolahan data dari banyak instruksi MCS51. Akumulator bisa menampung data 8 bit (1 byte) dan merupakan register yang paling banyak kegunaannya, lebih dari setengah instruksi-instruksi MCS51 melibatkan Akumulator.
Instruksi-instruksi berikut memperjelas pengertian di atas :
MOV A,#$20
ADD A,#$30
Instruksi pertama menyimpan nilai $20 ke Akumulator, instruksi kedua menambahkan bilangan $30 ke Akumulator, hasil penjumlahan sebesar $50 ditampung di Akumulator.

Stack Pointer Register

Salah satu bagian dari memori-data dipakai sebagai Stack, yaitu tempat yang dipakai untuk menyimpan sementara nilai PC sebelum prosesor menjalankan sub-rutin, nilai tersebut akan diambil kembali dari Stack dan dikembalikan ke PC saat prosesor selesai menjalankan sub-rutin.
Stack Pointer Register adalah register yang berfungsi untuk mengatur kerja stack, dalam Stack Pointer Register disimpan nomor memori-data yang dipakai untuk operasi Stack berikutnya.

Program Status Word

Program Status Word (PSW) berfungsi mencatat kondisi prosesor setelah melaksanakan instruksi. Pembahasan tentang PSW secara rinci akan dilakukan dibagian lain.

Register B

Merupakan register dengan kapasitas 8 bit, merupakan register pembantu Akumulator saat menjalankan instruk perkalian dan pembagian.

DPH dan DPL

Data Pointer High Byte (DPH) dan Data Pointer Low Byte (DPL) masing-masing merupakan register dengan kapasitas 8 bit, tapi dalam pemakaiannya kedua register ini digabungkan menjadi satu register 16 bit yang dinamakan sebagai Data Pointer Register (DPTR).
Sesuai dengan namanya, Register ini dipakai untuk mengalamati data dalam jangkauan yang luas.

Dasar Pemrograman AT89C2051 (Bagian 1)

Konstruksi dasar AT89Cx051

Meskipun termasuk tua, keluarga Mikrokontroler MCS51 adalah Mikrokontroler yang paling populer saat ini. Keluarga ini diawali oleh Intel yang mengenalkan IC Mikrokontroler type 8051 pada awal tahun 1980-an, 8051 termasuk sederhana dan harganya murah sehingga banyak digemari, banyak pabrik IC besar lain yang ikut memproduksnya, tentu saja masing-masing pabrik menambahkan kemampuan pada mikrokontroler buatannya meskipun semuanya masih dibuat berdasarkan 8051. Sampai kini sudah ada lebih 100 macam mikrokontroler turunan 8051, sehingga terbentuklah sebuah ‘keluarga besar mikrokontroler’ dan biasa disebut sebagai MCS51.

     Belakangan ini, pabrik IC Atmel ikut menambah anggota keluarga MCS51. Atmel merupakan pabrik IC yang sangat menguasai teknologi pembuatan Flash PEROM, jadi sudah selayaknya kalau Atmel memasukkan Flash PEROM ke dalam mikrokontroler buatannya. Usaha Atmel ini ternyatakan bagaikan menambah ‘darah’ baru bagi keluarga MCS51, dengan adanya Flash PEROM yang harganya murah maka tercapailah angan-angan banyak orang untuk membuat alat berbasis mikrokontroler yang sesederhana mungkin dan semurah mungkin.
     Produksi mikrokontroler MCS51 Atmel dibagi dua macam, yang berkaki 40 setara dengan 8051 yang asli, bedanya mikrokontroler Atmel berisikan Flash PEROM dengan kapasitas berlainan. AT89C51 mempunyai Flash PEROM dengan kapasitas 2 Kilo Byte, AT89C52 4 Kilo Byte, AT89C53 12 Kilo Byte, AT89C55 20 Kilo Byte  dan AT89C8252 berisikan 8 Kilo Byte Flash PEROM dan 2 Kilo Byte EEPROM.
     Yang berkaki 20 adalah MCS51 yang disederhanakan, penyederhanaan  dilakukan dengan cara mengurangi jalur untuk input/output paralel, kemampuan yang lain sama sekali tidak mengalami pengurangan. Penederhanaan ini dimaksudkan untuk membentuk mikrokontroler yang bentuk fisiknya sekecil mungkin tapi mempunyai kemampuan sama. Atmel memproduksi 3 buah mikrokontroler ‘mini’ ini, masing-masing adalah AT89C1051 dengan kapasitas Flash PEROM 1 Kilo Byte, AT89C2051 2 Kilo Byte dan AT89C4051 4 Kilo Byte. Ketiga mikrokontroler ini secara umum disebut sebagai AT89Cx051.
klik pada gambar untuk ukuran sebenarnya
 Gambar 1
Susunan kaki AT89Cx051 dan kontruksi dalam chip

Konstruksi AT89Cx051

     Gambar 1 memperlihatkan susunan kaki AT89C2051, susunan kaki ini sama persis dengan AT89C1051 dan AT89C4051. Demikian pula ketiga IC mempunyai konstruksi di dalam chip yang sama persis, perbedaannya hanya terletak pada kapasitas Flash PEROM.
      IC AT89Cx051 hanya memerlukan tambahan 3 kapasitor, 1 resistor dan 1 Xtal serta catu daya 5 Volt. Kapasitor 10 mikro-Farad dan resistor 10 Kilo Ohm dipakai untuk membentuk rangkaian reset, dengan adanya rangkaian reset ini AT89Cx051 otomatis di-reset begitu rangkaian menerima catu daya. Xtal dengan frekuensi maksimum 24 MHz dan 2 kapasitor 30 pico-Farad dipakai untuk melengkapi rangkaian oscilator pembentuk clock yang menentukan kecepatan kerja mikrokontroler.
      Memori merupakan bagian yang sangat penting bagi mikrokontroler, diperlukan 2 macam memori yang sifatnya berbeda.
      Read Only Memory (ROM) yang isinya tidak berubah meskipun IC kehilangan catu daya, dipakai untuk menyimpan program, begitu di-reset mikrokontroler akan langsung bekerja dengan program dalam ROM tersebut. Sesuai dengan keperluannya, dalam susunan MCS51 memori penyimpan program ini dinamakan sebagai MEMORI PROGRAM.
      Random Access Memory (RAM) isinya akan sirna begitu IC kehilangan catu daya, dipakai untuk menyimpan data pada saat program bekerja. Di samping untuk data, RAM dipakai pula untuk Stack. RAM yang dipakai untuk menyimpan data ini disebut pula sebagai MEMORI DATA.
      Ada berbagai jenis ROM. Untuk mikrokontroler dengan program yang sudah baku dan diproduksi secara massal, program diisikan ke dalam ROM pada saat IC mikrokontroler dicetak di pabrik IC. Untuk keperluan yang jumlahnya tidak banyak biasanya tidak dipakai ROM, tapi dipakai ROM yang bisa di-isi-ulang atau Programable-Eraseable ROM (disingkat menjadi PEROM atau PROM). Dulu banyak dipakai UV-EPROM (Ultra Violet Eraseable Programable ROM) yang kemudian dinilai mahal harganya dan ditinggalkan setelah ada Flash PEROM yang harganya jauh lebih murah.
      Jenis memori yang dipakai untuk Memori Program AT89Cx051 adalah Flash PEROM, program untuk mengendalikan mikrokontroler diisikan ke memori itu lewat bantuan alat yang dinamakan sebagai AT89Cx051 Flash PEROM Programmer.
Memori Data yang disediakan dalam chip AT89Cx051 sebesar 128 byte, meskipun hanya kecil saja tapi untuk banyak keperluan memori kapasitas itusudah mencukupi.
      Sarana Input/Output yang disediakan cukup banyak dan bervariasi. AT89Cx051 mempunyai 17 jalur Input/Output paralel. Jalur Input/Output paralel ini dikenal sebagai Port 1 (P1.0..P1.7) dan Port 3 (P3.0..P3.5 dan P3.7).
      AT89Cx051 dilengkapi UART (Universal Asynchronous Receiver/Transmiter) yang biasa dipakai untuk komunikasi data secara seri. Jalur untuk komunikasi data seri (RXD dan TXD) diletakan berhimpitan dengan P1.0 dan P1.1 di kaki nomor 2 dan 3, sehingga kalau sarana UART ini dipakai maka P1.0 dan P1.1 tidak lagi bisa dipakai untuk jalur input/output paralel.
    Timer 0 dan Timer 1 masing-masing adalah untaian pencacah biner 16 bit (16 bit binary counter) di dalam chip yang dipakai sebagai sarana input/output yang bekerja menurut fungsi waktu. Clock penggerak untaian pencacah ini bisa berasal dari oscilator kristal atau clock yang diumpan dari luar lewat T0 dan T1. T0 dan T1 berhimpitan dengan P3.4 dan P3.5, sehingga P3.4 dan P3.5 tidak bisa dipakai untuk jalur input/output paralel kalau T0 dan T1 dipakai.
       AT89Cx051 mempunyai 5 sumber pembangkit interupsi, 2 diantaranya adalah sinyal interupsi yang diumpankan ke kaki INT0 dan INT1, kedua kaki ini berhimpitan dengan P3.2 dan P3.3 sehingga tidak bisa dipakai sebagai jalur input/output paralel kalau INT0 dan INT1 dipakai untuk menerima sinyal interupsi.
        3 sumber interupsi yang lain berasal dan sarana komunikasi data seri dan dari sistem Timer 0 dan Timer 1.
        Port 1, Port 2, UART, Timer 0, Timer 1 dan sarana lainnya merupakan register yang secara fisik merupakan RAM khusus, yang ditempatkan di Special Function Register (SFR).


Dasar kerja program

      Program untuk mengendalikan kerja dari mikrokontroler disimpan di dalam memori program. Program pengendali tersebut merupakan kumpulan dari instruksi kerja mikrokontroler, 1 instruksi MCS51 merupakan kode yang panjangnya bisa satu sampai empat byte.
       Sepanjang mikrokontroler bekerja, instruksi tersebut byte demi byte diambil ke CPU dan selanjutnya dipakai untuk mengatur kerja mikrokontroler. Proses pengambilan instruksi dari memori program dikatakan sebagai ‘fetch cycles’ dan saat-saat CPU melaksanakan instruksi disebuat sebagai ‘execute cycles’.
       Semua mikrokontroler maupun mikroprosesor dilengkapi sebuah register yang berfungsi khsus untuk mengatur ‘fetch cycles’, register tersebut dinamakan sebagai Program Counter. Nilai Program Counter secara otomatis bertambah satu setiap kali selesai mengambil 1 byte isi memori program, dengan demikian isi memori program bisa berurutan diumpankan ke CPU.
        Saat MCS51 di-reset, isi Program Counter di-reset menjadi 0000. Artinya sesaat setelah reset isi dari memori program nomor 0 dan seterusnya akan diambil ke CPU dan diperlakukan sebagai instruksi yang akan mengatur kerja mikrokontroler. Dengan demikian, awal dari program pengendali MCS51 harus ditempatkan di memori nomor 0, setelah reset MCS51 menjalankan program mulai dari memori-program nomor 0000, dengan melakukan proses ‘fetch cycles’ dan ‘execute cycles’ terus menerus tanpa henti.
        Jika sarana interupsi diaktipkan, dan tegangan di kaki INT0 (kaki nomor 6) merubah dari ‘1’ menjadi ‘0’, maka proses menjalankan program di atas akan dihentikan sebentar, mikrokontroler melayani dulu permintaan interupsi, selesai melayani permintaan interupsi CPU akan melanjutkan mengerjakan program utama lagi.
         Untuk melaksanakan hal tersebut, pertama-tama CPU menyimpan nilai Program Counter ke Stack (Stack merupakan satu bagian kecil dari data memori – RAM), kemudian mengganti isi Program Counter dengan 0003. Artinya MCS51 akan melaksanakan program yang ditempatkan di memori program mulai byte ke 3 untuk melayani interupsi yang diterima dari kaki INT0. Adalah tugas programer untuk mengatur agar program yang dipakai untuk melayani interupsi lewat INT0 diletakkan disitu.
        Selesai melayani interupsi, nilai Program Counter yang tadi disimpan ke dalam Stack akan dikembalikan ke Program Counter, dengan demikian CPU bisa melanjutkan pekerjaan di program Utama.
      Selain INT0, AT89Cx051 bisa menerima interupsi dari INT1, dari UART dan dari Timer. Agar permintaan interupsi itu bisa dilayani dengan program yang berlainan, maka masing-masing sumber interupsi itu mempunyai nomor awal program untuk layanan interupsi yang berlainan. Nomor-nomor awal tersebut digambarkan dalam Gambar 2.

 Gambar 2
Peta Memori Program

Tutorial Bascom AVR dan 8051 lengkap

  • Judul : Mudah memprogram mikrokontroler dengan bahasa basic
  • Bahasa :Inggris
  • Jenis File : PDF (Adobe reader)
  • Jumlah Halaman :236
  • Lain-lain :
  • Isi :
  1. Pemrograman mikrokontroler menggunakan bahasa basic dengan software bascom
  2. step by step menggunakan software bascom lengkap
  3. cara menggunakan virtual simulator bascom
  4. contoh aplikasi menggunakan bascom lengkap
Ebook tutorial bascom ini anda dapat download disini

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