Lab Elektronika Industri
Mikrokontroler - 1
PORT PARALEL MIKROKONTROLER ATMEL AT89C51 I. FISIK AT89C51 Mikrokontroler AT89C51 umumnya mempunyai kemasan 40 pin seperti gambar berikut. AT89C51 mempunyai 4 Port untuk keperluan input dan output data. Keempat port itu disebut Port 0, Port 1, Port 2 dan Port 3 yang disingkat P0, P1, P2, P3. Masing-masing port mempunyai lebar data 1 byte atau 8 bit. Port 1 ada pada pin1 sampai pin8, port 3 pada pin 10 hingga pin17, port 2 pada pin 21 sampai 28 dan port 0 pada pin 32 hingga 39. Khusus untuk port 0, port 2 dan port 3 selain untuk input/output data juga berfungsi lain yang nanti akan dijelaskan kemudian. Masing-masing port bisa dialamati secara byte (langsung 8 bit) atau dialamati bit per bit. Cara untuk untuk mengeluarkan data secara byte adalah sbb: MOV P0, R1 MOV P1, #30 MOV P2, #1001010b MOV P3, #0B3H MOV P0, @R0 dst, jelasnya lihat set instruksi transfer data. Untuk membaca/memasukkan data ke port secara byte adalah sebagai berikut: MOV R1, P0 MOV 30H, P1 MOV A, P2 MOV B, P3 MOV @R0, P2 Selain itu setiap port juga bisa dialamati secara bit. Misalnya diinginkan untuk mengeluarkan data pada port 1 bit tertentu, caranya SETB P1.3 ;port 1 bit 3 akan dibuat berlogika 1 SETB P1.7 ;port 1 bit 7 akan dibuat berlogika 1 CLR P1.2 ;port 1 bit 2 akan dibuat berlogika 0 CLR P1.5 ;port 1 bit 5 akan dibuat berlogika 0 Selain itu setiap port juga bisa dipakai untuk memasukkan data pada bit tertentu, caranya MOV C, P2.3 ;memasukkan kondisi port 2 bit 3 ke register bit C JB P2.3, delay ;memantau kondisi port 2 bit 3 jika = 1 loncat ke delay. dst, untuk lebih jelas lihat instruksi boolean.
II. PORT PARALEL Port paralel P0, P1, P2 dan P3 adalah salah satu register fungsi khusus (SFR = Special Function Register) yaitu memori dalam RAM. P0 ada pada SFR alamat 80H. P1 pada alamat 90H.
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Mikrokontroler - 2
P2 dan P3 masing-masing pada alamat A0H dan B0H. Selain berfungsi sebagai port input dan output data, beberapa port ada yang mempunyai fungsi ganda. P0 selain untuk input/output, pada saat pengisian program ke flash ROM berfungsi untuk memasukkan data program (D7 - D0) dan juga untuk memasukkan address (A7 - A0 = alamat untuk flash ROM) byte rendah. Sedangkan alamat byte tinggi (A15 – A8) untuk address pengisian ke flash ROM masuk lewat P2. Port 3 bit 0 (P3.0) adalah juga dipakai untuk penerima data serial dan port 3 bit 1 (P3.1) untuk pengiriman data serial pada mode komunikasi data serial (Serial Port). P3.2 dan P3.3 juga untuk masukan dua interupsi dari eksternal atau dikenal INT0 dan INT1 jika mode interupsi diaktifkan. P3.4 dan P3.5 juga berfungsi untuk masukan eksternal untuk pewaktu/pencacah (timer/counter) 0 dan 1 jika mode timer/counter diaktifkan atau dikenal (T0 dan T1). P3.6 juga untuk sinyal tulis (write) memori ekternal yang disebut WR dan P3.7 untuk sinyal baca (read) memori eksternal yang disebut RD pada saat menggunakan tambahan memori data atau memori program eksternal. Secara singkat dapat dilihat pada tabel di bawah:
Kaki Port
Fungsi Alternatif
Keterangan
P3.0
RxD
Penerima (Receiver) data serial
P3.1
TxD
Pengirim (Transmitter) data serial
P3.2
INT0
Interupsi eksternal 0
P3.3
INT1
Interupsi eksternal 1
P3.4
T0
Input eksternal timer/counter 0
P3.5
T1
Input eksternal timer/counter 1
P3.6
WR
Sinyal tulis (write) ke memori eksternal
P3.7
RD
Sinyal baca (read) ke memori eksternal
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Mikrokontroler - 3
III. RANGKAIAN INTERNAL PORT PARALEL
Rangkaian internal masing-masing port seperti gambar di atas. Perhatikan bahwa masing-masing port mempunyai rangkaian internal yang sedikit berbeda. Tetapi keempat port tersebut bisa berfungsi sebagai sarana untuk input dan output data digital. Setiap port dilengkapi pengunci bit (latch) yang berguna untuk menahan/menyimpan bit yang dituliskan ke port. Data yang akan dikeluarkan lewat port akan juga tersimpan oleh masing-masing latch. Khusus pada P0, karena rangkaian internalnya tidak dilengkapi dengan resistor pull-up, maka harus ditambah resistor secara eksternal. Ketika port akan dipakai untuk memasukkan data dari luar, perlu diperhatikan agar port-port itu harus diinisialisasi sebelumnya dengan mengisi data 1 agar bisa membaca data dari luar dengan benar terutama ketika port dipakai untuk keperluan input dan output data. Inisialisasi ini tidak diperlukan apabila port dari awal hanya dipakai sebagai input data saja.
IV. SPESIFIKASI PORT PARALEL IV.1. Port 0 (P0) Port 0 merupakan port untuk input dan output data digital bertipe transistor FET dengan drain terbuka (open-drain bidirectional). Jika logika 0 dikeluarkan ke port, masing-masing pin P0 mampu menarik arus (sink) sebesar 3,8mA atau setara dengan 8 gerbang TTL. Pada saat logika 1 dikeluarkan ke P0, maka pin-pin P0 akan mempunyai masukan yang berimpedansi tinggi. Sehingga pada kondisi ini, jika P0 dipakai sebagai port untuk input data harus ditambahi resistor pull-up secara eksternal yang besarnya bisa 4k7 hingga 10k ohm. IV.2. Port 1 (P1) Port 1 adalah port untuk input dan output data digital yang dilengkapi dengan resistor pull-up internal. Ketika logika 0 dikeluarkan ke port 1 maka tiap-tiap pin P1 mampu menarik arus sebesar 1,6mA atau setara 4 gerbang TTL. Dan ketika logika 1 dikeluarkan ke P1, maka tiap-tiap pin P1 hanya mampu mengeluarkan arus sebesar 60µA (sangat kecil sekali bukan). Jika P1 akan dipakai sebagai input, maka sebelumnya harus dikeluarkan dulu logika 1 ke P1 agar P1 bisa dipakai sebagai input.
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Mikrokontroler - 4
IV.3. Port 2 (P2) Port 2 adalah port untuk input dan output data digital yang dilengkapi dengan resistor pull-up internal. Ketika logika 0 dikeluarkan ke port 2 maka tiap-tiap pin P2 mampu menarik arus sebesar 1,6mA atau setara 4 gerbang TTL. Dan ketika logika 1 dikeluarkan ke P2, maka tiap-tiap pin P2 hanya mampu mengeluarkan arus sebesar 60µA (sangat kecil sekali bukan). Jika P2 akan dipakai sebagai input, maka sebelumnya harus dikeluarkan dulu logika 1 ke P2 agar P2 bisa dipakai sebagai input. IV.4. Port 3 (P3) Port 3 adalah port untuk input dan output data digital yang dilengkapi dengan resistor pull-up internal. Ketika logika 0 dikeluarkan ke port 3 maka tiap-tiap pin P3 mampu menarik arus sebesar 1,6mA atau setara 4 gerbang TTL. Dan ketika logika 1 dikeluarkan ke P3, maka tiap-tiap pin P3 hanya mampu mengeluarkan arus sebesar 60µA (sangat kecil sekali bukan). Jika P3 akan dipakai sebagai input, maka sebelumnya harus dikeluarkan dulu logika 1 ke P3 agar P3 bisa dipakai sebagai input. Dengan demikian maka dalam aplikasi pengendalian, sering paralel port dirangkai menjadi aktif logika 0 karena mampu menarik arus yang jauh lebih besar daripada aktif pada logika 1 yang hanya mampu mengeluarkan arus yang sangat kecil.
V. PENGENDALIAN DENGAN PORT PARALEL
Contoh rangkaian untuk mengendalikan 8 lampu LED (Light Emitting Diode) di port 1. Bagian anoda LED disambung bersama ke +5V, sehingga untuk menyalakan tiap-tiap LED harus dibuat output P1 berlogika 0 (aktif 0). Resistor 330 ohm digunakan untuk membatasi arus yang lewat sehingga tidak membebani output AT89C51 dan tidak merusak LED. Sebanarnya bisa saja dipakai port 0, atau port 2 atau port 3 untuk mengendalikan LED seperti ini dengan tidak ada perbedaan hasilnya. Rangkaian R 10k dan C 10uF dipakai untuk membuat kondisi RESET saat rangkaian dinyalakan. Dan kristal ditambah dua C 33pF menyediakan pembangkit clock bagi mikrokontroler.
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Mikrokontroler - 5
Pemberian instruksi untuk menyelakan/mematikan LED adalah sebagai berikut: MOV MOV MOV MOV MOV MOV MOV
P1, #00000000b P1, #11111111b P1, #00H P1, #0FFH P1, #0 P1, #255 P1, #00001111b
; 8 LED akan menyala ; 8 LED akan padam ; 8 LED akan menyala ; 8 LED akan padam ; 8 LED akan menyala ; 8 LED akan padam ; 4 LED kiri menyala dan 4 LED kanan padam
Dapat pula mengendalikan LED secara satu per satu dengan perintah sebagai berikut: CLR SETB
P1.7 P1.7
; LED paling kiri (P1.7) akan menyala ; LED paling kiri (P1.7) akan padam
Contoh berikut adalah listing program untuk mengendalikan 8 LED yang menyala dan padam secara bergantian dan berulang-ulang terus. ;--------------------------------------------------------------------------------------------------; Program Kendalikan 8 LED di Port 1 ;--------------------------------------------------------------------------------------------------Org 0H Start: Mov P1,#00H ;8 LED nyala semua Acall Delay ;Tunda sebentar Mov P1,#0FFH ;8 LED mati semua Acall Delay ;Tunda sebentar Ajmp Start ;Kembali ke start lagi ;-------------------------------------------------------------------------------------------------; Prosedure Delay ;-------------------------------------------------------------------------------------------------Delay: Mov R1,#6 Delay1: Mov R2,#0 Delay2: Mov R3,#0 Djnz R3,$ Djnz R2,Delay2 Djnz R1,Delay1 Ret End
Program berikut adalah membuat nyala LED secara bergantian sehingga tampil seperti LED berjalan. ;--------------------------------------------------------------------------------------------------; Program Kendalikan LED di Port 1 menyala bergeser ;--------------------------------------------------------------------------------------------------Org 0H Start: Mov P1,#11111110b ;LED ke-1 nyala Acall Delay ;Tunda sebentar Mov P1,#11111101b ;LED ke-2 nyala Acall Delay ;Tunda sebentar Mov P1,#11111011b ;LED ke-3 nyala Acall Delay ;Tunda sebentar Mov P1,#11110111b ;LED ke-4 nyala Acall Delay ;Tunda sebentar Mov P1,#11101111b ;LED ke-5 nyala Acall Delay ;Tunda sebentar Mov P1,#11011111b ;LED ke-6 nyala Acall Delay ;Tunda sebentar Mov P1,#10111111b ;LED ke-7 nyala Acall Delay ;Tunda sebentar Mov P1,#01111111b ;LED ke-8 nyala Acall Delay ;Tunda sebentar Ajmp Start ;Kembali ke start lagi ;-------------------------------------------------------------------------------------------------; Prosedure Delay ;-------------------------------------------------------------------------------------------------Delay: Mov R1,#6
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Delay1: Delay2:
Mov Mov Djnz Djnz Djnz Ret End
Mikrokontroler - 6
R2,#0 R3,#0 R3,$ R2,Delay2 R1,Delay1
Contoh lain adalah paralel port untuk mengendalikan display 7 segmen. Display 7 segmen adalah 8 LED yang disusun secara khusus membentuk elemen karakter. Masing-masing segmen dibuat dari 1 LED yang dinamai segmen a, b, c, d, e, f dan dp (decimal point). Dengan memberikan kombinasi yang tepat dapat dibuat tampilan angka, huruf atau karakter lain. Contoh jika dinyalakan segmen: a, b, c, d, e, f tampil angka “0” b, c tampil angka “1” a, b, d, e, g tampil angka “2” a, b, c, d, g tampil angka “3” , dan seterusnya. Rangkaian berikut adalah pengendalian 7 segmen di port 0 dan port 3.
Port 0 dipakai untuk mengatur segmen LED mana yang harus menyala untuk membentuk angka tertentu dan P3.0, P3.1 dan P3.2 digunakan untuk mengaktifkan display mana yang akan menyala apakah bagian ratusan, puluhan atau satuan. Hubungan dari pin-pin di P0 dan P3 diringkas menjadi tabel berikut: dp
a
b
c
d
e
f
g
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
Ratusan Puluhan P3.0
P3.1
Satuan P3.2
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Mikrokontroler - 7
Contoh program berikut untuk menampilkan 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d pada display 7 segment pada digit ratusan. ;------------------------------------------------------------------------------------------------; Program Kendalikan 7 segment ;-----------------------------------------------------------------------------------------------ORG 0H Clr P3.2 ;Aktifkan display satuan Start: Mov P0,#10000001b ;Angka 0 Acall Delay ;Tunda sementara Mov P0,#11001111b ;Angka 1 Acall Delay ;Tunda sementara Mov P0,#10010010b ;Angka 2 Acall Delay ;Tunda sementara Mov P0,#10000110b ;Angka 3 Acall Delay ;Tunda sementara Mov P0,#11001100b ;Angka 4 Acall Delay ;Tunda sementara Mov P0,#10100100b ;Angka 5 Acall Delay ;Tunda sementara Mov P0,#10100000b ;Angka 6 Acall Delay ;Tunda sementara Mov P0,#10001111b ;Angka 7 Acall Delay ;Tunda sementara Mov P0,#10000000b ;Angka 8 Acall Delay ;Tunda sementara Mov P0,#10000100b ;Angka 9 Acall Delay ;Tunda sementara Mov P0,#10001000b ;Huruf A Acall Delay ;Tunda sementara Mov P0,#11100000b ;Angka b Acall Delay ;Tunda sementara Mov P0,#10110001b ;Angka C Acall Delay ;Tunda sementara Mov P0,#11000010b ;Angka d Acall Delay ;Tunda sementara Ajmp Start ;kembali lagi ke Start ;----------------------------------------------------;Prosedure Delay ;----------------------------------------------------Delay: Mov R1,#6 Delay1: Mov R2,#0 Delay2: Mov R3,#0 Djnz R3,$ Djnz R2,Delay2 Djnz R3,Delay1 Ret End
Contoh program berikut menampilkan hitungan dari 000 hingga 999 dengan teknik scanning. ;--------------------------------------------------------------; Program Display 7 Segment hitung 000 - 999 ;--------------------------------------------------------------ORG 0H Satuan Equ 3AH Puluhan Equ 3BH Ratusan Equ 3CH Mov 30H,#10000001b Mov 31H,#11001111b Mov 32H,#10010010b Mov 33H,#10000110b Mov 34H,#11001100b Mov 35H,#10100100b Mov 36H,#10100000b Mov 37H,#10001111b Mov 38H,#10000000b Mov 39H,#10000100b
;Display 0 ;Display 1 ;Display 2 ;Display 3 ;Display 4 ;Display 5 ;Display 6 ;Display 7 ;Display 8 ;Display 9
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
UlangRat: UlangPul: UlangSat:
Mov Mov Mov
Mikrokontroler - 8
Ratusan,#30H Puluhan,#30H Satuan,#30H
Ulang1: Ulang2:
Mov R1,#200 Mov R0,Satuan Clr P3.2 Mov P0,@R0 Acall Delay Setb P3.2 Mov R0,Puluhan Clr P3.1 Mov P0,@R0 Acall Delay Setb P3.1 Mov R0,Ratusan Clr P3.0 Mov P0,@R0 Acall Delay Setb P3.0 Djnz R1,Ulang2 Inc Satuan Mov R4,Satuan Cjne R4,#3AH,Ulang1 Inc Puluhan Mov R4,Puluhan Cjne R4,#3AH,UlangSat Inc Ratusan Mov R4,Ratusan Cjne R4,#3AH,UlangPul Jmp UlangRat ;-------------------------------------------------------------------; Prosedur Delay ;-------------------------------------------------------------------Delay: Mov R2,#5 Delay1: Mov R3,#0 Djnz R3,$ Djnz R2,Delay1 Ret End
;Isi cacah ulangan tampilan ;Pointer ke data Satuan ;Aktifkan display satuan ;Keluarkan data satuan ;Tunda sebentar ;Non-aktifkan display satuan ;Aktifkan display puluhan
;Ulang tampilan hingga 255x ;Naikkan data satuan
Contoh program berikut untuk menampilkan tulisan yang bergeser. ;--------------------------------------------------------------; Program Display 7 Segment ; Tampil "Lab Elektronika Industri FtI UAJY" ;--------------------------------------------------------------ORG 0H Display1 Equ 30H Display2 Equ 31H Display3 Equ 32H Mov Display2,#0FFH Mov Display3,#0FFH Ulang1:
Mov Mov
DPTR,#Nilai R0,#40
;Simpan address nilai ke DPTR ;Jumlah karakter yang ditampilkan
Ulang2:
Mov Clr Movc Mov Mov Mov
R1,#200 A A,@A+DPTR Display3,Display2 Display2,Display1 Display1,A
;Jumlah pengulangan tampilan
Clr Mov Acall Setb Clr
P3.0 P0,Display3 Delay P3.0 P3.1
;Tampil huruf di digit satuan
Ulang3:
;Baca data nilai di memori program
;Tampil huruf di digit puluhan
Iwan B Pratama 9/19/2006
Lab Elektronika Industri
Mov Acall Setb Clr Mov Acall Setb Djnz
Mikrokontroler - 9
P0,Display2 Delay P3.1 P3.0 P0,Display1 Delay P3.0 R1,Ulang3
Inc DPTR Djnz R0,Ulang2 Ajmp Ulang1 ;-------------------------------------------------------------------; Prosedur Delay ;-------------------------------------------------------------------Delay: Mov R2,#5 Delay1: Mov R3,#0 Djnz R3,$ Djnz R2,Delay1 Ret ;-------------------------------------------------------------------; Data display ;-------------------------------------------------------------------; Lab. Elektronika Industri FtI UAJY Nilai: DB 0F1H, 082H, 060H, 0FFH, 0B0H, DB 0F0H, 0FAH, 0E2H, 0EAH, 0FBH, DB 0F9H, 0EAH, 0C2H, 0E3H, 0A4H, DB 0FFH, 0B8H, 0F0H, 0F9H, 0FFH, DB 0C4H, 07FH, 07FH, 07FH, 0FEH, End
;Tampil huruf di digit ratusan
;Cek untuk pengulangan 255x ;Menunjuk ke nilai huruf berikutnya ;Cek untuk tampil 40 huruf
0F1H, 0A8H, 0F0H, 0C1H, 0FEH,
090H, 082H, 0FAH, 088H, 0FEH,
0A8H 0FFH 0FBH 0C7H 0FFH
Iwan B Pratama 9/19/2006