Pada mikrokontroler Atemal keluarga AT89C (obsollete) atau AT89S, Port 0 tidak memiliki pullup internal. Pullup FET yang berada di dalam penggerak luaran P0 digunakan hanya pada saat port mengirimkan logika ‘1′ selama pengaksesan memori eksternal. Selain dari itu, pullup FET akan selalu mati. Konsekuensinya, jalur-jalur P0 yang digunakan sebagai jalur luaran merupakan saluran terbuka (open drain). Penulisan ‘1′ ke bit pengancing membuat kedua FET keluaran menjadi mati, dengan demikian kondisi kaki-kakinya menjadi mengambang (float). Dalam kondisi seperti ini, pin dapat digunakan sebagai masukan berimpedansi tinggi.

Karena Port 1, 2 dan 3 telah memiliki pullup internal yang pasti, mereka dinamakan sebagai port-port kuasi-dwi-arah (quasi-bidirectional). Saat dikonfigurasi sebagai masukan, maka ditarik tinggi dan memberikan arus (source current) saat ditarik rendah secara eksternal. Port 0, di sisi lain, merupakan Port 0 dwi-arah yang sebenarnya, karena akan mengambang jika dikonfigurasi sebagi masukan.

Fungsi reset atau saat Power ON akan menuliskan ‘1′ ke seluruh bit-bit pengancing (latch) port pada keluarga AT89. Jika kemudian ‘0′ dituliskan ke pengancing, pengancing dapat dikonfigurasi sebagai masukan jika ‘1′ dituliskan padanya.

Contoh rangkaian dan aplikasi

Rangkain minimum untuk menghidupkan 8 LED melalui Port 1 ditunjukkan pada gambar dibawah ini. Yang perlu diperhatikan adalah konfigurasi rangkaian LED itu sendiri, yaitu Common Anode (CA), artinya untuk menghidupkan LED pada Port 1 yang bersangkutan, harus dikirim logika ‘0′. Hal ini berkaitan dengan penjelasan sebelumnya, Jika ‘0′ kita tulis ke Port 0 maka luaran dari lacth (yang ) akan menghidupkan FET sehingga baik kaki Port 0 maupun resistor pullup internal akan di pulled-low (secara internal juga), sehingga LED yang terhubungkan secara CA bisa menyala.

Sedangkan jika menggunakan rangkaian Common Khatode (CK), untuk menyalakan LED butuh penulisan ‘1′, namun penulisan ‘1′ ini menyebabkan Port 0 menjadi masukan berimpedansi (karena adanya resistor pullup internal) dan hanya cocok untuk masukan bukan keluaran (arus dari pullup internal tidak kuat untuk menyalakan LED karena ordenya uA, sedangkan keluarannya bisa mencapai sekitar 3,8 mA). Hal ini berlaku juga untuk Port 2 dan Port 3. Penggunaan resistor 330 ohm sebagai pembatas arus, dengan tegangan Vcc 5 volt maka arusnya sekitar 15 mA dan ini cukup untuk menghidupkan LED (biasanya sekitar 10 mA).

Program bab3_01.asm merupakan aplikasi untuk membuat kelompok 4 (empat) LED mati-hidup secara bergantian (flip-flop):

1:	;-- BAB3_01.ASM -----------------------------------------------------------
2:	;
3:	; LAMPU FLIP-FLOP PADA PORT 1
4:	;
5:	;--------------------------------------------------------------------------
6:	        ORG   0H			; PROGRAM DITEMPATKAN PADA LOKASI 0000H
7:	;
8:	MULAI:  MOV   P1,#00001111B     ; LED P1.4 S/D P1.7 NYALA (HEKSA= #0FH)
9:	        ACALL DELAY             ; LAKUKAN PENUNDAAN SESAAT (SUB. DELAY)
10:	        MOV   P1,#11110000B     ; LED P1.0 S/D P1.3 NYALA (HEKSA= #0F0H)
11:	        ACALL DELAY             ; LAKUKAN PENUNDAAN SESAAT (SUB. DELAY)
12:	        SJMP  MULAI             ; ULANGI LAGI DARI AWAL
13:	;
14:	;-SUBRUTIN DELAY-----------------------------------------------------------
15:	;
16:	; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT DENGAN CARA
17:	; MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA DICAPAI SUATU
18:	; KONDISI TERTENTU
19:	;
20:	;--------------------------------------------------------------------------
21:	DELAY:  MOV   R0,#5H            ; ISI REGISTER R0 DENGAN 5 (5X ULANG)
22:	DELAY1: MOV   R1,#0FFH          ; ISI REGISTER R1 DENGAN 255 (255X ULANG
23:	DELAY2: MOV   R2,#0             ; ISI REGISTER R2 DENGAN 0 (256X ULANG)
24:	        DJNZ  R2,$              ; R2=R2-1, JIKA R2 BELUM 0 ULANGI LAGI
25:	        DJNZ  R1,DELAY2         ; R1=R1-1, JIKA R1 BELUM 0 ULANGI DELAY2
26:	        DJNZ  R0,DELAY1         ; R0=R0-1, JIKA R0 BELUM 0 ULANGI DELAY1
27:	        RET                     ; KEMBALI KE PEMANGGIL SUBRUTIN DELAY
28:	END

