• Tidak ada hasil yang ditemukan

BAGIAN III PORT PARALEL MIKROKONTROLER ATMEL KELUARGA 51

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAGIAN III PORT PARALEL MIKROKONTROLER ATMEL KELUARGA 51"

Copied!
15
0
0

Teks penuh

(1)

BAGIAN III

PORT PARALEL MIKROKONTROLER ATMEL KELUARGA 51

III.1. PENDAHULUAN

Mikrokontroler AT89C51/52/55 (keluarga 51) mempunyai 40 kaki, 32 kaki di antaranya digunakan sebagai Port paralel. Satu Port paralel terdiri dari 8 kaki, dengan demikian 32 kaki tersebut membentuk 4 buah Port paralel, yang masing-masing dikenal sebagai Port 0, Port 1, Port 2 dan Port 3.

Nomor dari masing-masing jalur (kaki) dari Port paralel mulai dari 0 sampai 7, jalur (kaki) pertama Port 0 disebut sebagai P0.0 dan jalur terakhir untuk Port 3 adalah P3.7. Perhatikan gambar III.1.A dan III.1.B untuk diagram pin AT89C51/52, perhatikan perbedaannya.

(A) Diagram Pin AT89C51 (B)Diagram Pin AT89C52 Gambar III.1. Diagram Pin Mikrokontroler Atmel Keluarga 51

III.2. FUNGSI-FUNGSI KAKI (PIN)

Vcc

Suplai tegangan.

GND

Ground atau pentanahan.

RST

Masukan reset. Kondisi logika ’1’ selama 2 siklus mesin saat osilator bekerja akan mereset mikrokontroler yang bersangkutan.

ALE/PROG

Keluaran ALE atau Adreess Latch Enable menghasilkan pulsa-pulsa untuk mengancing byte rendah (low byte) alamat selama pengaksesan memori eksternal. Kaki ini juga berfungsi sebagai masukan pulsa program (the program pulse input) atau PROG selama pengisian flash PEROM. Pada operasi normal, ALE akan berpulsa dengan laju 1/6 dari frekuensi kristal dan dapat digunakan sebagai pewaktuan (timing) atau pendetakan (clocking) rangkaian eksternal. Catatan, ada satu pulsa yang dilompati selama pengaksesan memori data eksternal.

Jika dikehendaki, operasi ALE bisa dimatikan dengan cara mengatur bit 0 dari SFR lokasi 8Eh. Jika isinya ’1’, ALE hanya akan aktif selama dijumpai instruksi MOVX atau MOVC. Selain itu, kaki ini akan

(2)

secara lemah di-pulled high. Mematikan bit ALE tidak akan ada efeknya jika mikrokontroler mengeksekusi program secara eksternal.

PSEN

Program Store Enable merupakan sinyal baca untuk memori program eksternal. Saat mikrokontroler keluarga 51 menjalankan program dari memori eksternal, PSEN akan diaktifkan dua kali per siklus mesin, kecuali dua aktivasi PSEN dilompati (diabaikan) saat mengakses memori data eksternal.

EA /Vpp

EA atau External Access Enable harus selalu dihubungkan ke ground, jika mikrokontroler akan mengeksekusi program dari memori eksternal lokasi 0000h hingga FFFFh. Selain dari itu, EA harus dihubungkan ke Vcc agar mikrokontroler mengakses program secara internal.

Kaki ini juga berfungsi menerima tegangan 12 volt (Vpp) selama pengisian flash, khususnya untuk tipe mikrokontroler 12 volt Vpp (yaitu dengan kode IC AT89C51/52 xxxx, sedangkan yang berkode AT89C51/52 xxxx-5, menggunakan tegangan 5 volt Vpp).

III.3. STRUKTUR PORT DAN CARA-KERJA

Pada dasarnya Mikrokontroler Atmel keluarga 51 mempunyai dua kelompok instruksi untuk mengeluarkan data ke Port paralel (tanda ’x’ artinya sama seperti kondisi sebelumnya):

• elompok instruksi pertama bekerja pada Port seutuhnya, artinya 8 jalur dari Port bersangkutan, misalnya MOV P3,#FFh membuat ke-delapan jalur Port 0 semuanya dalam kondisi logika ‘1’ (atau isinya 1111 1111 dalam biner);

• elompok instruksi kedua hanya berpengaruh pada salah satu jalur atau bit dari Port, misalnya instruksi SETB P3.4 artinya men-set bit-4 dari Port 3 (bit-4 dari Port 3 = 1 xxx1 xxxx) atau instruksi CLR P3.3 digunakan untuk me-nolkan bit-3 dari Port 3 (bit-3 dari Port 3 = 0 xxxx 0xxx).

Selain itu Port paralel bisa pula dipakai untuk menerima masukan sinyal digital dari luar mikrokontroler:

nstruksi MOV A,P3 digunakan untuk membaca data (digital) pada seluruh bit (bit 0 hingga 7 = 8-bit) Port 1 kemudian menyimpannya dalam akumulator;

Pembacaan data bisa juga dilakukan hanya pada satu bit Port saja, misalnya instruksi JNB P3.7,$ digunakan untuk memantau bit P3.7, jika P3.7=0, mikrokontroler akan kembali melaksanakan instruksi tersebut (lompat ke label ‘$’ artinya ke lokasi tersebut lagi), mikrokontroler akan meneruskan kembali instruksi berikutnya jika P3.7=1 (Catatan: Instruksi yang berlawanan dengan JNB adalah JB).

Satu hal yang perlu diperhatikan, agar data dari luar bisa dibaca dengan benar, sebelumnya, jalur Port yang bersangkutan harus diinisialisasi terlebih dulu dengan cara mengisi dengan logika ‘1’

terutama jika suatu port berfungsi ganda, sebagai masukan dan keluaran sekaligus, kecuali jika sejak awal dan seterusnya Port yang bersangkutan hanya digunakan sebagai masukan saja. Hal ini akan dijelaskan lebih lanjut pada pasal yang membahas tentang konstruksi internal port-port pada Mikrokontroler Atmel keluarga 51.

