modul+microcontroller+%28c.o.m.i.c%29

61
Hand Out Microcontroller C.O.M.I.C .: Computer and Microcontroller Community :. .: Computer and Microcontroller Community :. .: Computer and Microcontroller Community :. .: Computer and Microcontroller Community :. Powered By: Presented By: Divisi Microcontroller Divisi Microcontroller Divisi Microcontroller Divisi Microcontroller Computer and Microcontroller Community Computer and Microcontroller Community Computer and Microcontroller Community Computer and Microcontroller Community C.O.M.I.C 2008-2009

Upload: tomi-tintia

Post on 26-Jun-2015

161 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Modul+Microcontroller+%28C.O.M.I.C%29

Hand Out Microcontroller

C.O.M.I.C

.: Computer and Microcontroller Community :..: Computer and Microcontroller Community :..: Computer and Microcontroller Community :..: Computer and Microcontroller Community :.

Powered By:

Presented By:

Divisi Microcontroller Divisi Microcontroller Divisi Microcontroller Divisi Microcontroller

Computer and Microcontroller CommunityComputer and Microcontroller CommunityComputer and Microcontroller CommunityComputer and Microcontroller Community CCCC....OOOO....MMMM....IIII....CCCC 2008-2009

Page 2: Modul+Microcontroller+%28C.O.M.I.C%29

BAB 1

INTRODUCTION MICROCONTROLLER

1.1 Pengenalan Microcontroller

Mikroprosesor berasal dari kata micro dan process yang dapat diartikan sebagai suatu pemroses yang berukuran mikro (sangat kecil). Data yang akan diolah harus berupa data digital dan kemudian dimasukkan pada saluran input. Data diolah berdasarkan rumus atau aturan tertentu. Pusat pengolahan data disebut sebagai CPU (Central Processing Unit). CPU sebenarnya adalah suatu chip mikroprosesor. Rumus dan aturan tertentu itu disebut sebagai program. Program disimpan di dalam sistem memori. Setelah data input diolah oleh suatu program, maka akan dihasilkan suatu data yang kemudian dapat dikeluarkan melalui saluran output. Untuk lebih jelasnya, lihat gambar 1 dibawah ini.

CPU

INPUT

OUTPUT

MEMORI

I1

I2

I3

In

O1

O2

O3

On

Gambar 1 Sistem Mikroprosesor

Maka secara konseptual suatu Mikroprosesor adalah suatu alat digital yang

menerima data digital dari sejumlah saluran masukan, memproses data menurut ketentuan-ketentuan program yang disimpan, dan kemudian menghasilkan sejumlah sinyal keluaran pada outputnya.

Kunci dari keserbagunaan dari miroprosesor adalah bahwa dengan perangkat keras (hardware) yang sama, dapat digunakan untuk berbagai aplikasi yang berlainan hanya dengan merubah program yang tersimpan pada sistem memorinya. Input/Output.

Saluran input terdiri dari beberapa saluran. Begitu juga untuk saluran output, terdiri dari beberapa saluran. Pada perkembangannya, saluran input dan output ini dapat disatukan ke dalam satu sistem blok yaitu sistem blok I/O (Input/Output).

Saluran input/output merupakan media penghubung dengan piranti diluar sistem mikroprosesor. Piranti diluar sistem mikroprosesor dapat terdiri tombol/keyboard, peralatan-peralatan sensor (transducer), speaker, buzzer, lampu, display peraga, dsb.

Dari metoda penyaluran informasinya, peralatan I/O dapat dibedakan menjadi dua macam, yaitu peralatan I/O serial dan peralatan I/O paralel. Penyaluran data secara serial dibedakan lagi menjadi dua yaitu secara synchronous dan asynchronous. Ada banyak sekali standar-standar komunikasi serial yang telah dikembangkan, diantaranya adalah standar RS-232 dan RS485. Contoh perangkat yang memanfaatkan penyaluran data

Page 3: Modul+Microcontroller+%28C.O.M.I.C%29

secara serial adalah mouse, monitor, card networking, modem, dsb. Sedangkan contoh perangkat yang memanfaatkan penyaluran data secara paralel adalah printer, hardisk, CD-ROM, dsb.

Keuntungan penggunaan komunikasi paralel dibanding serial adalah transfer data yang lebih cepat. Sedangkan keuntungan penggunaan komunikasi secara serial selain penggunaan kabel yang ekonomis adalah penggunaan saluran I/O pada mikroprosesor yang lebih sedikit. Hampir seluruh perangkat telekomunikasi yang ada saat ini menggunakan komunikasi data secara serial. CPU.

CPU (Central Processing Unit) didalamnya berisi ALU (Aritmatic Logic Unit), Control Unit, PC (Program Counter) dan beberapa register (diantaranya adalah register Accumulator). ALU merupakan pusat pengolahan logika (AND, OR, NOT, Compare, etc) dan fungsi matematis (tambah, kurang, kali, bagi). Unit Control adalah unit yang berfungsi untuk mengambil, mengdekode dan melaksanakan urutan instruksi suatu program yang tersimpan dalam memori. Pelaksanaan dari instruksi dilakukan dengan cara mengatur sinyal kendali yang diperlukan dalam melakukan suatu operasi. Dapat disimpulkan bahwa unit control adalah suatu unit yang mengatur urutan operasi seluruh sistem mikroprosesor.

Program Counter sesuai namanya adalah suatu penghitung (counter) langkah dalam proses pengambilan baris program dari sistem memori. Setiap selesai proses pengambilan dan pelaksanaan satu baris program, maka PC akan menunjuk kepada baris berikutnya dari program yang terdapat di dalam memori.

Register Accumulator adalah suatu register serbaguna karena seluruh proses yang melibatkan ALU dan I/O akan melalui register ini. Pada dasarnya register adalah suatu memori, dengan demikian Accumulator memiliki fungsi untuk menyimpan data. Setiap data yang akan diproses dan data hasil pemrosesan oleh ALU akan disimpan pada Accumulator. Begitu juga setiap data yang masuk dan keluar melalui perangkat I/O akan melalui register Accumulator. Selain Accumulator terdapat lagi beberapa register lainnya (tergantung pada tipe mikroprosesornya), sebagai contoh adalah register B, C, dan D yang terdapat pada mikroprosesor Intel 8088. Semakin banyak tersedia register, akan semakin membantu programer dalam menyelesaian tugasnya. Memori.

Blok Memori pada gambar-1 diatas terhubung dua arah kepada blok CPU. Hal ini mempunyai arti bahwa CPU dapat melakukan proses penulisan kepada memori maupun melakukan proses pembacaan pada memori. Sesuatu yang dibaca pada memori biasanya berupa program, sedangkan sesuatu yang ditulis pada memori biasanya disebut sebagai data. Jadi perlu dibedakan antara program dengan data. Pada proses pengolahan data input, CPU memerlukan suatu tempat untuk melakukan “coretan-coretan” kecil. Dapat dianalogikan seorang manusia yang memerlukan kertas-kertas kerja sebagai tempat coretan-coretan data sementara sebelum dihasilkan data yang diharapkan. Begitu pula dengan mikroprosesor memerlukan tempat sementara penyimpanan data sebelum data sesungguhnya dihasilkan. Tempat penyimpanan sementara pada sistem mikroprosesor

Page 4: Modul+Microcontroller+%28C.O.M.I.C%29

disebut dengan RAM (Random Access Memory) dan tempat penyimpanan program disebut sebagai ROM (Read Only Memory). ROM.

Memori ini memiliki sifat non-volatile, artinya data yang tersimpan didalamnya tidak akan mudah hilang bila power supply dihilangkan. Dengan sifat yang dimilikinya ini, ROM biasa digunakan sebagai media penyimpan program, bukan data.

Ada beberapa turunan memori ROM, yaitu PROM (Programable ROM). Pada memori ini, proses penulisan program kedalamnya hanya bisa dilakukan satu kali. Program didalamnya tidak bisa dihapus. Kemudian ada memori jenis ROM yang bisa dihapus (EPROM – Erasable PROM) yaitu UV-EPROM dan EE-PROM. Proses penghapusan pada memori UV-EPROM dilakukan dengan cara mengenakan suatu cahaya ultra violet pada jendela yang terdapat pada kemasan memori. Sedangkan proses penghapusan pada memori EE-PROM dilakukan secara elektrikal, yaitu dengan memberikan suatu standar tegangan, arus dan batas waktu tertentu pada memori.

RAM.

Memori ini memiliki sifat volatile, artinya data yang tersimpan didalamnya akan hilang bila power supply dihilangkan. Dengan sifat yang dimilikinya ini, RAM tidak dapat digunakan untuk menyimpan program.

Teknologi pada RAM terbagi dua, yaitu RAM statik dan RAM dinamik. RAM statik biasanya memiliki kapasitas yang jauh lebih kecil dibanding dengan RAM dinamik, namun memiliki kelebihan yaitu tidak diperlukan suatu sistem refreshing (penyegaran) pada data yang tersimpan didalamnya. Sedangkan RAM dinamik memiliki kapasitas jauh lebih besar daripada RAM statik, namun harus memiliki sistem tambahan yang rumit untuk proses penyegaran data yang tersimpan agar data tersebut tidak hilang. 1.2 Teori Dasar Mikrokontroller Atmel. 1. Blok Diagram Internal

Mikrokontroler ATMEL 89’Series (disingkat AT89) merupakan ”single chip microcomputer” karena semua chip pendukung suatu sistem minimum mikroprosesor, seperti misalnya RAM (Random Access Memory), ROM (Read Only Memory), clock generator, dan gerbang input-output, telah terintegrasi ke dalam satu chip. Dengan kata lain, sistem yang dibangun oleh kontroler berbasis AT89 sudah merupakan sistem komputer dalam konfigurasi minimum. Ada banyak tipe chip keluarga AT89 yg dirancang sedemikian rupa agar cocok dengan kebutuhan sistem yang dirancang konsumen. Dari segi hardware, arsitektur internal mikrokontroler keluarga AT89 dibuat sama (identik). Masing-masing tipe dibedakan dari jumlah port, kapasitas memori, dan fasilitas yang tersedia di dalamnya. Namun dari segi bahasa pemrogramannya dibuat sama (compatible) untuk seluruh keluarga AT89. Pada training ini, mikrokontroler yang digunakan adalah tipe AT89C51. Tipe ini memiliki jumlah port sebanyak 4x 8bit (total 32 bit saluran i/o), 4KB memori program (Flash memory), 128B memori data (RAM), 2 buah fasilitas 16-bit timer internal, 6 buah sumber interupsi, 1 buah fasilitas port serial dan kemampuan power down modes/Low power idle.

Page 5: Modul+Microcontroller+%28C.O.M.I.C%29

InterruptControl

128 BYTESRAM

TIMER1

TIMER0

CPU

OSCILLATOR BUSCONTROL

4INPUT-OUTPUT

PORT

SERIALPORT

4K BYTESEEPROM

P0 P1 P2 P3

PSEN

ALE

EA

RST

TxD RxD

ExternalInterupsi

INT0

INT1

InternalInterupsi

Adapun blok diagram arsitektur internal dari mikrokontroler keluarga AT89 adalah sebagai berikut :

Gambar 2

Blok Diagram Internal

Pada blok diagram diatas, terlihat bagian-bagian utama di dalam mikrokontroler AT89C51. Setiap bagian di dalam chip saling terhubung secara internal oleh suatu bus. Otak dari chip adalah CPU (Central Processing Unit). Di dalamnya berisi register accumulator (dikenal sebagai register ACC atau A) yang sangat berperan sekali dalam melakukan proses aritmatika dan proses logika. Hampir seluruh instruksi pada AT89C51 terkait dengan register A. Di dalam CPU juga terdapat beberapa register lain. Kecuali CPU, setiap bagian pada blok diagram memiliki suatu register (alamat) tertentu di dalam memori. Sebagai contoh Port0 (P0) , Port1 (P1), Port2 (P2) dan Port3 (P3) masing-masing secara berurutan terletak pada alamat 80H, 90H, A0H dan B0H. Begitu juga untuk port serial (TxD dan RxD), diatur oleh suatu register SCON (Serial Control) yang terletak pada alamat 98H dan SBUF (Serial Buffer) yang terletak pada alamat 99H.

Page 6: Modul+Microcontroller+%28C.O.M.I.C%29

Adapun daftar register beserta alamatnya dapat dilihat pada gambar dibawah ini :

Gambar 3

Spesial Function Register. 2. Konfigurasi Pin. Mikrokontroler AT89C51 dikemas dalam bentuk DIP (Dual In Package) 40 pin (kaki) dengan penomoran dan penamaan seperti yang terlihat pada gambar 4A. Pada gambar 4B terlihat bahwa ada 4 buah port input/output (I/O) yang masing-masing diberi nama P0, P1, P2, dan P3. Masing-masing port memiliki 8 saluran I/O. Penulisan untuk bit-0 pada P0 ditulis sebagai P0.0, bit-1 ditulis P0.1, bit-2 ditulis P0.2, dst. Demikian pula untuk penamaan port lainnya ditulis sebagai P1.0 , P1.1 , P1.2 , dst.

Port-0. Port-0 adalah port I/O 8-bit dua arah dengan output kolektor terbuka. Atau dengan kata lain, port ini tidak mempunyai resistor pull-up internal. Oleh karena itulah dibutuhkan suatu resistor eksternal (biasanya berkisar antara 4,7 hingga 10 K Ohm) diluar chip yang menghubungkan setiap pin pada port-0 dengan VCC (+5 Volt).

80

81

82

83

87

88

89

8A

8B

8C

8D

90

98

99

A0

A8

B0

B8

D0

E0

not bit addressable

02 134567

not bit addressable

not bit addressable

not bit addressable

not bit addressable

not bit addressable

not bit addressable

not bit addressable

not bit addressable

02 134567

02 134567

02 134567

02 134567

not bit addressable

02 134567

02 134567

02 134567

02 134567

02 134567

02 134567F0

FF

P0SP

DPL

DPH

PCON

TCONTMOD

TL0TL1

TH0TH1

P1

SCON

SBUF

P2

IE

P3

IP

PSW

ACC

B

ByteAlamat Bit Alamat

Page 7: Modul+Microcontroller+%28C.O.M.I.C%29

Sebagai port output, setiap pin dapat dihubungkan kepada 8 buah input chip TTL ketika output low (logika ‘0”). Ketika logika ‘1’ ditulis ke port-0, maka pin tersebut dapat digunakan sebagai input high-impedance. Selain berfungsi sebagai port I/O, port-0 dapat juga berfungsi sebagai bus alamat atau bus data byte rendah yaitu saat dilakukan akses memori eksternal, baik akses memori program maupun memori data. Pada mode ini, P0 memiliki resistor pull-up internal. Atau dengan kata lain, tidak dibutuhkan resistor pull-up eksternal pada saat sistem dikonfigurasi untuk mengakses memori eksternal.

Gambar 4 Penamaan dan Konfigurasi Pin Mikrokontroler AT89C51

Port-0 juga menerima kode-kode bahasa mesin (kode heksa) selama dilakukan proses pengisian program ke dalam memori program (E-EPROM) dan mengeluarkan kode heksa (bahasa mesin) saat dilakukan proses verifikasi (pengujian) terhadap kode

40

39

38

37

36

35

34

33

32

31

30

29

28

27

26

25

24

23

22

21

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

XTAL2

XTAL1

(RXD)

(TXD)

(INT0)

(INT1)

(T0)

(T1)

(WR)

(RD)

P1.0

P1.1

RST

GND

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

P3.0

P3.1

P3.2

P3.3

P3.4

P3.5

P3.6

P3.7

P0.0

P0.1

EA/VPP

P2.0

P0.2

P0.3

P0.4

P0.5

P0.6

P0.7

P2.7

P2.6

P2.5

P2.4

P2.3

P2.2

P2.1

VCC

ALE/PROG

PSEN

(AD0)

(AD1)

(AD2)

(AD3)

(AD4)

(AD5)

(AD6)

(AD7)

(A15)

(A14)

(A13)

(A12)

(A11)

(A10)

(A9)

(A8)

P0

P2

P1

P3

(B) Empat Buah Port I/O

(A) Konfigurasi dan penamaan kakiAT89C51

Page 8: Modul+Microcontroller+%28C.O.M.I.C%29