Baris 8-12 merupakan program utama, sedangkan baris 1-5 dan 14-20 merupakan komentar sekaligus berisi keterangan program (diabaikan selama proses kompilasi), baris 6 digunakan agar instruksi dituliskan mulai alamat 0h. Baris 8 digunakan untuk mengirimkan data 00001111B (biner) ke Port 1 agar lampu LED4 - LED7 (berkaitan dengan P1.4-P1.7) menyala, kemudian diikuti dengan mengerjakan tundaan (baris-9) yaitu mengerjakan sub-rutin Delay, kemudian bergantian LED0-LED3 (berkaitan dengan P1.0-P1.3) dinyalakan (baris-10), kemudian (baris-11) tundaan lagi. Proses ini diulang dari awal dengan instruksi SJMP MULAI pada baris 12. Baris 21-27 merupakan program subrutin DELAY.

Informasi lebih lengkap bisa diperoleh di buku saya “Belajar Mikrokontroler At89C51/52/55: Teori dan Aplikasi, Edisi 2“, CV. Gava Media - Yogyakarta (klik)

Tags: , ,

17 Responses to “Tutorial Mikrokontroler AT89: Masukan dan Luaran (I/O)”

  1. Aku doakan semoga bukunya makin laris.

    Mas, duet nulis buku yuk? Aku co-writer aja deh… :)

    Rgds,
    Chandra MDE

  2. okey setuju saja silahkan japri langsung…
    mas Chandra jadi penulis utamanya juga gak apa2 kok…
    sekalian untuk promosi…

  3. Salam kenal.

    Bisa bahas pemrograman MCS 51 dengan bahasa C spt keil C tidak?
    Saya kesulitan di pengaturan delay yang tepat karena umunya menggunakan looping, misal :
    delay_ms(1000) ->> 1 detik tepat.

    Caranya menyisipkan program assembler pada bahasa C untuk Keil C gmana ya?

    Thanks

  4. mas da gak micro yang pake multiflexer
    kalo ada
    tolong ya mas dikirim ke email saya

  5. wah pertanyaan bagus…
    MUX biasa dijumpai pada FPGA, sehingga pertanyaannya bisa “adakah mikrokontroler yang dilengkapi FPGA?” atau “FPGA yang dilengkapi mikrokontroler?”…

    jawabannya ada di artikel khusus, sengaja saya tidak terjemahkan agar sekalian belajar bhs. inggris… -> FPSLIC (AVR with FPGA)

  6. Cuma mw bilang saya bakal sering berkunjung ke sini, programmer web pengen belajar elektronik jg nih, he2.
    Ijin nyimak n donlod ya Mas
    Thx :)
    Sukses selalu

  7. silahkan nyimak, download atau merujuk ke website saya silahkan, you’re welcome…
    sukses juga buat NUX…

  8. saya sudah beli bukunya dari kapan hari. saya udah nyoba beberapa programnya. tapi masih ada masalah di bagian konek ke PC lewat kabel serial. saya pake kabel data BAFO usb to serial (laptop saya gak ada port serial).

    apa masalahnya itu sama kabel data BAFO saya ya??? kalo buat ngecek kabel data itu gimana caranya pak?

    kalo saya interface nya pake delphi…. apa di mikro nya harus di isi program dulu buat ngerespon program di delphinya, atau saya ketik aja semua code asmnya di delphi(termasuk program buat mikronya)???

    makasih…..

  9. @Rez:
    untuk antarmuka dengan PC, mo pake VB atau Delphi, jelas uC-nya harus diisi dulu donk plus diberi protokol untuk berkomunikasi dengan PC-nya… kabel USB2Serial pada dasarnya bisa digunakan, ini untuk komunikasi serial…

  10. mas tanya, dulu saat aq awal belajar mikro, saya coba buat downloader untuk seri at89s51, padahal saya dah coba pake beberapa referensi, tapi kok masih g bisa, bisa minta rangkaian downloader untuk seri s51 ga’ mas? dan sekarang aq pake avr atmega8535,tapi punya kendala di komunikasi serial. ketika di hyperterminal, karakter keluar tapi kok ga’ sesuai dengan karakter yang seharusnya, baudrate sudah sama, saya pake 2400. pa spek dari komputer da pengaruh.

  11. gunakan saja USB downloader disini

  12. salam sukses selalu…..

    Mo tanya soal maksimal output mikrokontroler AT89S82 bisa gak mengatur nyalah sampe 32 led ?
    menggunakan program apa untuk mengatur nyalah LED nya?

  13. gambar rangkaian yang bapak buat menggunakan (common anoda), yang semua kutub positif LED terhubung semua ke VCC pengaturan menyalahkan LED menggunakan aktif low.
    bagaimana jika saya ingin membuat dengan menggunakan (common katoda)?
    mohon untuk memberikan penjelasan atau mengirim email ke saya untuk gambar rangkaiannya jika bisa…..
    terima kasih salam sukses selalu untuk pak agfianto

  14. @Syaifullah:
    penjelasan untuk rangkaian aktif high bisa diunduh di sini.
    Yang Anda unduh adalah draft buku yang terbengkalai gak sempet saya selesaikan…

  15. Pak Kasih Tutorial Yang Expert Donk!!!
    Misal : USB. MMC, Ethernet
    Kasih teori aja, bosen dengan yang biasa coz di internet kan banyak,
    Oke Pak!

  16. adakah flowchartnya dan gambar ….
    seandainnya port yang dipakai adalah Po bisa tidak ? jika bisa bagaimana ??

    makasihh…

Trackbacks/Pingbacks

  1. Memulai Belajar Mikrokontroler - Quick, Easy and Harmless! | DSP & Embedded Electronics

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>