Keempat Port pada keluarga 51 tersebut bersifat dwi-arah dan masing-masing memiliki sebuah pengancing (latch), perhatikan gambar III.2 (A s/d D), yang diacu dalam program sebagai Register Fungsi Khusus (RFK atau SFR) sebagai P0, P1, P2 dan P3. Selain itu juga memiliki sebuah penggerak keluaran (output driver) dan sebuah penyangga masukan (input buffer) pada masing- masing kaki-kaki Port.

Penggerak-penggerak keluaran Port 0 dan 2 serta penyangga masukan dari Port 0 digunakan dalam pengaksesan memori eksternal. Pada aplikasi semacam ini, Port 0 mengeluarkan byte rendah alamat memori eksternal, dimultipleks secara waktu dengan byte yang akan dituliskan atau dibaca

(3)

(ke/dari memori eksternal). Port 2 mengeluarkan byte tinggi dari alamat memori eksternal jika lebar alamatnya 16-bit, selain itu, kaki-kaki Port 2 tetap meneruskan menghasilkan isi SFR dari P2.

Semua kaki-kaki Port 3 dan dua kaki Port 1 (pada seri keluarga 51 yang tipe 52 memiliki 3 pewaktu) memiliki ragam-fungsi. Kaki-kaki port-port tersebut tidak hanya sekedar kaki-kaki Port paralel, namun juga menyediakan beberapa fungsi khusus sebagaimana ditunjukkan pada Tabel III.1.

Tabel III.1. Fungsi-Fungsi Khusus Kaki-Kaki Port 3 Dan 1 Kaki Port Fungsi

alternatif

Keterangan

P3.0(1) T2 masukan eksternal pewaktu/pencacah 2 P3.1(1) T2EX pemicu Capture/Reload pewaktu/pencacah 2

P3.0 RXD saluran masukan serial P3.1 TXD saluran keluaran serial P3.2 INT0 interupsi eksternal 0 P3.3 INT1 interupsi eksternal 1

P3.4 T0 masukan eksternal pewaktu/pencacah 0 P3.5 T1 masukan eksternal pewaktu/pencacah 1 P3.6 WR sinyal tanda baca memori data eksternal P3.7 RD sinyal tanda tulis memori data eksternal Catatan (1): P3.0 dan P3.1 memiliki fungsi ini hanya untuk seri 52

yang memiliki 3 pewaktu

Fungsi-fungsi alternatif tersebut, sebagaimana ditunjukkan pada tabel III.1, hanya dapat diaktifkan jika bit-bit pengancing (latch) Port yang bersangkutan berisi ‘1’, selain itu kaki-kaki port akan tetap terkirim ‘0’. Mengapa? Perhatikan gambar III.2.D (untuk Port 3); jika flip-flop pengancing mendapatkan data ‘1’, maka gerbang NAND selalu meng-inversi data dari fungsi keluaran alternatif, jika datanya ‘1’, maka keluaran NAND adalah ‘0’, sehingga mematikan transistor FET, dengan demikian keluaran kaki port langsung tersambung ke Vcc alias terkirim ‘1’ (sesuai data yang dituliskan ke port).

Gambar III.2. Konstruksi internal Port-port Mikrokontroler Atmel keluarga 51

Jika sekarang isi dari pengancing adalah ‘0’, maka keluaran dari gerbang NAND akan selalu

‘1’, sehingga selalu menghidupkan transistor FET, akibatnya keluaran dari kaki-kaki port akan selalu

(4)

terkirim ‘0’ (tidak peduli data yang dituliskan ke port). Untuk pembacaan port sebagai fungsi alternatif tidak ada masalah, data masukan melalui kaki-kaki port kemudian masuk melalui penyangga pertama dan diteruskan sebagai fungsi keluaran alternatif.

III.3.1. KONFIGURASI-KONFIGURASI PORT I/O

Pada gambar III.2.A sampai dengan III.2.D ditunjukkan diagram fungsional dari masing- masing port yang masing-masing mengandung sebuah pengancing (latch) bit dan penyangga (buffer) I/O. Penyangga bit (sama dengan satu bit register Pi) merupakan jenis D-flip-flop, yang akan memasukkan (dengan sinyal clock) nilai atau data dari bus internal sebagai tanggapan sinyal ”tulis ke pengancing” dari CPU. Data yang terbaca dari port itu sendiri ditempatkan dalam bus internal sebagai tanggapan atas sinyal ”baca kaki/pin” dari CPU. Beberapa instruksi yang digunakan untuk membaca port akan mengaktifkan sinyal ”baca pengancing” (read latch) dan lainnya mengaktifkan sinyal ”baca kaki/pin” (read pin).

Sebagaimana ditunjukkan pada gambar III.2.A dan III.2.C, penggerak keluaran dari Port 0 dan 2 dapat diubah dari keluaran pengancing (latch) ke arah bus ALAMAT (untuk P2) dan ALAMAT/DATA (untuk P0) internal melalui sinyal KONTROL internal yang diisi ’1’ (secara internal pula) yang kemudian bisa digunakan dalam pengaksesan memori eksternal. Selama pengaksesan memori eksternal tersebut, isi pengancing P2 tetap tidak berubah, tetapi ’1’ harus dituliskan ke pengancing P0, dengan demikian P0 tidak dapat digunakan sebagai port serbaguna selama pengaksesan memori eksternal tersebut, hal ini akan dijelaskan lebih lanjut pada alinea-alinea berikut.

Jika bit pengancing P3 berisi ’1’, maka aras keluaran dikontrol oleh sinyal fungsi alternatif keluaran, sebagaimana ditunjukkan pada gambar III.2.D. Aras kaki P3.i yang sesungguhnya selalu tersedia bagi kaki-kaki fungsi alternatif masukan.