heksa yang telah ditulis ke dalam E-EPROM. Resistor pull-up eksternal dibutuhkan saat dilakukan proses verifikasi. Port-1. Port-1 adalah port 8-bit dua arah dengan resistor pull-up di dalamnya. Penyanggah (buffer) port-1 dapat dihubungkan kepada (maksimum) 4 saluran input chip TTL. Ketika logika ‘1’ ditulis ke port-1 maka setiap pin pada port-1 akan ditarik menuju tegangan VCC (+5 Volt) oleh resistor pull-up internal. Sebagai input, port-1 yang secara eksternal sedang ditarik ke ground oleh resistor pull-down akan menjadi sumber arus (source current) IIL bagi peralatan luar. Port-1 sama seperti halnya port-0, dapat berfungsi sebagai bus alamat byte rendah saat dilakukan proses pengisian dan verifikasi kode heksa ke dalam E-EPROM. Port-2. Port-2 adalah port 8-bit dua arah yang memiliki resistor pull-up di dalamnya. Penyanggah (buffer) port-2 dapat dihubungkan kepada (maksimum) 4 saluran input chip TTL. Ketika logika ‘1’ ditulis ke port-2 maka setiap pin pada port-2 akan ditarik menuju tegangan VCC (+5 Volt) oleh resistor pull-up internal. Sebagai input, port-2 yang secara eksternal sedang ditarik ke ground oleh resistor pull-down akan menjadi sumber arus (source current) IIL bagi peralatan luar. Port-2 dapat berfungsi sebagai bus alamat byte tinggi saat dilakukan proses pengambilan (fetch cycle) instruksi yang berada di memori program eksternal dan selama mengambil data di dalam memori data dengan menggunakan pengalamatan 16-bit (MOVX @DPTR). Selama mengakses ke memori data eksternal yang menggunakan pengalamatan 8-bit (MOVX @RI), port-2 memasukkan isi dari register P2 SFR (Special Function Register). Port-3.

Port-3 merupakan port 8-bit dua arah yang memiliki resistor pull-up di dalamnya. Penyanggah (buffer) port-3 dapat dihubungkan kepada (maksimum) 4 saluran input chip TTL. Ketika logika ‘1’ ditulis ke port-3 maka setiap pin pada port-3 akan ditarik menuju tegangan VCC (+5 Volt) oleh resistor pull-up internal. Sebagai input, port-3 yang secara eksternal sedang ditarik ke ground oleh resistor pull-down akan menjadi sumber arus (source current) IIL bagi peralatan luar. Selain sebagai port I/O, port-3 juga mempunyai fungsi-fungsi lain yang merupakan fasilitas khusus yang dimiliki oleh AT89C51, yaitu :

Tabel 1. Fungsi lain dari Port-3

Port Pin Fungsi lainP3.0 RXD (input port serial)P3.1 TXD (output port serial)P3.2 INT0 (eksternal interupsi 0)P3.3 INT1 (eksternal interupsi 1)P3.4 T0 (input eksternal timer-0)P3.5 T1 (input eksternal timer-1)P3.6 WR (write strobe memori data eksternal)P3.7 RD (read strobe memori data eksternal)

Page 9: Modul+Microcontroller+%28C.O.M.I.C%29

Port-3 juga menerima beberapa sinyal kendali selama dilakukan proses pengisian

data heksa dan verifikasinya di E-EPROM. RST.

Input reset. Suatu sinyal high (tegangan 5 Volt) pada pin ini yang diberikan selama minimum 2 siklus mesin pada saat oscilator sedang bekerja, akan menyebabkan mikrokontroler AT89C51 di-reset. Atau dengan kata lain sistem AT89C51 memulai kembali eksekusi programnya pada alamat 000H. ALE/PROG. ALE merupakan singkatan dari Address Latch Enable. Pin ALE merupakan pin output yang mengeluarkan pulsa untuk menyimpan (latching) byte alamat bawah saat mengakses memori eksternal. Pin ini juga berfungsi sebagai pin input untuk pulsa PROG saat dilakukan pemrograman AT89C51. Pada saat operasi normal, ALE mengeluarkan secara konstan suatu pulsa dengan frekuensi 1/6 dari frekuensi oscilator yang dapat digunakan untuk tujuan pewaktuan dan sumber detak peralatan eksternal. Catatan : satu pulsa ALE hilang pada setiap akses memori data eksternal. Jika diinginkan, operasi ALE dapat dihilangkan (disable) dengan mensetting bit 0 dari SFR pada alamat 8EH. Dan bila bit 0 di set menjadi ‘1’ maka ALE diaktifkan hanya pada eksekusi instruksi MOVX atau MOVC. Mensetting bit disable ALE tidak akan berpengaruh kepada sistem jika mikrokontroler difungsikan dengan mode mengakses memori eksternal. PSEN. PSEN merupakan singkatan dari Program Store Enable yang merupakan strobe untuk membaca memori program eksternal. Ketika AT89C51 sedang mengeksekusi kode heksa dari memori program eksternal, maka PSEN akan diaktifkan sebanyak 2 kali untuk setiap siklus mesin. Kecuali pada saat mengakses memori data eksternal, dua sinyal PSEN dihilangkan. EA/Vpp. EA merupakan singkatan dari External Address. Pin EA harus dihubungkan ke GND (ground) pada saat menginginkan sistem mengambil kode heksa (bahasa mesin) dari memori program eksternal. Dimana lokasi awal terletak di alamat 0000H hingga maksimum FFFFH. EA harus dihubungkan ke VCC (5 Volt) jika diinginkan sistem mengambil kode heksa dari memori program internal. Pin ini juga berfungsi sebagai tegangan pemrograman (Vpp) pada saat dilakukan proses pengisian kode heksa ke dalam E-EPROM. Tegangan pemrograman yang diberikan adalah DC 12-Volt. XTAL1. Pin ini merupakan pin input untuk inverting oscilator internal dan dapat juga berfungsi sebagai input untuk rangkaian detak eksternal.

Page 10: Modul+Microcontroller+%28C.O.M.I.C%29

XTAL2. Pin ini merupakan pin output dari oscilator. VCC. Pin ini dihubungkan dengan sumber tegangan (catu daya) arus searah sebesar 5

Volt. GND. Pin ini dihubungkan dengan ground (0 Volt) dari catu daya. 3. Rangkaian Minimal. Untuk membuat suatu sistem berbasis mikrokontroler AT89C51 diperlukan dua rangkaian dasar yaitu rangkaian POR (Power On Reset) dan rangkaian On-chip Oscillator. Power On Reset.

Sesuai dengan namanya, rangkaian ini berfungsi untuk memberikan sinyal ‘reset’ kepada mikrokontroler AT89C51 pada saat catu-daya dihidupkan. Reset disaat mulai dihidupkan merupakan keharusan bagi sistem-sistem berbasis mikroprosesor/ mikrokontroler.

Dengan adanya reset maka mikrokontroler memulai mengeksekusi instruksi pada baris pertama program yang tersimpan di dalam memorinya. Atau dengan kata lain, adanya POR dapat dipastikan mikrokontroler langsung memulai eksekusi program pada baris pertama, bukan pada sembarang baris.

Pada kondisi reset, maka isi dari setiap register di dalam SFR akan berubah seperti tabel dibawah ini :

Tabel 2

Nilai yang terisi pada SFR saat POR

Reg SFR Nilai saat resetPC 0000H

ACC 00HB 00H

PSW 00HSP 07H

DPTR 0000HP0 - P3 FFH

IP XXX00000BIE 0XX00000B

TMOD 00HTCON 00HTH0 00HTL0 00HTH1 00HTL1 00H

SCON 00HSBUF Tidak tentuPCON 0XXX0000B

Page 11: Modul+Microcontroller+%28C.O.M.I.C%29

Adapun rangkaian Power On Reset untuk mikrokontroler Atmel 89C51 dapat dilihat pada gambar di bawah ini :

Gambar 5

Rangkaian POR

Pada saat catu-daya dihidupkan, rangkaian menjaga pin RST pada kondisi high.

Hal ini disebabkan karena muatan pada kapasitor masih kosong sehingga arus dapat mengalir menuju pin RST. Beberapa mili detik kemudian (tergantung kepada nilai kapasitor dan nilai resistor), pada saat muatan pada kapasitor penuh maka arus tidak lagi dapat mengalir menyebrang kapasitor. Sehingga pin RST saat ini ditarik ke bawah (ground) melalui resistor pull-down 8K2.

Untuk memastikan sinyal reset yang valid, maka pin RST harus dijaga pada kondisi high sampai rangkaian On-chip Oscillator bekerja plus dua siklus mesin. Dalam hal ini pin RST minimal dijaga pada kondisi high selama 10 ms. Waktu start-up untuk On-chip Oscillator tergantung kepada frekuensi kristal. Bila digunakan kristal 10 MHz, maka waktu untuk start-up selama 1 ms. Untuk kristal 1 MHz, waktu untuk start-up selama 10 ms.

On-chip Oscillator. Sesuai dengan namanya, rangkaian ini berfungsi untuk membangkitkan sinyal

detak (clock) kepada sistem mikrokontroler AT89C51. Hampir seluruh rangkaian Oscilator terletak di dalam mikrokontroler AT89C51, kecuali 3 komponen yang perlu ditambahkan di luar chip AT89C51. Ketiga komponen tersebut adalah 2 buah kapasitor 30 pF dan 1 buah kristal. Lihat gambar 6.

AT89C51

VCC

+

40

9

GND20

RST

VCC

10uF/12v

8K2

Page 12: Modul+Microcontroller+%28C.O.M.I.C%29

AT89C51

19

XTAL2

XTAL1

30 pF

30 pF

18

XTAL

Gambar 6

On-chip Oscillator

Frekuensi kristal dapat dipilih antara 1 Mhz hingga 20 MHz tergantung kepada spesifikasi yang tertera pada tulisan di body chip AT89C51. Frekuensi kristal akan mempengaruhi siklus mesin (machine cycle) dan menentukan baud-rate pada saat berkomunikasi melalui serial port. Pembahasan mengenai baud-rate ada pada topik mengenai port serial.

Gambar 7

Blok diagram rangkaian modul kontroler

Gambar diatas memperlihatkan keseluruhan rangkaian pada modul kontroler perangkat percobaan-percobaan yang akan kita lakukan. Terlihat adanya beberapa blok yang menyusun modul kontroler seperti blok POR dan On-chip Oscillator yang telah dibahas sebelumnya. Pembahasan untuk blok interface TTL – RS232 akan dibahas secara detil pada sessi-2. Terlihat pada gambar bahwa dengan adanya interface TTL – RS232 maka mikrokontroler AT89C51 dapat dihubungkan ke PC melalui port serial.

AT89C51

XTAL2

XTAL1

POR

ON-CHIPOSCILLATOR

RST

INTERFACETTL - RS232 RX

TXPC

PORT-0

PORT-1

PORT-2

PORT-3

KonektorPort 0

KonektorPort 2

KonektorPort 1

KonektorPort 3

Speaker

P2.0

Page 13: Modul+Microcontroller+%28C.O.M.I.C%29

Pada mikrokontroler AT89C51 terdapat 4 buah port, yaitu Port-0, Port-1, Port-2 dan Port-3. Masing-masing port memiliki saluran untuk input/output sebanyak 8-bit. Atau dengan kata lain maka jumlah saluran input dan output (I/O) yang tersedia adalah sebanyak 4 x 8 saluran I/O. Total sebanyak 32 bit saluran I/O. Masing-masing bit pada setiap port dapat dihubungkan ke berbagai peralatan input maupun output.

Pada gambar 7 diatas terlihat bahwa masing-masing port pada mikrokontroler AT89C51 langsung dihubungkan kepada konektor yang diberi nama konektor Port-0 s/d konektor Port-3. Konektor-konektor ini kemudian dengan kabel dihubungkan ke modul input maupun ke modul peraga untuk mensimulasikan proses input dan output.

Terlihat juga bahwa Port-2 bit-0 (P2.0) terhubung ke perangkat speaker. Dengan demikian maka dapat dibuat suatu percobaan untuk memainkan suatu lagu atau nada-nada pada speaker. Modul-modul lainnya yang digunakan untuk percobaan akan dijelaskan pada sessi ke-2.

Organisasi Memori.

Memori pada mikrokontroler AT89C51 dipisah atas dua bagian, yaitu memori untuk program yang tersimpan di dalam EEPROM (Electronically Erasable Programmable ROM) dan memori untuk data yang tersimpan di dalam RAM (Random Access Memory). EEPROM bersifat non-volatile yang artinya program yang tersimpan di dalamnya tidak akan mudah hilang bila catu-data dimatikan. Sedangkan RAM bersifat volatile yang artinya data akan hilang bila catu-daya dimatikan.

Memori program secara total dapat menyimpan program hingga mencapai 64 Kilo Byte (64 KB) pada memori eksternal. Namun secara internal mikrokontroler AT89C51 hanya mampu menyimpan program sebesar 4 KB. Untuk dapat mengakses memori program eksternal maka digunakan sinyal PSEN (Program Store Enable) dan sinyal EA (Enable Address), lihat pin pada gambar-4. Instruksi yang diperlukan untuk mengakses memori eksternal adalah MOVX. Memori data pada AT89C51 juga mampu mengalamati hingga mencapai 64 Kilo Byte (64 KB) pada memori eksternal. Namun secara internal mikrokontroler AT89C51 hanya mampu menyimpan data sebesar 128 byte ditambah 128 byte untuk SFR (Special Function Register). Lihat gambar 10. Untuk dapat mengakses memori data eksternal maka digunakan sinyal Rd (Read) dan Wr (Write).

Page 14: Modul+Microcontroller+%28C.O.M.I.C%29

Gambar 8 Struktur Program Memori

Gambar 9

Struktur Data Memori

Pada gambar 9 diatas terlihat bahwa 128 byte SFR hanya dapat diakses dengan cara pengalamatan langsung (direct addressing), yaitu dengan menggunakan instuksi MOV data,alamat. Sedangkan 128 byte RAM selain dapat diakses secara langsung, dapat juga diakses secara tidak langsung (indirect addressing), yaitu dengan menggunakan instruksi MOV @Ri.

Operand dan Ekspresi.

60KBEksternal

4KB Internal

0000

0FFF

1000

FFFF

EA = 1PSEN

Atau

64KBEksternal

0000

FFFF

EA = 0PSEN

128 Bytes SFR(Pengalamatan

Langsung)

