Read This Post

Menghidupkan LED melalui Port Parallel AT89C51 (contoh 2)

Berikut ini adalah contoh sederhana bagaimana cara memprogram mikrokontroller AT89C51/52/55 untuk menghidupkan Led melalui port parallel. Simulasi dilakukan dengan menggunakan software Proteus 7.1 SP2

Rangkaian minimum untuk menghidupkan 8 LED melalui port 1 ditunjukkan pada gambar di bawah ini.


Konfigurasi yang digunakan pada rangkaian LED di atas adalah konfigurasi Common Anode (CA). Dimana untuk menghidupkan LED pada port 1 maka pada port tersebut harus diberikan nilai "0". Jika "0" kita berikan ke port 0 maka keluaran dari latch akan menghidupkan FET sehingga baik kaki port 0 maupun resistor pullup internal akan di pull-low(secara internal juga), sehingga LED yang terhubung secara Common Anode bisa menyala. Sedangkan jika menggunakan rangkaian Common Kathode maka untuk menyalakan LED butuh penulisan "1". Namun penulisan "1" ini menyebabkan port 0 menjadi masukan berimpedansi tinggi(karena adanya resistor pullup internal) dan hanya cocok untuk masukan, bukan keluaran(arus dari pullup internal tidak kuat untuk menyalakan LED karena ordenya mikroampere sedangkan keluaran bisa mencapai sekitar 3,8 mA). Hal ini berlaku juga untuk port 2 dan port 3. Penggunaan resistor 330 ohm sebagai pembatas arus, sehingga dengan tegangan Vcc 5 Volt maka arusnya sekitar 15 mA dan ini cukup untuk menghidupkan LED (yang biasanya hanya membutuhkan 10 mA).

Program pertama: Menghidupkan LED berkelompok empat LED mati-hidup secara bergantian (flip-flop).

Baris 9-13 merupakan program utama, sedangkan baris 1-5 dan 15-20 merupakan baris komentar sekaligus berisi keterangan program, baris 7 digunakan agar instruksi ditulisakan mulai alamat 0h. Baris 9 digunakan untuk mengirimkan data biner ke port 1 agar lampu LED4-LED7 (P1.4-P1.7) menyala, kemudian diikuti dengan delay lalu bergantian LED0-LED3 (P1.0-P1.3) dinyalakan. Kemudian delay lagi. Proses ini diulang dari awal dengan instruksi SJMP MULAI pada baris 13. Baris 22-29 merupakan subrutin DELAY. Adapun perhitungan waktu delay-nya adalah sebagai berikut:

1:          DELAY:           MOV    R0,#5H                                      ; 1 x (1 cycle)
2:          DELAY1:         MOV    R1,#0FFH                                 ; 5 x (1 cycle)
3:          DELAY2:         MOV    R2,#0                                         ; 255 x 5 = 1.275 (1 cycle)
4:                                  DJNZ    R2,$                                           ; 256 x 255 x 5 = 326.400 (2 cycle)
5:                                  DJNZ    R1,DELAY2                              ; 255 x 5 = 1.275 (2 cycle)
6:                                   DJNZ    R0, DELAY1                             ; 5 x (2 cycle)
7:                                   RET    
          
Baris ke-4  dikerjakan sebanyak 326.400 kali karena instruksi tersebut dikerjakan selama dua siklus maka waktu totalnya adalah 326.400 x 2 = 652.800 siklus, masih ditambahkan dengan pengulangan kedua (baris 2 dan 5) sebesar 1.275 x 3 siklus = 3.825 siklus dan pengulangan ketiga, DELAY1, sebesar 5 x 3 siklus = 15 siklus. Sehingga total siklus = 652.800 + 3.825 + 15 = 656.640 siklus.

Jika kristal yang kita gunakan memiliki frekuensi 12 MHz maka waktu yang dibutuhkan untuk menyelesaikan subrutin delay ini adalah 656.640 siklus 1 mikrodetik = 0,656 detik. Untuk pewaktuan yang lebih akurat bisa digunakan timer (dibahas nanti saja).

Adapun hasil simulasinya menggunakan software Proteus adalah sebagai berikut :
Pada program LED di atas diketik dengan menggunakan Notepad++ dan disimpan dengan ekstensi .a51, bisa juga disimpan dengan ekstensi yang lain seperti .asm dan lain-lain. Pada kesempatan ini disimpan sebagai .a51 karena program ini akan di-compile menjadi hex dengan bantuan compiler ASEM-51. Kemudian program yang semula berekstensi .a51 akan menjadi .hex sehingga bisa dimasukkan pada simulasi dengan Proteus seperti di atas. Jika simulasi dengan Proteus berhasil maka jika kita mencetak PCB kemudian memproduksi rangkaiannya bisa dipastikan 90% berhasil. Dengan demikian kita bisa mengurangi kerugian akibat kegagalan rangkaian.

Berikut ini adalah simulasi pada saat meng-compile program.a51 menjadi program.hex yang kemudian akan dimasukkan ke dalam mikrokontroller 89C51 pada simulasi proteus maupun pada keadaan sebenarnya.

Do Your Best, Share Our Article

Related Posts

4 Response to Menghidupkan LED melalui Port Parallel AT89C51 (contoh 2)

Anonim
Minggu, 04 April, 2010

slam boss..
bahasa yang boss pake masih ketinggian..para amatiran jadi susah untuk mengerti..bisa di perjelas dengan bahasa yang agak sedikit pasaran gak boss..???biar gampang di mengerti sama amatiran...

thanks

Minggu, 04 April, 2010

Maap...bahasa yang mana neh maksudnya yaa?! bukannya seperti itu bahasanya kalo memprogram mikrokontroller?! Maksudnya bahasa resminya yaa...asssembler...C++, Atmega...dll...coba googling aja kalo ada yg gak jelas. Ketik di google: define:assembler
Begituuu

Anonim
Selasa, 02 November, 2010

pelajaran pertama ok, sekarang di kembangin untuk menghidupkan led per pin dg keypad, maksudnya saat keypad di tekan 1---pin 1 on dst - dst

Anonim
Rabu, 20 April, 2011

passwordnya untuk proteus v7.7 sp2 apa ya mas....

Posting Komentar