Port 1, 2 dan 3 memiliki pullup internal. Port 0 memiliki keluaran saluran terbuka atau open drain. Masing-masing jalur I/O dapat digunakan secara independen sebagai masukan atau keluaran, hanya saja, sesuai penjelasan sebelumnya, Port 0 tidak dapat digunakan sebagai jalur I/O serbaguna selama pengaksesan memori eksternal atau dijadikan sebagai jalur ALAMAT/DATA. Agar dapat digunakan sebagai masukan, bit pengancing port yang bersangkutan harus diisi ’1’, yang akan mematikan transistor FET penggerak keluaran. Sehingga, untuk Port 1, 2 dan 3, kaki-kakinya ditarik tinggi (pulled high) oleh pullup internal, tetapi bisa juga ditarik rendah (pulled low) dengan suatu sumber eksternal.

Port 0 tidak memiliki pullup internal. Pullup FET (FET bagian atas) di dalam penggerak keluaran P0 digunakan hanya pada saat port mengirimkan ’1’ selama pengaksesan memori eksternal.

Selain dari itu, pullup FET akan selalu mati. Konsekuensinya, jalur-jalur P0 yang digunakan sebagai jalur keluaran 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, dapat digunakan sebagai masukan berimpedansi tinggi.

Karena Port 1, 2 dan 3 telah memiliki pullup internal yang pasti, mereka kadang dinamakan sebagai port-port kuasi-dwi-arah (quasi-bidirectional). Saat dikonfigurasi sebagai masukan, maka ditarik tinggi dan memberikan arus (source current – Iil) 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 akan menuliskan ’1’ ke seluruh bit-bit pengancing port pada keluarga 51. Jika kemudian ’0’ dituliskan ke pengancing, pengancing dapat dikonfigurasi sebagai masukan jika ’1’

dituliskan padanya.

III.3.2. RINGKASAN SPESIFIKASI MASING-MASING PORT

Berikut ini disajikan ringkasan spesifikasi dari masing-masing Port (Port 0, 1, 2 dan 3) yang secara umum telah dibahas pada pasal-pasal sebelumnya.

III.3.2.1. Port 0

Port 0 merupakan port keluaran/masukan (I/O) bertipe open drain bidirectional (perhatikan gambar III.2.A dan penjelasan sebelumnya). Sebagai port keluaran, masing-masing kaki dapat

(5)

menyerap arus (sink) delapan masukan TTL (sekitar 3,8 mA). Pada saat ’1’ dituliskan ke kaki-kaki Port 0 ini, maka kaki-kaki Port 0 dapat digunakan sebagai masukan-masukan berimpedansi tinggi.

Port 0 juga dapat dikonfigurasikan sebagai bus alamat/data bagian rendah (low byte) selama proses pengaksesan memori data dan program eksternal. Jika digunakan dalam mode ini Port 0 memiliki pullup internal (tapi lemah).

Port 0 juga menerima kode-kode yang dikirimkan kepadanya selama proses pengisian program dan mengeluarkan kode-kode selama proses verifikasi program yang telah tersimpan dalam flash. Dalam hal ini dibutuhkan pullup eksternal selama proses verifikasi program.

III.3.2.2. Port 1

Port 1 merupakan Port I/O dwi-arah yang dilengkapi dengan pullup internal (perhatikan gambar III.2.B). Penyangga keluaran Port 1 mampu memberikan/menyerap arus empat masukan TTL (sekitar 1,6 mA).

Jika ’1’ dituliskan ke kaki-kaki Port 1, maka masing-masing kaki akan di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan. Sebagai masukan, jika kaki-kaki Port 1 dihubungkan ke ground (di-pulled low), maka masing-masing kaki akan memberikan arus (source) karena di-pulled high secara internal. Port 1 juga menerima alamat bagian rendah (low byte) selama pengisian program dan verifikasi flash.

III.3.2.3. Port 2

Port 2 merupakan Port I/O dwi-arah dengan dilengkapi pullup internal (perhatikan gambar III.2.C). Penyangga keluaran Port 2 mampu memberikan/menyerap arus empat masukan TTL (sekitar 1,6 mA).

Jika ’1’ dituliskan ke kaki-kaki Port 2, maka masing-masing kaki akan di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan. Sebagai masukan, jika kaki-kaki Port 2 dihubungkan ke ground (di-pulled low), maka masing-masing kaki akan memberikan arus (source) karena di-pulled high secara internal.

Port 2 akan memberikan byte alamat bagian tinggi (high byte) selama pengambilan instruksi dari memori program eksternal dan selama pengaksesan memori data eksternal yang menggunakan perintah dengan alamat 16-bit (misalnya: MOVX @DPTR). Dalam aplikasi ini, jika ingin mengirimkan

’1’, maka digunakan pullup internal yang sudah disediakan. Selama pengaksesan memori data eksternal yang menggunakan perintah dengan alamat 8-bit (misalnya: MOVX @Ri), Port 2 akan mengirimkan isi dari SFR P2. Port 2 juga menerima alamat bagian tinggi selama pemrograman dan verifikasi flash.

III.3.2.4. Port 3

Port 3 merupakan Port I/O dwi-arah dengan dilengkapi pullup internal (perhatikan gambar III.2.D). Penyangga keluaran Port 3 mampu memberikan/menyerap arus empat masukan TTL (sekitar 1,6 mA).

Jika ’1’ dituliskan ke kaki-kaki Port 3, maka masing-masing kaki akan di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan. Sebagai masukan, jika kaki-kaki Port 3 dihubungkan ke ground (di-pulled low), maka masing-masing kaki akan memberikan arus (source) karena di-pulled high secara internal.

Port 3, sebagaimana Port 1, memiliki fungsi-fungsi alternatif sebagaimana telah ditunjukkan pada Tabel III.1, antara lain menerima sinyal-sinyal kontrol (P3.6 dan P3.7), bersama-sama dengan Port 2 (P2.6 dan P2.7) selama pengisian program dan verifikasi flash.

(6)

III.4. CONTOH-CONTOH APLIKASI PENGGUNAAN PORT III.4.1. MENGHIDUPKAN LED MELALUI KANAL PARALEL III.4.1.1. Tujuan

Dalam pasal ini akan dijelaskan bagaimana menghidupkan (sekaligus mengendalikan) beberapa LED melalui port paralel AT89C51 dengan berbagai macam kombinasi.