128 Bytes RAM(PengalamatanLangsung dan

Tidak Langsung

00

7F

FF

DAN

64KBEksternal

0000

FFFF

WRRD

80

INTERNAL

Page 15: Modul+Microcontroller+%28C.O.M.I.C%29

Bentuk umum semua instruksi dalam bahasa assembler AT89C51 dapat ditulis sebagai berikut :

[ label: ] Mnemonic [ operand ] [ ,operand ] [ ,operand ] [ ;komentar ]

Jumlah operand tergantung pada tipe mnemonic. Semua operand dapat dibagi dalam 6 kelompok, yaitu : 1. Simbol khusus assembler 2. Pengalamatan tak langsung 3. Data langsung 4. Pengalamatan data 5. Pengalamatan bit 6. Pengalamatan kode Pembahasan lebih detil mengenai berbagai teknik pengalamatan dibahas pada sessi-4. Simbol Assembler Khusus.

Assembler telah menyediakan beberapa simbol untuk menunjukkan register tertentu sebagai operand. Simbol-simbol dan nama-nama register yang telah digunakan oleh assembler tidak boleh digunakan oleh programmer untuk mendefinisikan suatu variabel maupun konstanta (sessi ke 8 akan dibahas mengenai pendefinisian variabel dan konstanta). Tabel 3 dibawah ini menunjukkan simbol assembler khusus yang dimaksud.

Tabel 3

Simbol Assembler Khusus

Simbol khusus Arti

A Akumulator

R0 … R7 Register serbaguna

DPTR Data pointer. Register 16 bit

PC Program counter. Register 16 bit yang berisi alamat

Instruksi berikutnya yang akan dijalankan

C Carry flag

AB Akumulator/register B. Pasangan register untuk proses

perkalian dan pembagian.

Pengalamatan Langsung.

Pengalamatan langsung dilakukan dengan memberikan nilai ke suatu register secara langsung. Untuk melaksanakan hal tersebut digunakan tanda #.

Page 16: Modul+Microcontroller+%28C.O.M.I.C%29

MOV A,#01H ; Isi akumulator dengan bilangan 01H

MOV DPTR,#19AB ; Isi register DPTR dengan bilangan 19ABH

Pengalamatan data langsung dari 0 sampai 127 akan mengakses RAM internal, sedangkan pengalamat 128 sampai 255 akan mengakses register perangkat keras.

MOV P3,A ; Pindahkan isi akumulatort ke alamat data B0H

; (B0H adalah alamat Port 3).

INC 50 ; Naikkan isi suatu alamat 50 pada memori

Pengalamatan Tidak Langsung.

Operand pengalamatan tidak langsung menunjuk ke sebuah register yang berisi lokasi suatu alamat memori yang akan digunakan dalam suatu operasi. Lokasi yang nyata tergantung pada isi register saat instruksi dijalankan. Untuk melaksanakan pengalamatan tidak langsung digunakan simbol @.

ADD A, @R0 ; Tambahkan isi RAM yang lokasinya ditunjuk oleh

; register R0 ke akumulator

DEC @R4 ; Kurangi satu isi RAM yang alamatnya ditujuk oleh

; register R4

MOVX @DPTR, A ; Pindahkan isi dari akumulator ke memori luar yang

; lokasinya ditunjuk oleh pointer (DPTR)

Pengalamatan Bit.

Pengalamatan bit merupakan pengalamatan untuk merubah 1 bit data dari satu lokasi memori. Satu lokasi memori dapat menampung 8 bit informasi atau sebesar 1 byte. Pengalamatan bit dapat dilakukan untuk merubah port i/o, namun dapat juga dilakukan internal di dalam RAM. Namun tidak semua alamat pada RAM dapat diakses secara bit. Hanya alamat yang dimulai dari 20H sampai 2F yang bisa dialamati secara bit (lihat gambar dibawah ini).

Page 17: Modul+Microcontroller+%28C.O.M.I.C%29

Gambar 10

Peta Memori RAM AT89C51

Untuk melakukan pengalamatan bit digunakan simbol (.) Contoh pengalamatan bit adalah sebagai berikut :

• FLAGS.3 • 40.5 • 21H.5 • ACC.7

Selain contoh diatas, ada beberapa register internal (lihat gambar 3) pada AT89C51 yang dapat diakses secara bit. Register-register tersebut adalah :

• register PSW (Program Status Word, yang berisi 7 buah flag) • register TCON (Timer/counter Control, untuk mengatur fungsi Timer/Counter) • register SCON (Serial Control, untuk mengatur proses transfer data serial) • register IE (Interrupt Enable, untuk mengatur pengggunaan sistem interupsi) • register IP (Interrupt Priority, untuk mengatur prioritas apabila terjadi 2 interupsi

secara bersamaan).

Default register bankfor R0 - R7

Bank 1

Bank 2

Bank 3

00

0708

0F10

1718

1F20

2F30

7F

LOKASI RAMSERBAGUNA

LOKASIPENGALAMATAN

BIT

Page 18: Modul+Microcontroller+%28C.O.M.I.C%29

BAB 2

PERANGKAT INSTRUKSI

Dilihat dari Mode Pengalamatannya, perangkat instruksi mikrokontroler

AT89C51 dibedakan menjadi enam (6) macam yaitu : Pengalamatan Langsung, Pengalamatan Tidak Langsung, Pengalamatan Bit, Immediate Data, Pengalamatan Indeks, Pengalamatan Register. � Pengalamatan Langsung (Direct Addressing).

Dalam pengalamatan langsung, operand di dalam field instruksi menunjuk ke suatu alamat tertentu. Hanya internal data RAM dan SFR yang dapat dialamati secara langsung.

� Pengalamatan Tidak Langsung (Indirect Addressing). Pada pengalamatan tidak langsung, instruksi mengandung suatu register yang berisi alamat dari data yang akan dipindahkan.

� Pengalamatan Bit. Pengalamatan ini dapat merubah 1 bit informasi dari total 8 bit (1 byte) data yang terdapat pada suatu alamat memori. Pengalamatan ini hanya bisa dilakukan pada internal RAM pada lokasi tertentu dan pada SFR.

� Immediate Data. Pengalamatan ini mengisi langsung suatu alamat dengan suatu data (konstanta). Data immediate ini dibedakan menjadi data desimal, heksadesimal, dan biner.

� Pengalamatan Indeks. Program memori dapat diakses melalui pengalamatan indeks. Pengalamatan ini digunakan untuk membaca tabel look-up (Look-up table) di dalam program memori. Pengalamatan ini menggunakan register 16-bit (DPTR atau PC = Program Counter) untuk menunjuk ke alamat awal dari suatu tabel, dan kemudian register Akumulator di isi untuk menunjuk baris keberapa dari tabel yang datanya akan diambil.

� Pengalamatan Register. Pengalamatan ini menggunakan Register Bank (R0-R7), dapat diakses oleh instruksi-instruksi yang opcode-nya mengandung satu dari 32 buah register bank (R0-R7 yang terdapat pada 4 buah bank).

Tabel berikut memperlihatkan operand-operand yang digunakan pada seluruh instruksi yang dikenal pada AT89C51.

Page 19: Modul+Microcontroller+%28C.O.M.I.C%29

@Ri L okasi RAM internal 8-bi t (0-255) yang di al amati secarati dak langsung melal ui register R1 atau R0

#data K onstanta 8-bi t#data16 K onstanta 16-bi taddr16 Operand alamat tujuan (desti nation) 16-bi t. D igunakan

instruksi L CAL L dan L JM P.addr11 Operand alamat tujuan (desti nation) 11-bi t. D igunakan

instruksi ACAL L dan AJM P.rel Alamat ( l abel ) yang digunakan untuk i nstruksi SJM P

dan seluruh i nstruksi l ompat bersyarat l ai nnyabi t Pengalamatan langsung bi t di dalam RAM internal atau

Bila dilihat dari Perangkat Instruksi (Instruction Set) yang dimiliki oleh mikrokontroler AT89C51, instruksi-instruksi dapat digolongkan menjadi lima (5) kategori, yaitu : Operasi Aritmatika, Operasi Logika, Transfer Data, Manipulasi Boolean dan Pencabangan Program. Baiklah mari kita bahas satu persatu instruksi yang dikenal oleh mikrokontroler AT89C51 berdasarkan 5 kategori diatas.

1. Instruksi Operasi Aritmatika. Instruksi operasi aritmatika meliputi seluruh operasi matematis (jumlah, kurang,

kali, bagi) dan operasi increment dan decrement. 1.1.Operasi Penjumlahan.

Terdapat 2 kelompok utama instruksi penjumlahan yaitu penjumlahan tanpa bit carry dan penjumlahan bersama bit carry. 1.1.1. Penjumlahan tanpa bit carry.

Sintaks : ADD A, <source-byte> Deskripsi : Instruksi ADD akan menjumlahkan suatu nilai byte dengan isi register A

dan menyimpan hasil penjumlahan itu ke dalam register A. Flag bit carry dan bit auxiliary carry akan diset (bersesuaian) jika terjadi limpahan pada bit 7 atau bit 3. Jika tidak terjadi limpahan, kedua bit tersebut akan di-clear. Field Source Byte dapat berupa pengalamatan: register, langsung, tidak langsung atau immediate.

Contoh : Diasumsikan register A sedang menyimpan data 0C3H (11000011B), dan R0 menyimpan 0AAH (10101010B). Maka dengan instruksi : ADD A, R0

akan menghasilkan 6D (01101101B) di dalam register A, dan bit AC dan C di-clear

Varian : ADD A, Rn ADD A, direct ADD A, @Ri

Page 20: Modul+Microcontroller+%28C.O.M.I.C%29

ADD A, #data 1.1.2. Penjumlahan bersama bit carry.

Sintaks : ADDC A, <source-byte> Deskripsi : Instruksi ADDC secara simultan akan menjumlahkan suatu nilai byte

dengan isi register A dan juga dengan bit carry. Dan kemudian menyimpan hasil penjumlahan itu ke dalam register A. Flag bit carry dan bit auxiliary carry akan diset (bersesuaian) jika terjadi limpahan pada bit 7 atau bit 3. Jika tidak terjadi limpahan, kedua bit tersebut akan di clear.

Field Source Byte dapat berupa pengalamatan: register, langsung, tidak

langsung atau immediate. Contoh : Diasumsikan register A sedang menyimpan data 0C3H (11000011B), R0

menyimpan 0AAH (10101010B) dan bit carry. Maka dengan instruksi : ADDC A,R0 akan menghasilkan 6E (01101110B) di dalam register A, dan bit AC dan C di-clear.

Varian : ADDC A, Rn ADDC A, direct ADDC A, @Ri ADDC A, #data 1.2.Operasi Pengurangan.

Sintaks : SUBB A, <source-byte> Fungsi : Mengurangi beserta bit Borrow Deskripsi : Instruksi SUBB akan mengurangi suatu nilai byte beserta bit carry dengan

isi register A dan menyimpan hasil pengurangan itu ke dalam register A. Flag bit carry (borrow) akan diset apabila operasi itu membutuhkan suatu ‘pinjaman’ (borrow) pada bit ke 7 dan akan meng-clear C jika tidak terjadi ‘pinjaman’. Bit AC akan diset (bersesuaian) jika dibutuhkan pinjaman pada bit ke 3 atau akan di-clear jika tidak dibutuhkan pinjaman. Field Source Byte dapat berupa pengalamatan: register, langsung, tidak langsung atau Immediate.

Contoh : Diasumsikan register A sedang menyimpan data 0C3H (11000011B), dan R0 menyimpan 0AAH (10101010B). Maka dengan instruksi : ADD A, R0 akan menghasilkan 6D (01101101B) di dalam register A, dan bit AC dan C di-clear.

Varian : SUBB A, Rn SUBB A, direct SUBB A, @Ri SUBB A, #data

Page 21: Modul+Microcontroller+%28C.O.M.I.C%29

1.3.Operasi Perkalian.

Sintaks : MUL AB Fungsi : Melakukan proses perkalian Deskripsi : Instruksi MUL AB akan mengalikan suatu nilai byte yang berada di dalam

register A dan B. 8-bit bobot terendah dari 16 bit hasil perkalian akan disimpan di dalam register A, dan 8 bit bobot tertinggi akan disimpan di dalam register B. Jika hasil perkalian lebih besar dari 255 (0FFH), maka flag bit overflow akan diset. Begitu pula sebaliknya jika lebih kecil dari 255, flag bit overflow akan di-clear.

Contoh : Diasumsikan register A sedang menyimpan data 80 (50H), dan register B

menyimpan data 160 (0A0H). Maka dengan instruksi : MUL AB akan menghasilkan 12.800 (3200H), sehingga B akan dirubah menjadi 32H (00110010B) dan A akan berisi 00H. Flag overflow akan diset dan carry akan di-clear.

1.4.Operasi Pembagian.

Sintaks : DIV AB Fungsi : Melakukan proses pembagian Deskripsi : Instruksi DIV AB akan membagi suatu nilai byte yang berada di dalam

register A dengan nilai byte yang terkandung di dalam register B. Register A akan menyimpan hasil pembagian dan register B akan menyimpan sisa dari proses pembagian. Bit carry dan overflow di-clear.

Pengecualian : Jika B mengandung 00H, maka suatu nilai yang tidak terdefinisi akan mengisi register A dan B. Namun bit overflow akan diset dan bit carry di-clear.

Contoh : Diasumsikan register A menyimpan data 251 (0FBH), dan register B

menyimpan data 18 (12H). Maka dengan instruksi : DIV AB akan menghasilkan 13 (0DH) dan 17 (11H) di dalam register B. Kedua bit carry dan overflow akan di-clear.

1.5.Operasi Increment.

Sintaks : INC <Byte> Fungsi : Menambah satu (menaikkan) isi suatu variabel/register Deskripsi : Instruksi INC akan menaikkan suatu nilai byte pada variabel yang

ditunjuk. Suatu nilai 0FFH akan overflow ke 00H. Tidak ada flag yang dipengaruhi oleh instruksi ini. Field Byte dapat berupa pengalamatan: register, direct, langsung, tidak langsung.

Contoh : Diasumsikan register R0 sedang menyimpan data 7EH (01111110B). Lokasi internal RAM pada alamat 7EH dan 7FH berisi data 0FFH dan 40H. Maka instruksi berikut secara berutan :

Page 22: Modul+Microcontroller+%28C.O.M.I.C%29

INC @R0 INC R0 INC @R0

akan menyebabkan R0 tetap menyimpan 7EH. Namun lokasi 7EH dan 7FH akan berubah menjadi 0FFH dan 40H

Varian : INC A INC Rn INC direct INC @Ri INC DPTR 1.6.Operasi Decrement.

Sintaks : DEC <Byte> Fungsi : Mengurangi satu (menurunkan) isi suatu variabel/register Deskripsi : Instruksi DEC akan menurunkan suatu nilai byte pada variabel yang

ditunjuk. Suatu nilai 00H akan underflow ke 0FFH. Tidak ada flag yang dipengaruhi oleh instruksi ini.

Field Byte dapat berupa pengalamatan: register, direct, langsung, atau tidak langsung.

Contoh : Diasumsikan register R0 sedang menyimpan data 7FH (01111111B).

Lokasi internal RAM pada alamat 7EH dan 7FH berisi data 00H dan 40H. Maka instruksi berikut secara berutan :

DEC @R0 DEC R0 DEC @R0

akan menyebabkan R0 tetap menyimpan 7EH. Namun lokasi 7EH dan 7FH akan berubah menjadi 0FFH dan 3FH

Varian : DEC A DEC Rn DEC direct DEC @Ri 2. Instruksi Operasi Logika

2.1.Operasi AND Logic.

Sintaks : ANL <dest-byte>,<source-byte> Fungsi : Melakukan operasi AND antara dua byte suatu variabel/register Deskripsi : Instruksi ANL membentuk operasi bit logika AND antara dua variabel

(destination-byte dan source-byte) dan menyimpan hasilnya di dalam variabel destination. Tidak ada flag yang berubah dengan operasi ini.

Page 23: Modul+Microcontroller+%28C.O.M.I.C%29

Dua operand memungkinkan terjadinya 6 kombinasi mode-pengalamatan. Bila variabel destination berupa register A, maka source variabel dapat berupa pengalamatan register, direct, indirect atau berupa pengalamatan immediate. Catatan: Ketika instruksi ini digunakan untuk memodifikasi suatu port output, suatu nilai yang digunakan sebagai data original port akan dibaca dari latch data output, bukan dari pin input.

Contoh : Jika register A sedang menyimpan 0C3H (11000011B), dan register 0 (R0) menyimpan 55H (01010101B), maka instruksi berikut : ANL A,R0

akan merubah isi register A dengan nilai 41H (01000001B). Ketika byte destination merupakan byte pengalamatan langsung, maka

instruksi ANL men-clear kombinasi bit di setiap lokasi atau register. Proses penghalangan (mask) bit dalam suatu register menghasilkan pola bit pada posisi tertentu yang akan di-clear.

Contoh lainnya : ANL P1,#01110011B akan meng-clear bit 7, 3 dan 2 dari port P1. Varian : ANL A, Rn ANL A, direct ANL A, @Ri ANL A, #data ANL direct, A ANL direct, #data 2.2.Operasi OR Logic.

Sintaks : ORL <dest-byte>,<source-byte> Fungsi : Melakukan operasi OR antara dua byte suatu variabel/register Deskripsi : Instruksi ORL membentuk operasi bit logika OR antara dua variabel

(destination-byte dan source-byte) dan menyimpan hasilnya di dalam variabel destination. Tidak ada flag yang berubah dengan operasi ini.

Dua operand memungkinkan terjadinya 6 kombinasi mode-pengalamatan. Bila variabel destination berupa register A, maka source variabel dapat berupa pengalamatan register, direct, indirect atau berupa pengalamatan immediate. Catatan: Ketika instruksi ini digunakan untuk memodifikasi suatu port output, suatu nilai yang digunakan sebagai data original port akan dibaca dari latch data output, bukan dari pin input.

Page 24: Modul+Microcontroller+%28C.O.M.I.C%29

Contoh : Jika register A sedang menyimpan 0C3H (11000011B), dan register 0 (R0) menyimpan 55H (01010101B), maka instruksi berikut : ORL A,R0

akan merubah isi register A dengan nilai 0D7H (11010111B). Pola bit yang akan di-set oleh operasi ini ditentukan oleh byte penghalang

(mask), yang bisa berupa data tetap ataupun variabel Contoh lainnya : ORL P1,#00110010B akan meng-set bit 5, 4

dan 1 dari port P1. Varian : ORL A, Rn ORL A, direct ORL A, @Ri ORL A, #data ORL direct, A ORL direct, #data 2.3.Operasi Exclusive OR Logic.

Sintaks : XRL <dest-byte>,<source-byte> Fungsi : Melakukan operasi XOR antara dua byte suatu variabel/register Deskripsi : Instruksi XRL membentuk operasi bit logika XOR antara dua variabel

(destination-byte dan source-byte) dan menyimpan hasilnya di dalam variabel destination. Tidak ada flag yang berubah dengan operasi ini.

Dua operand memungkinkan terjadinya 6 kombinasi mode-pengalamatan. Bila variabel destination berupa register A, maka source variabel dapat berupa pengalamatan register, direct, indirect atau berupa pengalamatan immediate. Catatan: Ketika instruksi ini digunakan untuk memodifikasi suatu port output, suatu nilai yang digunakan sebagai data original port akan dibaca dari latch data output, bukan dari pin input.

Contoh : Jika register A sedang menyimpan 0C3H (11000011B), dan register 0

(R0) menyimpan AAH (10101010B), maka instruksi berikut : XRL A,R0 akan merubah isi register A dengan nilai 69H (01101001B).

Ketika operand kedua merupakan data langsung, instruksi ini dapat

mengkomplemen kombinasi bit pada setiap lokasi RAM atau register. Pola dari bit yang dikomplemenkan ditentukan oleh byte penghalang (mask) atau suatu konstanta tertentu.

Contoh XRL P1,#00110001B akan mengkomplemen bit 5, 4 dan 0 pada P1. Varian : XRL A, Rn

Page 25: Modul+Microcontroller+%28C.O.M.I.C%29

XRL A, direct XRL A, @Ri XRL A, #data XRL direct, A XRL direct, #data 2.4.Operasi Clear Akumulator.

Sintaks : CLR A Fungsi : Melakukan operasi menghapus setiap bit pada register A Deskripsi : Instruksi ini akan membuat seluruh bit di dalam register A menjadi ‘0’.

Tidak ada flag yang dipengaruhi oleh instruksi ini.

Contoh : Register A=5CH (01011100B). Maka Instruksi CLR A akan membuat A=00H.

2.5.Operasi Komplemen Akumulator.

Sintaks : CPL A Fungsi : Membalik (NOT) nilai logika pada setiap bit di dalam register A. Deskripsi : Instruksi ini akan membuat seluruh bit di dalam register A terbalik dari

nilai semula. Bila ‘1’ menjadi ‘0’, dan sebaliknya. Tidak ada flag yang dipengaruhi oleh instruksi ini.

Contoh : Register A=5CH (01011100B). Maka Instruksi CPL A akan membuat A=0A3H

2.6.Operasi Geser Bit.

Sintaks : RL A Fungsi : Menggeser satu bit ke kiri isi register A. Deskripsi : Delapan bit di dalam register A digeser satu bit ke kiri. Bit 7 dirotasi ke

posisi bit 0. Tidak ada flag yang dipengaruhi oleh instruksi ini. Contoh : Register A=0C5H (11000101B), maka dengan instruksi RL A akan

menyebabkan register A=8BH (10001011B). Flag carry tidak berubah. Sintaks : RLC A Fungsi : Menggeser satu bit ke kiri isi register A dan flag carry Deskripsi : Delapan bit di dalam register A digeser satu bit ke kiri. Bit 7 register A

masuk ke flag (bit) carry dan isi flag carry pindah ke register A pada posisi bit 0.

Contoh : Register A=0C5H (11000101B) dan C=0, maka dengan instruksi RLC A akan menyebabkan register A=8BH (10001011B) dan C=1.

Sintaks : RR A Fungsi : Menggeser satu bit ke kanan isi register A. Deskripsi : Delapan bit di dalam register A digeser satu bit ke kanan. Bit 0 dirotasi ke

posisi bit 7. Tidak ada flag yang dipengaruhi oleh instruksi ini.

Page 26: Modul+Microcontroller+%28C.O.M.I.C%29

Contoh : Register A=0C5H (11000101B), maka dengan instruksi RR A akan menyebabkan register A=0E2H (11100010B). Flag carry tidak berubah.

Sintaks : RRC A Fungsi : Menggeser satu bit ke kanan isi register A dan flag carry Deskripsi : Delapan bit di dalam register A digeser satu bit ke kanan. Bit 0 register A

masuk ke flag (bit) carry dan isi flag carry pindah ke register A pada posisi bit 7.

Contoh : Register A=0C5H (11000101B) dan C=0, maka dengan instruksi RRC A akan menyebabkan register A=62H (01100010B) dan C=1.

Sintaks : SWAP A Fungsi : Menukar posisi 4 bit nibel bawah (bit 0-3) dengan 4 bit nibel atas (4-7). Deskripsi : Instruksi ini menukar posisi bit 0-3 dengan posisi bit 4-7 data yang

terdapat di dalam register A. Tidak ada flag yang dipengaruhi oleh operasi ini.

Contoh : Register A=0C5H (11000101B) maka dengan instruksi SWAP A akan menyebabkan register A=5CH (01011100B).

3. Instruksi Transfer Data Instruksi transfer data meliputi seluruh operasi pemindahan data antar register, pemindahan data dari suatu alamat memori internal/eksternal ke alamat lainnya (pengalamatan tidak langsung), pengisian data langsung (immediate data), dsb.

3.1.Operasi MOV.

Terdapat 5 kelompok utama instruksi transfer data yaitu transfer data 8-bit, transfer data 1-bit, transfer data 16-bit, transfer data berbentuk tabel dan transfer data dari memori eksternal. 3.1.1. Transfer data 8-bit

Sintaks : MOV <Dest-Byte, <Source-Byte> Fungsi : Memindahkan data 1 byte Deskripsi : Instruksi ini akan menyalin data yang berada pada operand kedua (source

byte) ke dalam lokasi yg ditunjuk oleh operand pertama (destination byte). Register pada operand keduatidak berubah oleh instruksi ini. Dan tidak ada register atau flag yang berubah. Operasi ini merupakan operasi yang sangat fleksibel dimana terdapat 15 kombinasi mode pengalamatan untuk operand pertama dan kedua.

Contoh : Lokasi RAM beralamat 30H menyimpan 40H. Dan lokasi 40H berisi 10H. Data yang terdapat pada input port 1 adalah 11001010B (0CAH).

MOV R0, #30H ;R0 = 30H MOV A, @R0 ; A = 40H MOV R1, A ;R1 = 40H

Page 27: Modul+Microcontroller+%28C.O.M.I.C%29

MOV B, @R1 ; B = 10H MOV @R1, P1 ;RAM(40H) = 0CAH MOV P2, P1 ;P2 = 0CAH Hasil 6 baris instruksi diatas akan menghasilkan R0=30H, A=40H,

R1=40H, B=10H, Ram(40H)=0CAH dan P2=0CAH. Varian : MOV A, Rn MOV direct, A MOV A, direct MOV direct, Rn MOV A, @Ri MOV direct, direct MOV A, #data MOV direct, @Ri MOV direct, #data MOV Rn, A MOV @Ri, A MOV Rn, direct MOV @Ri, direct MOV Rn, #data MOV @Ri, #data 3.1.2. Transfer data 16-bit

Sintaks : MOV DPTR, #data16 Fungsi : Memindahkan data selebar 16-bit ke register Data Pointer Deskripsi : Instruksi ini akan mengisi register DPTR (Data Pointer) dengan konstanta

16-bit. Nilai (konstanta) diisi pada byte kedua dan ketiga dari instruksi ini. Byte kedua (DPH) adalah menyimpan byte yang berbobot tinggi dan byte ketiga (DPL) menyimpan byte bobot yang rendah. Tidak ada flag yang berubah oleh operasi ini.

Contoh : Instruksi berikut :

MOV DPTR, #1234H

akan mengisi data 1234H ke dalam Data Pointer dimana register DPH menyimpan 12H dan DPL menyimpan 34H.

3.2.Operasi MOVC (Transfer data tabel)

Sintaks : MOVC A, @A+<base-reg> Fungsi : Memindahkan 1 byte kode dari suatu alamat yang ditunjuk oleh operand 2. Deskripsi : Instruksi ini akan mengisi register A dengan 1 byte kode atau konstanta

dari suatu alamat di dalam program memori. Alamat dibentuk dari penjumlahan 8-bit register A dengan 16-bit base-register, yang bisa berupa DPTR (Data Pointer) atau PC (Program Counter).

Pada saat proses pengambilan data, register PC dinaikkan satu untuk

mengambil alamat berikutnya sebelum dijumlahkan dengan register A. Data yang telah diambil akan berada di dalam register A.

Instruksi ini berguna untuk membuat suatu tabel data (konstanta). Tidak

ada flag yang berubah.

Page 28: Modul+Microcontroller+%28C.O.M.I.C%29

Contoh : Suatu nilai antara 0 dan 3 berada di dalam A. Instruksi berikut akan

merubah nilai yang berada di dalam A sesuai dengan satu atau empat nilai yang didefinisikan oleh instruksi direktif DB (define byte) :

REL_PC INC A MOVC A,@A+PC RET DB 66H, 77H DB 88H, 99H

Jika contoh subrutin diatas dijalankan dimana register A berisi 01H, maka pemanggilan subrutin tersebut akan menghasilkan A=77H. Instruksi INC A sebelum instruksi MOVC diperlukan untuk mengambil data berikutnya dari tabel. Data harus diletakkan tepat setelah instruksi RET. Setiap pindah baris harus diawali dengan instruksi direktif DB. Setiap akhir baris, tanpa diberikan tanda ‘,’

Varian : MOVC A, @A+DPTR MOVC A, @A+PC 3.3.Operasi MOVX.

Sintaks : MOVX <dest-byte>, <source-byte> Fungsi : Memindahkan 1 byte kode ke alamat eksternal Deskripsi : Instruksi ini akan mentransfer data antara register A dengan memori data

eksternal. Itulah sebabnya mengapa ‘X’ digandeng dengan MOV. Contoh : Suatu chip memori data eksternal (RAM) sebesar 256 byte terhubung

dengan bus data dan bus alamat yang terhubung pada P0 dan P3 berfungsi sebagai bus kendali untuk RAM eksternal. Register R0 berisi 12H dan R1 berisi 34H. Alamat 34H dari RAM Eksternal menyimpan 56H. Urutan instruksi berikut akan menyalin nilai 56H ke dalam register A dan RAM eksternal pada lokasi 12H

MOVX A, @R1 ; A = 56H MOVX @R0, A ;RAM(12) = 56H Varian : MOVX A, @Ri MOVX A, @DPTR MOVX @Ri, A MOVX @DPTR, A 3.4.Operasi PUSH.

Sintaks : PUSH direct Fungsi : Mendorong (menyimpan) data direct ke dalam RAM melalui proses stack. Deskripsi : Isi register SP (Stack Pointer) ditambah satu. Dan isi suatu register

pengalamatan langsung (operand direct) disalin ke dalam lokasi RAM

Page 29: Modul+Microcontroller+%28C.O.M.I.C%29

internal yang dialamati oleh register SP. Tidak ada flag yang dipengaruhi oleh operasi ini.

Contoh : Saat masuk ke dalam rutin interupsi, register SP berisi 09H dan register Data Pointer (DPTR) menyimpan 0123H. Maka dengan 2 instruksi dibawah ini :

PUSH DPL PUSH DPH

akan menyebabkan SP=0BH dan menyimpan 23H dan 01H di dalam RAM internal pada lokasi 0AH dan 0BH.

3.5.Operasi POP.

Sintaks : POP direct Fungsi : Mengeluarkan data melalui proses stack. Deskripsi : Isi suatu lokasi di dalam RAM internal yang dialamati oleh register SP

dibaca dan disalin ke dalam suatu register yang ditunjuk oleh operand direct. Isi register SP (Stack Pointer) dikurangi satu. Tidak ada flag yang dipengaruhi oleh operasi ini.

Contoh : Register SP menyimpan nilai 32H, dan lokasi RAM internal 30H hingga 32H menyimpan data 20H, 23H dan 01H. Maka instruksi dibawah ini :

POP DPH POP DPL

akan menyebabkan SP=30H dan mengisi register DPTR dengan data 0123H. Pada posisi ini, instruksi berikut : POP SP akan mengisi register SP dengan data 20H. Dalam contoh ini khusus ini, isi SP sebelumnya telah dikurangi menjadi 2FH dan kemudian diisi dengan 20H.

3.6.Operasi Exchange antar Register.

Sintaks : XCH A, <byte> Fungsi : Saling menukar isi data register A dengan isi data suatu register yang

berada pada operand kedua. Deskripsi : XCH mengisi register A dengan isi register yang ditunjuk oleh operand 2.

Pada saat yang sama isi register pada operand 2 akan diisi oleh data yang berada di dalam register A. Operand pertama dan kedua dapat berupa register, direct atau pengalamatan tidak langsung.

Contoh : R0 = 20H. Register A = 3FH (00111111B). Lokasi internal RAM 20H menyimpan data 75H (01110101B). Maka instruksi : XCH A,@R0 akan menyebabkan lokasi 20H RAM berisi data 3FH (00111111B) dan register A menyimpan data 75H (01110101B).

Varian : XCH A, Rn

Page 30: Modul+Microcontroller+%28C.O.M.I.C%29

XCH A, direct XCH A, @Ri 3.7.Operasi Exchange Digit.

Sintaks : XCHD A, @Ri Fungsi : Saling menukar isi data nibel bawah (bit 3 hingga bit 0) register A Deskripsi : Saling menukar isi data nibel bawah (bit 3 hingga bit 0) register A, yang

secara umum berupa data heksadesimal atau BCD, dengan nibel bawah dari suatu lokasi RAM yang dialamati secara tidak langsung oleh operand kedua.

Contoh : R0 = 20H. Register A = 36H (00110110B). Lokasi internal RAM 20H menyimpan data 75H (01110101B). Maka instruksi : XCHD A,@R0 akan menyebabkan lokasi 20H RAM berisi data 76H (01110110B) dan register A menyimpan data 35H (00110101B).

4. Instruksi Manipulasi Boolean

4.1.Operasi OR dengan bit Carry.

Sintaks : ORL C,<source-bit> Fungsi : Melakukan operasi OR antara source-bit dengan bit Carry (C) Deskripsi : Jika nilai source bit adalah logika 0, maka ORL C akan membuat C tetap

pada isinya semula.Tanda slash (/) diawal operand dalam bahasa assembly, mencirikan logika komplemen (pembalikan bit) dari nilai source-bit. Tetapi isi dari source-bit itu sendiri tidak berubah. Tidak ada flag yang dipengaruhi oleh operasi ini.

Hanya pengalamatan langsung yang bisa digunakan untuk operand source.

Contoh : Tiga baris program dibawah ini akan men-set bit carry jika, P1.0 = 1,

ACC.7 = 1 dan OV=0 :

ANL C,P1.0 ;Pindahkan status P1 bit 0 ke bit carr y ANL C,ACC.7 ;AND antara C dengan Akumulator bit 7 ANL C,/OV ;AND antara C dengan flag Overflow yang ;telah dikomplemen sebelumnya

Varian : ANL C, bit ANL C, /bit 4.2.Operasi AND dengan bit Carry.

Sintaks : ANL C,<source-bit> Fungsi : Melakukan operasi AND antara source-bit dengan bit Carry (C) Deskripsi : Jika nilai source bit adalah logika 0, maka ANL C akan meng-clear flag

carry. Tanda slash (/) diawal operand dalam bahasa assembly, mencirikan logika komplemen (pembalikan bit) dari nilai source-bit. Tetapi isi dari

Page 31: Modul+Microcontroller+%28C.O.M.I.C%29

source-bit itu sendiri tidak berubah. Tidak ada flag yang dipengaruhi oleh operasi ini.

Hanya pengalamatan langsung yang bisa digunakan untuk operand source.

Contoh : Tiga baris program dibawah ini akan men-set bit carry jika, P1.0 = 1,

ACC.7 = 1 dan OV=0 :

ANL C,P1.0 ;Pindahkan status P1 bit 0 ke bit carr y ANL C,ACC.7 ;AND antara C dengan Akumulator bit 7 ANL C,/OV ;AND antara C dengan flag Overflow yang ;telah dikomplemen sebelumnya

Varian : ANL C, bit ANL C, /bit 4.3.Operasi Clear Bit.

Sintaks : CLR bit Fungsi : Melakukan operasi menghapus bit. Deskripsi : Instruksi ini akan membuat bit di operand menjadi ‘0’. Tidak ada flag

yang dipengaruhi oleh instruksi ini. Instruksi ini dapat bekerja pada flag Carry atau pada setiap register pengalamatan bit langsung.

Contoh : P1 sebelumnya telah ditulis dengan 5DH (01011101B). Instruksi berikut, CLR P1.2 akan membuat P1 menjadi 59H (01011001B)

Varian : CLR C CLR bit 4.4.Operasi Set Bit.

Sintaks : SETB bit Fungsi : Melakukan operasi men-set bit (membuat menjadi ‘1’) Deskripsi : Instruksi ini akan membuat bit di operand menjadi ‘1’. Tidak ada flag

yang dipengaruhi oleh instruksi ini. Instruksi ini dapat bekerja pada flag Carry atau pada setiap register pengalamatan bit langsung.

Contoh : Flag carry di-clear. Output P1 telah ditulis dengan nilai 34H (00110100B). Instruksi berikut akan men-set flag carry menjadi ‘1’ dan merubah output data pada P1 menjadi 35H (00110101B).

Varian : SETB C SETB bit 4.5.Operasi Komplemen Bit.

Sintaks : CPL bit Fungsi : Melakukan pembalikan nilai logika suatu bit.

Page 32: Modul+Microcontroller+%28C.O.M.I.C%29

Deskripsi : Instruksi ini akan membalik nilai logika yang semula ‘0 menjadi ‘1’, dan sebaliknya. Tidak ada flag yang dipengaruhi oleh instruksi ini.

Contoh: P1 telah ditulis sebelumnya dengan 5DH (01011101B). Maka urutan instruksi berikut:

CPL P1.1 CPL P1.2

akan membuat P1 menjadi 5BH (01011011B).

Varian : CPL C CPL bit 4.6.Transfer data 1-bit

Sintaks : MOV <Dest-Bit, <Source-Bit> Fungsi : Memindahkan data selebar 1 bit Deskripsi : Instruksi ini akan menyalin informasi bit dari operand kedua kepada

operand kesatu. Salah satu dari operand harus berupa flag Carry. Operand lainnya berupa pengalamatan bit.

Contoh : Flag Carry diset ‘1’. Data yang hadir pada P3 adalah 11000101B (0C5H). Data yang ditulis sebelumnya ke P1 adalah 35H (00110101B).

MOV P1.3, C ;P1.3 = 1 MOV C, P3.3 ; C = 0 MOV P1.2, C ;P1.2 = 0 Tiga baris instruksi diatas akan membuat bit (flag) carry menjadi ‘0’ dan

merubah P1 menjadi 39H (00111001B) Varian : MOV C, bit MOV bit, C 4.7.Lompat bersyarat bit.

4.7.1. Lompat jika Carry = 1.

Sintaks : JC rel Fungsi : Lompat ke suatu alamat tertentu (operand rel) jika isi bit Carry=1. Deskripsi : Flag carry diset, maka instruksi JC akan menyebabkan program melompat

ke alamat yang ditunjuk oleh operand. Sebaliknya jika C=0 program akan melanjutkan instruksi berikutnya dibawah instruksi JC. Tidak ada flag yang berubah oleh instruksi ini.

Contoh : Flag C=0. Urutan instruksi dibawah ini menyebabkan C=1 dan program

melompat ke alamat yang ditunjuk oleh LABEL2.

Page 33: Modul+Microcontroller+%28C.O.M.I.C%29

JC LABEL1 CPL C JC LABEL2

4.7.2. Lompat jika Carry = 0.

Sintaks : JNC rel Fungsi : Lompat ke suatu alamat tertentu (operand rel) jika isi bit Carry=0. Deskripsi : Flag carry di-clear, maka instruksi JNC akan menyebabkan program

melompat ke alamat yang ditunjuk oleh operand. Sebaliknya jika C=1 program akan melanjutkan instruksi berikutnya dibawah instruksi JNC. Tidak ada flag yang berubah oleh instruksi ini.

Contoh : Flag C=1. Urutan instruksi dibawah ini menyebabkan C=0 dan program

melompat ke alamat yang ditunjuk oleh LABEL2. JNC LABEL1 CPL C JNC LABEL2

4.7.3. Lompat jika suatu bit = 1.

Sintaks : JB bit, rel Fungsi : Lompat ke suatu alamat tertentu (operand rel) jika isi suatu bit =1. Deskripsi : Jika suatu bit bernilai ‘1’, maka instruksi JB akan menyebabkan program

melompat ke alamat yang ditunjuk oleh operand. Sebaliknya jika suatu bit = 0 maka program akan melanjutkan instruksi berikutnya dibawah instruksi JB. Tidak ada flag yang berubah oleh instruksi ini.

Contoh : Data yang hadir pada port input adalah 11001010B dan A=56H

(01010110B). Maka instruksi dibawah ini akan membuat program mengeksekusi instruksi yang terdapat di LABEL2.

JB P1.2, LABEL1 JB ACC.2, LABEL2

4.7.4. Lompat jika suatu bit = 0.

Sintaks : JNB bit, rel Fungsi : Lompat ke suatu alamat tertentu (operand rel) jika isi suatu bit =0. Deskripsi : Jika suatu bit bernilai ‘0’, maka instruksi JNB akan menyebabkan program

melompat ke alamat yang ditunjuk oleh operand. Sebaliknya jika suatu bit = 1 maka program akan melanjutkan instruksi berikutnya dibawah instruksi JNB. Tidak ada flag yang berubah oleh instruksi ini.

Page 34: Modul+Microcontroller+%28C.O.M.I.C%29

Contoh : Data yang hadir pada port input adalah 11001010B dan A=56H (01010110B). Maka instruksi dibawah ini akan membuat program mengeksekusi instruksi yang terdapat di LABEL2.

JNB P1.3, LABEL1 JNB ACC.3, LABEL2

4.7.5. Lompat jika suatu bit = 1 dan hapus bit.

Sintaks : JBC bit, rel Fungsi : Lompat ke suatu alamat tertentu (operand rel) jika isi suatu bit =1 dan

menghapus bit tersebut menjadi ‘0’. Deskripsi : Jika suatu bit bernilai ‘1’, maka instruksi JBC akan menyebabkan program

melompat ke alamat yang ditunjuk oleh operand sekaligus membuat bit tersebut dihapus menjadi ‘0’. Sebaliknya jika suatu bit = 0 maka program akan melanjutkan instruksi berikutnya dibawah instruksi JBC. Tidak ada flag yang berubah oleh instruksi ini.

Contoh : A menyimpan data 56H (01010110B). Maka instruksi dibawah ini akan

membuat program mengeksekusi instruksi yang terdapat di LABEL2 dan akumulator dimodifikasi menjadi 52H (01010010B).

JBC ACC.3, LABEL1 JBC ACC.2, LABEL2 5. Instruksi Pencabangan.

5.1.Pemanggilan (pencabangan) Subrutin.

5.1.1. Absolute Call (Pencabangan berjangkuan 2 Kilo).

Sintaks : ACALL addr11 Fungsi : Memanggil (lompat ke) suatu subrutin berjarak maksimum 2K Deskripsi : Instruksi ini dengan tanpa persyaratan apapun akan melompat ke suatu

subrutin yang terletak pada lokasi yang ditunjuk oleh suatu label. Instruksi ini akan menambah 2 isi register PC untuk membentuk alamat kembali ke program utama, lalu mem-push alamat kembali tersebut ke dalam stack (byte terendah terlebih dulu yg di push), dan menaikkan isi register SP tersebut 2 kali. Program akan bercabang (melompat) ke suatu alamat yang dibentuk oleh gabungan 5 bit tertinggi PC dengan byte kedua yang dikandung oleh instruksi. Subrutin yang dipanggil harus dalam jangkauan 2 Kilo ruang program memori dari tempat dimana subrutin itu dipanggil. Tidak ada flag yang berubah oleh instruksi ini.

Contoh : Isi register SP pada saat sebelum terjadi pencabangan adalah 07H. Label SUBRTN berada pada program memori dengan alamat 0345H. Setelah mengeksekusi instruksi berikut (terletak di alamat 0123H) : ACALL SUBRTN

Page 35: Modul+Microcontroller+%28C.O.M.I.C%29

SP berubah menjadi 09H, lokasi RAM alamat 08H dan 09H akan berisi 25H dan 01H, dan PC berisi 0345H (alamat awal subrutin itu berada).

5.1.2. Long Call (Pencabangan berjangkuan 64 Kilo).

Sintaks : LCALL addr16 Fungsi : Memanggil (lompat ke) suatu subrutin berjarak maksimum 64 Kilo. Deskripsi : Instruksi ini dengan tanpa persyaratan apapun akan melompat ke suatu

subrutin yang terletak pada lokasi yang ditunjuk oleh suatu label. Instruksi ini akan menambah 3 isi register PC untuk membentuk alamat kembali ke program utama, lalu mem-push 16-bit alamat kembali tersebut ke dalam stack (byte terendah terlebih dulu yg di push), dan menaikkan isi register SP tersebut 2 kali. Program akan bercabang (melompat) ke suatu alamat yang dibentuk oleh gabungan 2 byte PC dengan 1 byte yang dikandung oleh instruksi. Subrutin yang dipanggil dalam jangkauan 64 Kilo ruang alamat (ruang program memori) dari tempat dimana subrutin itu dipanggil. Tidak ada flag yang berubah oleh instruksi ini.

Contoh : Isi register SP pada saat sebelum terjadi pencabangan adalah 07H. Label SUBRTN berada pada program memori dengan alamat 3456H. Setelah mengeksekusi instruksi berikut (terletak di alamat 0123H) : ACALL SUBRTN

SP berubah menjadi 09H, lokasi RAM alamat 08H dan 09H akan berisi 26H dan 01H, dan PC berisi 3456H (alamat awal subrutin itu berada).

5.2.Penutup pencabangan subrutin.

5.2.1. Return from Call

Sintaks : RET Fungsi : Kembali ke tempat dimana program sebelumnya bercabang. Deskripsi : Instruksi RET mem-pop (mengeluarkan) byte tinggi dan byte rendah PC

dari tempat stack. Dua byte ini merupakan alamat tempat kembali ke tempat sebelum pencabangan terjadi. Kemudian register SP dikurangi dua. Tidak ada flag yang dipengaruhi oleh instruksi ini.

Contoh : Isi register SP berisi 0BH. Lokasi internal RAM 0AH dan OBH menyimpan nilai 23H dan 01H. Instruksi berikut : RET menyebabkan SP berisi 09H dan program melanjutkan eksekusi instruksi pada lokasi 0123H.

5.2.2. Return from interupt.

Sintaks : RETI Fungsi : Kembali ke tempat dimana program sebelumnya bercabang akibat adanya

interupsi. Deskripsi : Instruksi RETI mem-pop (mengeluarkan) byte tinggi dan byte rendah PC

dari tempat stack. Dua byte ini merupakan alamat tempat kembali ke

Page 36: Modul+Microcontroller+%28C.O.M.I.C%29

tempat sebelum pencabangan terjadi. Kemudian register SP dikurangi dua. Tidak ada flag yang dipengaruhi oleh instruksi ini.

Contoh : Isi register SP berisi 0BH. Ketika interupsi terdeteksi, suatu instruksi terakhir selesai dieksekusi pada alamat 0122H. Lokasi internal RAM 0AH dan OBH menyimpan nilai 23H dan 01H. Instruksi berikut : RETI menyebabkan SP berisi 09H dan program melanjutkan eksekusi instruksi pada lokasi 0123H.

5.3.Lompat ke suatu alamat tertentu.

5.3.1. Absolute Jump (Pencabangan berjangkuan 2 Kilo).

Sintaks : AJMP addr11 Fungsi : Llompat ke suatu alamat tertentu berjarak maksimum 2K Deskripsi : Instruksi ini dengan tanpa persyaratan apapun akan melompat ke suatu

alamat yang terletak pada lokasi yang ditunjuk oleh suatu label. Alamat dibentuk oleh gabungan 5 bit tertinggi PC dengan byte kedua dari instruksi.

Contoh : Label JMPADR berada pada program memori dengan alamat 0123H.

Instruksi berikut (terletak di alamat 0345H) : AJMP JMPADR akan menyebabkan PC diisi dengan nilai 0123H.

5.3.2. Long Jump (Pencabangan berjangkuan 64 Kilo).

Sintaks : LJMP addr16 Fungsi : Lompat ke suatu alamat tertentu berjarak maksimum 64K Deskripsi : Instruksi ini dengan tanpa persyaratan apapun akan melompat ke suatu

alamat yang terletak pada lokasi yang ditunjuk oleh suatu label. Alamat dibentuk oleh gabungan 2 byte register PC dengan 1 byte byte kedua dan ketiga dari instruksi ini. Tidak ada flag yang diberubah oleh instruksi ini.

Contoh : Label JMPADR berada pada program memori dengan alamat 1234H.

Instruksi berikut (terletak di alamat 0345H) : LJMP JMPADR akan menyebabkan PC diisi dengan nilai 1234H.

5.3.3. Short Jump (Pencabangan berjangkuan 128 Byte).

Sintaks : SJMP rel Fungsi : Lompat ke suatu alamat tertentu berjarak maksimum 128 byte. Deskripsi : Instruksi ini dengan tanpa persyaratan apapun akan melompat ke suatu

alamat yang terletak pada lokasi yang ditunjuk oleh suatu label. Jarak lompatan maksimal adalah 128 byte. Tidak ada flag yang diberubah oleh instruksi ini.

Page 37: Modul+Microcontroller+%28C.O.M.I.C%29

Contoh : Label RELADR berada pada program memori dengan alamat 0123H. Instruksi berikut (terletak di alamat 100H) : SJMP RELADR

akan menyebabkan PC diisi dengan nilai 0123H. 5.4.Lompat bersyarat.

5.4.1. Lompat jika Akumulator = 0.

Sintaks : JZ rel Fungsi : Lompat ke suatu alamat tertentu jika isi register A=0. Deskripsi : Jika seluruh bit di dalam register Akumulator adalah ‘0’, instruksi JZ

membuat program melompat ke suatu alamat yang ditunjuk oleh Label rel. Namun jika Akumulator tidak sama dengan 0, maka program akan melanjutkan instruksi berikutnya dibawah instruksi ini.

Contoh : Register Akumulator berisi 01H. Maka Instruksi berikut secara berurutan : JZ LABEL1 DEC A JZ LABEL2 akan merubah isi register A menjadi 00H dan menyebabkan program

melanjutkan mengeksekusi instruksi yang ditunjuk oleh LABEL2.

5.4.2. Lompat jika Akumulator tidak 0.

Sintaks : JNZ rel Fungsi : Lompat ke suatu alamat tertentu jika isi register A <> 0. Deskripsi : Jika seluruh bit di dalam register Akumulator tidak sama dengan 0,

instruksi JNZ membuat program melompat ke suatu alamat yang ditunjuk oleh Label rel. Namun jika Akumulator sama dengan 0, maka program akan melanjutkan instruksi berikutnya dibawah instruksi ini.

Contoh : Register Akumulator berisi 00H. Maka Instruksi berikut secara berurutan : JNZ LABEL1 INC A JNZ LABEL2 akan merubah isi register A menjadi 01H dan menyebabkan program

melanjutkan mengeksekusi instruksi yang ditunjuk oleh LABEL2.

5.4.3. Kurangi satu dan lompat jika <> 0.

Sintaks : DJNZ <byte>, <rel-addr> Fungsi : Kurangi satu isi suatu register dan lompat ke suatu alamat tertentu jika isi

register A <> 0. Deskripsi : DJNZ mengurangi satu suatu alamat dan melompat ke alamat lain yang

ditunjuk oleh operand kedua jika hasil pengurangan satu tersebut belum mencapai nilai nol (zero). Bila suatu nilai yang dikurangi satu itu adalah 00H, maka akan menjadi 0FFH. Tidak ada flag yang dipengaruhi oleh

Page 38: Modul+Microcontroller+%28C.O.M.I.C%29

instruksi ini. Lokasi yang isinya dikurangi satu bisa berupa register atau berupa byte pengalamatan langsung.

Contoh : Lokasi RAM internal beralamat 40H, 50H dan 60H menyimpan data 01H,

70H dan 15H. Maka Instruksi berikut secara berurutan : DJNZ 40H, LABEL1 DJNZ 50H, LABEL2 DJNZ 60H, LABEL3 menyebabkan program melompat ke instruksi yang berada pada LABEL2

dimana lokasi RAM 40H, 50H dan 60H berubah menjadi 00H, 6FH dan 15H. Baris pertama instruksi diatas tidak melompat ke LABEL1 disebabkan hasil pengurangan satu telah mencapai nol.

Instruksi DJNZ membuat eksekusi looping program menjadi sederhana

yang umumnya untuk membentuk waktu tunda (time delay). Perhatikan urutan instruksi dibawah ini :

MOV R2, #8 TOGGLE CPL P1.7 DJNZ R2, TOGGLE Tiga baris instruksi diatas akan mengkomplemen (toggle) port satu bit 7

(P1.7) sebanyak delapan kali dan sekaligus menghasilkan 4 pulsa output. Tiap pulsa membutuhkan 3 siklus mesin (2 siklus untuk DJNZ dan 1 siklus untuk CPL)

Varian : DJNZ Rn, rel DJNZ direct, rel

5.4.4. Lompat jika hasil perbandingan tidak sama.

Sintaks : CJNE <dest-byte>,<source-byte>, rel Fungsi : Membandingkan 2 operand dan lompat jika tidak sama. Deskripsi : CJNE membandingkan 2 operand dan melompat jika kedua nilai operand

tersebut tidak sama. Alamat pencabangan ditunjuk oleh operand ketiga (rel). Flag carry diset jika operand ke-1 lebih ‘<’ (lebih kecil) daripada operand ke-2. Dan flag carry tidak akan diset bila kedua operand adalah ‘=’ atau ‘>’. Isi dari kedua operand tidak berubah oleh instruksi ini. Dua operand pertama menyebabkan adanya 4 kombinasi mode pengalamatan.

Contoh : Diasumsikan register A sedang menyimpan data 34H dan R7 menyimpan 56H. Lihat instruksi-instruksi dibawah ini :

CJNE R7, #60H, NOT_EQ ….. ……. ;R7=60H NOT_EQ JC REQ_LOW ;Jika R7<60H ….. ……. ;R7>60H Baris pertama instruksi diatas akan membuat bit C=1 dan program

melompat ke instruksi yang diberi label NOT_EQ. Dengan menguji flag carry, instruksi ini akan menentukan kondisi R7 apakah lebih besar atau

Page 39: Modul+Microcontroller+%28C.O.M.I.C%29

lebih kecil dari 60H. Jika lebih kecil, maka program melompat ke label REQ_LOW. Jika lebih besar, program akan melanjutkan eksekusi di baris berikutnya.

Varian : CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE @Ri, #data, rel 5.5.Lompat dengan pengalamatan tidak langsung.

Sintaks : JMP @A+DPTR Fungsi : Melompat ke suatu alamat yang ditunjuk oleh operand. Deskripsi : Instruksi ini menambahkan 8-bit isi register A dengan 16 bit data pointer

dan mengisi hasil penjumlahan itu ke dalam register PC. Hasil penjumlahan itu berguna untuk mengetahui pada Label mana program akan melompat. Isi register A dan DPTR tidak berubah oleh eksekusi instruksi ini. Begitu pula flag carry, juga tidak dipengaruhi oleh instruksi ini.

Contoh : Suatu nilai di dalam Akumulator berubah dari 0 hingga 6. Instruksi berikut menyebabkan program melompat ke satu dari empat instruksi AJMP. Keempat instruksi AJMP berada di dalam tabel yang di mulai pada label bernama JMP_TBL.

MOV DPTR, #JMP_TBL JMP @A+DPTR JMP_TBL: AJMP LABEL0 AJMP LABEL1 AJMP LABEL2 AJMP LABEL3 Jika A=04H ketika memulai urutan instruksi diatas, maka program akan

melompat pada LABEL2. Lompat ke LABEL0 terjadi bila A=0, lompat ke LABEL1 terjadi bila A=2, lompat ke LABEL 2 terjadi bila A=4 dan lompat ke LABEL3 terjadi bila A=6. Hal ini disebabkan karena instruksi AJMP adalah instruksi yang panjangnya 2 byte di dalam program memori.

5.6. No Operation.

Sintaks : NOP Fungsi : Memberikan waktu tunda (time delay) selama 1 siklus mesin. Deskripsi : Tidak ada register dan flag yang dipengaruhi oleh instruksi ini. Instruksi

ini berguna untuk memberikan waktu tunda yang sederhana kepada program.

Contoh : Pulsa output yang menuju ‘0’ pada bit ke-7 port 2 akan memiliki lebar

secara tepat sebesar 5 siklus mesin. Dengan instruksi sederhana

Page 40: Modul+Microcontroller+%28C.O.M.I.C%29

SETB/CLR urutan program dibawah ini menghasilkan satu pulsa, sehingga 4 instruksi NOP harus disisipkan untuk dapat menghasilkan 5 siklus mesin.

CLR P2.7 NOP NOP NOP NOP SETB P2.7 6. END

Instruksi assembler direktif END digunakan sebagai tanda bahwa tidak ada lagi program assembly yang perlu di-assembled.

---oOo ---

Page 41: Modul+Microcontroller+%28C.O.M.I.C%29

BAB 3 MEMULAI MEMPROGRAM

I. Perangkat Modul Pelatihan.

Percobaan-percobaan yang akan dilakukan membutuhkan 3 modul yang dirangkai menjadi satu diatas papan acrylic. Lihat gambar dibawah.

Gambar 1 Papan Percobaan

1 2 3

4 5 6

7 8 9

0* #

1 2 3 4 5 6 7 8

ON

1

2

3

4

5

6

7

8

KEYPAD

PUSHBUTTON

DIP-SW

PWR

+

PWR

+

DESIMAL

LED 7-SEGMENPWR

+

AT89C51

PORT 1 PORT 3PWR

VCC

MA

X232

RS232

GND

PORT 0 PORT 2

LSB MSB

0 7 7 0

0 7 0 7

ABCDS1S2S3S4

74240

L1L2

L3L4

L5

L6L7L8

7447 POWER SUPPLY

PIN-1

SG1SG2SG3SG4

Page 42: Modul+Microcontroller+%28C.O.M.I.C%29

1. Modul Kontroler. Seperti sudah dibahas sedikit pada sessi-1, bahwa diperlukan minimal 2 rangkaian dasar pada modul kontrolernya yaitu rangkaian POR dan rangkaian On-chip Oscillator. Modul ini terletak di tengah, diantara modul peraga dan modul input. Lihat gambar 1. Modul ini dibuat universal dengan cara mengeluarkan seluruh port melalui suatu konektor. Melalui 4 buah port inilah, berbagai peralatan input dan output dapat dihubungkan. Terlihat pada gambar 2 dibawah ini, ada dua rangkaian tambahan selain rangkaian POR dan On-chip Oscillator. Yaitu berupa chip interface TTL-RS232 dan rangkaian interface speaker. Dg adanya rangkaian interface TTL-RS232 maka modul ini dapat dihubungkan ke peralatan PC (Personal Computer). Dan dengan adanya rangkaian

interface speaker, dapat mensimulasikan bagaimana sebuah mikrokontroler dapat memainkan sebuah lagu.

Gambar 2 Blok diagram rangkaian modul kontroler

2. Modul input. Modul input berisi 3 macam saklar/switch yang berfungsi untuk mensimulasikan pemasukan data ke dalam mikrokontroler AT89C51. Ketiga macam saklar tersebut adalah Push button, Keypad dan DIP-Switch.

Resistor Pull-up dan Pull-down.

AT89C51

XTAL2

XTAL1

POR

ON-CHIPOSCILLATOR

RST

INTERFACETTL - RS232 RX

TXPC

PORT-0

PORT-1

PORT-2

PORT-3

KonektorPort 0

KonektorPort 2

KonektorPort 1

KonektorPort 3

Speaker

P2.0

Page 43: Modul+Microcontroller+%28C.O.M.I.C%29

Gambar 3

(i) Resistor Pull-up

(ii) Resistor Pull-down

Prinsip pemasukan data ke dalam mikrokontroler dan sistem digital lainnya adalah dengan menggunakan suatu resistor yang dikenal sebagai resistor pull-up dan resistor pull-down. Besarnya nilai resistansi pada resistor pull-up dan pull-down berkisar antara 4K7 hingga 10K untuk tegangan VCC sebesar 5 volt, tergantung kepada besarnya arus yang diinginkan untuk mengalir melewati resistor pull-up/pull-down tersebut.

Pada penggunaan resistor pull-up, switch/saklar dalam kondisi off (terbuka) akan memberikan logika ‘1’ kepada sistem digital. Hal ini terjadi karena pada saat switch off, mengalir arus dari VCC masuk ke sistem digital melewati resistor pull-up. Pada kondisi on (tertutup) maka sistem digital mendapat input logika ‘0’ karena switch/saklar langsung terhubung ke ground tanpa melalui resistor apapun.

Pada penggunaan resistor pull-down terjadi sebaliknya. Pada kondisi switch/saklar off (terbuka) maka sistem digital mendapat input logika ‘0’ karena terhubung ke ground melalui resistor pull-down. Dan pada kondisi on (tertutup), sistem digital mendapat input logika ‘1’ karena langsung terhubung ke VCC (dalam hal ini tegangan +5 volt) tanpa melalui resistor apapun.

ResistorPull-down

VCC

SISTEMDIGITAL

Switch

( ii )Resistor Pull-down

ResistorPull-up

VCC

SISTEMDIGITAL

Switch

( i )Resistor Pull-up

Page 44: Modul+Microcontroller+%28C.O.M.I.C%29

Saklar Push button dan Dip-Switch.

Pada modul input digunakan prinsip resistor pull-up karena pada setiap port (kecuali Port-0) pada mikrokontroler AT89C51 telah terdapat resistor pull-up internal di dalam chip mikrokontroler AT89C51 sebesar 4K7. Dengan demikian maka rangkaian modul input untuk saklar push-button dan DIP-Switch adalah sebagai berikut :

Gambar 4

Rangkaian saklar Push-button dan DIP-switch

Dari gambar diatas terlihat bahwa kedua rangkaian untuk saklar push-button maupun DIP-Switch sama persis. Yang membedakannya hanya nama dari konektornya. Untuk saklar push-button konektor yang terhubung kepadanya dinamakan konektor PUSH-BUTTON. Sedangkan untuk saklar DIP-Switch, konektornya dinamakan konektor DIP-SW.

Penggunaan saklar push-button maupun dip-switch berfungsi untuk mensimulasikan pemasukan data ke dalam mikrokontroler AT89C51. Ada suatu instruksi pada AT89C51 yang dapat mengalamati data dalam ukuran ‘bit’. Dengan demikian dapat dilakukan suatu simulasi pemasukan data baik dalam ukuran 1 byte data maupun 1 bit data. Data 1 bit dapat berupa 1 titik sensor, 1 buah level switch, dsb.

Terdapat 1 macam saklar lagi yang terdapat pada modul input, yaitu keypad. Berbeda dengan saklar push button dan dip-switch yang bersifat independen antara satu saklar dengan saklar lain, setiap switch pada keypad tidak independen. Dalam arti bahwa saklar-saklar yang tersusun pada keypad saling terhubung secara matrik (baris dan kolom).

Keypad. Keypad adalah salah satu dari sekian banyak jenis saklar/switch yang ada di pasar. Berbeda dengan push button atau dip-switch, masing-masing saklar yang terdapat pada keypad saling terhubung secara matrik (disusun berdasarkan baris dan kolom). Ada

SW1

SW2

SW3

SW4

SW5

SW6

SW7

SW8

KonektorDIP-SW

S1

S2

S3

S4

S5

S6

S7

S8

KonektorPush Button

( i )Rangkaian Saklar

Push Button

( ii )Rangkaian Saklar

DIP-Switch

Page 45: Modul+Microcontroller+%28C.O.M.I.C%29

dua macam keypad yang tersedia di pasar, yaitu keypad 4x3 dan keypad 4x4. Pada modul input ini digunakan jenis keypad 4x3. Lihat gambar 5 dibawah ini.

Gambar 5

(i) Rangkaian dalam keypad 4x3 (ii) Koneksi Keypad 4x3 ke Port 1 pada modul percobaan

Gambar (i) memperlihatkan bagaimana 12 switch saling dihubungkan menjadi susunan 4 baris dan 3 kolom. Apabila switch ‘1’ ditekan maka pin B1 dan C1 akan saling terhubung dan bila switch ‘4’ ditekan maka pin B2 dan C1 akan saling terhubung. Begitu seterusnya, pin Baris dan pin Kolom akan saling terhubung bila switch pada persilangan diatasnya ditekan.

Gambar (ii) memperlihatkan bentuk fisik keypad 4x3 beserta susunan pin yang tersedia padanya. Terdapat 7 pin pada keypad 4x3 yang mewakili 4 buah baris dan 3 buah kolom, ditambah 1 pin yang bernama common. Pin common adalah pin yang mempunyai koneksi kepada 12 switch yang ada. Dengan ditekannya salah satu dari 12 switch yang tersedia, maka pin common ikut terhubung kepada baris dan kolom tempat dimana switch tersebut berada. Hal ini sangat berguna untuk mempermudah membuat program dimana mikrokontroler harus dapat membedakan switch mana yang ditekan tanpa melakukan proses scanning. Terlihat pada gambar (ii) diatas bahwa pin common terhubung ke ground. Dan secara internal di dalam AT89C51 setiap bit pada port 1 terhubung secara pull-up melalui suatu resistor sebesar 4K7. Dengan demikian bila ada switch yang ditekan akan memberikan nilai baris dan kolom yang berlogika ‘0’ pada posisi dimana switch tersebut ditekan. Baris dan kolom lainnya akan berlogika ‘1’ (karena di pull-up ke positif catu daya). Lihat tabel 1 dibawah ini.

Tabel 1

Pola biner penekanan switch pada keypad

1 2 3

4 5 6

7 8 9

0* #

C1 C2 C3 B1 B2 B3 B4 COM

( ii )

0 1 2 3 4 5 6PORT 1

GND

1 2 3

4 5 6

987

* 0 #

B1

B2

B3

B4

C1 C2 C3

( i )

Page 46: Modul+Microcontroller+%28C.O.M.I.C%29

Switch yang

ditekan

DATA PADA PORT 1

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1 1 1 1 1 0 1 1 0 2 1 1 1 1 0 1 0 1 3 1 1 1 1 0 0 1 1 4 1 1 1 0 1 1 1 0 5 1 1 1 0 1 1 0 1 6 1 1 1 0 1 0 1 1 7 1 1 0 1 1 1 1 0 8 1 1 0 1 1 1 0 1 9 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 * 1 0 1 1 1 1 0 1 # 1 0 1 1 1 0 1 1

Dengan melakukan pembandingan bit yang masuk pada port 1, maka mikrokontroler dapat mengenali tombol/switch mana yang ditekan. Lalu hasil pengenalan tersebut diolah sesuai dengan kebutuhan sistem yang diinginkan.

Gambar 6

Switch bounching

Hal yang perlu diperhatikan pada saat pendeteksian saklar atau switch adalah terjadinya apa yang dikenal sebagai switch bounching (getaran saklar). Getaran saklar adalah suatu kondisi dimana terjadi suatu pulsa liar yang dapat mengakibatkan terjadinya kesalahan pembacaan data. Lihat gambar 6.

Pada tepi positif, getaran terjadi hingga mencapai level yang bukan lagi sebagai logika ‘1’. Sehingga mikrokontroler menganggap peralihan ini terdiri dari banyak pulsa. Padahal misalnya diharapkan hanya ada satu peralihan pulsa yaitu dari ‘0’ menuju ‘1’. Begitu juga pada tepi negatif, yaitu peralihan dari ‘1’ menuju ‘0’ dapat terjadi bounching yang tidak diharapkan.

Ada 2 cara untuk menghindari kesalahan pembacaan saklar akibat dari bounching ini, yaitu dengan menambahkan flip-flop RS pada setiap switch dan atau secara software. Secara software switch bounching dapat dihilangkan dengan memberi suatu delay minimal 20 mili detik sebelum status switch/saklar dibaca oleh mikrokontroler. Dengan

+5v

0v

2,4v

V

t

Page 47: Modul+Microcontroller+%28C.O.M.I.C%29

adanya delay tersebut diharapkan status logika sudah mencapai kondisi stabil, sehingga efek bounching tersebut dapat dihilangkan.

3. Modul Peraga (Output). Modul peraga berisi 2 macam rangkaian display yang berfungsi untuk mensimulasikan pengeluaran data dari mikrokontroler AT89C51. Kedua macam display tersebut adalah 8 buah LED (Light Emitting Diode) dan 4 display 7-segmen.

Delapan buah LED. Terdapat delapan buah LED yang independen. Masing-masing digerakkan oleh

suatu penyanggah (driver) inverting tiga keadaan (tri-state). Lihat gambar 7 dibawah ini :

Gambar 7

Rangkaian 8 buah LED

Terlihat pada gambar 7, bahwa setiap LED terhubung dengan resistor yang besarnya masing-masing 240 Ohm. Resistor ini berfungsi untuk membatasi arus yang diijinkan untuk mengalir melalui LED. LED akan menyala apabila input pada driver yang bersesuai mendapat logika ‘1’. Sebagai contoh apabila pin 17 IC 74240 mendapat logika ‘1’ maka LED L1 menyala. Dan apabila mendapat logika ‘0’ maka LED akan padam.

Susunan delapan buah LED mewakili 1 byte data yang dikirim oleh mikrokontroler AT89C51. Ada suatu instruksi pada AT89C51 yang dapat mengalamati data dalam ukuran ‘bit’. Dengan demikian dapat dilakukan suatu simulasi pengeluaran data baik dalam ukuran 1 byte data maupun 1 bit data. Data 1 bit dapat dianggap berupa penggerak kontak relay, penggerak katup solenoid, dsb.

Led 7-Segmen. Pada modul training terdapat display led yang bernama led 7-segmen. Dinamakan 7-segmen karena display tersebut terdiri atas 7 buah led, yang disusun sedemikian rupa sehingga mampu menampilkan angka dari 0 sampai dengan angka 9. Lihat gambar 8 dibawah ini.

L1 L2 L3 L4 L5 L6 L7 L8

3

5

7

9

12

14

16

18

17

15

13

11

8

6

4

2

19 110

VCC

VCC

20

74240

KonektorLED

Page 48: Modul+Microcontroller+%28C.O.M.I.C%29

Gambar 8

Led 7-Segmen

Dilihat dari cara menyusun 7 buah led, led 7 segmen dapat dibedakan menjadi 2 jenis yaitu common anoda dan common catoda. Disebut common anoda karena seluruh kaki anoda pada setiap led disatukan menjadi satu kaki dan pada penggunaannya harus dihubungkan kepada positif catu daya. Lihat gambar (i). Sedangkan apabila seluruh kaki katoda pada setiap led disatukan maka led 7-segmen tersebut dikatakan jenis common catoda. Pada saat digunakan, kaki common catoda ini harus dihubungkan ke ground dari catu daya. Lihat gambar (ii).

Posisi led ‘a’ sampai dengan led ‘g’ diletakkan sedemikian rupa seperti tampak pada gambar (iii). Apabila diinginkan terperaga angka 1, maka led ‘b’ dan ‘c’ yang harus dinyalakan. Apabila diinginkan terperaga angka 2, maka led ‘a’, ‘b’, ‘e’, ‘d’ dan ‘g’.

Led 7-segmen dapat langsung digerakkan oleh port AT89C51 melalui suatu pembatas arus (resistor) yang diletakkan secara seri pada setiap segmen. Nilai resistor tersebut berkisar antara 180 ohm hingga 300 ohm, tergantung dengan kecerahan yang diinginkan. Apabila digerakkan langsung oleh port, maka secara software kita harus mendefinisikan pola penyalaan led yang diinginkan ke dalam suatu tabel. Dimisalkan

segmen ‘a’ terhubung ke port 2.0,

segmen ‘b’ terhubung ke port 2.1,

segmen ‘c’ terhubung ke port 2.2,

segmen ‘d’ terhubung ke port 2.3,

segmen ‘e’ terhubung ke port 2.4,

segmen ‘f’ terhubung ke port 2.5,

segmen ‘g’ terhubung ke port 2.6,

Maka secara software dibuat suatu tabel yang berisi pola penyalaan seperti yang diinginkan. Adapun algoritma tabel tersebut adalah sebagai berikut :

Apabila angka ‘1’ terperaga � maka Port 2 = 0000 0110

a b c d e f g

a

b

cd

e

f g

a b c d e f g

+5

(i)

(ii) (iii)

Page 49: Modul+Microcontroller+%28C.O.M.I.C%29

Apabila angka ‘2’ terperaga � maka Port 2 = 0101 1011

Apabila angka ‘3’ terperaga � maka Port 2 = 0100 1111

Apabila angka ‘4’ terperaga � maka Port 2 = 0110 0110

dan seterusnya.

Untuk mempermudah menampilkan angka pada led 7-segmen dan sekaligus dapat menghemat penggunaan port, maka perlu ditambahkan chip TTL 7447 yang berfungsi sebagai dekoder BCD (Binary Code Decimal) To 7-Segment. Chip ini memiliki 4 jalan masukan BCD yaitu A,B,C,D ; 3 buah pin kendali (LT, BI, RBI) dan 7 buah pin yang langsung terhubung pada setiap katoda led 7-segmen. Lihat gambar 9 dibawah ini.

Gambar 9

Decoder BCD To 7-Segmen

Dari gambar diatas terlihat bahwa pin data yang dibutuhkan hanya 4 bit untuk dapat mendisplaykan angka-angka. Ke-empat pin BCD chip 7447 dapat langsung dihubungkan ke salah satu port pada AT89C51. Angka yang ingin ditampilkan pada led 7-segmen dikirim secara software oleh AT89C51 melalui port yang tersedia. Data biner yang dikirim sesuai dengan angka yang akan ditampilkan. Sebagai contoh apabila ingin ditampilkan angka ‘3’ maka dikirim data biner xxxx 0011 melalui Port 2 (apabila P2.0 s/d P2.3 dihubungkan ke pin A s/d D pada chip 7447).

Tiga buah pin kendali, yaitu LT, BI dan RBI dapat diabaikan dengan cara menghubungkan ketiga pin tersebut ke positif catu daya. Pembahasan ketiga pin dapat anda baca sendiri pada buku-buku data IC-TTL yang banyak tersedia dipasaran.

Ada kalanya seorang desainer membutuhkan lebih dari satu buah led 7-segmen sebagai display dari alat yang dirancangnya. Dengan melihat deskripsi yang telah dijelaskan diatas, maka dapat dipilih satu dari dua cara dibawah ini :

1. Memasang 1 buah chip 7447 untuk setiap led 7-segmen. Dengan demikian apabila dibutuhkan 10 buah peraga 7-segmen, maka akan dibutuhkan sebanyak 10 buah chip 7447.

BCD TO 7-SEGMENTTL 7447

abcdegh

A B C D

LT

BI

RBI

+5+5

a

b

c

d

e

fg

VCC

GND

Page 50: Modul+Microcontroller+%28C.O.M.I.C%29

2. Cukup memasang 1 buah chip 7447 untuk berapapun banyaknya led 7-segmen yang dibutuhkan. Apabila dibutuhkan 10 buah peraga 7-segmen, maka cukup 1 buah chip 7447 saja yang dipakai.

Pada cara pertama diatas, jelas dibutuhkan biaya yang besar untuk dapat menggerakkan 10 buah led 7-segmen. Disamping itu, semakin banyak jumlah chip yang digunakan dalam suatu sistem, maka konsumsi daya sistem tersebut semakin besar. Dengan kata lain penggunaan 10 chip akan memboroskan energi yang terpakai pada sistem tersebut.

Selain kerugian diatas, terdapat kerugian lainnya yaitu dibutuhkan jumlah port pada mikrokontroler sebanyak : 4 bit x 10 peraga = 40 bit. Suatu jumlah port yang tidak mungkin tersedia pada mikrokontroler AT89C51.

Mari kita lihat cara kedua. Pada cara kedua cukup digunakan 1 buah chip 7447 untuk sekian banyak 7-segmen yang diinginkan. Bagaimana hal tersebut dapat dilakukan ?

Jawaban dari pertanyaan diatas adalah karena digunakan metode yang dinamakan scanning (penyapuan). Setiap 7-segmen secara bergantian dinyalakan oleh mikrokontroler. Hanya ada satu display saja yang menyala pada waktu tertentu untuk menampilkan data yang diinginkan. Lihat gambar 10.

Dimisalkan data yang akan ditampilkan adalah “9765”. Maka pada langkah pertama mikrokontroler akan menyalakan display pertama (SG1) dan mematikan display lain dengan mengirim data biner 1110 pada P2.7 s/d P2.4. Lalu data biner 0101 (desimal 5) dikirim melalui P2.3 s/d P2.0 ke chip TTL 7447 (sebagai data input BCD) sehingga display SG1 akan mendisplay angka “5”. Langkah kedua mikrokontroler menyalakan SG2 dan mematikan display lain dengan mengirim data biner 1101 pada P2.7 s/d P2.4. Lalu data biner 0110 (desimal 6) dikirim melalui P2.3 s/d P2.0 ke chip TTL 7447 sehingga display SG2 akan mendisplaykan angka “6”.

Gambar 10

Scanning Pada Display 7-segmen

AT89C51

P2.0P2.1P2.2P2.3

P2.4

P2.5

P2.6

P2.7

P1

P3

+5 +5 +5 +5

P0

BCD TO 7-SEGMENTTL 7447

abcdegh

SG1SG2SG3SG4

A

B

CD

Page 51: Modul+Microcontroller+%28C.O.M.I.C%29

Demikian seterusnya mikrokontroler menggilir (scanning) penyalaan display dengan data BCD tertentu. Karena mikrokontroler melakukan proses scanning ini dalam waktu yang cepat, maka proses mati dan padamnya display tidak terlihat oleh mata.

Adapun rincian pola biner yang harus dikirim (melalui port 2 ) bila angka 9765 ingin ditampilkan pada display 7-segmen dapat dilihat pada tabel berikut :

Tabel 2

Pola biner untuk menampilkan angka ‘9765’

Angka Terperag

a

DATA PADA PORT 2

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 9 (MSB) 0 1 1 1 1 0 0 1

7 1 0 1 1 0 1 1 1 6 1 1 0 1 0 1 1 0

5 (LSB) 1 1 1 0 0 1 0 1

4. Prosedur Percobaan. Untuk menghubungkan antara dua modul dibutuhkan kabel penghubung. Total

terdapat 4 buah kabel penghubung berupa kabel pita berinti 8 dan 2 buah kabel penghubung berinti 2. Kabel penghubung berinti 2 merupakan kabel catu daya yang menyalurkan tegangan catu dari modul kontroler kepada modul input dan modul display.

Perlu diperhatikan pada saat melakukan suatu percobaan, petunjuk mengenai hubungan antara satu konektor dengan konektor lain. Adakalanya hubungan konektor dipindahkan ke konektor lainnya. Bacalah baik-baik langkah-langkah percobaan.

Adapun beberapa hal yang perlu diperhatikan saat menggunakan modul praktikum adalah :

1. Matikan power supply modul praktikum saat memasang atau mencabut chip AT89C51 ke/dari soketnya.

2. Matikan juga power supply saat memindahkan kabel penghubung dari satu konektor ke konektor lainnya.

3. Hati-hati jangan sampai terbalik saat memasang chip AT89C51 ke soketnya pada modul kontroler karena akan menyebabkan kerusakan pada chip. Pin satu terletak di bawah. Lihat gambar 1.

4. Hati-hatilah saat mencabut dan memasang chip ke soketnya pada sub-modul kontroler karena dapat menyebabkan pin pada chip bengkok/patah.

Page 52: Modul+Microcontroller+%28C.O.M.I.C%29

II. Penulisan Program dan Compiling.

Program ditulis dengan menggunakan aplikasi yang dimiliki oleh Windows yaitu Notepad atau Wordpad. Dapat juga digunakan editor teks lainnya seperti editor pascal dan basic. Namun dalam percobaan-percobaan yang akan dilakukan kita menggunakan Notepad.

Program yang ditulis harus mengikuti aturan-aturan dan sintaks yang disyaratkan oleh suatu compiler. Compiler adalah suatu program yang berfungsi merubah bahasa asembler menjadi bahasa mesin. Proses merubah bahasa asembler menjadi bahasa mesin disebut sebagai kompilasi. Program Compiler yang digunakan adalah 51XASM.EXE. Tampilan program 51XASM adalah sebagai berikut :

Gambar 11

Tampilan Compiler 51XASM

Aturan dan Sintaks Penulisan Program.

Untuk membuat sebuah program, anda hanya harus mengikuti dua peraturan: 1. LABEL harus dimulai di column SATU(1) 2. Setiap OPERAND/VARIABLE harus dipisahkan dari operand/variable lainnya dengan

sedikitnya SATU(1) SPACE.

Untuk memberikan COMMENT/KOMENTAR diprogram anda, anda harus mendahului COMMENT/KOMENTAR anda dengan huruf ; Contoh: ; contoh program, LABEL LOOP dimulai di co lumn satu(1) ; line ini and line sebelumnya adalah COMME NT LOOP: MOV A, R0 ; A = R0 MOV A, R1 ; A = R1 dst.... Compiler 51XASM yang digunakan mengenal dua macam tipe operands/variables: 1. Variable/operand tipe ANGKA/DIGIT

Page 53: Modul+Microcontroller+%28C.O.M.I.C%29

Tipe ini bisa dalam bentuk hexadecimal(base 16), decimal(base 10), atau binary (base 2). Compiler 51XASM membedakan dari berbagai macam format untuk tipe ANGKA/DIGIT berdasarkan huruf terakhir dari operand ini. Contoh:

01010011B - Binary, = 53 Hexadecimal = 8 3 Decimal 53H - Hexadecimal, = 01010011 Bina ry = 83 Dec. 83 - Decimal, = 53 Hexadecimal = 01010011 Bin.

Format angka HEXADECIMAL mempunyai komponen 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, dan F; kalau angka HEXADECIMAL anda dimulai dengan A, B, C, D, atau F, tambahkan angka 0 di depan angka anda. Tujuan langkah diatas adalah untuk membedakan tipe ANGKA/DIGIT dengan tipe lainnya. Contoh:

0AAH - Hexadecimal, = 10101010 Bina ry = 170 Dec. 0B5AH - Hexadecimal, = 101101011010 Binary = 2906

Untuk menspesifikasi angka hexadecimal, tambahkan huruf H di belakang; untuk menspesifikasi angka binary, tambahkan huruf B dibelakang angka anda; untuk menspesifikasi angka decimal tidak diperlukan tambahan apapun(default).

Untuk memspecifikasi angka NEGATIVE tambahkan huruf – didepan angka anda;

contoh: -55 - Negative 55 Decimal, = C9H = 11001001B -0AAH - Negative AA Hex, = 56H = 010 10110B

Angka NEGATIVE anda akan disimpan dalam bentuk/format yang standard, yaitu dalam format TWO'S COMPLEMENT. Semua definisi/features 51XASM mengikuti standard industri; jadi program assembly anda bisa di-assembled oleh CROSS ASSEMBLER yang lain yang juga industri standard.

2. Variable/operand tipe SYMBOLIC

Dengan adanya tipe ini, desain program assembly akan relatif lebih mudah; huruf pertama dari variable/operand tipe ini harus dimulai oleh huruf alphabet(a .. z atau A .. Z). Contoh:

PORT_SATU STATUS_KONDISI TRANSMIT_BIT PORT_DUA REGISTER_DATA dll.....

Pemakaian variable/operand tipe diatas itu tergantung dari faktor-faktor lainnya; Variable tipe diatas bisa dipakai sebagai definisi untuk ADDRESS, definisi untuk REGISTERS, definisi untuk RAM, definisi untuk PORT, atau definisi untuk BIT operand; tipe diatas bisa juga dipakai sebagai definisi untuk CONSTANT. Hal lain yang perlu diperhatikan adalah ada beberapa symbolic operand/variable yang telah dipakai/ditetapkan sebagai symbolic operand/variable yang standard. Jadi tidak boleh lagi dipakai oleh anda sewaktu anda mendesain program assembly anda.

Prosedur Compiling.

Page 54: Modul+Microcontroller+%28C.O.M.I.C%29

Program asembler yang ditulis dengan Notepad harus di-save dengan extension *.H51. Program tidak akan bisa dicompile bila tidak di-save dengan extension H51. Lalu ikuti prosedur kompilasi sebagai berikut :

1. Aktifkan program 51XASM dengan cara double click. 2. Tulislah nama file yang akan dicompile pada baris terbawah (misalnya coba.h51) 3. Perhatikan pada saat proses kompilasi sedang dilakukan, terbentuk 2 file baru yang

masing-masing berextension *.PRN dan *.HEX. File dengan extension PRN adalah file report untuk mencari letak kesalahan aturan dan sintaks program. Sedangkan File dengan extension HEX adalah file yang berisi bahasa mesin dengan standard format INTEL yang akan kita download ke dalam chip mikrokontroler.

4. Diakhir proses kompilasi, apakah ada pesan error yang terjadi akibat adanya kesalahan sintaks penulisan program. Jika tidak ada pesan error, langsung menuju langkah 6.

5. Jika ada pesan error, buka file yang berextension *.PRN (coba.prn). Gunakan fasilitas find yang terdapat pada menu search program Notepad. Tulis kata kunci “e r r” untuk mencari dengan cepat di baris mana letak terjadinya kesalahan aturan dan sintaks penulisan program. Lakukan perbaikan, dan simpan kembali. Lakukan kembali langkah 1.

6. Program bahasa mesin (coba.hex) siap untuk di-download atau ditulis ke dalam chip mikrokontroler dengan menggunakan alat yang bernama programmer atau writer.

Prosedur download/writing.

Program yang sudah dicompile dan bersih dari error siap untuk ditulis ke dalam chip mikrokontroler. Programmer yang digunakan adalah ALL-11 Programmer

--- oOo ---

Page 55: Modul+Microcontroller+%28C.O.M.I.C%29

BAB 4

APLIKASI KEYPAD DAN 7 SEGMEN

Pada sessi memulai program sudah dibahas berbagai teori mengenai Keypad dan

Led 7-segmen. Mulai saatnya kita mencoba membuat suatu program sederhana yang menggunakan kedua komponen ini.

1. Program Menampilkan Angka ‘9765’ Pada Led 7-Segmen. 1.1. Penjelasan Program. Program ini bertujuan untuk memahami konsep bagaimana menampilkan suatu angka pada Led 7-segmen dengan proses scanning. Teori proses scanning pada Led 7-segmen dapat dilihat pada materi sessi memulai program, pasal Led 7-segmen. Port yang digunakan untuk menyalurkan pola biner ke modul peraga adalah port 2. Untuk dapat menampilkan angka ‘9765’ pada Led 7-segmen maka pola biner yang harus dikirimkan oleh mikrokontroler melalui port 2 adalah sebagai berikut (lihat tabel 2 sessi memulai program) :

Angka P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

9 = 0 1 1 1 1 0 0 1 7 = 1 0 1 1 0 1 1 1 6 = 1 1 0 1 0 1 1 0 5 = 1 1 1 0 0 1 0 1 Berhubung ada 4 digit angka yang akan diperagakan, maka kita perlu membuat suatu tempat penampungan data (buffer) di dalam RAM dengan menggunakan instruksi assembler direktif EQU. Ada 4 buffer yang kita deklarasikan yaitu BUFF_1, BUFF_2, BUFF_3, BUFF_4.

BUFF_1 EQU 20H BUFF_2 EQU 21H BUFF_3 EQU 22H BUFF_4 EQU 23H

Selanjutnya adalah mengisi keempat buffer diatas dengan angka yang akan ditampilkan. MSB (Most Significant Bit) berada pada buffer BUFF_4 dan LSB (Least Significant Bit) pada bufffer BUFF_1. Lihat program Utama dibawah ini.

MAIN MOV BUFF_1,#05H MOV BUFF_2,#06H MOV BUFF_3,#07H MOV BUFF_4,#09H CALL DISP JMP MAIN

Page 56: Modul+Microcontroller+%28C.O.M.I.C%29

Terlihat pada baris kelima cuplikan program diatas adanya instruksi untuk memanggil suatu subrutin yang bernama DISP. Lalu pada baris keenam, alur program kembali mengeksekusi baris pertama.

Langkah berikut adalah membuat subrutin yang bernama DISP yang berisi proses manipulasi bit agar sesuai dengan tabel 2 sessi memulai program.

DISP MOV A,BUFF_1 ANL A,#0FH ORL A,#0E0H MOV P2,A CALL DELAY100MILS ;----------------- MOV A,BUFF_2 ANL A,#0FH ORL A,#0D0H MOV P2,A CALL DELAY100MILS ;----------------- MOV A,BUFF_3 ANL A,#0FH ORL A,#0B0H MOV P2,A CALL DELAY100MILS ;----------------- MOV A,BUFF_4 ANL A,#0FH ORL A,#70H MOV P2,A CALL DELAY100MILS ;----------------- RET

Dari cuplikan subrutin diatas terlihat adanya 4 kelompok manipulasi data. Masing-masing kelompok memanipulasi data biner yang akan ditampilkan agar sesuai dengan tabel 2 sessi memulai program. Instruksi (ANL A,#0FH) b erfungsi untuk menghalangi (mask) 4 bit tertinggi. Dan instruksi berikutnya (ORL A,#0E0H) berfungsi untuk menyisipkan 4 bit tertinggi dengan bit ‘1110’ yaitu suatu bit scanning untuk menyalakan peraga 7-segmen pada posisi LSB.

1.2. Prosedur Percobaan.

a. Buka program 9765.h51 anda dg menggunakan program Notepad. b. Compile dan download program ke dalam chip AT89C51 c. Tancapkan chip pada kit praktikum saudara.

Page 57: Modul+Microcontroller+%28C.O.M.I.C%29

d. Hubungkan konektor PORT2 pada modul kontroler ke konektor 7-SEGMEN pada modul modul peraga.

e. Nyalakan power supply, dan amati hasil peragaan pada led 7-segmen. f. Mengapa masih terlihat proses scanning ? g. Lakukan modifikasi program yaitu pada setiap baris instruksi CALL

DELAY100MILS. Ubahlah menjadi CALL DELAY2MILS. Save dengan nama modif.h51.

h. Lakukan kembali prosedur b hingga prosedur e. i. Terlihat bahwa kini proses scanning sudah tidak terlihat lagi oleh mata. j. Lakukan kembali modifikasi yaitu di bagian program utama (MAIN). Rubahlah

data angka yang akan diperagakan ke 7-segmen. Dan lakukan juga kembali prosedur b hingga e. Amati, apa yang terlihat di led 7-segmen.

2. Program memasukkan data melalui keypad dan memperagakannya ke 7- segmen. 2.1. Penjelasan Program. Program ini bertujuan untuk memahami konsep sederhana bagaimana mendeteksi penekanan tombol pada keypad dan menampilkannya pada peraga 7-segmen. Teori mengenai keypad telah dibahas pada materi sessi memulai program, pasal tentang keypad. Port yang digunakan untuk membaca pola biner dari keypad adalah port 1. Seperti yang terlihat pada tabel 1 sessi 5 bahwa dengan menekan angka ‘1’ pada keypad akan memberikan konfigurasi bit 11110110B (0F6H), angka ‘2’ menghasilkan 11110101B (0F5H), dst. Oleh karena itu, diperlukan suatu subrutin untuk melakukan pengujian data yang dibaca oleh port 1 setiap kali tombol keypad ditekan. Bila data yang dibaca sesuai dengan yang diinginkan maka buffer BUFF_1 diisi data sesuai dengan angka yang akan diperagakan.

Adapun subrutin pembacaan keypad adalah sebagai berikut : CHECK_KEY: MOV A,P1 ;Baca data dari port 1 CJNE A,#0F6H,NXT_2 ;Cek tombol ‘1’ ditekan MOV BUFF_1,#0E1H ; BUFF_1 = 0E1H NXT_2 CJNE A,#0F5H,NXT_3 ;Cek tombol ‘2’ diteka n

MOV BUFF_1,#0E2H ; BUFF_1 = 0E2H NXT_3 CJNE A,#0F3H,NXT_4 ;Cek tombol ‘3’ diteka n MOV BUFF_1,#0E3H ; BUFF_1 = 0E3H NXT_4 CJNE A,#0EEH,NXT_5 ;Cek tombol ‘4’ diteka n MOV BUFF_1,#0E4H ; BUFF_1 = 0E4H NXT_5 CJNE A,#0EDH,NXT_6 ;Cek tombol ‘5’ diteka n

MOV BUFF_1,#0E5H ; BUFF_1 = 0E5H NXT_6 CJNE A,#0EBH,NXT_7 ;Cek tombol ‘6’ diteka n MOV BUFF_1,#0E6H ; BUFF_1 = 0E6H NXT_7 CJNE A,#0DEH,NXT_8 ;Cek tombol ‘7’ diteka n MOV BUFF_1,#0E7H ; BUFF_1 = 0E7H NXT_8 CJNE A,#0DDH,NXT_9 ;Cek tombol ‘8’ diteka n MOV BUFF_1,#0E8H ; BUFF_1 = 0E8H NXT_9 CJNE A,#0DBH,NXT_10 ;Cek tombol ‘9’ diteka n

Page 58: Modul+Microcontroller+%28C.O.M.I.C%29

MOV BUFF_1,#0E9H ; BUFF_1 = 0E9H NXT_10 CJNE A,#0BEH,NXT_11 ;Cek tombol ‘0’ diteka n MOV BUFF_1,#0EAH ; BUFF_1 = 0EAH NXT_11 CJNE A,#0BDH,NXT_12 ;Cek tombol ‘*’ diteka n MOV BUFF_1,#0E0H ; BUFF_1 = 0E0H NXT_12 CJNE A,#0BBH,LAST ;Cek tombol ‘#’ diteka n MOV BUFF_1,#0EBH ; BUFF_1 = 0EBH

LAST RET Langkah berikutnya adalah membuat program utama yang akan memanggil subrutin CHECK_KEY dan mentransfer isi BUFF_1 ke port 2 (port yang terhubung dengan peraga 7-segmen). Adapun program utama tersebut adalah sebagai berikut :

MAIN MOV P0,#00H ;Mematikan 8 buah LED MOV BUFF_1,#0EFH ;Mematikan 7-segmen

MOV P2, BUFF_1 ;Peragakan ke P2

ULANG CALL CHECK_KEY ;Membaca keypad MOV P2, BUFF_1 ;Peragakan ke P2 JMP ULANG ;

2.2. Prosedur Percobaan.

a. Buka program anda yang bernama Key7seg.h51 dg menggunakan program Notepad.

b. Compile dan download program ke dalam chip AT89C51 c. Tancapkan chip pada kit praktikum saudara. d. Hubungkan konektor PORT2 pada modul kontroler ke konektor 7-SEGMEN

pada modul modul peraga. Tancapkan pula kabel yang menghubungkan KEYPAD dengan PORT1.

e. Nyalakan power supply, tekan keypad dan amati hasil peragaan pada led 7-segmen.

3. Program memasukkan data melalui keypad dan menggeser data pada peraga 7-segmen. 3.1. Penjelasan Program. Program ini bertujuan untuk mencoba membuat program sederhana yang memasukkan data secara berurutan melalui keypad dan menggeser data yang terperaga pada peraga 7-segmen ke kiri. Program ini bermanfaat untuk aplikasi yang membutuhkan entry data secara berurutan melalui keypad dan memperagakannya ke peraga. Program yang akan dibuat ini merupakan modifikasi program kedua (Key7Seg.h51). Inti program ini terletak pada program utama dengan adanya suatu instruksi untuk memindahkan data dari suatu buffer ke buffer lainnya, dan memperagakannya ke peraga 7-segmen. Lihat cuplikan program utama dibawah ini : BUFF_1 EQU 20H BUFF_2 EQU 21H BUFF_3 EQU 22H BUFF_4 EQU 23H

Page 59: Modul+Microcontroller+%28C.O.M.I.C%29

FLAG EQU 24H NO_CHANGE BIT FLAG.0 MAIN MOV P0,#00H ;Mematikan 8 buah LED

MOV P2,#0EFH ;Mematikan 7-segmen

ULANG CALL DISP CALL CHECK_KEY ;Membaca keypad JNB NO_CHANGE,ULANG

MOV BUFF_4, BUFF_3 ;Pindahkan Buf 4 <- 3 MOV BUFF_3, BUFF_2 ;Pindahkan Buf 3 <- 2 MOV BUFF_2, BUFF_1 ;Pindahkan Buf 2 <- 1 MOV BUFF_1, A ;Pindahkan Buf 1 <- A

WAIT CALL DISP MOV A,P1 ;Baca kembali keypad

CJNE A,#0FFH,WAIT ;Apakah sudah dilepas ? CLR NO_CHANGE ;

JMP ULANG ;

Dari cuplikan program utama diatas terlihat ada 4 baris instruksi untuk menggeser data yang penekanan tombol keypad yang tersimpan di suatu buffer ke buffer lainnya. Terlihat bahwa data yang digeser pertama kali dimulai dari buffer MSB (BUFF_4 BUFF_3). Lalu setelah proses penggeseran selesai, dilakukan proses menampilkan data ke peraga 7-segmen.

Selain itu terdapat pula flag penanda untuk menandakan ada-tidak-nya tombol keypad yang ditekan. Flag penanda itu dideklarasikan dengan 2 baris instruksi :

FLAG EQU 24H NO_CHANGE BIT FLAG.0

Lalu pada program utama dan subrutin CHECK_CEK disisipkan instruksi untuk men-set dan meng-clear flag untuk memberi tanda bahwa ada/tidak tombol keypad yang ditekan. Bila ada tombol yang ditekan maka diprogram utama dilakukan proses penggeseran data di dalam buffer. Namun bila tidak ada tombol yang ditekan maka proses yang dilakukan hanyalah proses memperagakan data (CALL DISP) dan pembacaan keypad (CALL CHECK_CEK).

Hal lain yang perlu diperhatikan adalah perlunya memodifikasi program utama untuk menyisipkan instruksi sebelum instruksi JMP, yang berfungsi untuk mendeteksi lepasnya penekanan tombol pada keypad. Hal ini diperlukan agar program tidak ‘liar’ yang dengan cepat mengeksekusi baris demi baris seluruh program.

Adapun subrutin CHECK_KEY dapat dilihat dibawah ini. Sedangkan untuk subrutin DISP tidak ada yang perlu dimodifikasi.

CHECK_KEY: MOV A,P1 ;Baca data dari port 1 CJNE A,#0F6H,NXT_2 ;Cek tombol ‘1’ ditekan MOV A,#0E1H ; BUFF_1 = 0E1H

SETB NO_CHANGE

NXT_2 CJNE A,#0F5H,NXT_3 ;Cek tombol ‘2’ diteka n MOV A,#0E2H ; BUFF_1 = 0E2H SETB NO_CHANGE

NXT_3 CJNE A,#0F3H,NXT_4 ;Cek tombol ‘3’ diteka n

Page 60: Modul+Microcontroller+%28C.O.M.I.C%29

MOV A,#0E3H ; BUFF_1 = 0E3H SETB NO_CHANGE

NXT_4 CJNE A,#0EEH,NXT_5 ;Cek tombol ‘4’ diteka n MOV A,#0E4H ; BUFF_1 = 0E4H

SETB NO_CHANGE NXT_5 CJNE A,#0EDH,NXT_6 ;Cek tombol ‘5’ diteka n

MOV A,#0E5H ; BUFF_1 = 0E5H SETB NO_CHANGE

NXT_6 CJNE A,#0EBH,NXT_7 ;Cek tombol ‘6’ diteka n MOV A,#0E6H ; BUFF_1 = 0E6H

SETB NO_CHANGE NXT_7 CJNE A,#0DEH,NXT_8 ;Cek tombol ‘7’ diteka n MOV A,#0E7H ; BUFF_1 = 0E7H

SETB NO_CHANGE NXT_8 CJNE A,#0DDH,NXT_9 ;Cek tombol ‘8’ diteka n MOV A,#0E8H ; BUFF_1 = 0E8H

SETB NO_CHANGE NXT_9 CJNE A,#0DBH,NXT_10 ;Cek tombol ‘9’ diteka n MOV A,#0E9H ; BUFF_1 = 0E9H

SETB NO_CHANGE NXT_10 CJNE A,#0BEH,NXT_11 ;Cek tombol ‘0’ diteka n MOV A,#0EAH ; BUFF_1 = 0EAH

SETB NO_CHANGE NXT_11 CJNE A,#0BDH,NXT_12 ;Cek tombol ‘*’ diteka n MOV A,#0E0H ; BUFF_1 = 0E0H

SETB NO_CHANGE NXT_12 CJNE A,#0BBH,LAST ;Cek tombol ‘#’ diteka n MOV A,#0EBH ; BUFF_1 = 0EBH

SETB NO_CHANGE LAST RET

3.2. Prosedur Percobaan.

a. Buka program entry.h51 dg menggunakan program Notepad. b. Compile dan download program ke dalam chip AT89C51 c. Tancapkan chip pada kit praktikum saudara. d. Hubungkan konektor PORT2 pada modul kontroler ke konektor 7-SEGMEN

pada modul modul peraga. Tancapkan pula kabel yang menghubungkan KEYPAD dengan PORT1.

e. Nyalakan power supply, tekan keypad dan amati hasil peragaan pada led 7-segmen.

--- oOo ---

Page 61: Modul+Microcontroller+%28C.O.M.I.C%29