III.4.1.2. Rangkaian Aplikasi

Rangkain minimum untuk menghidupkan 8 LED melalui Port 1 ditunjukkan pada gambar III.3. Yang perlu diperhatikan adalah konfigurasi rangkaian LED itu sendiri, yaitu Common Anode (CA), artinya untuk menghidupkan LED pada Port 1 yang bersangkutan harus dikirim atau dituliskan logika ‘0’. Hal ini berkaitan dengan penjelasan sebelumnya (perhatikan juga gambar III.1.B), Jika ’0’

kita tulis ke Port 0 maka keluaran dari lacth (yang Q) akan menghidupkan FET sehingga baik kaki Port 0 maupun resistor pullup internal akan di pulled-low (secara internal juga), sehingga LED yang terhubungkan secara Common Anode bisa menyala. Sedangkan jika menggunakan rangkaian Common Khatode (CK), maka 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 µA, 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).

LED Merah

Vcc Vcc

CRYSTAL

10 Uf Vcc

AT89C51 9

18

19 29

30 31

1 2 3 4 5 6 7 8

21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 39

38 37 36 35 34 33 32

RST XTAL2

XTAL1 PSEN

ALE/PROG EA/VPP

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD P0.0/AD0

P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7

30 Pf

Resistor 330 ohm

12 MHz 30 Pf

Resistor

10 K

Gambar III.3 Rangkaian Aplikasi Menghidupkan LED Melalui Kanal Paralel

III.4.1.3. Program Pertama

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)

(7)

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, 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 sub-rutin DELAY yang prosesnya bisa digambarkan melalui diagram yang ditunjukkan pada gambar III.4.

Perhatikan perhitungan waktu sebagai berikut:

dikerjakan cycle

1:DELAY: MOV R0,#5 1 x 1

2:DELAY1: MOV R1,#0FFH 1 x 1

3:DELAY2: MOV R2,#0 1 x 1

4: DJNZ R2,$ 256 x 255 x 5 = 326.400 x 2

5: DJNZ R1,DELAY2 255 2

6: DJNZ R0,DELAY1 5 x 2

7: RET

Baris 4 dikerjakan sebanyak 326.400x, karena instruksi tersebut dikerjakan selama 2 siklus maka waktu totalnya 326.400 x 2 = 652.800 siklus, masih ditambah dengan pengulangan kedua (255 x 3 siklus) 765 siklus dan pengulangan yang ketiga, DELAY1, sebesar 5 x 3 siklus = 15 siklus, sehingga total siklus = 652.800 + 765 + 15 = 653.580 siklus.

Jika menggunakan frekuensi kristal 12 MHz waktu yang dibutuhkan untuk meyelesaikan sub-rutin ini adalah 653.580 siklus x 1 µd = 653.580 µd = 0,65 detik untuk pewaktuan yang lebih akurat bisa digunakan timer yang akan dibahas pada bagian IV.

(8)

Mulai

isi register 0 dengan 5x ulang

(R0 <- #5)

isi register 1 255x ulang (R1 <- #0FFh)

isi register 2 dengan 256x

ulang (R2 <- #0)

turunkan isi register 2 (R2 <- R2 - 1)

turunkan isi register 1 (R1 <- R1 - 1)

apakah isi register 2 = 0

turunkan isi register 0 (R0 <- R0 - 1)

apakah isi register 1 = 0

apakah isi regsiter 0 = 0

Selesai Tidak

Tidak

Ya

Ya Tidak

Gambar III.4 Diagram Alir Sub-rutin DELAY

III.4.1.4. Langkah-langkah Menyimpan Program ke Flash Memori Menggunakan Easy-Programmer

• Setelah program ditulis menggunakan editor teks, lakukan kompilasi program hingga menghasilkan berkas dalam format heksa atau biner kemudian lakukan download program tersebut ke AT89C51/52/55 menggunakan alat pemrograman yaitu Easy-Programmer menggunakan program EZ31.EXE, yang jika diaktifkan akan memiliki tampilan seperti pada gambar III.5.

Gambar III.5. Tampilan EZ Uploader Versi 3.1

(9)

Pilih kanal serial COM1 atau COM2 sesuai letak kabel serial Easy Programmer-nya kemudian tunggu hingga muncul pesan yang menyatakan bahwa programmer sudah siap untuk digunakan (tanda OFFLINE akan berganti dengan identifikasi mikrokontroler yang terpasang pada programmer yang bersangkutan, misalnya AT89C51, dst);

Pilih tombol SEND untuk mengirimkan berkas heksa yang akan di-download ke mikrokontroler yang bersangkutan (Anda akan ditanya nama berkas yang akan digunakan pada jendela dialog yang dimunculkan), jika proses pengisian program sudah selesai, jangan lupa untuk mematikan sumber daya programmernya sebelum mencabut IC mikrokontroler yang bersangkutan. Sekarang mikrokontroler tersebut sudah siap untuk dipindahkan ke papan percobaan Anda (breadboard, PCB prototipe dan lain-lain);

Buatlah rangkaian sebagaimana yang ditunjukkan pada gambar III.3 pada papan breadboard, jangan lupa untuk menghubungkan dengan catu-daya 5 Volt (pin 20 untuk GND dan 40 untuk Vcc pada keping mikrokontroler yang digunakan, AT89C51/52/55) serta rangkaian kristal yang disediakan. Kemudian amati bagaimana program yang telah tersimpan di dalam mikrokontroler tersebut dijalankan!

III.4.1.5. Program Kedua

Sekarang kita akan memodifikasi program tersebut sedemikian hingga bisa untuk menghidupkan lampu LED (sebanyak empat) dalam kelompok genap dan ganjil secara bergantian sebagaimana program berikut:

1: ;- BAB3_02.ASM --- 2: ;

3: ; LAMPU FLIP-FLOP GENAP DAN GANJIL PADA PORT 1 4: ;

5: ;---

6: ORG 0H

7: ;

8: MULAI: MOV P1,#01010101B ; LED P1.0, P1.2, P1.4 DAN P1.6 MENYALA (=55H) 9: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

10: MOV P1,#10101010B ; LED P1.1, P1.3, P1.5 DAN P1.7 MENYALA (=0AAH) 11: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

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

Baris 14 – 27 sama seperti program sebelumnya (BAB3_01.ASM), sedangkan baris-8 dan 10, masing- masing digunakan untuk menghidupkan LED secara selang-seling, ingat logika ’0’ digunakan untuk menghidupkan LED yang bersangkutan. Jika terlalu panjang konstanta #01010101B pada baris-8 dapat diganti dengan format bilangan heksa, yaitu #55H, sedangkan baris 10 dapat diganti dengan

#0AAH (awali dengan ’0’ jika bilangan heksa diawali dengan huruf).

(10)

III.4.1.6. Program Ketiga

Modifikasi program lainnya adalah untuk menghidupkan lampu LED (sebanyak dua) dimulai dari LED pada posisi P1.3 dan P1.4, P1.2 dan P1.5, P1.1 dan P1.6, P1.0 dan P1.7 kemudian menyalakan LED agar bergerak ke tengah atau kembali ke posisi awal dari LED yang menyala, dan programnya ditunjukkan berikut ini:

1: ;- BAB3_03.ASM --- 2: ;

3: ; LAMPU BERGERAK DARI TENGAH KE PINGGIR KEMUDIAN KEMBALI LAGI...

4: ;

5: ;---

6: ORG 0H

7: ;

8: MULAI: MOV P1,#11100111B ; DUA LAMPU TENGAH MENYALA, P13 DAN P1.4 (=0E7H) 9: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

10: MOV P1,#11011011B ; DUA LAMPU BERIKUTNYA MENYALA, P1.2 DAN P1.5 11: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

12: MOV P1,#10111101B ; DUA LAMPU BERIKUTNYA MENYALA, P1.1 DAN P1.6 13: ACALL DELAY

14: MOV P1,#01111110B ; DUA LAMPU BERIKUTNYA MENYALA, P1.0 DAN P1.7 15: ACALL DELAY

16: MOV P1,#10111101B ; DUA LAMPU BERIKUTNYA MENYALA, P1.1 DAN P1.6 17: ACALL DELAY

18: MOV P1,#11011011B ; DUA LAMPU BERIKUTNYA MENYALA, P1.2 DAN P1.5 19: ACALL DELAY

20: SJMP MULAI ; LOMPAT KE ALAMAT DG LABEL MULAI 21: ;

22: ;-SUBRUTIN DELAY--- 23: ;

24: ; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT DENGAN CARA 25: ; MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA DICAPAI SUATU 26: ; KONDISI TERTENTU

27: ;

28: ;--- 29: DELAY: MOV R0,#5H ; ISI REGISTER R0 DENGAN 5 (5X ULANG) 30: DELAY1: MOV R1,#0FFH ; ISI REGISTER R1 DENGAN 255 (255X ULANG 31: DELAY2: MOV R2,#0 ; ISI REGISTER R2 DENGAN 0 (256X ULANG) 32: DJNZ R2,$ ; R2=R2-1, JIKA R2 BELUM 0 ULANGI LAGI 33: DJNZ R1,DELAY2 ; R1=R1-1, JIKA R1 BELUM 0 ULANGI DELAY2 34: DJNZ R0,DELAY1 ; R0=R0-1, JIKA R0 BELUM 0 ULANGI DELAY1

35: RET ; KEMBALI KE PEMANGGIL SUBRUTIN DELAY

36: END

Sekarang program tampak lebih panjang dikarenakan baris 8 – 19 digunakan untuk memberikan efek lampu LED menyala bergeser dari tengah ke pinggir kemudian kembali ke tengah lagi, dan seterusnya (instruksi baris-20). Perhatikan keterangan pada tiap-tiap komentar di tiap-tiap baris (baris-8, 10, 12, 14, 16 dan 18).

III.4.1.7. Program Keempat

Program berikut ini merupakan aplikasi untuk membuat LED menyala bergantian (bergeser) dari P1.0 ke P1.7 kemudian kembali ke awal lagi secara berulang-ulang :

1: ;- BAB3_04.ASM --- 2: ;

3: ; LAMPU BERJALAN DARI P1.0 S/D P1.7 KEMUDIAN KEMBALI LAGI 4: ;

5: ;--- 6: ORG 0H

7: ;

8: MOV A,#11111110B ; DATA LAMPU MENYALA DIKIRIM MELALUI AKUMULATOR

9: ; AGAR P1.0 PERTAMA KALI MENYALA, AKUMULATOR

10: ; DIISI DENGAN 11111110B ATAU 0FEH

11: MULAI:

(11)

12: MOV P1,A ; KIRIMKAN DATA DI AKUMUALTOR KE PORT 1 13: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT

14: RL A ; ROTASIKAN ISI AKUMULATOR KE KIRI 15: ; +->--->--->--->+

16: ; | |

17: ; +<--7-6-5-4-3-2-1-0<--+

18: SJMP MULAI ; ULANGI LAGI DARI AWAL 19: ;

20: ;-SUBRUTIN DELAY--- 21: ;

22: ; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT DENGAN CARA 23: ; MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA DICAPAI SUATU 24: ; KONDISI TERTENTU

25: ;

26: ;--- 27: DELAY: MOV R0,#0 ; ISI REGISTER R0 DENGAN 0 (256X ULANG)

28: DELAY1: MOV R1,#0 ; ISI REGISTER R1 DENGAN 0 (256X ULANG) 29: DJNZ R1,$

30: DJNZ R0,DELAY1

31: RET

32: END

Pada program BAB3_04.ASM ini, digunakan instruksi untuk menggeser bit ke kiri dan sekaligus merotasi (baris-14). Pertama siapkan data yang akan dikirimkan ke Port 1 di akumulator (baris-8), kemudian kirimkan ke Port 1 (baris-12), lakukan tundaan sesaat supaya efek penggeseran bisa diikuti dengan mata (jika anda menghilangkan baris-13 ini, maka mata akan melihat bahwa semua lampu LED menyala, padahal tidak, tetap bergantian, karena terlalu cepat sehingga mata manusia melihatnya seakan-akan menyala semua), kemudian lakukan penggeseran ke kiri sekaligus merotasi melalui akumulator (baris-14). Perintah RL (dan RR) hanya bisa digunakan untuk akumulator saja, sehingga sejak awal sudah kita persiapkan datanya disimpan di akumulator, Anda bisa saja menyimpan data di tempat lain, register misalnya, tetapi saat melakukan rotasi bit ke kanan atau ke kiri salinlah dulu ke akumulator kemudian baru disalin lagi ke tempat semula.

Kita bisa memodifikasi program agar LED menyala bergantian dengan arah berlawanan (dari P1.7 ke P1.0), baris-8 kita ganti dengan instruksi

MOV A,#01111111B ; simpan data 0111111B (=7Fh) ke Akumulator Baris-14 kita ganti dengan instruksi

RR A ; putar isi akumulator ke kanan 1 bit

III.4.1.8. Program Kelima

Program BAB3_05.ASM berikut ini digunakan untuk menyalakan LED dari kanan ke kiri dan dari kiri ke kanan sehingga nampak seperti pingpong:

1: ;- BAB3_05.ASM --- 2: ;

3: ; LAMPU MENYALA PINGPONG KIRI KE KANAN, KANAN KE KIRI DI PORT 1 4: ;

5: ;--- 6: ORG 0H

7: ;

8: MOV A, #0FEH ; SIMPAN DATA 11111110B KE AKUMULATOR (P1.0

9: ; MENYALA DULUAN)

10: MULAI:

11: MOV P1,A ; KIRIM DATA KE PORT 1 12: ACALL DELAY ; TUNDA SEBENTAR

13: RL A ; PUTAR ISI AKUMULATOR KE KIRI 1 BIT 14: CJNE A,#7FH,MULAI ; APAKAH A=01111111B ? TIDAK, ULANGI LAGI!

15: MULAI1: ; YA, LANJUTKAN KE PROSES BERIKUT...

16: MOV P1,A ; KIRIM DATA KE PORT 1 17: ACALL DELAY ; TUNDA SEBENTAR

18: RR A ; PUTAR ISI AKUMULATOR KE KANAN 1 BIT 19: CJNE A,#0FEH,MULAI1 ; APAKAH A=11111110B ? TIDAK, ULANGI LAGI!

(12)

20: SJMP MULAI ; YA, ULANGI LAGI DARI PALING AWAL...

21: ;

22: ;-SUBRUTIN DELAY--- 23: ;

24: ; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT DENGAN CARA 25: ; MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA DICAPAI SUATU 26: ; KONDISI TERTENTU

27: ;

28: ;--- 29: DELAY: MOV R0,#0 ; ISI REGISTER R0 DENGAN 0 (256X ULANG)

30: DELAY1: MOV R1,#0 ; ISI REGISTER R1 DENGAN 0 (256X ULANG)

31: DJNZ R1,$

32: DJNZ R0,DELAY1

33: RET

34: END

Program ini mirip dengan program sebelumnya (BAB3_04.ASM). Baris 11–14 digunakan untuk menyalakan LED secara bergantian dari P1.0 hingga P1.7, data awal disiapkan di baris 8 (melalui akumulator seperti pada program sebelumnya). Data dikirimkan ke Port 1 (baris-11), kemudian lakukan tundaan (baris-12), selanjutnya digeser-putar ke kiri (baris-13). Pada baris-14 dilakukan pengujian apakah logika ’0’ yang digeser ke kiri sudah mencapai bit paling kiri, bit ke 7 atau P1.7 atau datanya adalah #0111111B (=#7FH)? Jika sudah maka lanjutkan untuk proses penggeseran ke kanan (baris 16–19), jika belum lakukan pengulangan lagi mulai baris-11, demikian seterusnya. Untuk proses penggeseran ke kanan (baris 16-19), sebagai data yang menunjukkan bahwa logika ’0’ yang digeser ke kanan sudah mencapai bit ke 1 (terkanan) atau P1.0 adalah #11111110B (=#0FEH) sebagaimana bisa dilihat pada baris-19. Proses ini diulang-ulang terus-menerus (baris-20) sehingga diperoleh efek lampu LED menyala secara ping-pong.

III.4.2. APLIKASI PORT UNTUK PENGGERAK 7-SEGMENT III.4.2.1. Tujuan

Program aplikasi Port 0 sebagai penggerak (driver) penampil 7-segment (7-segment display).

III.4.2.2. Rangkaian Aplikasi

CRY STAL

Resistor

10 K Vcc

10 Uf Vcc 12 MHz

30 Pf

Vcc

30 Pf AT89C51

9 18

19 29

30 31

1 2 3 4 5 6 7 8

21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 39

38 37 36 35 34 33 32

RST XTAL2

XTAL1 PSEN

ALE/PROG EA/VPP

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD P0.0/AD0

P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7

8.

7-segment 1 2 3 4 5 6

7 8 9

10 a

b c d e A

A P g f

Resistor 330 ohm

Gambar III.6.a. Rangkaian Aplikasi Penggerak 7-Segment

(13)

Gambar III.6.b. Struktur Penampil LED 7-segment Catatan:

Perhatikan hubungan antara Port 0 dengan penampil 7-segment yang disusun sebagai berikut:

Mikrokontroler 7-segment (common Anoda)

P0.0 pin a

P0.1 pin b

P0.2 pin c

P0.3 pin d

P0.4 pin e

P0.5 pin f

P0.6 pin g

P0.7 pin dot_point

Rangkaian penggerak penampil 7-Segment ditunjukkan pada gambar III.6.a. Kali ini digunakan Port 0 dengan konfigurasi common Anode (seperti pada contoh sebelumnya). Dilihat dari struktur Port 0 pada gambar III.2.A, serta sifat-sifat dari Port 0, akan lebih mudah mengkonfigurasi LED dalam 7-segment dengan common Anode. Dengan demikian untuk menghidupkan atau menyalakan LED diperlukan logika ’0’ pada Port 0.

Agar tampilan 7-segment menampilkan angka 0 maka LED a, b, c, d, e dan f harus dinyalakan (perhatikan gambar III.6.b) untuk itu dikirimkan logika ’0’ pada bit-bit yang terkait yaitu P0.0, P0.1, P0.2, P0.3, P0.4 dan P0.5, sehingga data yang terkirim adalah 11000000 = C0h. Untuk lengkapnya perhatikan tabel III.2.

Program akan menampilkan angka 0 s/d 9 secara bergantian kemudian berulang lagi. Baris-8, 10, 12, 14, 16, 18, 20, 22, 24 dan 26 digunakan untuk menyalakan 7 segment sesuai angka 0 s/d 9.

Tabel III.2. Daftar Heksa Dari Tampilan Angka Pada 7-Segment Tampilan

Angka P0.7

dp P0.6

g P0.5

f P0.4

e P0.3

d P0.2

c P0.1

b P0.0

a Heksa

0 1 1 0 0 0 0 0 0 C0

1 1 1 1 1 1 0 0 1 F9

2 1 0 1 0 0 1 0 0 A4

3 1 0 1 1 0 0 0 0 B0

4 1 0 0 1 1 0 0 1 99

5 1 0 0 1 0 0 1 0 92

6 1 0 0 0 0 0 1 0 82

7 1 1 1 1 1 0 0 0 F8

8 1 0 0 0 0 0 0 0 80

9 1 0 0 1 0 0 0 0 90

III.4.2.3. Program Pertama

1: ;- BAB3_06.ASM --- 2: ;

(14)

3: ; MENGHIDUPKAN DISPLAY LED 7 SEGMENT UNTUK MENAMPILKAN ANGKA 0 S/D 9 4: ; CARA 1 : DATA LANGSUNG DIKELUARKAN KE PORT YANG BERSANGKUTAN 5: ;

6: ;---

7: ORG 0H

8: ; 9: MULAI:

10: MOV P0,#0C0H ; KELUARKAN KODE ANGKA 0 PORT 0 11: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

12: MOV P0,#0F9H ; KELUARKAN KODE ANGKA 1 PORT 0 13: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

14: MOV P0,#0A4H ; KELUARKAN KODE ANGKA 2 PORT 0 15: ACALL DELAY

16: MOV P0,#0B0H ; KELUARKAN KODE ANGKA 3 PORT 0 17: ACALL DELAY

18: MOV P0,#99H ; KELUARKAN KODE ANGKA 4 PORT 0 19: ACALL DELAY

20: MOV P0,#92H ; KELUARKAN KODE ANGKA 5 PORT 0 21: ACALL DELAY

22: MOV P0,#82H ; KELUARKAN KODE ANGKA 6 PORT 0 23: ACALL DELAY

24: MOV P0,#0F8H ; KELUARKAN KODE ANGKA 7 PORT 0 25: ACALL DELAY

26: MOV P0,#80H ; KELUARKAN KODE ANGKA 8 PORT 0 27: ACALL DELAY

28: MOV P0,#90H ; KELUARKAN KODE ANGKA 9 PORT 0 29: ACALL DELAY

30: SJMP MULAI ; ULANGI LAGI DARI AWAL 31: ;

32: ;-SUBRUTIN DELAY--- 33: ;

34: ; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT DENGAN CARA 35: ; MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA DICAPAI SUATU 36: ; KONDISI TERTENTU

37: ;

38: ;--- 39: DELAY: MOV R0,#2 ; ISI REGISTER R0 DENGAN 2 (2X ULANG)

40: DELAY1: MOV R1,#0FFH ; ISI REGISTER R1 DENGAN FF (255X ULANG) 41: DELAY2: MOV R2,#0 ; ISI REGISTER R2 DENGAN 0 (256X ULANG)

42: DJNZ R2,$

43: DJNZ R1,DELAY2

44: DJNZ R0,DELAY1

45: RET

46: END

Sebagaimana penjelasan sebelumnya, pada program pertama ini (BAB3_06.ASM), untuk menampilkan urutan angka 0 s/d 9 secara bergantian pada tampilan LED 7-segment, diawali dengan mengeluarkan kode untuk angka 0, yaitu C0H ke Port 0 (baris 10), kemudian dilakukan tundaan sesaat (baris-11). Selanjutnya pada baris-12 dikeluarkan kode untuk angka 1 (F9H), lakukan tundaan sesaat (baris-13) demikian seterusnya hingga kode untuk angka 9 (90H) pada baris-28. Kemudian diulang lagi dari awal (baris-30). Sehingga akan muncul efek pencacah 0 s/d 9 pada tampilan LED 7-segment.

III.4.2.4. Program Kedua

1: ;- BAB3_07.ASM --- 2: ;

3: ; MENGHIDUPKAN DISPLAY LED 7 SEGMENT UNTUK MENAMPILKAN ANGKA 0 S/D 9 4: ; CARA 2 : DATA DIAMBIL DARI ALAMAT LARIK (ARRAY) DATA, PROGRAM JADI LEBIH

5: ; PENDEK

6: ;

7: ;--- 8: ORG 0H

9: ; 10: MULAI:

11: MOV R2,#0AH ; JUMLAH ANGKA NUMERIK YG AKAN DITAMPILKAN 12: MOV DPTR,#NUMERIK ; REGISTER DPTR MENUNJUK PADA LOKASI AWAL DATA 13: NEXTDATA:

14: CLR A ; PERSIAPKAN AKUMULATOR

15: MOVC A,@A+DPTR ; SALIN ISI LOKASI YG DITUNJUK A+DPTR KE A

(15)

16: MOV P0,A ; KELUARKAN DATA A KE PORT 0 17: INC DPTR ; KE LOKASI DATA BERIKUTNYA 18: ACALL DELAY ; LAKUKAN PENUNDAAN SESAAT...

19: DJNZ R2,NEXTDATA ; R2=R2-1, JIKA R2 <> 0 ULANGI LAGI 20: SJMP MULAI ; ULANGI LAGI DARI AWAL...

21: ;

22: ;-SUBRUTIN DELAY--- 23: ;

24: ; SUBRUTIN INI HANYA SEKEDAR MELAKUKAN PENUNDAAN SESAAT DENGAN CARA 25: ; MENGULANGI PROSES (PENGURANGAN ISI REGISTER) HINGGA DICAPAI SUATU 26: ; KONDISI TERTENTU

27: ;

28: ;--- 29: DELAY: MOV R0,#2H ; ISI REGISTER R0 DENGAN 2 (2X ULANG)

30: DELAY1: MOV R1,#0FFH ; ISI REGISTER R1 DENGAN FF (255X ULANG) 31: DELAY2: MOV R2,#0 ; ISI REGISTER R2 DENGAN 0 (256X ULANG)

32: DJNZ R2,$

33: DJNZ R1,DELAY2

34: DJNZ R0,DELAY1

35: RET

36: ;

37: ;--- 38: ; LOKASI LARIK DATA

39: ; BERISI KODE-KODE UNTUK MENGHIDUPKAN 7-SEGMENT: ANGKA 0 S/D 9 SECARA BRTURUTAN 40: ;--- 41: NUMERIK:

42: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

43: END

Program kedua ini (BAB3_07.ASM) hasilnya sama persis dengan program pertama (BAB3_06.ASM), hanya cara penulisannya yang berbeda. Pada program pertama data langsung dikirim secara langsung ke port 0, sedangkan pada cara kedua ini data-data tampilan disimpan dalam memori terlebih dahulu (baris-41 dan 42), kemudian dibaca dan dikirim satu persatu, sehingga mengakibatkan programnya menjadi lebih pendek (dan lebih kecil), banyangkan saja jika data yang dikirim ada 20, 30 atau bahkan lebih dari 50?

Register R2 digunakan untuk menyimpan cacah data yang akan dikirimkan ke Port 0 (baris- 11), yaitu sebanyak 10 data. Sebelum bisa mengakses tabel data, yang dalam hal ini tersimpan dalam memori mulai tabel NUMERIK (baris-41 dan 42), penunjuk data DPTR, harus diarahkan ke lokasi tersebut, menggunakan instruksi pada baris-12. Instruksi berikutnya adalah mengosongkan akumulator (baris-14) karena akan digunakan untuk menyimpan data sementara yang nantinya akan dikirim ke Port 0 (baris-16). Pada baris-15, isi dari lokasi memori yang ditunjuk oleh DPTR+A dibaca dan disimpan ke akumulator. Untuk pembacaan data berikutnya penunjuk data DPTR perlu dinaikkan 1 (indeks lokasi data berikutnya) menggunakan instruksi yang dituliskan pada baris-17. Kemudian nilai R2 yang sebelumnya dikurangi 1 atau R2=R2-1 (baris-19) sebagai tanda bahwa sebuah data telah diproses, jika R2 belum sama dengan nol, proses pengiriman data diulang lagi (lompat ke label NEXDATA) hingga semua data, yang jumlahnya 10, selesai diproses. Kemudian program diulang dari awal lagi dari awal (baris-20).

III.4.2.5. Program Ketiga

Modifikasi program pertama dan kedua, untuk menghidupkan 7-segment agar menampilkan huruf dari A s/d F, sebagaimana data-datanya ditunjukkan pada tabel III.3.

Tabel III.3. Daftar Heksa Dari Tampilan Huruf A s/d F Pada 7-Segment Tampilan

Huruf

P0.7 Dp

P0.6 g

P0.5 f

P0.4 e

P0.3 d

P0.2 c

P0.1 b

P0.0

a Heksa

A 1 0 0 0 1 0 0 0 88

b 1 0 0 0 0 0 1 1 83

C 1 1 0 0 0 1 1 0 C6

d 1 0 1 0 0 0 0 1 A1

E 1 0 0 0 0 1 1 0 86

F 1 0 0 0 1 1 1 0 8E

Gambar

Tabel III.1. Fungsi-Fungsi Khusus Kaki-Kaki Port 3 Dan 1  Kaki Port Fungsi
Gambar III.3 Rangkaian Aplikasi Menghidupkan LED Melalui Kanal Paralel
Gambar III.4 Diagram Alir Sub-rutin DELAY
Gambar III.6.a. Rangkaian Aplikasi Penggerak 7-Segment
+3

Referensi

Dokumen terkait

Jika definisi konseptualisasi ini menjelaskan lebih rinci mengenai suatu hal dalam sebuah penelitian sehingga menjadi jelas arah dari kalimat itu menuju kemana, maka

Jika perilaku meningkat manakala penanganan diberikan (selama tahap satu dan dua) tetapi kembali (mundur) ke garis dasar selama tahap pembalikan, peneliti dapat

Berdasarkan hasil estimasi dengan MLE 15 Bank Pembangunan Daerah (BPD) Syariah untuk mengetahui pengaruh variabel input terhadap variabel output pada tahun 2008- 2012

Berdasarkan penelitian yang telah dilakukan didapatkan sebanyak 178 individu kupu-kupu (Rhopalocera) di sekitar kampus Universitas Pasir Pengaraian, sebanyak 166

Berdasarkan hasil penelitian dan pembahasan, maka dapat disimpulkan sebagai berikut, (1) Jarak septictank dengan sumur gali responden banyak yang tidak memenuhi

8 Florjančič, Vukovič 1998: Kadrovska funkcija – mamagement, Založba moderna organizacija, Kranj, str 44 9 Ibidem, str 44, 56 Janja Martinčič: Analiza absentizma in fluktuacije

c) apabila tahap pemilihan ini hanya menghasilkan 1 (satu) orang Formatur, maka 1 (satu) orang Formatur tersebut ditetapkan sebagai Ketua Umum DPN sekaligus selaku

Sumber daya manusia merupakan faktor terpenting yang dapat menentukan berhasil atau tidaknya suatu proyek. Potensi setiap sumber daya manusia yang ada dalam proyek seharusnya