Anda di halaman 1dari 290

A.

LEMBAR TEORI

MIKROKONTROLER MCS-51

1
KEGIATAN BELAJAR 1

KONSEP DASAR MIKROKONTROLER

I. Tujuan Khusus Pembelajaran:


Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menggambar blok diagram sistem Mikrokontroler

2. Menyebutkan bagian-bagian dari Mikrokontroler

2. Menjelaskan fungsi-fungsi bagian dari sistem Mikrokontroler

3. Menjelaskan prinsip kerja dari Mikrokontroler

II. Materi Pembelajaran

A. Struktur Mikrokontroler

Gambar 1. Diagram Blok Mikrokontroler secara Umum

2
Dalam gambar 1 terlihat bahwa sebuah mikrokontroler terdiri dari
beberapa bagian. Bagian-bagian tersebut saling dihubungkan dengan
bus internal dan pada umumnya terdiri dari 3 macam bus yaitu
address bus, data bus dan control bus.

Masing-masing bagian memiliki fungsi-fungsi sebagai berikut:

1. Register:

Register merupakan suatu tempat penyimpanan (variabel) bilangan


bulat yang terdiri dari 8 atau 16 bit. Pada umumnya register memiliki
jumlah yang banyak, masing-masing ada yang memiliki fungsi khusus
dan ada pula yang memiliki fungsi atau kegunaan secara umum.
Register yang memiliki fungsi secara khusus misalnya register timer
yang berisi data penghitungan pulsa untuk timer, atau register
pengatur mode operasi counter (penghitung pulsa). Sedangkan
register yang memiliki fungsi umum digunakan untuk menyimpan data
sementara yang diperlukan untuk proses penghitungan dan proses
operasi mikrokontroler. Register dengan fungsi umum sangat
dibutuhkan dalam sistem mikrokontroler karena mikrokontroler hanya
mampu melakukan operasi aritmetik atau logika hanya pada satu atau
dua operand saja, sehingga untuk operasi-operasi yang melibatkan
banyak variabel harus dimanipulasi dengan menggunakan variabel-
variabel register umum.

2. Accumulator:

Merupakan salah satu register khusus yang berfungsi sebagai operand


umum proses aritmetika dan logika.

3
3. Program Counter:

Merupakan salah satu register khusus yang berfungsi sebagai


pencacah/penghitung eksekusi program mikrokontroler.

4. ALU (Arithmetic and Logic Unit):

ALU memiliki kemampuan dalam mengerjakan proses-proses


aritmatika (penjumlahan, pengurangan, perkalian, pembagian) dan
operasi logika (misalnya AND, OR, XOR, NOT) terhadap bilangan bulat
8 atau 16 bit.

5. Clock Circuits:

Mikrokontroler merupakan rangkaian logika sekuensial, dimana proses


kerjanya berjalan melalui sinkronisasi clock. Oleh karena itu diperlukan
clock circuits yang menyediakan clock untuk seluruh bagian rangkaian.

6. Internal ROM (Read Only Memory):

Merupakan memori penyimpan data dimana data tersebut tidak dapat


diubah atau dihapus (hanya dapat dibaca). ROM biasanya diisi dengan
program untuk dijalankan oleh mikrokontroler segera setelah power
dihidupkan. Data dalam ROM tidak dapat hilang meskipun power
dimatikan. ROM dalam mikrokontroler dapat berupa flash, EEPROM
atau EPROM tergantung dari jenis mikrokontroler.

7. Stack Pointer:

Stack merupakan bagian dari RAM yang memiliki metode


penyimpanan dan pengambilan data secara khusus. Data yang
disimpan dan dibaca tidak dapat dilakukan dengan cara acak karena
data yang dituliskan ke dalam stack yang berada pada urutan yang
terakhir merupakan data yang pertama kali dibaca kembali. Stack

4
Pointer berisi offset dimana posisi data stack yang terakhir masuk
(atau yang pertama kali dapat diambil).

8. I/O (Input/Output) Ports:

Merupakan sarana yang digunakan oleh mikrokontroler untuk


mengakses peralatan-peralatan lain di luar sistem. I/O Port berupa
pin-pin yang dapat berfungsi untuk mengeluarkan data digital ataupun
sebagai masukan data eksternal.

9. Interrupt Circuits :

Adalah rangkaian yang memiliki fungsi untuk mengendalikan sinyal-


sinyal interupsi baik internal maupun eksternal. Adanya sinyal
interupsi akan menghentikan eksekusi normal program mikrokontroler
untuk selanjutnya menjalankan sub-program untuk melayani interupsi
tersebut.

Diagram blok di atas tidak selalu sama unstuck setiap jenis


mikrokontroler. Beberapa mikrokontroler menyertakan rangkaian ADC
(Analog to Digital Converter) di dalamnya, ada pula yang menyertakan
port I/O serial disamping port I/O parallel yang sudah ada.

10. Internal RAM (Random Acces Memory)

RAM atau memori data merupakan memori penyimpan data dimana


data tersebut dapat diubah atau dihapus. RAM biasanya berisi data-
data variable dan register. Data yang tersimpan pada RAM bersifat
volatile yaitu akan hilang bila catu daya yang terhubung padanya
dimatikan.

5
B. Prinsip Kerja Mikrokontroler

Prinsip kerja sebuah mikrokontroler dapat dijelaskan sebagai berikut:

1. Berdasarkan data yang ada pada register Program Counter.


Mikrokontroler mengambil data dari ROM dengan alamat
sebagaimana ditunjukkan dalam Program Counter. Selanjutnya
Program Counter ditambah nilainya dengan 1 (increment) secara
otomatis. Data yang diambil tersebut merupakan urutan
instruksi program pengendali mikrokontroler yang sebelumnya
telah dituliskan oleh pembuatnya.
2. Instruksi tersebut diolah dan dijalankan. Proses pengerjaan
bergantung pada jenis instruksi; bisa membaca, mengubah nilai-
nilai dalam register, RAM, isi port atau melakukan pembacaan
dan dilanjutkan dengan pengubahan data.
3. Program Counter telah berubah nilainya (baik karena
penambahan secara otomatis sebagaimana dijelaskan pada
langkah 1 di atas atau karena pengubahan data pada langkah
2). Selanjutnya yang dilakukan mikrokontroler adalah
mengulang kembali siklus ini pada langkah 1. Demikian
seterusnya hingga catu daya dimatikan.
Berdasarkan uraian di atas dapat disimpulkan bahwa pada dasarnya
unjuk kerja mikrokontroler sangatlah tergantung pada urutan instruksi
yang dijalankannya, yaitu program yang ditulis dalam ROM.

Dengan membuat program yang bermacam-macam, tentunya


mikrokontroler dapat mengerjakan tugas yang bermacam-macam
pula. Fasilitas-fasilitas yang ada misalnya timer/counter, port I/O,
serial port, Analog to Digital Converter (ADC) dapat dimanfaatkan oleh
programmer untuk menghasilkan kinerja yang dikehendaki. Sebagai
contoh ADC digunakan oleh mikrokontroler sebagai alat ukur digital

6
untuk mengukur tegangan sinyal masukan, selanjutnya hasil
pembacaan ADC diolah untuk kemudian dikirimkan ke sebuah display
yang terhubung pada port I/O guna menampilkan hasil pembacaan
yang telah diolah. Proses pengendalian ADC, pemberian sinyal-sinyal
yang tepat pada display, kesemuanya dikerjakan secara berurutan
pada program yang ditulis dalam ROM.

Penulisan program mikrokontroler pada umumnya menggunakan


bahasa assembly untuk mikrokontroler yang bersangkutan (setiap
jenis mikrokontroler memiliki instruksi bahasa assembly yang
berbeda-beda). Dengan bantuan sebuah pesawat komputer (PC),
bahasa assembly tersebut diubah menjadi bahasa mesin
mikrokontroler dan selanjutnya disalin ke dalam ROM dari
mikrokontroler.

C. Soal-soal Latihan

1. Gambarkan blok diagram sistem mikrokontroler secara umum


2. Sebutkan bagian-bagian dari sebuah mikrokontroler
3. Jelaskan fungsi dari CPU/prosesor pada mikrokontroler
4. Jelaskan fungsi dari Register pada sebuah mikrokontroler
5. Jelaskan fungsi dari RAM pada sebuah mikrokontroler
6. Jelaskan fungsi dari ROM pada sebuah mikrokontroler
7. Jelaskan fungsi dari port input output pada mikrokontroler
8. Jelaskan fungsi dari timer/counter pada mikrokontroler
9. Jelaskan fungsi dari ALU pada mikrokontroler
10. Jelaskan fungsi interupsi pada mikrokontroler

7
D. Kesimpulan

Mikrokontroler adalah suatu IC dengan kepadatan yang sangat tinggi,


dimana semua bagian yang diperlukan untuk suatu kontroler sudah
dikemas dalam satu chip, biasanya terdiri dari:

1. CPU (Central Processing Unit)

2. RAM (Random Access Memory)

3. EEPROM/EPROM/PROM/ROM

4. I/O, Serial & Parallel

5. Timer

6. Interupt Controller

Rata-rata mikrokontroler memiliki instruksi manipulasi bit, akses ke


I/O secara langsung dan mudah, dan proses interupt yang cepat dan
efisien. Dengan kata lain mikrokontroler adalah ” Solusi satu Chip”
yang secara drastis mengurangi jumlah komponen dan biaya disain
(harga relatif rendah).

Mikrokontroler adalah suatu alat elektronika digital yang mempunyai


masukan dan keluaran serta kendali dengan program yang bisa ditulis
dan dihapus dengan cara khusus, cara kerja mikrokontroler
sebenarnya membaca dan menulis data.

Mikrokontroler merupakan komputer didalam chip yang digunakan


untuk mengontrol peralatan elektronik, yang menekankan efisiensi dan
efektifitas biaya. Secara harfiahnya bisa disebut “pengendali kecil”
dimana sebuah sistem elektronik yang sebelumnya banyak

8
memerlukan komponen-komponen pendukung seperti IC TTL dan
CMOS dapat direduksi/diperkecil dan akhirnya terpusat serta
dikendalikan oleh mikrokontroler ini. Dengan penggunaan
mikrokontroler ini maka sistem elektronik akan menjadi lebih ringkas
dan harga yang relatif murah.

9
KEGIATAN BELAJAR II

MIKROKONTROLER AT89S51/52

I. Tujuan Khusus Pembelajaran:


Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menggambar blok diagram mikrokontroler AT89S51

2. Menyebutkan bagian-bagian dari mikrokontroler At89S51

2. Menjelaskan fungsi-fungsi bagian pada mikrokontroler AT89S51

II. Materi Pembelajaran

A. Pendahuluan

Mikrokontroler saat ini tidak asing lagi dalam dunia elektronika, hampir
semua peralatan elektronik dewasa ini menggunakan perangkat ini,
mikrokontroler merupakan pengendali utama dalam peralatan
elektronik saat ini, maka mikrokontroler merupakan suatu hal yang
penting untuk dipelajari bagi mereka yang berkecimpung dalam dunia
elektronika.

Mikrokontroler yang dibahas disini adalah mikrokontroler buatan


ATMEL yang mudah ditemui di pasaran di Indonesia, yaitu dari
keluarga MCS-51. AT89S51 dan AT89S52 mempunyai kemampuan
serial downloading atau lebih dikenal dengan istilah In System
Programming (ISP) sehingga mikrokontroler langsung dapat diprogram
pada rangkaiannya tanpa harus mencabut IC untuk diprogram,
Programmer ISP dapat dibuat menggunakan beberapa resistor via

10
paralel port komputer sehingga bagi mereka yang belum memiliki
programmer dapat tetap bereskperimen menggunakan mikrokontroler
ini dengan biaya yang relatif murah.

B. Fitur AT89S51:

 Kompatibel dengan produk MCS-51


 4K byte In System Programmable Flash Memory
 Range catu daya 4,0V s/d 5,0V
 Operasi statis: 0 Hz s/d 33 MHz
 Tiga Tingkat Program memory lock
 128 x 8-bit RAM internal
 32 Programmable Jalur I/O
 Dua 16-bit Timer/ Counter
 Enam Sumber Interupsi
 Full Duplex Serial Channel
 Low Power Idle dan Mode Power Down
 Watch Dog Timer
 Dua Data Pointer
 Power Off Flag
 Fast Programming Time
 Flexyble ISP programming

Pada gambar 2 ditunjukkan bentuk fisik dan konfigurasi pin dari


sebuah mikrokontroler seri AT89Sxx.

11
Gambar 2. Bentuk fisik AT89Sxx (PDIP) dan konfigurasi Pin

C. Diskripsi AT89S51

AT89S51 mempunyai konsumsi daya rendah, mikrokontroller 8-bit


CMOS dengan 4K byte memori Flash ISP (In System
Programmable/ dapat diprogram di dalam sistem). Divais ini dibuat
dengan teknologi memori non-volatile dengan kerapatan tinggi dan
kompatibel dengan standar industri 8051 dari INTEL, set instruksi dan
pin keluaran Flash yang berada di dalam chip memungkinkan memori
program untuk diprogram ulang pada saat chip di dalam sistem atau
dengan menggunakan Programmer memori non-volatile konvensional.
Dengan mengkombinasikan CPU 8-bit yang serbaguna dengan flash
ISP pada chip, ATMEL 89S51 merupakan mikrokontroler yang luar
biasa yang memberikan fleksibilitas yang tinggi dan penggunaan biaya
yang efektif untuk beberapa aplikasi kontrol.
AT89S51 memberikan fitur-fitur standar sebagai berikut: 4K byte
Flash, 128 byte RAM, 32 jalur I/O, Watchdog Timer, dua data pointer,

12
dua buah 16-bit timer/ counter, lima vektor interupsi dua level,
sebuah port serial full dupleks, oscillator internal, dan rangkaian clock.
Selain itu AT89S51 didisain dengan logika statis untuk operasi dengan
frekuensi sampai 0 Hz dan didukung dengan mode penghematan daya.
Pada mode iddle akan menghentikan CPU sementara RAM, timer/
counter, serial port dan sistem interupsi tetap berfungsi. Mode Power
Down akan tetap menyimpan isi dari RAM tetapi akan membekukan
oscillator, menggagalkan semua fungsi chip sampai interupsi eksternal
atau reset hardware dibangkitkan.

D. Diskripsi PIN AT89S51

1. VCC : Tegangan Supply

2. GND: Ground

3. Port0

Port 0, merupakan port I/O 8-bit open drain dua arah. Sebagai sebuah
port, setiap pin dapat mengendalikan 8 input TTL. Ketika logika “1”
dituliskan ke port 0, maka port dapat digunakan sebagai input dengan
high impedansi. Port 0 dapat juga dikonfigurasikan untuk multiplexing
dengan address/ data bus selama mengakses memori program atau
data eksternal. Pada mode ini P0 harus mempunyai pull-up.

4. Port1

Port 1 merupakan port I/0 8-bit dua arah dengan internal pull up.
Buffer output port 1 dapat mengendalikan empat TTL input. Ketika
logika “1” dituliskan ke port 1, maka port ini akan mendapatkan
internal pull up dan dapat digunakan sebagai input.

13
Port 1 juga menerima alamat byte rendah selama pemrograman dan
verifikasi Flash.

5. Port Pin Fungsi Alternatif

P1.5 MOSI (digunakan untuk In System Programming)


P1.6 MISO (digunakan untuk In System Programming)
P1.7 SCK (digunakan untuk In System Programming)

6. Port2

Port 2 merupakan port I/O 8-bit dua arah dengan internal pull- up.
Buffer output port 2 dapat mengendalikan empat TTL input. Ketika
logika “1” dituliskan ke port 2, maka port ini akan mendapatkan
internal pull up dan dapat digunakan sebagai input.

7. Port3

Port 3 merupakan port I/O 8-bit dua arah dengan internal pull up.
Buffer output port 3 dapat mengendalikan empat TTL input. Ketika
logika “1” dituliskan ke port 3, maka port ini akan mendapatkan
internal pull up dan dapat digunakan sebagai input.
Port 3 juga melayani berbagai macam fitur khusus, sebagaimana yang
ditunjukkan pada tabel berikut:

Port Pin Fungsi Alternatif

P3.0 RXD ( port serial input )

P3.1 TXD ( port serial output )

P3.2 INT0 ( interupsi eksternal 0 )

P3.3 INT1 ( interupsi eksternal 1 )

14
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 program eksternal)

8. RST

Input Reset. Logika high “1” pada pin ini untuk dua siklus mesin
sementara oscillator bekerja maka akan me-reset devais.

9. ALE/PROG

Address Latch Enable ( ALE ) merupakan suatu pulsa output untuk


mengunci byte low dari alamat selama mengakses memori eksternal.
Pin ini juga merupakan input pulsa pemrograman selama
pemrograman flash (paralel). Pada operasi normal, ALE mengeluarkan
suatu laju konstan 1/6 dari frekuensi osiilator dan dapat digunakan
untuk pewaktu eksternal.

10. PSEN

Program Store Enable merupakan strobe read untuk memori program


eksternal.

11. EA/VPP

External Access Enable. EA harus di hubungkan ke GND untuk


enable devais, untuk mengakses memori program eksternal mulai
alamat 0000H s/d FFFFH. EA harus dihubungkan ke VCC untuk akses
memori program internal. Pin ini juga menerima tegangan
pemrogramman ( VPP) selama pemrograman Flash.

15
12. XTAL1

Input untuk penguat oscilator inverting dan input untuk rangkaian


internal clock

13. XTAL2

Output dari penguat oscilator inverting.

E. Organisasi Memori

Semua divais 8051 mempunyai ruang alamat yang terpisah untuk


memori program dan memori data, seperti yang ditunjukkan pada
gambar 4. Pemisahan secara logika dari memori program dan data
mengijinkan memori data untuk diakses dengan pengalamatan 8-bit,
yang dengan cepat dapat disimpan dan dimanipulasi dengan CPU 8-
bit. Selain itu, pengalamatan memori data 16-bit dapat juga
dibangkitkan melalui register DPTR. Memori program ( ROM, EPROM
dan FLASH ) hanya dapat dibaca, tidak ditulis. Memori program dapat
dilakukan ekspansi hingga mencapai 64 K.Byte. Pada 89S51, 4K.Byte
memori program terdapat di dalam chip. Untuk membaca memori
program eksternal mikrokontroler mengirim sinyal PSEN ( Program
Store Enable )

16
Gambar 3. Diagram blok mikrokontroler AT89S51

Memori data ( RAM ) menempati ruang alamat yang terpisah dari


memori program. Pada keluarga 8051, 128 byte terendah dari memori
data, berada di dalam chip. RAM eksternal (maksimal 64 K. Byte).
Dalam pengaksesan RAM eksternal, mikrokontroler mengirimkan
sinyal RD ( baca ) dan WR ( tulis ).

Gambar 4. Arsitektur Memori Mikrokontroler 8051

17
F. Memory Program

Gambar 5. menunjukkan suatu peta bagian bawah dari memori


program. Setelah reset CPU mulai melakukan eksekusi dari lokasi
0000H. Sebagaimana yang ditunjukkan pada gambar 5, setiap
interupsi ditempatkan pada suatu lokasi tertentu pada memori
program. Interupsi menyebabkan CPU untuk melompat ke lokasi
dimana harus dilakukan suatu layanan tertentu. Interupsi Eksternal 0,
sebagi contoh, menempati lokasi 0003H. Jika Interupsi Eksternal 0
akan digunakan, maka layanan rutin harus dimulai pada lokasi 0003H.
Jika interupsi ini tidak digunakan, lokasi layanan ini dapat digunakan
untuk berbagai keperluan sebagai Memori Program.

0011b 1011b 10011b 11011b 100101b

Gambar 5. Peta Alamat Interupsi mikrokontroler 8051

G. Memory Data

Pada gambar 6. menunjukkan ruang memori data internal dan


eksternal pada keluarga 8051. CPU membangkitkan sinyal RD dan WR
yang diperlukan selama akses RAM eksternal. Memori data internal
terpetakan seperti pada gambar 6. Ruang memori dibagi menjadi tiga
blok, yang diacukan sebagai 128 byte lower, 128 byte upper dan

18
ruang SFR. Alamat memori data internal selalu mempunyai lebar data
satu byte. Pengalamatan langsung di atas 7Fh akan mengakses satu
alamat memori, dan pengalamatan tak langsung di atas 7Fh akan
mengakses satu alamat yang berbeda. Demikian pada gambar 6
menunjukkan 128 byte bagian atas dan ruang SFR menempati blok
alamat yang sama, yaitu 80h sampai dengan FFh, yang sebenarnya
mereka terpisah secara fisik. 128 byte RAM bagian bawah
dikelompokkan lagi menjadi beberapa blok, seperti yang ditunjukkan
pada gambar 7a. 32 byte RAM paling bawah, dikelompokkan menjadi
4 bank yang masing-masing terdiri dari 8 register. Instruksi program
untuk memanggil register-register ini dinamai sebagai R0 sampai
dengan R7. Dua bit pada Program Status Word (PSW) dapat memilih
register bank mana yang akan digunakan. Penggunaan register R0
sampai dengan R7 ini akan membuat pemrograman lebih efisien dan
singkat, bila dibandingkan pengalamatan secara langsung.

Gambar 6. Memori data internal

19
Gambar 7a. RAM internal 128 byte paling bawah

H. Register Mikrokontroler MCS-51

Sebagaimana pada semua jenis mikrokontroler, MCS-51 memiliki


sejumlah register yang memiliki fungsi khusus (special function
register-SFR) dan register untuk penggunaan umum (general
purpose register). General purpose register yang dapat diakses adalah
8 byte per bank yaitu R0-R7, dengan jumlah bank sebanyak 4 bank.
Special Function Register yang terdapat pada mikrokontroler ini
memiliki alamat 80h-FFh dengan peta memori seperti ditunjukkan
pada gambar 7a. Tempat yang kosong pada peta memori tidak
diimplementasikan dalam chip. Pembacaan data pada tempat kosong
ini akan menghasilkan data acak, sedangkan penulisan data pada
tempat-tempat kosong tersebut tidak akan mengakibatkan perubahan
apapun.

20
1. Buffer Data Serial

Buffer serial sesungguhnya merupakan dua buah register yang


terpisah, buffer pemancar dan buffer penerima. Ketika data diisikan ke
SBUF, maka akan menuju ke buffer pemancar dan ditahan untuk
proses transmisi. Ketika data diambil dari SBUF, maka akan berasal
dari buffer penerima.

2. Register Timer

Pasangan register ( TH0, TL0) dan (TH1, TL1) adalah register


pencacah 16-bit untuk Timer/ Counter 0 dan 1.

3. Register Control
Registers IP, IE, TMOD, TCON, SCON, dan PCON terdiri dari bit control
dan status.

J. Special Function Register

Sebuah peta memori yang disebut sebagai ruang Special Function


Register ( SFR ) ditunjukkan pada gambar 8. Perhatikan bahwa tidak
semua alamat-alamat tersebut ditempati, dan alamat-alamat yang tak
ditempati tidak diperkenankan untuk diakses. Akses baca untuk
alamat ini akan menghasilkan data random, dan akses tulis akan
menghasilkan efek yang tak jelas.

1.Accumulator

ACC adalah register akumulator. Mnemonik untuk instruksi spesifik


akumulator ini secara sederhana dapat disingkat sebagai A.

21
2. Register B

Register B digunakan pada saat operasi perkalian dan pembagian.


Selain untuk keperluan tersebut di atas, register ini dapat digunakan
sebagai register bebas.

3. Program Status Word

Program Status Word (PSW) berisi bit-bit status yang berkaitan


dengan kondisi atau keadaan CPU mikrokontroler pada saat tersebut.
Register PSW terdiri dari informasi status dari program yang secara
detail ditunjukkan pada Tabel 1.

PSW berada dalam lokasi ruang SFR ( perhatikan pada gambar 1.7,
dengan lokasi alamat D0h ). Pada PSW ini kita dapat memantau
beberapa status yang meliputi: carry bit, auxiliary carry ( untuk
operasi BCD ), dua bit pemilih bank register, flag overflow, sebuah bit
paritas dan dua flag status yang bisa didefinisikan sendiri. Bit carry
dapat juga anda gunakan pada keperluan operasi aritmatika, juga bisa
digunakan sebagai universal akumulator untuk beberapa operasi
Boolean.

Tabel 1. Program Status Word

MSB LSB

CY AC F0 RS1 RS0 OV - P

BIT SYMBOL FUNCTION

PSW.7 CY Carry flag.

22
PSW.6 AC Auxilliary Carry Flag. (For BCD operations.)

PSW.5 F0 Flag 0. (Available to the user for general purposes.)

Register Bank Select Control bit 1.


PSW.4 RS1 Set/cleared by software to determine working register bank.
(See Note.)

Register Bank Select Control bit 0.


PSW.3 RS0
Set/cleared by software todetermine working register bank.

PSW.2 OV Overflow flag.

PSW.1 - User-definable flag.

Parity Flag.
Set/cleared by hardware each instruction cycle to indicate
PSW.0 P
an odd/even number of “one” bits in the Accumulator, i.e.,
even parity.

Bit RS0 dan RS1 dapat digunakan untuk memilih satu dari empat bank
register sebagaimana ditunjukkan pada tabel 2. Bit paritas dapat
digunakan untuk mengetahui jumlah logika '1' pada akumulator: P=1
bila pada akumulator mempunyai logika '1' yang jumlahnya ganjil, dan
P=0 jika akumulator mempunyai logika '1' yang jumlahnya genap. Dua
bit yang lain PSW1 dan PSW5 dapat digunakan untuk berbagai macam
tujuan.

Tabel 2. Alamat Bank

RS1 RS0 Bank Address RAM

0 0 0 00 h - 07 h = 0-7 =8

0 1 1 08 h - 0F h = 8-15 =8

1 0 2 10 h - 17 h = 16-23 =8

1 1 3 18 h - 1F h = 24-31=8

23
RS3 RS2 RS1 RS0 RAM

0 0 0 0 0

0 0 0 1 1

0 0 1 0 2

0 0 1 1 3

0 1 0 0 4

0 1 0 1 5

0 1 1 0 6

0 1 1 1 7

1 0 0 0 8

1 0 0 1 9

1 0 1 0 A

1 0 1 1 B

1 1 0 0 C

1 1 0 1 D

1 1 1 0 E

1 1 1 1 F

24
Semua data pada lokasi RAM 128 byte paling bawah dapat diakses
baik dengan menggunakan pengalamatan langsung maupun tak
langsung. 128 byte paling atas hanya dapat diakses dengan cara tak
langsung, gambar 7b.

Gambar 7b. RAM internal 128 byte paling atas

4. Stack Pointer

Register Pointer Stack mempunyai lebar data 8-bit. Register ini


akan bertambah sebelum data disimpan selama eksekusi push dan
call. Sementara stack dapat berada di sembarang tempat RAM. Stack
Pointer diawali di alamat 07h setelah reset. Hal ini menyebabkan
stack untuk memulai pada lokasi 08h.

5. Data Pointer

Data Pointer (DPTR) terdiri dari byte atas (DPH) dan byte bawah
(DPL). Fungsi ini ditujukan untuk menyimpan data 16-bit. Dapat

25
dimanipulasi sebagai register 16-bit atau dua 8-bit register yang
berdiri sendiri.

Gambar 8. Peta SFR

K. Port I/O Parallel

Mikrokontroler MCS-51 memiliki 2 jenis port input/output, yaitu port


I/O parallel dan port I/O serial. Port I/O parallel sebanyak 4 buah
dengan nama P0, P1, P2 dan P3. Masing-masing port ini bersifat
bidirectional (dua arah), memiliki latch (dengan fasilitas ini data output
akan tetap berada pada statusnya hingga ada pengiriman data baru),
memiliki buffer output sehingga setiap pin-nya dapat dibebani dengan
4 buah gerbang IC TTL standar (kecuali Port 0 sebanyak 8) dan
memiliki buffer input.

26
Port serialnya bersifat full-duplex (dalam satu saat bisa menerima
sekaligus mengirim data), bisa digunakan sebagai shift register, atau
Universal Asynchronous Receiver dan Transmitter (UART) dengan data
terkirim sepanjang 8 atau 9 bit.

L. Soal-soal latihan
1. Gambarkan diagram blok dari mikrokontroler AT89S51

2. Sebutkan jenis-jenis memori yang ada dalam mikrokontroler


AT89S51

3. Jelaskan fungsi bit-bit dalam register PSW

4. Sebutkan register-register untuk fungsi khusus yang ada dalam


AT89S51 (Special Function Register)

5. Gambarkan peta sistem memori pada AT89S51

6. Jelaskan sistem interupsi yang ada dalam AT89S51 dan tentukan


lokasi pada tiap-tiap jenis interupsi serta gambarkan peta lokasi
dari sistem interupsi tersebut!

7. Gambarkan peta memori data internal pada AT89S51

8. Gambarkan peta dari Special Function Register (SFR)

9. Jelaskan tentang port input output pada AT89S51!

10.Jelaskan perbedaan antara AT89S51 dengan AT89C51

M. Kesimpulan
AT89S51 mempunyai konsumsi daya rendah, mikrokontroller 8-bit
CMOS dengan 4K byte memori Flash ISP (In System
Programmable/ dapat diprogram di dalam sistem). Divais ini dibuat
dengan teknologi memori non-volatile dengan kerapatan tinggi dan
kompatibel dengan standar industri 8051 dari INTEL, set instruksi dan

27
pin keluaran Flash yang berada di dalam chip memungkinkan memori
program untuk diprogram ulang pada saat chip di dalam sistem atau
dengan menggunakan Programmer memori non-volatile konvensional.
Dengan mengkombinasikan CPU 8-bit yang serbaguna dengan flash
ISP pada chip, ATMEL 89S51 merupakan mikrokontroler yang luar
biasa yang memberikan fleksibilitas yang tinggi dan penggunaan biaya
yang efektif untuk beberapa aplikasi kontrol.
AT89S51 memberikan fitur-fitur standar sebagai berikut: 4K byte
Flash, 128 byte RAM, 32 jalur I/O, Watchdog Timer, dua data pointer,
dua buah 16-bit timer/ counter, lima vektor interupsi dua level,
sebuah port serial full dupleks, oscillator internal, dan rangkaian clock.
Selain itu AT89S51 didisain dengan logika statis untuk operasi dengan
frekuensi 0 sampai 12MHz dan didukung dengan mode penghematan
daya. Pada mode iddle akan menghentikan CPU sementara RAM,
timer/ counter, serial port dan sistem interupsi tetap berfungsi. Mode
Power Down akan tetap menyimpan isi dari RAM tetapi akan
membekukan oscillator, menggagalkan semua fungsi chip sampai
interupsi eksternal atau reset hardware dibangkitkan.

28
KEGIATAN BELAJAR III

SUSUNAN INSTRUKSI MCS-51


I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menyebutkan jenis-jenis instruksi pada mikrokontroler MCS-51

2. Menjelaskan operasi dari instruksi transfer data

3. Menyebutkan macam-macam instruksi transfer data

4. Menjelaskan operasi dari instruksi arithmatika

5. Menyebutkan macam-macam instruksi arithmatika

6. Menjelaskan operasi dari instruksi logika

7. Menyebutkan macam-macam instruksi logika

8. Menjelaskan operasi dari instruksi lompatan (percabangan)

9. Menyebutkan macam-macam instruksi lompatan (percabangan)

II. Materi Pembelajaran

A. Susunan Instruksi MCS-51

Sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program


padanya. Program tersebut memberitahu mikrokontroler tentang apa
yang harus dikerjakan. Program pengendali mikrokontroler disusun
dari kumpulan instruksi, instruksi tersebut setara dengan kalimat
perintah bahasa manusia yang hanya terdiri atas predikat dan objek.
Dengan demikian tahap pertama pembuatan program pengendali
mikrokontroler dimulai dengan pengenalan dan pemahaman predikat
(kata kerja) dan objek apa saja yang dimiliki mikrokontroler.
29
Objek dalam pemrograman mikrokontroler adalah data yang
tersimpan di dalam memori, register dan input/output. Sedangkan
‘kata kerja’ yang dikenal pun secara umum dikelompokkan menjadi
perintah untuk perpindahan data, arithmetik, operasi logika,
pengaturan alur program dan beberapa hal khusus. Kombinasi dari
‘kata kerja’ dan objek itulah yang membentuk perintah pengatur kerja
mikrokontroler.
Intruksi MOV A,7Fh merupakan contoh sebuah intruksi dasar yang
sangat spesifik, MOV merupakan ‘kata kerja’ yang memerintahkan
peng-copy-an data, merupakan predikat dalam kalimat perintah ini.
Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini
adalah data yang ada di dalam memori nomor 7Fh di-copy-kan ke
Akumulator A.

B. Penyebutan data dalam MCS-51

Data bisa berada di berbagai tempat yang berlainan, dengan demikian


dikenal beberapa cara untuk menyebut data (dalam bahasa Inggris
sering disebut sebagai ‘Addressing Mode’, antara lain sebagai berikut.
1. Penyebutan data konstan (immediate addressing mode): MOV
A,#20. Data konstan merupakan data yang berada di dalam
instruksi. Contoh instruksi ini mempunyai makna data konstan 20
(sebagai data konstan ditandai dengan ‘#’) di-copy-kan ke
Akumulator A. Yang perlu benar-benar diperhatikan dalam perintah
ini adalah bilangan 20 merupakan bagian dari instruksi.
2. Penyebutan data secara langsung (direct addressing mode), cara ini
dipakai untuk menunjuk data yang berada di dalam memori dengan
cara menyebut nomor memori tempat data tersebut berada : MOV
A,30h. Contoh instruksi ini mempunyai makna data yang berada di

30
dalam memori nomor 30 di-copy-kan ke Akumulator. Sekilas
intruksi ini sama dengan instruksi data konstan di atas,
perbedaannya instruksi di atas memakai tanda ‘#’ yang menandai
20 adalah data konstan, sedangkan dalam instruksi ini karena tidak
ada tanda ‘#’ maka 30h adalah nomor dari memori.
3. Penyebutan data secara tidak langsung (indirect addressing mode),
cara ini dipakai untuk menunjuk data yang berada di dalam
memori, kalau memori penyimpan data ini letaknya berubah-rubah
sehingga nomor memori tidak disebut secara langsung tapi
di-‘titip’-kan ke register lain : MOV A,@R0.
4. Dalam instruksi ini register serba guna R0 dipakai untuk mencatat
nomor memori, sehingga instruksi ini mempunyai makna memori
yang nomornya tercatat dalam R0 isinya di-copy-kan ke
Akumulator A.
5. Tanda ‘@’ dipakai untuk menandai nomor memori disimpan di
dalam R0.
6. Bandingkan dengan instruksi penyebutan nomor memori secara
langsung di atas, dalam instruksi ini nomor memori terlebih dulu
disimpan di R0 dan R0 berperan menunjuk memori mana yang
dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga
akan berubah pula.
7. Dalam instruksi ini register serba guna R0 berfungsi dengan register
penampung alamat (indirect address register), selain R0 register
serba guna R1 juga bisa dipakai sebagai register penampung
alamat.
8. Penyebutan data dalam register (register addressing mode): MOV
A,R5. Instruksi ini mempunyai makna data dalam register serba
guna R5 di-copy-kan ke Akumulator A. Instruksi ini membuat

31
register serba guna R0 sampai R7 sebagai tempat penyimpan data
yang sangat praktis yang kerjanya sangat cepat.
9. Data yang dimaksud dalam bahasan di atas semuanya berada di
dalam memori data (termasuk register serba guna letaknya juga di
dalam memori data). Dalam penulisan program, sering-sering
diperlukan tabel baku yang disimpan bersama dengan program
tersebut. Tabel semacam ini sesungguhnya merupakan data yang
berada di dalam memori program.
10. Untuk keperluan ini, MCS-51 mempunyai cara penyebutan data
dalam memori program yang dilakukan secara indirect (code
indirect addressing mode) : MOVC A,@A+DPTR.

Perhatikan dalam instruksi ini MOV digantikan dengan MOVC,


tambahan huruf C tersebut dimaksud untuk membedakan bahwa
instruksi ini dipakai di memori program. (MOV tanpa huruf C artinya
instruksi dipakai di memori data).

Tanda ‘@’ dipakai untuk menandai A+DPTR dipakai untuk


menyatakan nomor memori yang isinya di-copy-kan ke Akumulator
A, dalam hal ini nilai yang tersimpan dalam DPTR (Data Pointer
Register - 2 byte) ditambah dengan nilai yang tersimpan dalam
Akumulator A (1 byte) dipakai untuk menunjuk nomor memori
program.

Secara keseluruhan AT89S51 mempunyai sebanyak 255 macam


instruksi, yang dibentuk dengan mengkombinasikan ‘kata kerja’ dan
objek. “Kata kerja’ tersebut secara kelompok dibahas sebagai berikut :

C. Instruksi copy data (transfer data)

32
Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang
artinya memindahkan, meskipun demikian lebih tepat dikatakan
perintah ini mempunyai makna peng-copy-an data. Hal ini bisa
dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan, Akumulator
A dan register serba guna R7 berisikan data yang sama, yang asalnya
tersimpan di dalam R7.
Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051.
Perintah ini pada memori data dituliskan menjadi MOV, misalkan :

MOV A,20h
MOV A,@R1
MOV A,P1
MOV P3,A

Untuk pemakaian pada memori program, perintah ini dituliskan


menjadi MOVC, hanya ada 2 jenis instruksi yang memakai MOVC,
yakni:

MOVC A,@A+DPTR ; DPTR sebagai register indirect


MOVC A,@A+PC ; PC sebagai register indirect

Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang
dipakai untuk memori data eksternal (X kependekan dari External).
Perintah ini hanya dimiliki oleh anggota keluarga MCS51 yang
mempunyai memori data eksternal, misalnya AT89C51 dan lain
sebagainya, dan jelas tidak dikenal oleh kelompok AT89Cx051 yang
tidak punya memori data eksternal. Hanya ada 6 macam instruksi
yang memakai MOVX, instruksi-instruksi tersebut adalah:

MOVX A,@DPTR
MOVX A,@R0
MOVX A,@R1
MOVX @DPTR,A
MOVX @R0,A
MOVX @R1,A

33
Tabel 3. Macam-macam instruksi copy data

Addressing Mode Exect.


Mnemonic Operation
Dir Ind Reg Imm Timer uS

Mov A,<src> A=<src> V V V V 1

Mov <dest>,A <dest>=A V V V V 1

Mov <dest>,
<dest>=<src> V V V V 1
<src>

DPTR=16 bit
Mov
immediate Accumulator Only 1
DPTR,#data16
const

Push <src> Inc SP V V V 1

Pop <src> Dec SP Data Pointer Only 2

Acc and
Xch A,<byte> <byte> Accumulator Only 1
exchange data

Acc and @Ri


Xchd A,@Ri exchange low V V V 1
nibbles

D. Instruksi Aritmatika

1. Perintah ADD dan ADDC

Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan


akan ditampung kembali dalam Akumulator. Dalam operasi ini bit
Carry (C flag dalam PSW – Program Status Word) berfungsi sebagai
penampung limpahan hasil penjumlahan. Jika hasil penjumlahan

34
tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan
bernilai ‘1’, kalau tidak bit Carry bernilai ‘0’. ADDC sama dengan ADD,
hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut
dijumlahkan bersama.

Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari


bilangan konstan, dari register serba guna, dari memori data yang
nomor memorinya disebut secara langsung maupun tidak langsung,
seperti terlihat dalam contoh berikut :

ADD A,R0 ; register serba guna


ADD A,#23 ; bilangan konstan
ADD A,@R0 ; no memori tak langsung
ADD A,P1 ; no memori langsung (port 1)

2. Perintah SUBB
Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan
nilai bit Carry, hasil pengurangan akan ditampung kembali dalam
Akumulator. Dalam operasi ini bit Carry juga berfungsi sebagai
penampung limpahan hasil pengurangan. Jika hasil pengurangan
tersebut melimpah (nilainya kurang dari 0) bit Carry akan bernilai ‘1’,
kalau tidak bit Carry bernilai ‘0’.

SUBB A,R0 ; A = A - R0 – C

SUBB A,#23 ; A = A - #23

SUBB A,@R1

SUBB A,P0

3. Perintah DA

35
Perintah DA (Decimal Adjust) dipakai setelah perintah ADD; ADDC
atau SUBB, dipakai untuk merubah nilai biner 8-bit yang tersimpan
dalam Akumulator menjadi 2 buah bilangan desimal yang masing-
masing terdiri dari nilai biner 4-bit.

4. Perintah MUL AB

Bilangan biner 8-bit dalam Akumulator A dikalikan dengan bilangan


biner 8-bit dalam register B. Hasil perkalian berupa bilangan biner 16-
bit, 8-bit bilangan biner yang bobotnya lebih besar ditampung di
register B, sedangkan 8-bit lainnya yang bobotnya lebih kecil
ditampung di Akumulator A.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai
nilai hasil perkalian yang ada dalam register B. Bit OV akan bernilai ‘0’
jika register B bernilai #00, kalau tidak bit OV bernilai ‘1’.

MOV A,#10
MOV B,#20
MUL AB

5. Perintah DIV AB

Bilangan biner 8-bit dalam Akumulator A dibagi dengan bilangan biner


8-bit dalam register B. Hasil pembagian berupa bilangan biner 8-bit
ditampung di Akumulator, sedangkan sisa pembagian berupa bilangan
biner 8-bit ditampung di register B.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai
nilai sebelum pembagian yang ada dalam register B. Bit OV akan
bernilai ‘1’ jika register B asalnya bernilai #00.

Table 4. Instruksi Aritmatika

36
Addressing Mode Exect.
Mnemonic Operation
Dir Ind Reg Imm Timer uS

Add
A=A+<byte> V V V V 1
A,<byte>

Addc
A=A+<byte>+C V V V V 1
A,<byte>

Subb
A=A-<byte>-C V V V V 1
A,<byte>

Inc A A=A+1 Accumulator Only 1

Inc <byte> <byt>=<byt>+1 V V V 1

Inc DPTR DPTR=DPTR+1 Data Pointer Only 2

Dec A A=A-1 Accumulator Only 1

Dec
<byt>=<byt>-1 V V V 1
<byte>

Mul AB B:A=BxA Accumulator and B Only 4

Div AB A=Int[A/B] Accumulator and B only 4


B=Mod[A/B]
DA A Dec Adjust Accumulator Only 1

F. Instruksi Logika

Kelompok perintah ini dipakai untuk melakukan operasi logika


mikrokontroler MCS-51, operasi logika yang bisa dilakukan adalah
operasi AND (kode operasi ANL), operasi OR (kode operasi ORL) dan
operasi Exclusive-OR (kode operasi XRL).
Data yang dipakai dalam operasi ini bisa berupa data yang berada
dalam Akumulator atau data yang berada dalam memori-data, hal ini

37
sedikit berlainan dengan operasi aritmatik yang harus melibatkan
Akumulator secara aktip.
Hasil operasi ditampung di sumber data yang pertama.

1. Operasi logika AND banyak dipakai untuk me-‘0’-kan beberapa bit


tertentu dari sebuah bilangan biner 8-bit, caranya dengan
membentuk sebuah bilangan biner 8-bit sebagai data konstan yang
di-ANL-kan bilangan asal. Bit yang ingin di-‘0’-kan diwakili dengan
‘0’ pada data konstan, sedangkan bit lainnya diberi nilai ‘1’,
misalnya. Instruksi ANL P1,#01111110b akan mengakibatkan bit 0
dan bit 7 dari Port 1 (P1) bernilai ‘0’ sedangkan bit-bit lainnya tetap
tidak berubah nilai.

2. Operasi logika OR banyak dipakai untuk me-‘1’-kan beberapa bit


tertentu dari sebuah bilangan biner 8-bit, caranya dengan
membentuk sebuah bilangan biner 8-bit sebagai data konstan yang
di-ORL-kan bilangan asal. Bit yang ingin di-‘1’-kan diwakili dengan
‘1’ pada data konstan, sedangkan bit lainnya diberi nilai ‘0’,
misalnya :Instruksi ORL A,#01111110b akan mengakibatkan bit 1
sampai dengan bit 6 dari Akumulator bernilai ‘1’ sedangkan bit-bit
lainnya tetap tidak berubah nilai.

3. Operasi logika Exclusive-OR banyak dipakai untuk membalik


nilai (complement) beberapa bit tertentu dari sebuah bilangan biner
8-bit, caranya dengan membentuk sebuah bilangan biner 8-bit
sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin
dibalik-nilai diwakili dengan ‘1’ pada data konstan, sedangkan bit
lainnya diberi nilai ‘0’, misalnya: Instruksi XRL A,#01111110b akan

38
mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik
nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.

Tabel 5. Macam-macam instruksi Logika

Addressing Mode Exect.


Mnemonic Operation
Dir Ind Reg Imm Timer uS

Anl A,<byte> A=A and <byte> V V V V 1

Anl <byte>,A <byte>=<byte>anl A V V V V 1

Anl <byte>=<byte>and
V V V V 1
<byte>,#data #data

Orl A,<byte> A=A or <byte> Accumulator Only 1

Orl <byte>,A <byt>=<byt>orl A V V V 1

Orl <byte>=<byte> or
Data Pointer Only 2
<byte>,#data #data

Xrl A,<byte> A=A xor<byte> Accumulator Only 1

Xrl<byte>,A <byt>=<byt>xor A V V V 1

<byte>=<byte>xor
Xrl <byte>,#data Accumulator and B Only 4
#data

CLR A Accumulator only 1


A=00h
CPL A A= not A Accumulator only 1

RL A Rotate A left 1 bit Accumulator only 1

Rotate A left trough


RLC A Accumulator only 1
Carry

RR A Rotate A right 1 bit Accumulator only 1

Rotate A right trough


RRC Accumulator only 1
carry

SWAP A Swap nibbles in A Accumulator only 1

39
Operasi logika pada umumnya mencakup empat hal, yaitu operasi
AND, operasi OR, operasi EX-OR dan operasi NOT. MCS-51 hanya bisa
melaksanakan tiga jenis operasi logika yang ada, yakni intruksi ANL
(AND Logical) untuk operasi AND instruksi ORL (OR Logical) untuk
operasi OR, CPL (Complement bit) untuk operasi NOT.

Bit Carry pada PSW diperlakukan sebagai ‘accumulator bit’, dengan


demikian operasi AND dan operasi OR dilakukan antara bit yang
tersimpan pada bit Carry dengan salah satu dari 256 bit data yang
dibahas di atas. Contoh dari instruksi-instruksi ini adalah :

ANL C,P1.1

ANL C,P1.2

Instruksi ANL C,P1.1 meng-AND-kan nilai pada bit Carry dengan nilai
Port 1 bit 1 (P1.1), dan hasil operasi tersebut ditampung pada bit
Carry. Instruksi ANL C,/P1.1 persis sama dengan instruksi
sebelumnya, hanya saja sebelum di-AND-kan, nilai P1.1 dibalik
(complemented) lebih dulu, jika nilai P1.1=‘0’ maka yang di-AND-kan
dengan bit Carry adalah ‘1’, demikian pula sebaliknya. Hal serupa
berlaku pada instruksi ORL.
Instruksi CPL dipakai untuk membalik (complement) nilai semua 256
bit data yang dibahas di atas. Misalnya :

CPL C

CPL P1.0

CPL C akan membalik nilai biner dalam bit Carry (jangan lupa bit Carry
merupakan salah satu bit yang ada dalam 256 bit yang dibahas di
atas, yakni bit nomor E7h atau PSW.7).

G. Instruksi Lompatan (Percabangan)


40
Pada dasarnya program dijalankan intruksi demi instruksi, artinya
selesai menjalankan satu instruksi, mikrokontroler langsung
menjalankan instruksi berikutnya, untuk keperluan ini mikrokontroler
dilengkapi dengan Program Counter yang mengatur pengambilan
intruksi secara berurutan. Meskipun demikian, program yang kerjanya
hanya berurutan saja tidaklah banyak artinya, untuk keperluan ini
mikrokontroler dilengkapi dengan instruksi-instruksi untuk mengatur
alur program.
Secara umum kelompok instruksi yang dipakai untuk mengatur alur
program terdiri atas instruksi-instruksi JUMP (setara dengan statement
GOTO dalam Pascal), instruksi-instruksi untuk membuat dan memakai
sub-rutin/modul (setara dengan PROCEDURE dalam Pascal), instruksi-
instruksi JUMP bersyarat (conditional Jump, setara dengan statement
IF .. THEN dalam Pascal). Di samping itu ada pula instruksi PUSH dan
POP yang bisa memengaruhi alur program.
Karena Program Counter merupakan satu-satunya register dalam
mikrokontroler yang mengatur alur program, maka kelompok instruksi
pengatur program yang dibicarakan di atas, semuanya merubah nilai
Program Counter, sehingga pada saat kelompok instruksi ini
dijalankan, nilai Program Counter tidak akan runtun dari nilai instruksi
sebelumnya.
Selain karena instruksi-instruksi di atas, nilai Program Counter bisa
pula berubah karena pengaruh perangkat keras, yaitu saat
mikrokontroler di-reset atau menerima sinyal interupsi dari perangkat
input/output. Hal ini akan dibicarakan secara detail pada pembahasan
selanjutnya.
Mikrokontroler menjalankan intruksi demi instruksi, selesai
menjalankan satu instruksi mikrokontroler langsung menjalankan
instruksi berikutnya, hal ini dilakukan dengan cara nilai Program

41
Counter bertambah sebanyak jumlah byte yang membentuk instruksi
yang sedang dijalankan, dengan demikian pada saat instruksi
bersangkutan dijalankan Program Counter selalu menyimpan nomor
memori-program yang menyimpan instruksi berikutnya.
Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai
Program Counter yang runtun sesuai dengan alur program diganti
dengan nomor memori-program baru yang dikehendaki programmer.
Mikrokontroler MCS-51 mempunyai 3 macam intruksi JUMP, yakni
instruksi LJMP (Long Jump), instruksi AJMP (Absolute Jump) dan
instruksi SJMP (Short Jump). Kerja dari ketiga instruksi ini persis
sama, yakni memberi nilai baru pada Program Counter, kecepatan
melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan
waktu 2 periode instruksi (jika MCS51 bekerja pada frekuensi 12 MHz,
maka instruksi ini dijalankan dalam waktu 2 mikro-detik), yang
berbeda dalam jumlah byte pembentuk instruksinya, instruksi LJMP
dibentuk dengan 3-byte, sedangkan instuksi AJMP dan SJMP cukup 2-
byte.

1. Instruksi LJMP

Kode untuk instruksi LJMP adalah 02h, nomor memori-program baru


yang dituju dinyatakan dengan bilangan biner 16-bit, dengan demikian
instruksi ini bisa menjangkau semua memori-program MCS-51 yang
jumlahnya 64 Kilo-Byte. Instruksi LJMP terdiri atas 3-byte, yang bisa
dinyatakan dengan bentuk umum 02 aa aa, “aa” yang pertama adalah
nomor memori-program bit ke-8 sampai dengan bit ke-15, sedangkan
“aa” yang kedua adalah nomor memori-program bit 0 sampai dengan
bit 7.

42
Pemakaian instruksi LJMP bisa dipelajari dari potongan program
berikut :

LJMP TugasBaru

ORG 2000h
TugasBaru:
MOV A,P3.1

Dalam potongan program di atas, ORG adalah perintah pada


assembler agar berikutnya assembler bekerja pada memori-program.
Nomor yang disebut di belakang ORG (dalam hal ini minta assembler
berikutnya bekerja pada memori-program nomor 2000h). TugasBaru
disebut sebagai LABEL, yakni sarana assembler untuk menandai/
menamai nomor memori-program. Dengan demikian, dalam potongan
program di atas, memori-program nomor 2000h diberi nama
TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai 2000h.
(Catatan : LABEL ditulis minimal satu huruf mulai baris paling kiri dari
instruksi, artinya LABEL ditulis setelah menekan tombol Enter, tapi
instruksi ditulis setelah menekan tombol Enter, kemudian diikuti
dengan 1 tombol spasi atau tombol TAB).
Dengan demikian intruksi LJMP TugasBaru di atas sama artinya
dengan LJMP 2000h yang oleh assembler akan diterjemahkan menjadi
02 20 00 (heksadesimal).

2. Instruksi AJMP

Nomor memori-program baru yang dituju dinyatakan dengan bilangan


biner 11-bit, dengan demikian instruksi ini hanya bisa menjangkau
satu daerah memori-program MCS-51 sejauh 2 Kilo Byte. Instruksi
AJMP terdiri atas 2-byte, byte pertama merupakan kode untuk
instruksi AJMP (00001b) yang digabung dengan nomor memori-

43
program bit nomor 8 sampai dengan bit nomor 10, byte kedua dipakai
untuk menyatakan nomor memori-program bit nomor 0 sampai
dengan bit nomor 7.
Berikut ini adalah potongan program untuk menjelaskan pemakaian
instruksi AJMP:

ORG 800h
AJMP DaerahIni
AJMP DaerahLain
ORG 900h
DaerahIni:
...
ORG 1000h
DaerahLain:
...

Potongan program di atas dimulai di memori-program nomor 800h,


dengan demikian instruksi AJMP label “DaerahIni” bisa dipakai, karena
nomor-memori 800h (tempat instruksi AJMP DaerahIni) dan LABEL
DaerahIni yang terletak di dalam satu daerah memori-progam 2 Kilo
Byte yang sama. (Dikatakan terletak di dalam satu daerah memori-
program 2 Kilo Byte yang sama, karena bit nomor 11 sampai dengan
bit nomor 15 dari nomor memorinya sama).
Tapi AJMP DaerahLain akan dibaca atau diterjemahkan salah oleh
Assembler, karena DaerahLain yang terletak di memori-program
nomor 1000h terletak di daerah memori-program 2 Kilo Byte yang
lain.
Karena instruksi AJMP hanya terdiri dari 2 byte, sedangkan instruksi
LJMP 3 byte, maka memakai instruksi AJMP lebih hemat memori-
program dibanding dengan LJMP. Hanya saja karena jangkauan
instrusksi AJMP hanya 2 Kilo Byte, pemakaiannya harus hati-hati.
Memori-program IC mikrokontroler AT89C1051 dan AT89C2051
masing-masing hanya 1 KiloByte dan 2 Kilo Byte, dengan demikian
program untuk kedua mikrokontroler di atas tidak perlu memakai

44
instruksi LJMP, karena program yang ditulis tidak mungkin
menjangkau lebih dari 2 Kilo Byte memori-program.

3. Instruksi SJMP

Nomor memori-program dalam instruksi ini tidak dinyatakan dengan


nomor memori-program yang sesungguhnya, tapi dinyatakan dengan
‘pergeseran relatif’ terhadap nilai Program Counter saat instruksi ini
dilaksanakan.
Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2’s
complement, yang bisa dipakai untuk menyakatakan nilai antara –128
sampai dengan +127. Nilai minus dipakai untuk menyatakan bergeser
ke instruksi-instruksi sebelumnya, sedangkan nilai positip untuk
menyatakan bergeser ke instruksi-instruksi sesudahnya.
Meskipun jangkauan instruksi SJMP hanya –128 sampai +127, tapi
instruksi ini tidak dibatasi dengan pengertian daerah memori-program
2 Kilo Byte yang membatasi instruksi AJMP.

ORG 0F80h

SJMP DaerahLain

ORG 1000h

DaerahLain:

Dalam potongan program di atas, memori-program 0F80h tidak


terletak dalam daerah memori-program 2 Kilo Byte yang sama dengan
1000h, tapi instruksi SJMP DaerahLain tetap bisa dipakai, asalkan
jarak antara instruksi itu dengan LABEL DaerahLain tidak lebih dari
127 byte.

45
4. Instruksi sub-rutin

Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul


program, selain melibatkan Program Counter, melibatkan pula Stack
yang diatur oleh Register Stack Pointer.
Sub-rutin merupakan suatu potong program yang karena berbagai
pertimbangan dipisahkan dari program utama. Bagian-bagian di
program utama akan ‘memanggil’ (CALL) sub-rutin, artinya
mikrokontroler sementara meninggalkan alur program utama untuk
mengerjakan instruksi-instruksi dalam sub-rutin, selesai mengerjakan
sub-rutin mikrokontroler kembali ke alur program utama.
Satu-satunya cara membentuk sub-rutin adalah memberi instruksi RET
pada akhir potongan program sub-rutin. Program sub-rutin di-’panggil’
dengan instruksi ACALL atau LCALL.
Agar nantinya mikrokontroler bisa meneruskan alur program utama,
pada saat menerima instruksi ACALL atau LCALL, sebelum
mikrokontroler pergi mengerjakan sub-rutin, nilai Program Counter
saat itu disimpan dulu ke dalam Stack (Stack adalah sebagian kecil
dari memori-data yang dipakai untuk menyimpan nilai Program
Counter secara otomatis, kerja dari Stack dikendalikan oleh Register
Stack Poiner).
Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam
sub-rutin sampai menemukan instruksi RET yang berfungsi sebagai
penutup dari sub-rutin. Saat menerima instruksi RET, nilai asal
Program Counter sebelum mengerjakan sub-rutin yang disimpan di
dalam Stack, dikembalikan ke Program Counter sehingga
mikrokontroler bisa meneruskan pekerjaan di alur program utama.

Instruksi ACALL dipakai untuk me-‘manggil’ program sub-rutin dalam


daerah memori-program 2 Kilo Byte yang sama, setara dengan

46
instruksi AJMP yang sudah dibahas sebelumnya. Sedangkan instruksi
LCALL setara dengan instruksi LCALL, yang bisa menjangkau seluruh
memori-program mikrokontroler MCS51 sebanyak 64 Kilo Byte. (tetapi
tidak ada instruski SCALL yang setara dengan instruksi SJMP).
Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai
instruksi LCALL.
Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping
itu masih ada pula instruksi RETI, yakni instruksi yang dipakai untuk
mengakhiri Program Layanan Interupsi (Interrupt Service Routine),
yaitu semacam program sub-rutin yang dijalankan mikrokontroler
pada saat mikrokontroler menerima sinyal permintaan interupsi.

Catatan : Ketika mikrokontroler menerima sinyal permintaaan


interupsi, mikrokontroler akan melakukan satu hal yang setara dengan
intruksi LCALL untuk menjalankan Program Layanan Interupsi dari
sinyal interupsi bersangkutan. Disamping itu, mikrokontroler juga
me-‘mati’-kan sementara mekanisme layanan interupsi, sehingga
permintaan interupsi berikutnya tidak dilayani. Saat menerima
instruksi RETI, makanisme layanan interusi kembali diaktipkan dan
mikrokontroler melaksanakan hal yang setara dengan instruksi RET.

5. Instruksi Lompatan Bersyarat

Instruksi Jump bersyarat merupakan instruksi inti bagi mikrokontroler,


tanpa kelompok instruksi ini program yang ditulis tidak banyak berarti.
Instruksi-instruksi ini selain melibatkan Program Counter, melibatkan
pula kondisi-kondisi tertentu yang biasanya dicatat dalam bit-bit
tertentu yang dihimpun dalam Register tertentu.

47
Khusus untuk keluarga mikrokontroler MCS-51 yang mempunyai
kemampuan menangani operasi dalam level bit, instruksi jump
bersyarat dalam MCS-51 dikaitkan pula dengan kemampuan operasi
bit MCS-51.
Nomor memori-program baru yang harus dituju tidak dinyatakan
dengan nomor memori-program yang sesungguhnya, tapi dinyatakan
dengan ‘pergeseran relatif’ terhadap nilai Program Counter saat
instruksi ini dilaksanakan. Cara ini dipakai pula untuk instruksi SJMP.

6. Instruksi JZ / JNZ

Instruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if not Zero) adalah
instruksi JUMP bersyarat yang memantau nilai Akumulator A.

MOV A,#0
JNZ BukanNol
JZ Nol
...
BukanNol:
...
Nol :
...

Dalam contoh program di atas, MOV A,#0 membuat A bernilai nol, hal
ini mengakibatkan instruksi JNZ Bukan Nol tidak akan pernah
dikerjakan (JNZ artinya Jump kalau nilai A<>0, syarat ini tidak pernah
dipenuhi karena saat instruksi ini dijalankan nilai A=0), sedangkan
instruksi JZ Nol selalu dikerjakan karena syaratnya selalu dipenuhi.

7. Instruksi JC / JNC

Instruksi JC (Jump on Carry) dan instruksi JNC (Jump on no Carry)


adalah instruksi jump bersyarat yang memantau nilai bit Carry di
dalam Program Status Word (PSW).

48
Bit Carry merupakan bit yang banyak sekali dipakai untuk keperluan
operasi bit, untuk menghemat pemakaian memori-program disediakan
2 instruksi yang khusus untuk memeriksa keadaan bit Carry, yakni JC
dan JNC. Karena bit akan diperiksa sudah pasti, yakni bit Carry, maka
instruksi ini cukup dibentuk dengan 2 byte saja, dengan demikian bisa
lebih menghemat memori program.

JC Periksa
JB PSW.7,Periksa

Hasil kerja kedua instruksi di atas sama, yakni MCS-51 akan


melakukan JUMP ke Label Periksa jika ternyata bit Carry bernilai ‘1’
(ingat bit Carry sama dengan PSW bit 7). Meskipun sama tapi instruksi
JC Periksa lebih pendek dari instruksi JB PSW.7,Periksa, instruksi
pertama dibentuk dengan 2 byte dan instruksi yang kedua 3 byte.
Instruksi JBC sama dengan instruksi JB, hanya saja jika ternyata bit
yang diperiksa memang benar bernilai ‘1’, selain MCS-51 akan JUMP
ke instruksi lain yang dikehendaki MCS-51 akan meng-nol-kan bit
yang baru saja diperiksa.

8. Instruksi JB / JNB / JBC

Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan
instruksi JBC (Jump on Bit Set Then Clear Bit) merupakan instruksi
Jump bersyarat yang memantau nilai-nilai bit tertentu. Bit-bit tertentu
bisa merupakan bit-bit dalam register status maupun kaki input
mikrokontroler MCS-51.
Pengujian Nilai Boolean dilakukan dengan instruksi JUMP bersyarat,
ada 5 instruksi yang dipakai untuk keperluan ini, yakni instruksi JB

49
(JUMP if bit set), JNB (JUMP if bit Not Set), JC (JUMP if Carry Bit set),
JNC (JUMP if Carry Bit Not Set) dan JBC (JUMP if Bit Set and Clear Bit).
Dalam instruksi JB dan JNB, salah satu dari 256 bit yang ada akan
diperiksa, jika keadaannya (false atau true) memenuhi syarat, maka
MCS-51 akan menjalankan instruksi yang tersimpan di memori-
program yang dimaksud. Alamat memori-program dinyatakan dengan
bilangan relatif terhadap nilai Program Counter saat itu, dan cukup
dinyatakan dengan angka 1 byte. Dengan demikian instruksi ini terdiri
dari 3 byte, byte pertama adalah kode operasinya (29h untuk JB dan
30h untuk JNB), byte kedua untuk menyatakan nomor bit yang harus
diuji, dan byte ketiga adalah bilangan relatif untuk instruksi tujuan.
Contoh pemakaian instruksi JB dan JNB sebagai berikut :

JB P1.1,$
JNB P1.1,$

Instruksi-instruksi di atas memantau kedaan kaki IC MCS-51 Port 1 bit


ke 1.
Instruksi pertama memantau P1.1, jika P1.1 bernilai ‘1’ maka MCS-51
akan mengulang instruksi ini, (tanda $ mempunyai arti jika syarat
terpenuhi kerjakan lagi instruksi bersangkutan). Instruksi berikutnya
melakukan hal sebaliknya, yakni selama P1.1 bernilai ‘0’ maka MCS-51
akan tertahan pada instruksi ini.

9. Instruksi proses dan test

Instruksi-instruksi Jump bersyarat yang dibahas di atas memantau


kondisi yang sudah terjadi yang dicatat MCS-51. Ada dua instruksi
yang melakukan suatu proses terlebih dahulu baru kemudian
memantau hasil proses untuk menentukan apakah harus melakukan
instruksi Jump. Kedua instruksi yang dimaksud adalah instruksi DJNZ
dan instruksi CJNE.

50
10. Instruksi DJNZ

Instruksi DJNZ (Decrement and Jump if not Zero), merupakan


instruksi yang akan mengurangi 1 nilai register serbaguna (R0..R7)
atau memori-data, dan Jump jika ternyata setelah pengurangan 1
tersebut hasilnya tidak nol.
Contoh berikut merupakan potongan program untuk membentuk
waktu tunda secara sederhana :

MOV R0,#23h
DJNZ R0,$

Instruksi MOV R0,#23 memberi nilai 23h pada R0, selanjutnya setiap
kali instruksi DJNZ R0,$ dikerjakan, MCS-51 akan mengurangi nilai R0
dengan ‘1’, jika R0 belum menjadi nol maka MCS-51 akan mengulang
instruksi tersebut (tanda $ dalam instruksi ini maksudnya adalah
kerjakan kembali instruksi ini). Selama mengerjakan 2 instruksi di
atas, semua pekerjaan lain akan tertunda, waktu tundanya ditentukan
oleh besarnya nilai yang diisikan ke R0.

11. Instruksi CJNE


Instruksi CJNE (Compare and Jump if Not Equal) membandingkan dua
nilai yang disebut dan MCS-51 akan melakukan Jump kalau kedua nilai
tersebut tidak sama.

MOV A,P1
CJNE A,#0Ah,TidakSama
...
SJMP EXIT
;
TidakSama:
...

51
Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE
A,#0Ah,Tidaksama memeriksa apakah nilai Port 1 yang sudah
disimpan di A sama dengan 0Ah, jika tidak maka Jump ke TidakSama

L. SOAL-SOAL LATIHAN
1. Sebutkan jenis-jenis instruksi pada mikrokontroler MCS-51

2. Jelaskan maksud instruksi-instruksi berikut:

a. MOV A,#35H

b. MOV A,R2

c. MOV P1, A

d. MOV A, P2

3. Sebutkan instruksi-instruksi dalam kelompok instruksi arithmatik

4. Sebutkan instruksi-instruksi dalam kelompok instruksi logika

5.Sebutkan instruksi-instruksi dalam kelompok instruksi


percabangan

6. Berikan 4 (empat) buah contoh instruksi percabangan bersyarat


dan jelaskan!

7. Jelaskan perbedaan instruksi JMP, SJMP dan LJMP

8. Berikan contoh instruksi percabangan pada sub-rutin

9. Jelaskan fungsi dari instruksi DJNZ R2,$

10. Jelaskan fungsi instruksi MUL AB

M. KESIMPULAN
Sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program
padanya. Program tersebut memberitahu mikrokontroler tentang apa
yang harus dikerjakan. Program pengendali mikrokontroler disusun

52
dari kumpulan instruksi, instruksi tersebut setara dengan kalimat
perintah bahasa manusia yang hanya terdiri atas predikat dan objek.
Dengan demikian tahap pertama pembuatan program pengendali
mikrokontroler dimulai dengan pengenalan dan pemahaman predikat
(kata kerja) dan objek apa saja yang dimiliki mikrokontroler.
Objek dalam pemrograman mikrokontroler adalah data yang
tersimpan di dalam memori, register dan input/output. Sedangkan
‘kata kerja’ yang dikenal pun secara umum dikelompokkan menjadi
perintah untuk perpindahan data, arithmetik, operasi logika,
pengaturan alur program dan beberapa hal khusus. Kombinasi dari
‘kata kerja’ dan objek itulah yang membentuk perintah pengatur kerja
mikrokontroler.

53
KEGIATAN BELAJAR IV

SISTEM PENGALAMATAN MCS-51

I. Tujuan Khusus Pembelajaran:


Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menjelaskan mode pengalamatan Immediate Addressing

2. Menjelaskan mode pengalamatan Direct Addressing

3. Menjelaskan mode pengalamatan Indirect Addressing

II. Materi Pembelajaran

A. Pengalamatan mikrokontroler MCS-51

Mode pengalamatan mengacu bagaimana anda mengalamati suatu


lokasi memori tertentu. Pengalamatan pada set instruksi 8051 terdiri
dari beberapa mode pengalamatan seperti berikut:

 Immediate Addressing
 Direct Addressing
 Indirect Addressing

1. Immediate Addressing

Immediate addressing dinamakan seperti ini, karena nilai yang akan


disimpan di dalam memori, secara langsung berada dalam kode.

54
ORG 0h
START: MOV A,#20h; put constant 20 into Acc
END

ORG 0h
START: MOV 70h,#0h; put constant 0 into RAM 70h
MOV 71h,#1h;
MOV 72h,#2h;
END

ORG 0h
START: MOV DPTR,#1234h;put constant 1234 into DPTR
END

ORG 0h
START: MOV PSW,#0; Select register bank 0
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
END

ORG 0h
START: MOV PSW,#8; Select register bank 1
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
END

Immediate addressing merupakan pengalamatan yang sangat cepat


karena nilai yang akan ditempatkan berada di dalam instruksi
tersebut.

55
2. Direct Addressing

Disebut direct addressing karena nilai yang akan disimpan di dalam


memori diperoleh secara langsung dari memori yang lain.

ORG 0h
START: MOV A,30h;
END

ORG 0h
START: MOV 70h,#1;put constant 1 into RAM 70h
MOV A, 70h;copy RAM 70 content into Acc
MOV A,#0 ;put constant 0 into Acc
MOV 90h,A ;copy Acc content into RAM 90h
END

INBYTE EQU 70h


PORT1 EQU 90h
ORG 0h
START: MOV INBYTE,#3;put constant 3 into RAM 70h
MOV A,INBYTE ;copy RAM 70h content into Acc
MOV A,#0 ;Clear accumulator
MOV PORT1,A ;copy Acc content into RAM 90h
END

ORG 0h
MOV DPTR,#CHARACTER
START: MOV A, #0
INC DPTR
MOVC A, @A+DPTR
MOV R0,A
SJMP START
CHARACTER:
DB 0,1,2,3,4,5,6,7,8,9

3. Indirect Addressing

Indirect addressing adalah mode pengalamatan yang sangat ampuh,


yang memberikan fleksibilitas dalam hal transfer data. Indirect
addressing juga satu-satunya cara untuk mengakses 128 byte ekstra
dari internal RAM yang ditemukan pada keluarga 8052.

56
MOV A,@R0

Instruksi ini menyebabkan 8051 menganalisa nilai dari register R0.


8051 kemudian akan meng”kopi” data ke akumulator dengan nilai
yang berasal dari alamat RAM internal yang ditunjukkan oleh R0.
Sebagai contoh, misal R0 akan digunakan untuk menandai alamat
RAM 40h yang berisi data 67h. Ketika instruksi diatas dieksekusi maka
8051 akan melihat nilai dari R0, yang berisi 40h, dan mengirimkan isi
RAM 40h (dalam hal ini mempunyai nilai 67h) ke Accumulator.

MOV R0,#99h ;
MOV @R0,#01h;

Instruksi tersebut adalah tidak valid. Karena indirect addressing selalu


mengacu ke RAM internal, dua instruksi ini akan menulis nilai 01 ke
RAM internal alamat 99h pada 8052. Pada 8051 instruksi tersebut
akan menghasilkan hasil yang tak terdifinisi, karena 8051 hanya
mempunyai internal RAM 128 byte.

ORG 0h
START: MOV PSW, #0 ; choose register bank 0
MOV R0, #78h; put constant 78h into R0
MOV @R0, #1 ; put contanta 1 into 78h
END

ORG 0h
START: MOV PSW,#0; pilih register bank 1
MOV R0,90h; copy RAM 90h content into R0
MOV @R0,#1; put constant 1 into 90h
END

B. SOAL-SOAL LATIHAN

57
1. Sebutkan jenis-jenis pengalamatan pada mikrokontroler MCS-
51 dan jelaskan!

2. Berikan 3 (tiga) buah contoh instruksi immediate addressing

3. Berikan 3 (tiga) buah contoh instruksi direct addressing

4. Berikan 3 (tiga) buah contoh instruksi indirect addressing

5. Jelaskan arti tiap instruksi berikut dan termasuk dalam kategori


pengalamatan yang mana

a. MOV A, #25H

b. MOV A, R4

c. MOV A, P2

d. MOV A, @R0

e. MOV @R1, A

C. KESIMPULAN

Mode pengalamatan mengacu bagaimana anda mengalamati suatu


lokasi memori tertentu. Pengalamatan pada set instruksi 8051 terdiri
dari beberapa mode pengalamatan seperti berikut:

 Immediate Addressing
 Direct Addressing
 Indirect Addressing
Immediate addressing merupakan pengalamatan dimana, nilai yang
akan disimpan di dalam memori secara langsung berada dalam kode.

Disebut direct addressing karena nilai yang akan disimpan di dalam


memori diperoleh secara langsung dari memori yang lain.

58
Indirect addressing adalah mode pengalamatan yang sangat ampuh,
yang memberikan fleksibilitas dalam hal transfer data. Indirect
addressing juga satu-satunya cara untuk mengakses 128 byte ekstra
dari internal RAM yang ditemukan pada keluarga 8052.

MOV A,@R0

Instruksi ini menyebabkan 8051 menganalisa nilai dari register R0.


8051 kemudian akan meng”kopi” data ke akumulator dengan nilai
yang berasal dari alamat RAM internal yang ditunjukkan oleh R0.

59
KEGIATAN BELAJAR V

TIMER/COUNTER
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menjelaskan konsep dasar tentang timer/counter

2. Menjelaskan mode operasi dari timer/counter dalam mikrokontroler


MCS-51

3. Menjelaskan fungsi dari register-register dalam timer/counter

4. Melakukan pengaturan pada timer/counter

II. Materi Pembelajaran

A. Konsep Dasar Timer/Counter

Timer dan Counter merupakan sarana input yang kurang dapat


perhatian pemakai mikrokontroler, dengan sarana input ini
mikrokontroler dengan mudah bisa dipakai untuk mengukur lebar
pulsa, membangkitkan pulsa dengan lebar yang pasti, dipakai dalam
pengendalian tegangan secara PWM (Pulse Width Modulation) dan
sangat diperlukan untuk aplikasi remote control dengan infra merah.
Pada dasarnya sarana input yang satu ini merupakan seperangkat
pencacah biner (binary counter) yang terhubung langsung ke saluran-
data mikrokontroler, sehingga mikrokontroler bisa membaca
kedudukan pancacah, bila diperlukan mikrokontroler dapat pula
merubah kedudukan pencacah tersebut.
Seperti layaknya pencacah biner, bilamana sinyal denyut (clock) yang
diumpankan sudah melebihi kapasitas pencacah, maka pada bagian

60
akhir untaian pencacah akan timbul sinyal limpahan, sinyal ini
merupakan suatu hal yang penting sekali dalam pemakaian pencacah.
Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop
tersendiri.
Di samping itu, sinyal denyut yang diumpankan ke pencacah harus
pula bisa dikendalikan dengan mudah. Hal-hal yang dibicarakan di atas
diringkas dalam Gambar 9.
MCS-51 mempunyai dua buah register timer/ counter 16 bit, yaitu
Timer 0 dan Timer 1. Keduanya dapat dikonfigurasikan untuk
beroperasi sebagai timer atau counter, seperti yang terlihat pada
gambar di bawah.

Gambar 9. Konsep dasar Timer/Counter sebagai sarana input

Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi


2 macam, yang pertama adalah sinyal denyut dengan frekuensi tetap
yang sudah diketahui besarnya dan yang kedua adalah sinyal denyut
dengan frekuensi tidak tetap.
Jika sebuah pencacah bekerja dengan frekuensi tetap yang sudah
diketahui besarnya, dikatakan pencacah tersebut bekerja sebagai

61
timer, karena kedudukan pencacah tersebut setara dengan waktu
yang bisa ditentukan dengan pasti.
Jika sebuah pencacah bekerja dengan frekuensi yang tidak tetap,
dikatakan pencacah tersebut bekerja sebagai counter, kedudukan
pencacah tersebut hanyalah menyatakan banyaknya pulsa yang sudah
diterima pencacah.
Untaian pencacah biner yang dipakai bisa merupakan pencacah biner
naik (count up binary counter) atau pencacah biner menurun (count
down binary counter).

B. Fasilitas Timer/Counter

Keluarga mikrokontroler MCS-51, misalnya AT89C51 dan AT89Cx051,


dilengkapi dengan dua perangkat Timer/Counter, masing-masing
dinamakan sebagai Timer 0 dan Timer 1. Sedangkan untuk jenis yang
lebih besar, misalnya AT89C52, mempunyai tambahan satu perangkat
Timer/Counter lagi yang dinamakan sebagai Timer 2.
Perangkat Timer/Counter tersebut merupakan perangkat keras yang
menjadi satu dalam chip mikrokontroler MCS-51, bagi pemakai
mikrokontroler MCS-51 perangkat tersebut dikenal sebagai SFR
(Special Function Register) yang berkedudukan sebagai memori-data
internal.
Pencacah biner untuk Timer 0 dibentuk dengan register TL0 (Timer 0
Low Byte, memori-data internal nomor 6Ah) dan register TH0 (Timer 0
High Byte, memori-data internal nomor 6Ch).
Pencacah biner untuk Timer 1 dibentuk dengan register TL1 (Timer 1
Low Byte, memori-data internal nomor 6Bh) dan register TH1 (Timer 1
High Byte, memori-data internal nomor 6Dh).

62
Pencacah biner pembentuk Timer/Counter MCS-51 merupakan
pencacah biner menaik (count up binary counter) yang mencacah dari
0000h sampai FFFFh, saat kedudukan pencacah berubah dari FFFFh
kembali ke 0000 akan timbul sinyal limpahan.Untuk mengatur kerja
Timer/Counter dipakai 2 register tambahan yang dipakai bersama oleh
Timer 0 dan Timer 1. Register tambahan tersebut adalah register
TCON (Timer Control Register, memori-data internal nomor 88h, bisa
dialamati secara bit) dan register TMOD (Timer Mode Register,
memori-data internal nomor 89h).

C. Mode Timer/Counter
TL0, TH0, TL1 dan TH1 merupakan SFR (Special Function Register)
yang dipakai untuk membentuk pencacah biner perangkat Timer 0 dan
Timer 1. Kapasitas keempat register tersebut masing-masing sebesar
8 bit, bisa disusun menjadi 4 macam Mode pencacah biner seperti
terlihat dalam Gambar 10 sampai Gambar 13.
Pada Mode 0, Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing
bekerja sendiri, artinya bisa dibuat Timer 0 bekerja pada Mode 1 dan
Timer 1 bekerja pada Mode 2, atau kombinasi mode lainnya sesuai
dengan keperluan.
Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama untuk
menyusun sistem timer yang tidak bisa dikombinasi dengan yang lain.
Susunan TL0, TH0, TL1 dan TH1 pada masing-masing mode adalah
sebagai berikut:

1. Mode 0 – Pencacah Biner 13 bit

63
Gambar 10. Mode 0 - Pencacah Biner 13 Bit

Pencacah biner dibentuk dengan TLx (maksudnya bisa TL0 atau TL1)
sebagai pencacah biner 5 bit (meskipun kapasitas sesungguhnya 8
bit), limpahan dari pencacah biner 5 bit ini dihubungkan ke THx
(maksudnya bisa TH0 atau TH1) membentuk sebuah untaian pencacah
biner 13 bit, limpahan dari pencacah 13 bit ini ditampung di flip-flop
TFx (maksudnya bisa TF0 atau TF1) yang berada di dalam register
TCON. Mode ini meneruskan sarana Timer yang ada pada
mikrokontroler MCS-48 (mikrokontroler pendahulu MCS-51), dengan
maksud rancangan alat yang dibuat dengan MCS-48 bisa dengan
mudah diadaptasikan ke MCS-51. Mode ini tidak banyak dipakai lagi.

2. Mode 1 – Pencacah Biner 16 bit

Gambar 11. Mode 1 - Pencacah Biner 16 Bit

Mode ini sama dengan Mode 0, hanya saja register TLx dipakai
sepenuhnya sebagai pencacah biner 8 bit, sehingga kapasitas
pencacah biner yang terbentuk adalah 16 bit. Seiring dengan sinyal
denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari 0000
(biner 0000 0000 0000 0000), 0001h, 0002h … sampai FFFFh (biner
1111 1111 1111 1111), kemudian melimpah kembali menjadi 0000.

64
3. Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang

Gambar 12. Mode 2 - Pencacah Biner 8 Bit dengan Isi Ulang

TLx dipakai sebagai pencacah biner 8 bit, sedangkan THx dipakai


untuk menyimpan nilai yang diisikan ulang ke TLx, setiap kali
kedudukan TLx melimpah (berubah dari FFh menjadi 00h). Dengan
cara ini bisa didapatkan sinyal limpahan yang frekuensinya ditentukan
oleh nilai yang disimpan dalam TH0.

4. Mode 3 – Gabungan Pencacah Biner 16 bit dan 8 Bit

Gambar 13. Mode 3 Gabungan Pencacah Biner 16 Bit dan 8 Bit

Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3
untaian pencacah, yang pertama adalah untaian pencacah biner 16 bit
tanpa fasiltas pemantau sinyal limpahan yang dibentuk dengan TL1
dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner
8 bit dengan TF0 sebagai sarana pemantau limpahan. Pencacah biner

65
ketiga adalah TH0 yang dipakai sebagai pencacah biner 8 bit dengan
TF1 sebagai sarana pemantau limpahan.

D. Register Pengatur Timer

Register TMOD dan register TCON merupakan register pembantu


untuk mengatur kerja Timer 0 dan Timer 1, kedua register ini dipakai
bersama oleh Timer 0 dan Timer 1.

Gambar 14. Denah susunan bit dalam register TMOD

Register TMOD dibagi menjadi 2 bagian secara simetris, bit 0 sampai 3


register TMOD (TMOD bit 0 .. TMOD bit 3) dipakai untuk mengatur
Timer 0, bit 4 sampai 7 register TMODE (TMOD bit 4 .. TMOD bit 7)
dipakai untuk mengatur Timer 1, pemakaiannya sebagai berikut :

1. Bit M0/M1 dipakai untuk menentukan Mode Timer seperti yang


terlihat dalam Tabel di Gambar 15.

2. Bit C/T* dipakai untuk mengatur sumber sinyal denyut yang


diumpankan ke pencacah biner. Jika C/T*=0 sinyal denyut
diperoleh dari osilator kristal yang frekuensinya sudah dibagi 12,
sedangkan jika C/T*=1 maka sinyal denyut diperoleh dari kaki T0
(untuk Timer 0) atau kaki T1 (untuk Timer 1).

3. Bit GATE merupakan bit pengatur saluran sinyal denyut. Bila bit
GATE=0 saluran sinyal denyut hanya diatur oleh bit TRx

66
(maksudnya adalah TR0 atau TR1 pada register TCON). Bila bit
GATE=1 kaki INT0 (untuk Timer 0) atau kaki INT1 (untuk Timer 1)
dipakai juga untuk mengatur saluran sinyal denyut (lihat Gambar
14).

Gambar 15. Denah susunan bit dalam register TCON

Register TCON dibagi menjadi 2 bagian, 4 bit pertama (bit 0 .. bit 3,


bagian yang diarsir dalam Gambar 15) dipakai untuk keperluan
mengatur kaki INT0 dan INT1, ke-empat bit ini dibahas di bagian lain.

Tabel 6. Bit-bit pada register TCON

MSB LSB

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

BIT SYMBOL FUNCTION

Timer 1 overflow flag. Set by hardware on


Timer/Counter overflow. Cleared by hardware when
TCON.7 TF1
processor vector to interrupt routine, or clearing the
bit in software.

Timer 1 Run control bit . Set/ cleared by software to


TCON.6 TR1
turn Timer/ Counter on/off

Timer 0 overflow flag. Set by hardware on


Timer/Counter overflow. Cleared by hardware when
TCON.5 TF0
processor vector to interrupt routine, or clearing the
bit in software.

TCON.4 TR0 Timer 1 Run control bit . Set/ cleared by software to

67
turn Timer/ Counter on/off

Interrupt 1 Edge flag. Set by hardware when external


TCON.3 IE1 interrupt edge detected. Cleared when interrupt
processed.

Interrupt 1 type control bit. Set/ cleared by software


TCON.2 IT1 to specefy falling edge/ low level trigerred external
interrupts

Interrupt 0 Edge flag. Set by hardware when external


TCON.1 IE0 interrupt edge detected. Cleared when interrupt
processed.

Interrupt 0 type control bit. Set/ cleared by


TCON.0 IT0 software to specefy falling edge/ low level
trigerred external interrupts

Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian
secara simetris yang dipakai untuk mengatur Timer0/Timer 1, sebagai
berikut:

a. Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit


penampung limpahan (lihat Gambar 1.9), TFx akan menjadi ‘1’
setiap kali pencacah biner yang terhubung padanya melimpah
(kedudukan pencacah berubah dari FFFFh kembali menjadi 0000).
Bit TFx di-nol-kan dengan istruksi CLR TF0 atau CLR TF1. Jika
sarana interupsi dari Timer 0/Timer 1 dipakai, TRx di-nol-kan saat
MCS-51 menjalankan rutin layanan interupsi (ISR – Interupt
Service Routine).

b. Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit


pengatur saluran sinyal denyut, bila bit ini =0 sinyal denyut tidak
disalurkan ke pencacah biner sehingga pencacah berhenti
mencacah. Bila bit GATE pada register TMOD =1, maka saluran

68
sinyal denyut ini diatur bersama oleh TRx dan sinyal pada kaki
INT0/INT1.

E. Mengatur Timer

Gambar 16 merupakan bagan susunan rangkaian yang bisa terjadi


pada Timer 1 secara lengkap, digambarkan pula hubungan-hubungan
semua register pembentuk dan pengatur Timer 1. Gambar ini berlaku
pula untuk Timer 0.
Dalam pemakaian sesungguhnya, rangkaian yang dipakai hanya
sebagian dari rangkaian lengkap tersebut, sesuai dengan keperluan
sistem yang dibangun. Rangkaian yang dikehendaki dibentuk dengan
mengatur register TMODE, sedangkan kerja dari Timer dikendalikan
lewat register TCON.

Gambar 16. Diagram blok timer/ counter

Setelah MCS-51 di-reset register TMOD bernilai 00, hal ini berarti :

1. Bit C/T* =’0’, menurut Gambar 16 keadaan ini membuat saklar S1


ke posisi atas, sumber sinyal denyut berasal dari osilator kristal

69
yang frekuensinya sudah dibagi 12, pencacah biner yang dibentuk
dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang
dirancang memang menghendaki Timer 1 bekerja sebagai timer
maka bit C/T* tidak perlu diatur lagi.

Tetapi jika sistem yang dirancang menghendaki agar Timer 1


bekerja sebagai counter untuk menghitung pulsa yang masuk lewat
kaki T1 (P3.5), maka posisi saklar S1 harus berada pada posisi ke
bawah dengan membuat bit C/T* menjadi ‘1’.

2. Bit GATE=’0’, hal ini membuat output gerbang OR selalu ‘1’ tidak
dipengaruhi keadaan ‘0’ atau ‘1’ pada kaki INT1 (P3.3). Dalam
keadaan semacam ini, saklar S2 hanya dikendalikan lewat bit TR1
dalam register TCON. Jika TR1=’1’ saklar S2 tertutup sehingga
sinyal denyut dari S1 disalurkan ke sistem pencacah biner, aliran
sinyal denyut akan dihentikan jika TR=’0’.

Sebaliknya jika bit GATE=’1’, output gerbang OR akan mengikuti


keadaan kaki INT1, saat INT1=’0’ apa pun keadaan bit TR1 output
gerbang AND selalu =’0’ dan saklar S1 selalu terbuka, agar saklar
S1 bisa tertutup kaki INT1 dan bit TR1 harus =’1’ secara
bersamaan.Jika sistem yang dirancang menghendaki kerja dari
timer/counter dikendalikan dari sinyal yang berasal dari luar chip,
maka bit GATE harus dibuat menjadi ‘1’.

3. Bit M1 dan M0 =’0’, berarti TL1 dan TH1 disusun menjadi


pencacah biner 13 bit (Mode 0), jika dikehendaki Timer 1 bekerja
pada mode 1 seperti terlihat dalam Gambar 11, maka bit M1 harus
dibuat menjadi ‘0’ dan bit M0 menjadi ‘1’.

70
Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan
mengendalikan Timer seperti terlihat dalam contoh-contoh berikut :

Setelah reset TMOD bernilai 00, berarti Timer 1 bekerja sebagai


pencacah biner 13 bit, sumber sinyal denyut dari osilator kristal
atau Timer 1 bekerja sebagai ‘timer’, bit GATE =’0’ berarti kaki
INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya
dikendalikan dari bit TR1.

Dalam pemakaian biasanya dipakai pencacah biner 16 bit, untuk


keperluan itu instruksi yang diperlukan untuk mengatur TMOD
adalah :

MOV TMOD,#00010000b

Catatan dalam instruksi di atas tanda ‘#’ menyatakan bagian di


belakangnya adalah bilangan konstan yang akan diisikan ke TMOD,
tanda ”b” merupakan menandakan bahwa bilangan tersebut
merupakan bilangan biner. Penulisan dengan bilangan biner semacam
ini memudahkan untuk mengenali dengan cepat bit-bit apa saja yang
diisikan ke TMOD.
Bilangan biner 00010000b diisikan ke TMOD, berakibat bit 7 TMOD (bit
GATE) bernilai ‘0’, bit 6 (bit C/T*) bernilai ‘0’, bit 5 dan 4 (bit M1 dan
M0) bernilai ‘01’, ke-empat bit ini dipakai untuk mengatur Timer 1,
sehingga Timer 1 bekerja sebagai timer dengan pencacah biner 16 bit
yang dikendalikan hanya dengan TR1.
Jika dikehendaki pencacah biner dipakai sebagai counter untuk
mencacah jumlah pulsa yang masuk lewat kaki T1 (P3.5),
instruksinya menjadi :

MOV TMOD,#01010000b

71
Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6
(bit C/T*) bernilai ‘1’. Selanjutnya jika diinginkan sinyal dari perangkat
keras di luar chip MCS-51 bisa ikut mengendalikan Timer 1, instruksi
pengatur Timer 1 akan menjadi :

MOV TMOD,#11010000b

Dalam hal ini bit 7 (bit GATE) bernilai ‘1’.


Setelah mengatur konfigurasi Timer 0 seperti di atas, pencacah biner
belum mulai mencacah sebelum diberikan instruksi :

SETB TR1

Perlu diingatkan jika bit GATE = ‘1’, selama kaki INT1 bernilai ‘0’
pencacah biner belum akan mencacah. Untuk menghentikan proses
pencacahan, digunakan instruksi:

CLR TR1

Di atas hanya dibahas Timer 1 saja, tata cara untuk Timer 0 persis
sama. Yang perlu diperhatikan adalah register TMOD dipakai untuk
mengatur Timer 0 dan juga Timer 1, sedangkan TMOD tidak bisa
dialamati secara bit (non bit addressable) sehingga jika jika kedua
Timer dipakai, pengisian bit-bit dalam register TMOD harus dipikirkan
sekaligus untuk Timer 0 dan Timer 1.
Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses
pencacahan, terletak di dalam register TCON (memori-data internal
nomor 88h) yang bisa dialamati secara bit (bit addressable). Sehingga
TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB atau
CLR), tidak seperti mengatur TMOD yang harus dilakukan secara
bersamaan. Demikian pula bit penampung limpahan pencacah biner
TF0 dan TF1, juga terletak dalam register TCON yang masing-masing
bisa di-monitor sendiri.

72
Sebagimana ditunjukkan pada gambar 16 mikrokontroller dapat
beraksi sebagai timer atau counter, sesuai dengan kebutuhan.
Perhatikan pada saklar sebelah kiri dan kanan pada diagram blok
tersebut. Mikrokontroler akan berfungsi sebagai timer ketika saklar
diposisikan ke atas dan sebaliknya akan berfungsi sebagai counter bila
saklar diposisikan ke bawah, dengan mengontrol bit C/T pada register
TMOD. Posisi saklar sebelah kanan, bergantung pada bit GATE
(register TMOD), TR1 ( register TCON dan INT1).

F. SOAL-SOAL LATIHAN

1. Jelaskan konsep dasar dari timer/counter, gambarkan secara


diagram blok.

2. Jelaskan perbedaan antara timer dengan counter

3. Jelaskan prinsip kerja dari timer/counter Mode 0

4. Jelaskan prinsip kerja dari timer/counter Mode 1

5. Jelaskan prinsip kerja dari timer/counter Mode 2

6. Jelaskan prinsip kerja dari timer/counter Mode 3

7. Jelaskan fungsi bit-bit pada register TMOD

8. Jelaskan fungsi bit-bit pada register TCON

9. Jelaskan arti dari instruksi berikut: MOV TMOD,#11010000b

10. Jelaskan arti dari instruksi berikut: MOV TMOD,#01010000b

G. KESIMPULAN

73
Pada dasarnya sarana input yang disebut dengan timer/counter
merupakan seperangkat pencacah biner (binary counter) yang
terhubung langsung ke saluran-data mikrokontroler, sehingga
mikrokontroler bisa membaca kedudukan pancacah, bila diperlukan
mikrokontroler dapat pula merubah kedudukan pencacah tersebut.
Seperti layaknya pencacah biner, bilamana sinyal denyut (clock) yang
diumpankan sudah melebihi kapasitas pencacah, maka pada bagian
akhir untaian pencacah akan timbul sinyal limpahan, sinyal ini
merupakan suatu hal yang penting sekali dalam pemakaian pencacah.
Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop
tersendiri. MCS-51 mempunyai dua buah register timer/ counter 16
bit, yaitu Timer 0 dan Timer 1. Keduanya dapat dikonfigurasikan untuk
beroperasi sebagai timer atau counter.
Timer/counter pada mikrokontroler MCS-51 memiliki 4 (empat) mode
operasi yaitu; Mode 0, Mode 1, Mode 2 dan Mode 3. Pada Mode 0,
Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing bekerja
sendiri, artinya bisa dibuat Timer 0 bekerja pada Mode 1 dan Timer 1
bekerja pada Mode 2, atau kombinasi mode lainnya sesuai dengan
keperluan. Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama
untuk menyusun sistem timer yang tidak bisa dikombinasi dengan
yang lain.
Timer/counter pada mikrokontroler MCS-51 memiliki 2 macam register
pengatur timer/counter yang disebut dengan TMOD dan TCON.

KEGIATAN BELAJAR VI

SISTEM INTERUPSI

74
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menjelaskan sistem interupsi pada mikrokontroler MCS-1

2. Menyebutkan sumber instruksi pada mikrokontroler MCS-51

3. Menentukan vektor interupsi pada mikrokontroler MCS-51

4. Menentukan prioritas sistem interupsi mikrokontroler MCS-51

II. Materi Pembelajaran

A. Sistem Interupsi

MCS-51 mempunyai 5 buah sumber interupsi. Dua buah interupsi


eksternal, dua buah interupsi timer dan sebuah interupsi port serial.
Meskipun memerlukan pemahaman yang lebih mendalam,
pengetahuan mengenai interupsi sangat membantu mengatasi
masalah pemrograman mikroprosesor/mikrokontroler dalam hal
menangani banyak peralatan input/output. Pengetahuan mengenai
interupsi tidak cukup hanya dibahas secara teori saja, diperlukan
contoh program yang konkrit untuk memahaminya.
Saat pin RESET pada IC mikroprosesor/mikrokontroler menerima
sinyal reset (pada MCS-51 sinyal tersebut berupa sinyal ‘1’ sesaat,
pada prosesor lain umumnya merupakan sinyal ‘0’ sesaat), Program
Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai
vektor reset (reset vector), merupakan nomor awal memori-program
yang menampung instruksi pertama program yang harus dijalankan.
Pembahasan di atas memberi gambaran bahwa proses reset
merupakan peristiwa perangkat keras (sinyal reset diumpankan ke
kaki Reset) yang dipakai untuk mengatur kerja dari perangkat lunak,

75
yakni menentukan aliran program prosesor (mengisi Program Counter
dengan vektor reset).
Program yang dijalankan dengan cara reset, merupakan program
utama bagi prosesor.
Kinerja dari perangkat keras yang digunakan untuk mengatur kerja
dari perangkat lunak, tidak hanya terjadi pada proses reset, tapi
terjadi pula dalam proses interupsi.
Dalam proses interupsi, terjadinya sesuatu pada perangkat keras
tertentu dicatat dalam flip-flop khusus, flip-flop tersebut sering disebut
sebagai ‘penanda’ (flag), catatan dalam penanda tersebut diatur
sedemikian rupa sehingga bisa merupakan sinyal permintaan interupsi
pada prosesor. Jika permintaan interupsi ini dilayani prosesor,
Program Counter akan diisi dengan sebuah nilai. Nilai tersebut
dinamakan sebagai vektor interupsi (interrupt vector), yang
merupakan nomor awal memori-program yang menampung program
yang dipakai untuk melayani permintaan interupsi tersebut.
Program yang dijalankan dengan cara interupsi, dinamakan sebagai
program layanan interupsi (ISR - Interrupt Service Routine). Saat
prosesor menjalankan ISR, pekerjaan yang sedang dikerjakan pada
program utama sementara ditinggalkan, selesai menjalankan ISR
prosesor kembali menjalankan program utama, seperti yang
digambarkan dalam Gambar 17.

Gambar 17. Bagan kerja prosesor melayani interupsi

76
Sebuah prosesor bisa mempunyai beberapa perangkat keras yang
merupakan sumber sinyal permintaan interupsi, masing-masing
sumber interupsi dilayani dengan ISR berlainan, dengan demikian
prosesor mempunyai beberapa vektor interupsi untuk memilih ISR
mana yang dipakai melayani permintaan interupsi dari berbagai
sumber. Kadang kala sebuah vektor interupsi dipakai oleh lebih dari
satu sumber interupsi yang sejenis, dalam hal semacam ini ISR
bersangkutan harus menentukan sendiri sumber interupsi mana yang
harus dilayani saat itu.
Bila pada saat yang sama terjadi lebih dari satu permintaan interupsi,
prosesor akan melayani permintaan interupsi tersebut menurut
perioritas yang sudah ditentukan, selesai melayani permintaan
interupsi perioritas yang lebih tinggi, prosesor melayani permintaan
interupsi berikutnya, baru setelah itu kembali mengerjakan program
utama.
Ketika prosesor sedang mengerjakan ISR, bisa jadi terjadi permintaan
interupsi lain, jika permintaan interupsi yang datang belakangan ini
mempunyai perioritas lebih tinggi, ISR yang sedang dikerjakan
ditinggal dulu, prosesor melayani permintaan yang perioritas lebih
tinggi, selesai melayani interupsi perioritas tinggi prosesor
meneruskan ISR semula, baru setelah itu kembali mengerjakan
program utama. Hal ini dikatakan sebagai interupsi bertingkat (nested
interrupt), tapi tidak semua prosesor mempunyai kemampuan
melayani interupsi secara ini.

B. Sumber interupsi MCS-51

77
Seperti terlihat dalam Gambar 18, AT89C51 mempunyai 6 sumber
interupsi, yakni Interupsi Eksternal (External Interrupt) yang berasal
dari kaki INT0 dan INT1, Interupsi Timer (Timer Interrupt) yang
berasal dari Timer 0 maupun Timer 1, Interupsi Port Seri (Serial Port
Interrupt) yang berasal dari bagian penerima dan bagian pengirim Port
Seri.
Di samping itu AT89C52 mempunyai 2 sumber interupsi lain, yakni
Interupsi Timer 2 bersumber dari Timer 2 yang memang tidak ada
pada AT89C51.
Bit IE0 (atau bit IE1) dalam TCON merupakan penanda (flag) yang
menandakan adanya permintaan Interupsi Eksternal. Ada 2 keadaan
yang bisa meng-aktif-kan penanda ini, yang pertama karena level
tegangan ‘0’ pada kaki INT0 (atau INT1), yang kedua karena terjadi
transisi sinyal ‘1’ menjadi ‘0’ pada kaki INT0 (atau INT1). Pilihan
bentuk sinyal ini ditentukan lewat bit IT0 (atau bit IT1) yang terdapat
dalam register TCON.

1. Bila bit IT0 (atau IT1) =’0’ maka bit IE0 (atau IE1) dalam TCON
menjadi ‘1’ saat kaki INT0=’0’.
2. Bila bit IT0 (atau IT1) =’1’ maka bit IE0 (atau IE1) dalam TCON
menjadi ‘1’ saat terjadi transisi sinyal ‘1’ menjadi ‘0’ pada kaki
INT0.

Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0


(atau bit IE1) dikembalikan menjadi ‘0’, menandakan permintaan
Interupsi Eksternal sudah dilayani. Namun jika permintaan Interupsi
Ekternal terjadi karena level tegangan ‘0’ pada kaki IT0 (atau IT1),
dan level tegangan pada kaki tersebut saat itu masih =’0’ maka bit IE0
(atau bit IE1) akan segera menjadi ‘1’ lagi!

78
Bit TF0 (atau bit TF1) dalam TCON merupakan penanda (flag) yang
menandakan adanya permintaan Interupsi Timer, bit TF0 (atau bit
TF1) menjadi ‘1’ pada saat terjadi limpahan pada pencacah biner
Timer 0 (atau Timer 1).

Pada saat prosesor menjalankan ISR dari Interupsi Timer, bit TF0
(atau bit TF1) dikembalikan menjadi ‘0’, menandakan permintaan
Interupsi Timer sudah dilayani.
Interupsi port serial terjadi karena dua hal, yang pertama terjadi
setelah port seri selesai mengirim data 1 byte, permintaan interupsi
semacam ini ditandai dengan penanda (flag) TI=’1’. Yang kedua
terjadi saat port seri telah menerima data 1 byte secara lengkap,
permintaan interupsi semacam ini ditandai dengan penanda (flag)
RI=’1’.
Penanda di atas tidak dikembalikan menjadi ‘0’ menjelang prosesor
menjalankan ISR dari Interupsi port seri, karena penanda tersebut
masih diperlukan ISR untuk menentukan sumber interupsi berasal dari
TI atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau
menerima data, penanda-penanda tersebut harus di-nol-kan lewat
program.
Penanda permintaan interupsi (IE0, TF0, IE1, TF1, RI dan TI)
semuanya bisa di-nol-kan atau di-satu-kan lewat instruksi,
pengaruhnya sama persis kalau perubahan itu dilakukan oleh
perangkat keras. Artinya permintaan interupsi bisa diajukan lewat
pemrograman, misalnya permintaan interupsi eksternal IT0 bisa
diajukan dengan instruksi SETB IE0.

79
Gambar 18. Sumber Interupsi

C. Mengaktifkan Interupsi

Semua sumber permintaan interupsi yang di bahas di atas, masing-


masing bisa di-aktif-kan atau di-non-aktif-kan secara tersendiri lewat
bit-bit yang ada dalam register IE (Interrupt Enable Register).
Bit EX0 dan EX1 untuk mengatur interupsi eksternal INT0 dan INT1,
bit ET0 dan ET1 untuk mengatur interupsi timer 0 dan timer 1, bit ES
untuk mengatur interupsi port seri, seperti yang digambarkan dalam
tabel di bawah. Di samping itu ada pula bit EA yang bisa dipakai untuk
mengatur semua sumber interupsi sekaligus.
Setelah reset, semua bit dalam register IE bernilai ‘0’, artinya sistem
interupsi dalam keadaan non-aktif. Untuk mengaktifkan salah satu
sistem interupsi, bit pengatur interupsi bersangkutan diaktifkan dan

80
juga EA yang mengatur semua sumber interupsi. Misalnya instruksi
yang dipakai untuk mengaktifkan interupsi ekternal INT0 adalah SETB
EX0 disusul dengan SETB EA.
Tabel 7. Bit-bit pada Register IE

MSB LSB

EA X X ES ET1 EX1 ET0 EX0

BIT SYMBOL FUNCTION

Disables all interrupts. If EA=0, no interrupt will be


acknowledged. If EA=1, each interrupt source is
IE.7 EA
individually enabled or disabled by setting or clearing
its enable bit.

IE.6 - -

IE.5 - -

Enables or disables the Serial Port interrupt. If ES=0,


IE.4 ES
the Serial Port interrupt is disabled.

Enables or disables the Timer 1 Overflow interrupt. If


IE.3 ET1
ET1=0, the Timer 1 interrupt is disabled.

Enables or disables External Interrupt 1. If EX1=0,


IE.2 EX1
External interrupt 1 is disabled.

Enables or disables the Timer 0 Overflow interrupt. If


IE.1 ET0
ET0=0, the Timer 0 interrupt is disabled.

Enables or disables External interrupt 0. If EX0=0,


IE.0 EX0
External interrupt 0 is disabled.

D. Vektor Interupsi

Saat MCS51 menanggapi permintaan interupsi, Program Counter diisi


dengan sebuah nilai yang dinamakan sebagai vektor interupsi, yang

81
merupakan nomor awal dari memori-program yang menampung ISR
untuk melayani permintaan interupsi tersebut. Vektor interupsi itu
dipakai untuk melaksanakan inststuksi LCALL yang diaktifkan melalui
perangkat keras.
Vektor interupsi untuk interupsi eksternal INT0 adalah 0003h,
untuk interupsi timer 0 adalah 000Bh, untuk interupsi ekternal
INT1 adalah 0013h, untuk interupsi timer 1 adalah 001Bh dan
untuk interupsi port seri adalah 0023h.
Jarak vektor interupsi satu dengan lainnya sebesar 8, atau hanya
tersedia 8 byte untuk setiap ISR. Jika sebuah ISR memang hanya
pendek saja, tidak lebih dari 8 byte, maka ISR tersebut bisa langsung
ditulis pada memori-program yang disediakan untuknya. ISR yang
lebih panjang dari 8 byte ditulis ditempat lain, tapi pada memori-
program yang ditunjuk oleh vektor interupsi diisikan instruksi JUMP ke
arah ISR bersangkutan.
Tabel 8. Interupt Vector Address

Source Vector Address

IE0 0003H

TF0 000BH

IE1 0013H

TF1 001BH

RI + TI 0023H

E. Tingkatan Prioritas

Masing-masing sumber interupsi bisa ditempatkan pada dua tingkatan


prioritas yang berbeda. Pengaturan tingkatan prioritas isi dilakukan
82
dengan bit-bit yang ada dalam register IP (Interrupt Priority).
Bit PX0 dan PX1 untuk mengatur tingkatan prioritas interupsi eksternal
INT0 dan INT1, bit PT0 dan PT1 untuk mengatur interupsi timer 0 dan
timer 1, bit PS untuk mengatur interupsi port seri, seperti yang
digambarkan dalam tabel di bawah.
Setelah reset, semua bit dalam register IP bernilai ‘0’, artinya semua
sumber interupsi ditempatkan pada tingkatan tanpa perioritas.
Masing-masing sumber interupsi bisa ditempatkan pada tingkatan
prioritas utama dengan cara men-‘satu’-kan bit pengaturnya. Misalnya
interupsi timer 0 bisa ditempatkan pada tingkatan perioritas utama
dengan instruksi SETB PT1.
Sebuah ISR untuk interupsi tanpa prioritas bisa diinterupsi oleh
sumber interupsi yang berada dalam tingkatan prioritas utama. Tapi
interupsi yang berada pada tingkatan prioritas yang sama, tidak dapat
saling meng-interupsi.
Bila 2 permintaan interupsi terjadi pada saat yang bersamaan,
sedangkan kedua interupsi tersebut terletak pada tingkatan prioritas
yang berlainan, maka interupsi yang berada pada tingkatan prioritas
utama akan dilayani terlebih dulu, setelah itu baru melayani interupsi
pada tingkatan tanpa prioritas.
Jika kedua permintaan tersebut bertempat pada tingkatan prioritas
yang sama, perioritas akan ditentukan dengan urutan sebagai
berikut : interupsi eksternal INT0, interupsi timer 0, interupsi
ekternal INT1, interupsi timer 1 dan terakhir adalah interupsi
port seri.

Tabel 9. Interrupt Priority Register ( IP )

MSB LSB

X X X PS PT1 PX1 PT0 PX0

83
Note:

BIT SYMBOL FUNCTION

IP.7 - -

IP.6 - -

IP.5 - -

Defines the Serial Port interrupt priority level. PS=1


IP.4 PS
programs it to the higher priority level.

Defines the Timer 1 interrupt priority level. PT1=1


IP.3 PT1
programs it to the higher priority level.

Defines the External Interrupt 1 priority level. PX1=1


IP.2 PX1
programs it to the higher priority level.

Enables or disables the Timer 0 interrupt priority level.


IP.1 PT0
PT0=1 programs it to the higher priority level.

Defines the External Interrupt 0 priority level. PX0=1


IP.0 PX0
programs it to the higher priority level.

F. Bagan Lengkap Sistem Interupsi MCS-51

Meskipun sistem interupsi MCS-51 termasuk sederhana dibandingkan


dengan sistem interupsi MC68HC11 buatan Motorola, tetapi karena
menyangkut 5 sumber interupsi yang masing-masing harus diatur
secara tersendiri, tidak mudah untuk mengingat semua masalah
tersebut, terutama pada saat membuat program sering dirasakan
sangat merepotkan membolak-balik buku untuk mengatur masing-
masing sumber interupsi tersebut.

84
Tabel 7 menggambarkan sistem interupsi MCS-51 selengkapnya
berikut dengan masing-masing bit dalam register-register SFR
(Special Function Register) yang dipakai untuk mengatur masing-
masing sumber interupsi.
Saklar yang digambarkan dalam Gambar 18 mewakili bit dalam
register yang harus diatur untuk mengendalikan sumber interupsi,
kotak bergambar bendera kecil merupakan flag (penanda) dalam
register yang mencatat adanya permintaan interupsi dari masing-
masing sumber interupsi. Kedudukan saklar dalam gambar tersebut
menggambarkan kedudukan awal setelah MCS-51 di-reset.
Gambar ini sangat membantu saat penulisan program menyangkut
interupsi MCS-51.

G. SOAL-SOAL LATIHAN
1. Jelaskan fungsi dari sistem interupsi pada mikrokontroler.
2. Sebutkan sumber-sumber interupsi pada mikrokontroler MCS-51
3. Tentukan vektor interupsi yang digunakan oleh eksternal interupsi 0
4. Tentukan vektor interupsi yang digunakan oleh eksternal interupsi 1
5. Tentukan vektor interupsi yang digunakan oleh timer 0
6. Tentukan vektor interupsi yang digunakan oleh timer 1
7. Jelaskan kondisi mikrokontroler bila mendapatkan sinyal reset
8. Jelaskan bagaimana mengaktifkan interupsi pada timer 0
9. Jelaskan bagaimana mengaktifkan interupsi pada timer 1
10.Jelaskan bagaimana menentukan prioritas pada sistem interupsi

H. KESIMPULAN

85
MCS-51 mempunyai 5 buah sumber interupsi. Dua buah interupsi
eksternal (IE0 dan IE1), dua buah interupsi timer (TF0 dan TF1) dan
sebuah interupsi port serial.
Saat pin RESET pada IC mikroprosesor/mikrokontroler menerima
sinyal reset (pada MCS-51 sinyal tersebut berupa sinyal ‘1’ sesaat,
pada prosesor lain umumnya merupakan sinyal ‘0’ sesaat), Program
Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai
vektor reset (reset vector), merupakan nomor awal memori-program
yang menampung instruksi pertama program yang harus dijalankan.
Kinerja dari perangkat keras yang digunakan untuk mengatur kerja
dari perangkat lunak, tidak hanya terjadi pada proses reset, tapi
terjadi pula dalam proses interupsi.
Dalam proses interupsi, terjadinya sesuatu pada perangkat keras
tertentu dicatat dalam flip-flop khusus, flip-flop tersebut sering disebut
sebagai ‘penanda’ (flag), catatan dalam penanda tersebut diatur
sedemikian rupa sehingga bisa merupakan sinyal permintaan interupsi
pada prosesor. Jika permintaan interupsi ini dilayani prosesor,
Program Counter akan diisi dengan sebuah nilai. Nilai tersebut
dinamakan sebagai vektor interupsi (interrupt vector), yang
merupakan nomor awal memori-program yang menampung program
yang dipakai untuk melayani permintaan interupsi tersebut.
Program yang dijalankan dengan cara interupsi, dinamakan sebagai
program layanan interupsi (ISR - Interrupt Service Routine). Saat
prosesor menjalankan ISR, pekerjaan yang sedang dikerjakan pada
program utama sementara ditinggalkan, selesai menjalankan ISR
prosesor kembali menjalankan program utama.

KEGIATAN BELAJAR VII

PORT SERIAL
86
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Menjelaskan transmisi data secara seri

2. Menjelaskan mode operasi port serial pada mikrokontroler MCS-51

3. Menjelaskan fungsi dari register-register dalam port serial

4. Menjelaskan fungsi dari baud rate

II. Materi Pembelajaran

A. Port Serial

Terdapat 2 macam cara transmisi data secara seri. Kedua cara


tersebut dibedakan oleh sinyal denyut (clock) yang dipakai untuk
men-‘dorong’ data seri, kalau clock dikirim bersama dengan data seri,
cara tersebut dikatakan sebagai transmisi data seri secara sinkron.
Sedangkan dalam transmisi data seri secara asinkron, clock tidak
dikirim bersama data seri, rangkaian penerima data harus
membangkitkan sendiri clock pendorong data seri.

87
Gambar 19. Komunikasi serial dengan komputer

Port seri MCS-51 bisa dipakai dalam 4 mode kerja yang berbeda. Dari
4 mode tersebut, 1 mode diantaranya bekerja secara sinkron dan 3
lainnya bekerja secara asinkron. Secara ringkas ke-empat mode kerja
tersebut bisa dibedakan sebagai berikut:

1. Mode 0

Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui
kaki P3.0 (RxD), dan kaki P3.1 (TxD) dipakai untuk menyalurkan clock
pendorong data seri yang dibangkitkan MCS-51.

Data dikirim/diterima 8 bit sekaligus, dimulai dari bit yang bobotnya


paling kecil (bit 0) dan diakhiri dengan bit yang bobotnya paling besar
(bit 7). Kecepatan pengiriman data (baud rate) adalah 1/12 frekuensi
osilator kristal.

88
2. Mode 1

Mode ini dan mode-mode berikutnya bekerja secara asinkron, data


dikirim melalui kaki P3.1 (TxD) dan diterima melalui kaki P3.0 (RxD).
Pada Mode 1 data dikirim/diterima 10 bit sekaligus, diawali dengan 1
bit start, disusul dengan 8 bit data yang dimulai dari bit yang bobotnya
paling kecil (bit 0), diakhiri dengan 1 bit stop. Pada MCS-51 yang
berfungsi sebagai penerima bit stop ditampung pada RB8 dalam
register SCON. Kecepatan pengiriman data (baud rate) bisa diatur
sesuai dengan keperluan.

Mode inilah yang umum dikenal sebagai UART (Universal


Asynchronous Receiver/Transmitter).

3. Mode 2

Data dikirim/diterima 11 bit sekali gus, diawali dengan 1 bit start,


disusul 8 bit data yang dimulai dari bit yang bobotnya paling kecil (bit
0), kemudian bit ke 9 yang bisa diatur lebih lanjut, diakhiri dengan 1
bit stop.

Pada MCS-51 yang berfungsi sebagai pengirim, bit 9 tersebut berasal


dari bit TB8 dalam register SCON. Pada MCS-52 yang berfungsi
sebagai penerima, bit 9 ditampung pada bit RB8 dalam register SCON,
sedangkan bit stop diabaikan tidak ditampung. Kecepatan pengiriman
data (baud rate) bisa dipilih antara 1/32 atau 1/64 frekuensi osilator
kristal.
Mode 3 Mode ini sama dengan Mode 2, hanya saja kecepatan
pengiriman data (baud rate) bisa diatur sesuai dengan keperluan,
seperti halnya Mode 1.

89
Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS-51
bekerja secara full duplex, artinya pada saat yang sama port seri ini
bisa mengirim data sekaligus menerima data.

Register SBUF merupakan register penghubung port seri. Dalam ke-


empat mode di atas, semua instruksi yang mengakibatkan perubahan
isi SBUF akan mengakibatkan port seri mengirimkan data keluar dari
MCS-51. Agar port seri bisa menerima data, bit REN dalam register
SCON harus bernilai ‘1’. Pada mode 0, proses penerimaan data dimulai
dengan instruksi CLR RI, sedangkan dalam mode lainnya proses
penerimaan data diawali oleh bit start yang bernilai ‘0’. Data yang
diterima port seri dari luar MCS-51, diambil dengan instruksi MOV
A,SBUF.
Mengambil data dari SBUF dan menyimpan data ke SBUF
sesungguhnya bekerja pada dua register yang berlainan, meskipun
nama registernya sama-sama SBUF.

B. Register-register Port Seri MCS-51

MCS-51 dilengkapi dengan 2 register dan beberapa bit tambahan


untuk keperluan pemakai port seri.

Gambar 20. Register SBUF

SBUF merupakan SFR (Special Function Register) yang terletak pada


memori-data internal dengan nomor $99. SBUF mempunyai kegunaan

90
ganda, data yang disimpan pada SBUF akan dikirim keluar MCS-51
lewat port seri, sedangkan data dari luar MCS-51 yang diterima port
seri diambil dari SBUF pula. Jadi meskipun hanya menempati satu
nomor memori-data internal (nomor $99), sesungguhnya SBUF terdiri
dari 2 register yang berbeda.

Gambar 21. Register SCON

SCON merupakan SFR (Special Function Register) yang terletak pada


memori-data internal dengan nomor $98, merupakan register utama
untuk mengatur kerja port seri MCS-51. Setelah reset semua bit
dalam SCON bernilai ‘0’.

1. Bit SM0 dan bit SM1 (bit 7 dan bit 6 pada register SMOD) dipakai
untuk menentukan mode kerja port seri. Setelah reset kedua bit
ini bernilai ‘0’

2. Bit REN (bit 4) dipakai untuk mengaktipkan kemampuan port seri


menerima data. Pada mode 0 kaki RxD (kaki P3.0) dipakai untuk
mengirim data seri (REN=’0’) dan juga untuk menerima data seri
(REN=’1’). Sifat ini terbawa pula pada saat port seri bekerja
pada mode 1, 2 dan 3, meskipun pada mode-mode tersebut kaki
RxD hanya dipakai untuk mengirim data, agar kaki RxD bisa
91
dipakai untuk menerima data terlebih dulu harus dibuat REN=’1’.
Setelah reset bit REN bernilai ‘0’.

3. Pada mode kerja 2 dan mode kerja 3, port seri bekerja dengan 9
bit data, SBUF yang kapasitasnya 8 bit tidak cukup untuk
keperluan ini. Bit ke-sembilan yang akan dikirim terlebih dulu
diletakkan di TB8 (bit 3), sedangkan bit RB8 (bit 2) merupakan
bit yang dipakai untuk menampung bit ke-sembilan yang
diterima port seri.

4. Pada mode kerja 1, RB8 dipakai untuk menampung bit stop yang
diterima, dengan demikian apa bila RB8 bernilai ‘1’ maka data
diterima dengan benar, sebaliknya apa bila RB8=’0’ berarti
terjadi kesalahan kerangka (framing error).

Kalau bit SM2 (bit 5) bernilai ‘1’, jika terjadi kesalahan kerangka,
RI tidak akan menjadi ‘1’ meskipun SBUF sudah berisi data dari
port seri.

Bit ke 9 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti
yang dikirim harus ditentukan sendiri dengan program dan
diletakkan pada TB8, dan bit pariti yang diterima pada RB8
dipakai untuk menentukan integritas data secara program pula.
Tidak seperti dalam UART standard, semuanya itu dikerjakan
oleh perangkat keras dalam IC UART.

5. Bit TI (bit 1) merupakan petanda yang setara dengan petanda


TDRE (Transmitter Data Register Empty) yang umum dijumpai
pada UART standard. Setelah port seri selesai mengirim data
yang disimpan ke-dalam SBUF, bit TI akan bernilai ‘1’ dengan
sendirinya, bit ini harus di-nol-kan dengan program agar bisa

92
dipakai untuk memantau keadaan SBUF dalam pengiriman data
berikutnya.
Sub-rutin SerialOut berikut dipakai untuk mengirim data seri,
bisa dipakai untuk semua mode port seri. Baris 02 menunggu TI
menjadi ‘1’, dimaksud untuk memastikan pengiriman data
sebelumnya sudah selesai. Data yang akan dikirim sebelumnya
sudah disimpan di A, pada baris 03 data tersebut dikirim melalui
port seri dengan cara meletakannya di SBUF. Agar TI bisa
dipakai untuk memantau keadaan SBUF pada pengiriman data
berikutnya, pada baris 04 TI di-nol-kan.

01: SerialOut:

02: JNB TI,$ ; tunggu data sebelumnya selesai dikirim

03: MOV SBUF,A ; kirim data baru

04: CLR TI ; petanda ada pengiriman baru

05: RET

6. Bit RI (bit 0) merupakan petanda yang setara dengan petanda


RDRF (Receiver Data Register Full) yang umum dijumpai pada
UART standard. Setelah SBUF menerima data dari port seri, bit
RI akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan
dengan program agar bisa dipakai untuk memantau keadaan
SBUF dalam penerimaan data berikutnya.
7. Sub-rutin SerialIn berikut dipakai untuk menerima data seri, bisa
dipakai untuk semua mode port seri. Baris 02 menunggu RI
menjadi ‘1’, dimaksud untuk memastikan sudah ada data baru
yang diterima pada SBUF. Pada baris 03 data pada SBUF diambil
ke A. Agar RI bisa dipakai untuk memantau keadaan SBUF pada
pengiriman data berikutnya, pada baris 04 RI di-nol-kan.

93
01: SerialIn:

02: JNB RI,$ ; tunggu SBUF berisi data baru

03: MOV A,SBUF ; ambil data

04: CLR RI ; pentanda data sudah diambil

05: RET

Gambar 22. Register PCON

C. Mode 0 port serial

UART merupakan standard yang dipakai untuk komunikasi data seri


dengan komputer, komunikasi data seri dengan modem dan lain
sebagainya.
Komunikasi data seri secara sinkron seperti mode 0, merupakan
komunikasi data seri yang banyak dipakai untuk menghubungkan IC-
IC digital dalam sebuah sistem, misalnya pada IC Serial EEPROM, cara
ini belakangan menjadi makin populer karena rangkaiannya sederhana
dan tidak makan tempat.

Dalam dunia digital, dikenal 3 macam teknik transmisi data seri secara
sinkron untuk keperluan di atas, yang paling terkenal adalah teknik
ciptaan Philips yang dinamakan sebagai I2C (Inter IC Communication),
Motorola mengenalkan teknik yang dinamakan sebagai SPI (Serial
Peripheral Interface) dan National Semiconductor menciptakan
94
MicroWire.
Transmisi data seri yang dipakai pada mode 0, tidak sepadan dengan
3 teknik yang disebut di atas, tapi dengan perancangan yang cermat
mode 0 ini bisa dihubungkan ke SPI, sehingga bisa dipakai untuk
menghubungkan MCS-51 dengan mikrokontroler Motorola MC68HC11.
Sinyal data seri sinkron yang ada pada kaki P3.0 dan P3.1,
sesungguhnya murni merupakan sinyal yang biasa dipakai untuk
mengendalikan shift-register, dengan demikian dengan
menghubungkan shift register ke port seri, bisa menambah port input
maupun port output dengan mudah.

D. Baud Rate

Baud rate pada mode 0 adalah tertentu: pada mode 0, Baud Rate =
1/12 x Frekuensi Osilator. Baud rate pada mode 2 bergantung pada
nilai bit SMOD pada SFR PCON. Jika SMOD = 0, baud rate adalah 1/64
frekuensi osilator. Jika SMOD=1, baud rate adalah 1/32 frekuensi
osilator. Penentuan baud rate mode 2 adalah sebagai berikut:

Sedangkan baud rate pada mode 1 dan 3 ditentukan oleh nilai laju
overflow dari Timer 1.

Menggunakan Timer 1 untuk membangkitkan Baud Rate


Ketika timer 1 digunakan untuk membangkitkan clock baud rate, baud
rate pada mode 1 dan 3 adalah ditentukan oleh laju overflow timer 1
dan nilai dari SMOD. Penentuan baud rate untuk mode 1 dan 3 adalah
sebagai berikut:

95
Interupsi timer 1 harus disable pada aplikasi ini. Pada kebanyakan
aplikasi, timer ini dioperasikan sebagai timer, dengan mode auto
reload mode 2. Pada kasus ini baud rate diberikan dengan rumus
sebagai berikut:

E. SOAL-SOAL LATIHAN

1. Jelaskan prinsip transmisi data secara serial


2. Jelaskan mode operasi port seri MCS-51 pada mode 0
3. Jelaskan mode operasi port seri MCS-51 pada mode 1
4. Jelaskan mode operasi port seri MCS-51 pada mode 2
5. Jelaskan mode operasi port seri MCS-51 pada mode 3
6. Sebutkan register-register dalam port seri pada mikrokontroler
MCS-51 dan jelaskan fungsi masing-masing register
7. Jelaskan bagaimana menentukan baud rate pada mode 0
8. Jelaskan bagaimana menentukan baud rate pada mode 1
9. Jelaskan bagaimana menentukan baud rate pada mode 2
10. Jelaskan bagaimana menentukan baud rate pada mode 3

F. KESIMPULAN

96
Terdapat 2 macam cara transmisi data secara seri. Kedua cara
tersebut dibedakan oleh sinyal denyut (clock) yang dipakai untuk
men-‘dorong’ data seri, kalau clock dikirim bersama dengan data seri,
cara tersebut dikatakan sebagai transmisi data seri secara sinkron.
Sedangkan dalam transmisi data seri secara asinkron, clock tidak
dikirim bersama data seri, rangkaian penerima data harus
membangkitkan sendiri clock pendorong data seri.
Port seri MCS-51 bisa dipakai dalam 4 mode kerja yang berbeda, yaitu
mode 0, mode 1, mode 2 dan mode 3. Dari 4 mode tersebut, 1 mode
diantaranya bekerja secara sinkron dan 3 lainnya bekerja secara
asinkron.

KEGIATAN BELAJAR VIII

PEMROGRAMAN MIKROKONTROLER

97
I. Tujuan Khusus Pembelajaran:
Setelah mempelajari topik ini, pembelajar diharapkan mampu:

1. Memahami bahasa assembly MCS-51

2. Menyususn program menggunakan bahasa assembly untuk


mikrokontroler MCS-51

3. Memilih software untuk pemrograman mikrokontroler AT89S51

4. Melakukan pemrograman pada mikrokontroler AT89S51

II. Materi Pembelajaran

A. Pemrograman Bahasa Assembly AT89S51

Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam


pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang
pertama adalah bahasa pemrograman tingkat tinggi (high level
language) dan jenis yang kedua adalah bahasa pemrograman tingkat
rendah (low level language).

Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia


yaitu bagaimana agar pernyataan-pernyataan yang ada dalam
program mudah ditulis dan dimengerti oleh manusia. Sedangkan
bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana
agar komputer dapat langsung mengintepretasikan pernyataan-
pernyataan program.

Kelebihan Bahasa Assembly:

98
1. Ketika di-compile lebih kecil ukuran
2. Lebih efisien/hemat memori

3. Lebih cepat dieksekusi

Kesulitan Bahasa Assembly:

1. Dalam melakukan suatu pekerjaan, baris program relatif lebih


panjang dibanding bahasa tingkat tinggi
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris
sudah terlalu banyak

3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi


matematis

Secara fisik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai


siklus pembacaan instruksi yang tersimpan di dalam memori.
Mikrokontroler menentukan alamat dari memori program yang akan
dibaca, dan melakukan proses baca data di memori. Data yang dibaca
diinterprestasikan sebagai instruksi. Alamat instruksi disimpan oleh
mikrokontroler di register, yang dikenal sebagai program counter.
Instruksi ini misalnya program aritmatika yang melibatkan 2 register.
Sarana yang ada dalam program assembly sangat minim, tidak seperti
dalam bahasa pemrograman tingkat atas (high level language
programming) semuanya sudah siap pakai. Penulis program assembly
harus menentukan segalanya, menentukan letak program yang
ditulisnya dalam memori-program, membuat data konstan dan tablel
konstan dalam memori-program, membuat variabel yang dipakai kerja
dalam memori-data dan lain sebagainya.

B. Program sumber assembly

99
Program-sumber assembly (assembly source program) merupakan
kumpulan dari baris-baris perintah yang ditulis dengan program
penyunting-teks (text editor) sederhana, misalnya program EDIT.COM
dalam DOS, atau program NOTEPAD dalam Windows atau MIDE-51.
Kumpulan baris-printah tersebut biasanya disimpan ke dalam file
dengan nama ekstensi *.ASM dan lain sebagainya, tergantung pada
program Assembler yang akan dipakai untuk mengolah program-
sumber assembly tersebut.

Setiap baris-perintah merupakan sebuah perintah yang utuh, artinya


sebuah perintah tidak mungkin dipecah menjadi lebih dari satu baris.
Satu baris perintah bisa terdiri atas 4 bagian, bagian pertama dikenali
sebagai label atau sering juga disebut sebagai symbol, bagian kedua
dikenali sebagai kode operasi, bagian ketiga adalah operand dan
bagian terakhir adalah komentar.

Antara bagian-bagian tersebut dipisahkan dengan sebuah spasi atau


tabulator.

C. Bagian label

Label dipakai untuk memberi nama pada sebuah baris-perintah, agar


bisa mudah menyebutnya dalam penulisan program. Label bisa ditulis
apa saja asalkan diawali dengan huruf, biasanya dengan panjang tidak
lebih dari 16 huruf. Huruf-huruf berikutnya boleh merupakan angka
atau tanda titik dan tanda garis bawah. Kalau sebuah baris-perintah
tidak memiliki bagian label, maka bagian ini boleh tidak ditulis namun
spasi atau tabulator sebagai pemisah antara label dan bagian
berikutnya mutlak tetap harus ditulis.

100
Dalam sebuah program sumber bisa terdapat banyak sekali label, tapi
tidak boleh ada label yang kembar.

Sering sebuah baris-perintah hanya terdiri dari bagian label saja, baris
demikian itu memang tidak bisa dikatakan sebagai baris-perintah yang
sesungguhnya, tapi hanya sekedar memberi nama pada baris
bersangkutan.
Bagian label sering disebut juga sebagai bagian symbol, hal ini terjadi
kalau label tersebut tidak dipakai untuk menandai bagian program,
melainkan dipakai untuk menandai bagian data.

D. Bagian kode operasi

Kode operasi (operation code atau sering disingkat sebagai OpCode)


merupakan bagian perintah yang harus dikerjakan. Dalam hal ini
dikenal dua macam kode operasi, yang pertama adalah kode-operasi
untuk mengatur kerja mikroprosesor / mikrokontroler. Jenis kedua
dipakai untuk mengatur kerja program assembler, sering dinamakan
sebagai assembler directive.

Kode-operasi ditulis dalam bentuk mnemonic, yakni bentuk singkatan-


singkatan yang relatip mudah diingat, misalnya adalah MOV, ACALL,
RET dan lain sebagainya. Kode-operasi ini ditentukan oleh pabrik
pembuat mikroprosesor/mikrokontroler, dengan demikian setiap
prosesor mempunyai kode-operasi yang berlainan.

Kode-operasi berbentuk mnemonic tidak dikenal


mikroprosesor/mikrokontroler, agar program yang ditulis dengan kode
mnemonic bisa dipakai untuk mengendalikan prosesor, program
semacam itu diterjemahkan menjadi program yang dibentuk dari

101
kode-operasi kode-biner, yang dikenali oleh
mikroprosesor/mikrokontroler.

Tugas penerjemahan tersebut dilakukan oleh program yang


dinamakan sebagai Program Assembler.

Di luar kode-operasi yang ditentukan pabrik pembuat


mikroprosesor/mikrokontroler, ada pula kode-operasi untuk mengatur
kerja dari program assembler, misalnya dipakai untuk menentukan
letak program dalam memori (ORG), dipakai untuk membentuk
variabel (DS), membentuk tabel dan data konstan (DB, DW) dan lain
sebagainya.

E. Bagian operand

Operand merupakan pelengkap bagian kode operasi, namun tidak


semua kode operasi memerlukan operand, dengan demikian bisa
terjadi sebuah baris perintah hanya terdiri dari kode operasi tanpa
operand. Sebaliknya ada pula kode operasi yang perlu lebih dari satu
operand, dalam hal ini antara operand satu dengan yang lain
dipisahkan dengan tanda koma.

Bentuk operand sangat bervariasi, bisa berupa kode-kode yang dipakai


untuk menyatakan Register dalam prosesor, bisa berupa nomor-
memori (alamat memori) yang dinyatakan dengan bilangan atau pun
nama label, bisa berupa data yang siap di-operasi-kan. Semuanya
disesuaikan dengan keperluan dari kode-operasi.

Untuk membedakan operand yang berupa nomor-memori atau


operand yang berupa data yang siap di-operasi-kan, dipakai tanda-
tanda khusus atau cara penulisan yang berlainan.
Di samping itu operand bisa berupa persamaan matematis sederhana
102
atau persamaan Boolean, dalam hal semacam ini program Assembler
akan menghitung nilai dari persamaan-persamaan dalam operand,
selanjutnya merubah hasil perhitungan tersebut ke kode biner yang
dimengerti oleh prosesor. Jadi perhitungan di dalam operand dilakukan
oleh program assembler bukan oleh prosesor!

F. Bagian komentar

Bagian komentar merupakan catatan-catatan penulis program, bagian


ini meskipun tidak mutlak diperlukan tapi sangat membantu masalah
dokumentasi. Membaca komentar-komentar pada setiap baris-
perintah, dengan mudah bisa dimengerti maksud tujuan baris
bersangkutan, hal ini sangat membantu orang lain yang membaca
program.
Pemisah bagian komentar dengan bagian sebelumnya adalah tanda
spasi atau tabulator, meskipun demikian huruf pertama dari komentar
sering-sering berupa tanda titik-koma, merupakan tanda pemisah
khusus untuk komentar.

Untuk keperluan dokumentasi yang intensip, sering-sering sebuah


baris yang merupakan komentar saja, dalam hal ini huruf pertama dari
baris bersangkutan adalah tanda titik-koma.

AT89S51 memiliki sekumpulan instruksi yang sangat lengkap.


Instruksi MOV untuk byte dikelompokkan sesuai dengan mode
pengalamatan (addressing modes). Mode pengalamatan menjelaskan
bagaimana operand dioperasikan. Berikut penjelasan dari berbagai
mode pengalamatan. Bentuk program assembly yang umum ialah
sebagai berikut :

Label/Simbol Opcode Operand Komentar


103
Org 0H

Start: Mov A, #11111110b ;Isi Akumulator


Mov R0, #7 ; Isi R0 dengan

Mov P0,A
Kiri: Call Delay ; Copy A ke P0
RL A ; Panggil Delay
DEC R0
CJNE R0,#0,Kiri
Sjmp Start

mov R1,#255
Delay: mov R2,#255
Del1: djnz R2,del2
Del2: djnz R1, del1
ret
end

Isi memori ialah bilangan heksadesimal yang dikenal oleh


mikrokontroler kita, yang merupakan representasi dari bahasa
assembly yang telah kita buat. Mnemonic atau opcode ialah kode yang
akan melakukan aksi terhadap operand . Operand ialah data yang
diproses oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau
lebih operand, kadang juga tidak perlu operand. Sedangkan komentar
dapat kita berikan dengan menggunakan tanda titik koma (;). Berikut
contoh jumlah operand yang berbeda beda dalam suatu assembly.

CJNE R5,#22H, aksi ;dibutuhkan 3 buah operand

MOVX @DPTR, A ;dibutuhkan 2 buah operand

RL A ;1 buah operand

NOP ; tidak memerlukan operand

Program yang telah selesai kita buat dapat disimpan dengan


ekstension .asm. Lalu kita dapat membuat program objek dengan

104
ekstension HEX dengan menggunakan compiler MIDE-51, yang
dijelaskan sebagai berikut:

G. Assembly Listing

Program-sumber assembly di atas, setelah selesai ditulis diserahkan


ke program Assembler untuk diterjemahkan. Setiap prosesor
mempunyai program assembler tersendiri, bahkan satu macam
prosesor bisa memiliki beberapa macam program Assembler buatan
pabrik perangkat lunak yang berlainan.

Hasil utama pengolahan program Assembler adalah program-obyek.


Program-obyek ini bisa berupa sebuah file tersendiri, berisikan kode-
kode yang siap dikirimkan ke memori-program
mikroprosesor/mikrokontroler, tapi ada juga program-obyek yang
disisipkan pada program-sumber assembly seperti terlihat dalam
Assembly Listing di Gambar 2.

Bagian kanan Gambar 2 merupakan program-sumber Assembly karya


asli penulis program, setelah diterjemahkan oleh program Assembler
kode-kode yang dihasilkan berikut dengan nomor-nomor memori
tempat penyimpanan kode-kode tadi, disisipkan pada bagian kiri
setiap baris perintah, sehingga bentuk program ini tidak lagi dikatakan
sebagai program-sumber assembly tapi dikatakan sebagai Assembly
Listing.
Membaca Assembly Listing bisa memberikan gambaran yang lebih
jelas bagi program yang ditulis, bagi pemula Assembly Listing
memberi pengertian yang lebih mendalam tentang isi memori-
program, sehingga bisa lebih dibayangkan bagaimana kerja dari
sebuah program.

105
Line Addr Code Source
1: Org 0H
2: 0000 74 FE Start: Mov A,#11111110b
3: 0002 78 07 Mov R0,#7
4: 0004 F5 80 Kiri: Mov P0,A
5: 0006 12 00 1C Call Delay
6: 0009 23 RL A
7: 000A 18 DEC R0
8: 000B B8 00 F6 CJNE R0,#0,Kiri
9: 000E 78 07 Mov R0,#7
10: 0010 F5 80 Kanan: Mov P0,A
11: 0012 12 00 1C Call Delay
12: 0015 03 RR A
13: 0016 18 DEC R0
14: 0017 B8 00 F6 CJNE R0,#0,Kanan
15: 001A 80 E4 Sjmp Start
16: ;
17: 001C 79 FF Delay: mov R1,#255
18: 001E 7A FF Del1: mov R2,#255
19: 0020 DA FE Del2: djnz R2,del2
20: 0022 D9 FA djnz R1,del1
21: 0024 22 ret
22: end

H. Assembly Directive

106
Dalam program bahasa assembly terdapat 2 jenis yang kita tulis
dalam program yaitu:

a. Assembly Directive (yaitu merupakan kode yang menjadi arahan


(pengarah) bagi assembler/compiler untuk menata program)
b. Instruksi (yaitu kode yang harus dieksekusi oleh CPU
mikrokontroler)

Pemrograman bahasa assembly dari MCS-51 membutuhkan


pengertian akan template pemrograman, pengarahan assembler dan
tipe data, dsb. Diskusi singkat tentang assembler peralatan
pemrograman, penghubung, dsb. juga penting saat kita hendak
memulai. Pembaca dapat memeriksa peralatan pemrograman dan
sistem pengembangan yang tersedia dan mencoba untuk mengerjakan
program-program sederhana pada platform. Sebagian besar fitur yang
didukung oleh sistem pengembangan MCS-51 apa pun adalah serupa.
Diskusi singkat pada baris ini dibahas di bagian ini.

Bahasa assembler, secara umum mendukung semua alfabet bahasa


Inggris, baik upper case dan lower case, dan angka dari 0 hingga 9.
Sebagai tambahan @ , $ ; _, juga didukung.

107
1. Pengarah ORG (Origin) dan END (END)

Perlu dicatat bahwa perintah pseudo ORG dan END; keduanya adalah
pengarah untuk assembler MCS-51. Pengarah ORG digunakan untuk
menunjukkan alamat permulaan dari program sumber. ORG 0100H
memberitahu assembler bahwa program sumber dimulai pada alamat
0100H dalam memori program. Alamat dapat juga berupa decimal.
Sebagai contoh, ORG 0250 akan memberitahu assembler bahwa
brogram yang akan di-assemble dimulai pada 250D. Secara serupa,
pengarah END menunjukkan akhir dari file program sumber. Ini adalah
baris terakhir dalam program sumber dan assembler akan
membiarkan kode sumber apapun setelah pengarah END. Beberapa
assembler menggunakan sebuah titik “.ORG” dan “.END” daripada
ORG dan END. (Perhatikan apa yang didukung oleh assembler anda).

108
2. Pengarah DB (Define Byte) dan EQU (Equate)

Define byte adalah pengarah yang digunakan untuk menjelaskan byte


data selebar 8-bit. Lihatlah bagaimana pengarah ini muncul dalam
program sumber. Angka yang diberikan pada satu variable dapat
berupa desimal, biner, hex atau angka ASCII. Huruf yang mengikuti
angka menunjukkan kode bilangan yang digunakan. Sebagai contoh,
‘D’ berarti desimal; jadi 35D adalah desimal 35. Secara default, jika
tidak ada yang muncul setelah angka, maka itu adalah angka desimal.
Yaitu 35 dan 35D adalah desimal 35 yang sama. Untuk angka hex,
alfabet “H” harus disertakan setelah angka. Maka 25H adalah angka
hex. Secara serupa, angka biner diakhiri oleh alphabet “B”. Bahasa
assembly tidak case-sensitive. Untuk mewakilkan angka seperti
karakter ASCII, kita menggunakan tanda kutip. Tanda kutip tunggal
atau ganda, keduanya dapat digunakan; keduanya didukung. Maka
jika sebuah string hendak dijelaskan dalam satu program, ini dapat
dilakukan seperti dalam gambar di bawah. Assembler secara otomatis
menempatkan kode ASCII berhubungan dengan angka-angka atau
karakter ini.

Pengarah equate digunakan untuk menjabarkan sebuah konstanta.


Label datanya terhubung dengan nilai konstan; jadi dimanapun label
tersebut muncul, konstantanya digantikan untuk label tersebut.
Sebagai contoh, nilai 39D dapat dihubungkan ke sebuah label TEMP,

109
seperti di gambar di bawah, dan kemudian dapat dikopikan ke register
B dimanapun di dalam program.

Keuntungan dari pengarah EQU adalah jika sebuah konstanta muncul


di banyak tempat dalam program maka pemrogram dapat mengubah
nilainya, hanya dengan mengubah definisi dari konstanta ini; ini dapat
menghemat waktu. Harus diingat bahwa sementara menulis program
bahasa assembly, kita tidak semestinya menggunakan kata-kata yang
sudah tersimpan atau mnemonic sebagai label. Sebagai contoh, ADD
adalah mnemonic untuk perintah MCS-51; jadi ADD tidak dapat
digunakan sebagai label. Secara serupa, ORG atau END tidak dapat
digunakan sebagai label. Lebih jauh lagi, nama label haruslah unik.

I. PENGGUNAAN SOFTWARE

Software untuk membantu memprogram mikrokontroler MCS-51


sudah banyak tersedia. Untuk mempermudah maka dapat dipilih
software yang merupakan Integrated Development Environment (IDE)
yaitu software yang merupakan editor sekaligus compiler. Bahkan juga
ada yang sekaligus debugger dan simulator. Salah satunya yang
digunakan dalam materi ini adalah software MIDE51, sedangkan
untuk pemrograman chip mikrokontroler digunakan software progisp.

Cara penggunaan software MIDE51 dan progisp dijelaskan pada


lembaran tersendiri.

110
J. SOAL-SOAL LATIHAN
1. Jelaskan apa yang anda ketahui tentang bahasa assembly
mikrokontroler?
2. Apa saja yang harus anda perhatikan dalam penyusunan program
menggunakan bahasa assembly?
3. Jelaskan apa yang disebut dengan mnemonics
4. Jelaskan fungsi label pada program assembly
5. Jelaskan fungsi op code (kode operasi) dalam program assembly
6. Jelaskan fungsi operand dalam program assembly
7. Jelaskan fungsi komentar dalam program assembly
8. Jelaskan apa yang disebut dengan assembler directive
9.Sebutkan urutan langkah-langkah dalam pemrograman
mikrokontroler
10.Sebutkan minimal 3 (tiga) software yang berfungsi untuk
memprogram mikrokontroler AT89S51

K. KESIMPULAN
Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam
pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang
pertama adalah bahasa pemrograman tingkat tinggi (high level
language) dan jenis yang kedua adalah bahasa pemrograman tingkat
rendah (low level language).

Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia


yaitu bagaimana agar pernyataan-pernyataan yang ada dalam
program mudah ditulis dan dimengerti oleh manusia. Sedangkan
bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana

111
agar komputer dapat langsung mengintepretasikan pernyataan-
pernyataan program.

Kelebihan Bahasa Assembly:

1. Ketika di-compile lebih kecil ukuran


2. Lebih efisien/hemat memori

3. Lebih cepat dieksekusi

Kesulitan Bahasa Assembly:

1. Dalam melakukan suatu pekerjaan, baris program relatif lebih


panjang dibanding bahasa tingkat tinggi
2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris
sudah terlalu banyak

3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi


matematis

Program-sumber assembly (assembly source program) merupakan


kumpulan dari baris-baris perintah yang ditulis dengan program
penyunting-teks (text editor) sederhana, misalnya program EDIT.COM
dalam DOS, atau program NOTEPAD dalam Windows atau MIDE-51.
Kumpulan baris-printah tersebut biasanya disimpan ke dalam file
dengan nama ekstensi *.ASM dan lain sebagainya, tergantung pada
program Assembler yang akan dipakai untuk mengolah program-
sumber assembly tersebut.

Setiap baris-perintah merupakan sebuah perintah yang utuh, artinya


sebuah perintah tidak mungkin dipecah menjadi lebih dari satu baris.
Satu baris perintah bisa terdiri atas 4 bagian, bagian pertama dikenali

112
sebagai label atau sering juga disebut sebagai symbol, bagian kedua
dikenali sebagai kode operasi, bagian ketiga adalah operand dan
bagian terakhir adalah komentar.

Antara bagian-bagian tersebut dipisahkan dengan sebuah spasi atau


tabulator.

113
REFERENSI

PA. Nalwan, Teknik Antarmuka dan Pemrograman Mikrokontroler


AT89C5a, Elek Media Komputindo, 2003

Prestiliano, Strategi Bahasa Assembler, Edisi I, Cetakan I, Penerbit


Gava Media Yogyakarta, 2005

Rachmat Setiawan, Mikrokontroler MCS-51, Graha Ilmu, 2006

Sulhan Setiawan, Mudah dan Menyenangkan Belajar Mikrokontroler,


Penerbit ANDI Yogyakarta, 2006

…………, Embeded Microcontrollers and Processors Volume I, 1992,


Intel.

Intel, MCS-51 Family of Single Chip Microcomputer User’s Manual,


Intel Corp, Santa Clara USA, 1981.

http://www.atmel-grenoble.com/dyn/resources/prod_documents.pdf

http://www.mytutorialcafe.com/mikrokontroller.htm

114
A. LEMBAR PRAKTEK

MIKROKONTROLER MCS-51

115
PERCOBAAN 1
DISPLAY LED

TUJUAN:

Setelah selesai melakukan percobaan ini pembelajar diharapkan


dapat:

1. Membuat rangkaian mikrokontroler untuk menghidupkan dan


mematikan LED.
2. Memahami program assembly untuk menghidupkan dan mematikan
LED.
3. Memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL
dan RR.
4. Memahami pembuatan instruksi waktu tunda.

ALAT DAN BAHAN


1. Pesawat Latih Mikrokontroler Atmel
2. Display LED
3. Jumper secukupnya.

LANGKAH KERJA

Dengan berpedoman pada gambar 1, lakukan percobaan sesuai


dengan langkah-langkah yang telah ditentukan.

116
Gambar 1. Rangkaian Display LED

Perhatikan pada gambar 1 tersebut. Sebuah LED terhubung ke


transistor NPN seperti terlihat pada gambar. Adapun LED-LED yang
lain (D1 s.d D&) memiliki hubungan yang sama seperti gambar
tersebut. Pada konfigurasi tersebut LED akan nyala bila diberi logika
HIGH ‘1’ melalui port mikrokontroler, dan LED akan padam bila diberi
logika LOW ‘0’ melalui port tersebut.

Percobaan 1.1. Instruksi MOV

Pada percobaan 1.1 ini LED akan dihidupkan atau dimatikan dengan
mengirimkan data tertentu pada port 0.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan pesawat latih Microcontroller ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Buka software editor (Notepad).

117
4. Ketik program berikut ini:

$mod51

START: MOV P0,#11110000b; Menghidupkan 4 buah LED


SJMP START
END

5. Simpanlah program yang anda ketik dan beri nama : prog1.asm

6. Lakukan kompilasi menggunakan compiler asm51.

7. Lakukan pemrograman mikrokontroller menggunakan PROGISP


Software.

8. Lakukan pengamatan pada LED

9. Gantilah data tersebut di atas dengan data seperti pada tabel


berikut dan lakukan pencatatan LED mana yang nyala dan mana
yang padam. Tiap penggantian data lakukan kompilasi terlebih
dahulu.

Data
No.

1 00000001

2 00000010

3 00000100

4 00001000

5 00010000

6 00100000

7 01000000

118
8 10000000

Percobaan 1.2. Pembuatan Subrutine Waktu Tunda

Pada percobaan ini, 8 LED akan berkedip secara kontinyu.


Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:

1. Hubungkan pesawat latih Microcontroler ke sumber listrik jala-jala


220VAC.

2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)


melalui soket USB.

3. Buka software editor (Notepad).

4. Ketik program berikut ini:

$mod51

ORG 0h
START: MOV P0,#11111111b; Kirim data biner 11111111 ke PORT 0
CALL DELAY ; Memanggil waktu tunda
MOV P0,#00000000b; Kirim data biner 00000000 ke PORT 0
CALL DELAY ; Memanggil waktu tunda
SJMP START

DELAY: MOV R1,#255


DEL1: MOV R2,#255
DEL2: DJNZ R2,DEL2
DJNZ R1,DEL1
RET
END

5. Simpanlah program yang anda ketik dan beri nama : prog1a.asm


6. Gunakan compiler asm51 untuk melakukan kompilasi program
dari *.asm ke *.hex.

119
7. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED.
9. Gantilah data tersebut untuk mengedipkan lampu-lampu LED secara
bervariasi, simpan program dengan nama prog1aa.asm

Percobaan 1.3. Instruksi SETB dan CLR

Pada percobaan ini, sebuah LED atau lebih dapat dihidupkan atau
dimatikan dengan perintah setb dan clr.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan pesawat latih Microcontroler ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB.
3. Buka software editor (Notepad).
4. Ketik program berikut ini:

$mod51
ORG 0h
START: SETB P0.0 ; Mengirimkan logika ‘1’ ke P0.0
SJMP START ; jump ke label START
END

5. Simpanlah program yang anda ketik dan beri nama : prog1b.asm


6. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan
PROGISP Software.

120
8. Lakukan pengamatan pada LED.
9. Gantilah data tersebut untuk menghidupkan LED yang lain: LED 2,
LED 3, LED 4, LED 5, LED 6, LED 7 dan LED 8.
10. Lakukan percobaan berikut untuk mengedipkan LED 1, dengan
menuliskan program seperti berikut:

$mod51
ORG 0h
START: CLR P0.0 ; Kirim logika ‘0’ ke P0.0
CLR P0.1 ; Kirim logika ‘0’ ke P0.1
CLR P0.2 ; Kirim logika ‘0’ ke P0.2
CLR P0.3 ; Kirim logika ‘0’ ke P0.3
CLR P0.4 ; Kirim logika ‘0’ ke P0.4
CLR P0.5 ; Kirim logika ‘0’ ke P0.5
CLR P0.6 ; Kirim logika ‘0’ ke P0.6
CLR P0.7 ; Kirim logika ‘0’ ke P0.7
CALL DELAY ; Memanggil waktu tunda
SETB P0.0 ; Kirim logika ‘1’ ke P0.0
SETB P0.1 ; Kirim logika ‘1’ ke P0.1
SETB P0.2 ; Kirim logika ‘1’ ke P0.2
SETB P0.3 ; Kirim logika ‘1’ ke P0.3
SETB P0.4 ; Kirim logika ‘1’ ke P0.4
SETB P0.5 ; Kirim logika ‘1’ ke P0.5
SETB P0.6 ; Kirim logika ‘1’ ke P0.6
SETB P0.7 ; Kirim logika ‘1’ ke P0.7
SJMP START ; lompat ke label START

DELAY: MOV R1,#255


DEL1: MOV R2,#255
DEL2: DJNZ R2,DEL2
DJNZ R1,DEL1
RET
END

11. Tulis sebuah program untuk mengedipkan dua buah LED, tiga
buah LED dan seterusnya menggunakan instruksi Setb dan Clr,
simpan program dengan nama prog1bb.asm

Percobaan 1.4. Instruksi RL/RR ( Rotate Left dan


Right )
121
Pada percobaan ini, nyala sebuah LED akan bergantian dari kiri ke
kanan dan sebaliknya, program ini memanfaatkan instruksi RL dan
RR.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan pesawat latih Microcontroller ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB.
3. Buka software editor (Notepad).
4. Ketik program berikut ini:

$mod51

ORG 0H

START: MOV A,#00000001b


MOV R0,#7
KIRI: MOV P2,A
CALL DELAY
RL A
DEC R0
CJNE R0,#0,KIRI
MOV R0,#7
KANAN: MOV P2,A
CALL DELAY
RR A
DEC R0
CJNE R0,#0,KANAN
SJMP START

DELAY: MOV R1,#255


DEL1: MOV R2,#255
DEL2: DJNZ R2,DEL2
DJNZ R1,DEL1
RET
END

5. Simpanlah program yang anda ketik dan beri nama : prog1c.asm

122
6. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroler menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED
9. Lakukan perubahan pada program tersebut untuk menjalankan dua
buah LED kekiri dan kekanan, tiga buah LED kekiri dan kekanan ,
dan seterusnya, simpan program dengan nama prog1cc.asm

PERCOBAAN 2
SAKLAR PUSH BUTTON

TUJUAN:

Setelah selesai melakukan percobaan ini pembelajar diharapkan


dapat:
1. Memahami rangkaian mikrokontroler untuk membaca data input
dari saklar-saklar.
2. Memahami program assembly untuk menghidupkan dan mematikan
LED menggunakan data masukan dari saklar.

ALAT DAN BAHAN


1. Pesawat Latih Mikrokontroler ATMEL
2. Display LED
3. Switch Push Button
4. Jumper secukupnya.

LANGKAH KERJA

123
Dengan berpedoman pada gambar 2, lakukan percobaan sesuai
dengan langkah-langkah yang telah ditentukan.

Gambar 2. Rangkaian Interface Push Button

Pada gambar 2 tersebut terlihat rangkaian push button yang


dihubungkan dengan port 2 pada mikrokontroler, bila saklar ditekan
maka port sesuai dengan bit tersebut akan mendapat logika low ‘0’
dan sebaliknya bila saklar tidak ditekan maka port tersebut akan
mendapat logika high ‘1’.

Percobaan 2.1. Ambil Data dari Saklar

Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan
bit tersebut.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:

124
1. Hubungkan pesawat latih Mikrokontroler ke sumber listrik jala-jala
220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Hubungkan konektor dari 8-bit INPUT BUTTON ke PORT 2
4. Buka software editor (Notepad).
5. Ketik program berikut ini:

$mod51
ORG 0h
START: MOV A, P2 ;Ambil data dari P2 dan Simpan ke A
CPL A ;Komplemen/ Invert terhadap A
MOV P0, A ;Kirim data A ke P0
SJMP START
END

5. Simpanlah program yang anda ketik dan beri nama : prog2.asm


6. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED tiap penekanan tombol-tombol
tekan (push button) dan catat pada tabel di bawah.

Saklar
Kondisi LED yang Nyala (L1-L2-L3-L4-L5-L6-L7-L8)
(ON)

S0

S1

S2

S3

S4

125
S5

S6

S7

Percobaan 2.2. Putar Kanan-Kiri

Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti
penekanan tombol P2.0 atau P2.1.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:

1. Hubungkan pesawat latih Mikrokontroler ke sumber listrik jala-jala


220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Buka software editor (Notepad).
4. Ketik program berikut ini:

$mod51

ORG 0h
CekP20: JB P2.0, CekP21 ; Menguji bit P2.0, apakah berlogika '1'
CALLl RLeft ; Jika P2.0=0, maka LED putar kiri
CekP21: JB P2.1,CekP20 ; Menguji bit P2.1, apakah berlogika '1'
CALL RRight ; Jika P2.1=0, maka LED putar kanan
SJMP CekP20 ; jump forever to CekP2.0
;========================================
;Subrutin ini digunakan untuk menggerakkan LED Ke Kanan
;========================================
RLeft: MOV A,#00000001b; send data to Acc
RLeft1: MOV P0,A ; send data to P0
CALL DELAY ; call delay time
JB P2.1,RLeft2 ; Menguji bit P2.1, apakah berlogika '1'
SJMP EndRLeft ;J Jika P2.1=0, maka lompat ke EndRLeft
RLeft2: RL A
SJMP RLeft1

126
EndRLeft: RET
;
;======================================
;Subrutin ini digunakan untuk menggerakkan LED Ke Kiri
;======================================
RRight: MOV A,#10000000b; send data to Acc
RRight1: MOV P0,A ; send data to P0
CALL DELAY ; call delay time
JB P2.0,RRight2 ; Menguji bit P2.0, apakah berlogika '1'
SJMP EndRRight ; Jika P2.0=0, maka lompat ke EndRRight
RRight2: RR A
SJMP RRight1
EndRRight: RET

;=======================================
;subroutine delay time
;=======================================
DELAY: MOV R1,#255
DEL1: MOV R2,#255
DEL2: DJNZ R2,DEL2
DJNZ R1,DEL1
RET
END

5. Simpanlah program yang anda ketik dan beri nama : prog2a.asm


6. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED tiap menekan tombol-tombol tekan
(push button) dan catat pada tabel di bawah.
9. Lakukan pengamatan pada LED.
10. Lakukan modifikasi pada percobaan tersebut dengan
memfungsikan P2.2 ( putar kanan ) dan P2.3 ( putar kiri ).
11. Simpan program anda dengan nama prog2b.asm

127
Percobaan 2.3. Setting Up/Down dan Enter
dengan display LED

Pada percobaan ini, LED yang NYALA akan bertambah atau berkurang
mengikuti penekanan tombol P2.1 (UP) atau P2.2 (Down). LED akan
berhenti bertambah atau atau berkurang bila ditekan tombol P2.0
( ENTER).
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:

1. Hubungkan pesawat latih Mikrokontroler ke sumber listrik jala-jala


220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Buka software editor (Notepad).
4. Ketik program berikut ini:

$mod51

ORG 0h
start:
mov R7,#1 ; inisialisasi data setting
Setup: mov A,R7 ; simpan data R7 ke A
cpl A ; komplemen A,
mov P0,A ; output data ke LED
jnb p2.0,getout; bilasw1(P2.0) ditekan maka getout
(selesai)
jb P2.1,SetDn ; bila sw2(P2.1) ditekan maka INC R7
inc R7 ;R7:=R7+1
acall delay ; waktu tunda, antar penekanan tombol
cjne R7,#100d,setup; deteksi apakah setting=100d
mov R7,#1 ; reset R7 -> 1

128
sjmp Setup
;
SetDn: mov A,R7 ; simpan data R7 ke A
cpl A ; komplemen A,
mov P0,A ; output data ke LED
jnb P2.0,getout; bila sw1(P2.0) ditekan maka getout
jb p2.2,Setup ; bila sw2(P2.1) ditekan maka INC R7
dec R7 ;R7:=R7-1
acall delay ; waktu tunda lama penekanan tombol
cjne R7,#0d,setDn; deteksi apakah setting=0d
mov R7,#1d ; reset R7 -> 1
sjmp Setdn
getout:
sjmp getout
;
delay: mov R0,#255
delay1: mov R2,#255
djnz R2,$
djnz R0,delay1
ret
end

5. Simpanlah program yang anda ketik dan beri nama : prog2c.asm


6. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
8. Lakukan pengamatan pada LED tiap menekan tombol-tombol tekan
(push button) dan catat pada tabel di bawah.
9. Lakukan pengamatan pada LED.
10. Lakukan modifikasi pada percobaan tersebut dengan
memfungsikan P2.5 (Setting UP), P2.6 (Setting Down) dan P2.7
(Enter).

129
PERCOBAAN 3
DISPLAY 7 SEGMEN

TUJUAN:

1. Pembelajar memahami rangkaian interface mikrokontroler dengan


Display Led 7 segmen
2. Pembelajar memahami program assembly untuk menampilkan data
ke Display Led 7 segmen.

ALAT DAN BAHAN


1. Pesawat Latih Mikrokontroler Atmel ISP
2. Display Led 7 Segmen
3. Jumper

LANGKAH KERJA

A. Menampilkan karakter ke Display Led 7 segmen

1. Hubungkan pesawat latih Mikrokontroler ke sumber listrik jala-jala


220VAC.
2. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.
3. Buat sambungan dari mikrokontroler ke display led 7 segmen
seperti ditunjukkan pada gambar 3.
Pada gambar 3 ditunjukkan sebuah rangkaian interface antara
mikrokontroler dengan display led 7 segmen. Pada gambar terlihat

130
bahwa P2.0 s/d P2.6 terhubung ke segmen-segmen display 7
segmen dan P0.0 s/d P0.5 terhubung ke common-common pada
display 7 segmen. Display 7 segmen yang digunakan adalah jenis
common cathode. Semua anoda dari segmen yang sejenis
dihubungkan secara paralel.
Tabel data untuk menampilkan karakter bilangan desimall
ditunjukkan pada tabel berikut:

Data-data segmen Data


Desimal P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 Heksa
- g f e d c b a Desimal
0 1 1 0 0 0 0 0 0 C0
1 1 1 1 1 1 0 0 1 F9
2 1 0 1 0 0 1 0 0 A4
3 1 0 1 1 0 0 0 0 B0
4 1 0 0 1 1 0 0 1 99
5 1 0 0 1 0 0 1 0 92
6 1 0 0 0 0 0 1 0 82
7 1 1 1 1 1 0 0 0 F8
8 1 0 0 0 0 0 0 0 80
9 1 0 0 1 0 0 0 0 90

Untuk mengontrol nyala display 7 segmen pada tiap digitnya


digunakan P1.0 s/d P1.2 Digit paling kanan dikendalikan oleh P1.0
dan digit paling kiri dikendalikan oleh P1.2.
4. Buka software editor (Notepad).
5. Ketik program berikut ini:

$mod51

ORG 0H
START: MOV P1,#01H; Aktifkan digit paling kanan
MOV P2,#0C0H; tampilkan karakter ”0”
CALL DELAY; panggil program delay
MOV P2,#0F9H; tampilkan karakter ”1”

131
CALL DELAY
MOV P2,0A4H; tampilkan karakter ”2”
CALL DELAY
MOV P2,0B0H; tampilkan karakter ”3”
CALL DELAY
MOV P2,#99H; tampilkan karakter ”4”
CALL DELAY
MOV P2,92H; tampilkan karakter ”5”
CALL DELAY
MOV P2,#82H; tampilkan karakter ”6”
CALL DELAY
MOV P2,#0F8H; tampilkan karakter ”7”
CALL DELAY
MOV P2,#80H; tampilkan karakter ”8”
CALL DELAY
MOV P2,#90; tampilkan karakter ”9”
CALL DELAY
SJMP START; ulangi proses dari awal

DELAY: MOV R0,#0FFH


LOOP:MOV R1,#0FFH
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET
END

Gambar 3. Rangkaian Display 7 segmen

6. Simpanlah program yang anda ketik dan beri nama : prog3.asm

132
7. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
9. Lakukan pengamatan pada display 7 segmen digit paling kanan.
10. Ganti-ganti program tersebut untuk menyalakan display 7 segmen
yang lain.
11. Sekarang tulis program berikut menggunakan editor notepad.

$mod51
ORG 0H
START: MOV R3,#0AH; data pembatas
MOV P1,#01H; aktifkan digit paling kanan
MOV DPTR,#KARAKTER; simpan data karakter ke DPTR
LOOP2: MOVC A,@A+DPTR; ambil data ke Accumulator
MOV P2,A; keluarkan ke port 2
CALL DELAY; panggil program delay
INC DPTR; siapkan karakter berikutnya
DJNZ R3, LOOP2
SJMP START

DELAY: MOV R0,#0FFH


LOOP:MOV R1,#0FFH
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET
KARAKTER:
DB 11000000B,11111001B,10100100B,10110000B
DB 10011001B,10010010B,10000010B,11111000B
DB 10000000B,10010000B
END

12. Simpanlah program yang anda ketik dan beri nama : prog3a.asm
13. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
14. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
15. Lakukan pengamatan pada display 7 segmen digit paling kanan.

133
16. Ganti data untuk menampilkan karakter a, b, c, d, E, F, g, H, I,L
17. Simpan program anda dan beri nama dengan prog3b.asm.

B. Program Scanning Display LED 7 Segmen

Pada prinsipnya program scanning display 7 segmen adalah untuk


menyalakan atau menampilkan karakter-karakter pada beberapa
display 7 segmen dimana semua anoda atau katoda dari segmen-
segmen yang sejenis dihubungkan secara paralel dan common berdiri
sendiri.
1. Ketik program berikut:
$mod51
ORG 0H
START: MOV R3,#06H; data pembatas jumlah digit 7 segmen

MOV R4,#01H; data pengendali digit


MOV A,R4
MOV P1,A

LOOP3: MOV DPTR,#KARAKTER


MOVC A,@A+DPTR
MOV P2,A
CALL DELAY
MOV P2,#00H
INC DPTR

MOV A,R4
RL A
MOV P0,A
MOV R4,A

DJNZ R3,LOOP3
SJMP START

DELAY: MOV R0,#0FH


LOOP:MOV R1,#FFH
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET

KARAKTER:
DB 11000000B,11111001B,10100100B

134
DB 10110000B,10011001B,10010010B
END

2. Simpanlah program yang anda ketik dan beri nama : prog3.asm


3. Gunakan compiler asm51 untuk melakukan kompilasi program dari
*.asm ke *.hex.
4. Lakukan pemrograman mikrokontroller menggunakan PROGISP
Software.
5. Lakukan pengamatan pada display 7 segmen.
6. Ganti data-data untuk menampilkan karakter HAI pada display 7
segmen.
7. Simpan program dan beri nama prog3c.asm.

135
PERCOBAAN 4
STEPPER MOTOR

TUJUAN:

Setelah selesai melakukan percobaan ini pembelajar diharapkan


dapat:

1. Memahami prinsip kerja Unipolar Motor Stepper.


2. Memahami karakteristik dari Unipolar Motor Stepper.
3. Menjalankan Unipolar Stepper Motor pada operasi Half Step.
4. Menjalankan Unipolar Stepper Motor pada operasi Full Step.
5. Menjalankan Unipolar Stepper Motor pada operasi High Torque
Stepping.
6. Mengatur arah putaran Unipolar Stepper Motor.
7. Mengatur kecepatan putaran pada Unipolar Stepper Motor.

DASAR TEORI

Motor Stepper dikembangkan pada awal tahun 1960-an sebagai alternatif


selain sistem posisi servo dalam industri peripheral komputer. Keuntungan
utama dari motor stepper adalah kemampuannya memberikan kontrol posisi
secara akurat tanpa memerlukan rangkaian umpan balik (feedback). Dengan
kata lain, motor jenis ini dapat bekerja secara “open loop” sehingga akan
memperkecil beaya untuk sistem kontrol posisi.

136
Motor stepper banyak digunakan untuk aplikasi-aplikasi yang biasanya cukup
menggunakan torsi yang kecil, seperti untuk penggerak piringan disket atau
piringan CD. Dalam hal kecepatan, motor stepper cukup cepat jika
dibandingkan dengan motor DC. Motor stepper merupakan motor DC yang
tidak memiliki komutator. Pada umumnya motor stepper hanya mempunyai
kumparan pada statornya, sedangkan pada bagian rotornya merupakan
magnet permanen. Dengan model motor seperti ini, motor stepper dapat
diatur posisinya pada posisi tertentu dan atau berputar pada arah yang
diinginkan, searah jarum jam (clock wise ) atau sebaliknya (counter clock
wise).

Berdasarkan karakteristiknya, motor stepper memiliki beberapa fitur yang


dapat membedakannya dengan jenis AC Motor dan DC Servo Motor. Fitur-
fitur tersebut diantaranya meliputi:

1. Brushless. Motor Stepper tidak memiliki sikat-sikat (brushless).


Motor dengan sikat akan menimbulkan percikan api.
2. Holding Torque. Motor Stepper memiliki kecepatan rendah yang
sangat baik sehingga dapat mempertahankan torsi-ya (tenaga).
3. Open loop positioning. Hal yang paling menarik dan perlu
diperhatikan pada motor stepper adalah kemampuannya yang dapat
diatur posisi pada shaft (poros rotor) nya sesuai dengan yang kita
kehendaki. Motor Stepper dapat bekerja pada “open-loop system”
tanpa penambahan umpan balik yang berasal dari encoder atau
semacamnya guna menentukan posisi rotor. Pada “closed-loop
system”, merupakan sistem dimana umpan balik digunakan untuk
menentukan posisi dari rotor, dikenal sebagai sistem servo.
Dibandingkan dengan sistem servo, motor stepper lebih mudah
dilakukan pengontrolan.
4. Load Independent. Kecepatan sebuah motor stepper tidak
terpengaruh oleh beban.

137
Berdasarkan jenisnya, motor stepper dibedakan dalam dua jenis yaitu
unipolar stepper motor dan bipolar stepper motor.

A. UNIPOLAR STEPPER MOTOR

Motor stepper dengan tipe unipolar merupakan motor stepper yang memiliki
2 buah lilitan yang masing-masing lilitan di tengah-tengahnya diberikan
sebuah tap. Prinsip dasar dari motor jenis ini ditunjukkan pada gambar 1.

Gambar 1. Unipolar Stepper Motor

Motor ini mempunyai step sebesar 90 derajat dan mempunyai dua buah
lilitan yang didistribusikan berseberangan 180 derajat di antara kutub pada
stator. Sedangkan pada rotornya menggunakan satu pasang magnet
permanen.

Dengan menghubungkan center tap lilitan pada power supply positip dan
salah satu ujung lilitan dihubungkan ke ground secara bergantian namun
berurutan, maka rotor akan tertarik ke arah lilitan stator yang dialiri aruis
litrik (ingat bahwa lilitan kawat yang dialiri arus listrik akan menimbulkan
medan magnet. Pada gambar 1 merupakan konsep dasar sebuah motor
stepper yang memiliki sudut tiap-tiap step (langkah) atau juga sering disebut

138
dengan step size adalah sebesar 90 derajat. Prinsip kerja secara mendasar
untuk arah putaran searah jarum jam (CW) berdasarkan diagram pada
gambar 1 adalah sebagai berikut: ketika lilitan stator 1a dialiri arus listrik,
maka pada gigi stator 1a akan ditimbulkan medan magnet. Dengan demikian
kutub magnet pada rotor akan tertarik ke arah stator 1a. Urutan pemberian
arus listrik pada lilitan stator selanjutnya adalah pada gigi stator 2a, 1b an
2b. Proses tersebut akan menghasilkan satu putaran. Agar motor stepper
dapat berputar secara terus menerus maka proses pemberian arus listrik
pada lilitan stator juga harus dilakukan secara terus menerus.

Berdasarkan prinsip kerja seperti telah dijelaskan di atas, jelas bahwa motor
stepper bergerak satu langkah (step) pada tiap waktu. Besarnya sudut
langkah (step angle) ditentukan oleh konstruksi ari motor yang meliputi :
jumlah kumparan (lilitan) jumlah kutub dan jumlah gigi pada stator maupun
rotor. Besarnya sudut langkah mulai dari 90 0 hingga 0,750 atau identik
dengan 4 hingga 500 langkah pada tiap putaran. Dengan menggunakan
rangkaian pengendali elektronik dapat dibuat sudut langkah menjadi
setengah langkah sehingga rotor akan bergerak setengah langkah pada tiap
langkahnya. Besarnya sudut langkah untuk motor stepper jenis universal
ditentukan oleh persamaan-persamaan berikut:

QS = 3600/NS

QR = 3600/NR

QST = QR – QS

Dimana :

QS = sudut stator, QR = sudut rotor

QST = step angle

NS = jumlah kutub stator dan NR = jumlah kutub rotor

Pada gambar 2 ditunjukkan konstruksi sebuah motor stepper dengan sudut


langkah sebesar 150.

139
Gambar 2. Motor Stepper dengan step angle 15 derajat

A1. UNIPOLAR STEPPER MOTOR DRIVING TECHNIQUE

Teknik pengendalian motor stepper jenis universal dapat dilakukan dengan


beberapa cara yaitu Single Stepping, Half Stepping dan High Torque
Stepping.

1. Single Stepping

Operasi Single Stepping juga sering disebut sebagai mode Full Step, dimana
pada operasi ini besar sudut langkah (step angle) yang dihasilkan oleh rotor
sesuai dengan spesifikasi dari motor tersebut, misal 3,75 0 , 90 , 150 dan lain-
lain. Pada mode ini hanya satu bagian lilitan stator yang diberi arus listrik
pada setiap waktu sehingga eksitasi pada tiap-tiap lilitan stator dapat di buat
seperti ditunjukkan pada Tabel 1.

140
Tabel 1. Operasi pada Full-Step

Dengan menggunakan diagram pulsa, eksitasi pada lilitan stator untuk mode
Full Step, ditunjukkan oleh gambar 3.

141
2. Half Stepping

Pada operasi ini gerakan rotor pada tiap langkah menghasilkan sudut
langkah setengah dari operasi Full Stepping, yaitu dengan cara memberi
eksitasi pada dua lilitan yang berurutan secara bersama-sama, kemudian
dilanjutkan dengan pemberian eksitasi pada lilitan yang kedua, demikian
seterusnya secara bergantian seperti ditunjukkan pada Tabel 2.

Tabel 2. Operasi pada Half-Step Mode

Adapun diagram pulsa untuk mode Half Stepping ditunjukkan oleh Gambar 4.

142
Gambar 4. Diagram pulsa pada Half Stepping Mode

3. High Torque Stepping

Pada mode ini rotor akan bergerak seperti pada operasi Full Stepping, namun
menghasilkan torsi yang tinggi karena magnet pada rotor akan ditarik oleh
dua buah magnet yang dihasilkan oleh dua kumparan stator yang berurutan
dan diberi arus listrik secara bersama-sama seperti terlihat pada Tabel 3.

Tabel 3. High Torque Stepping Mode

143
Diagram pulsa untuk mode High Torque Stepping Mode ditunjukkan oleh
Gambar 5.

Gambar 5. Diagram Pulsa High Torque Stepping Mode

A2. Pengaturan Arah Putaran Unipolar Stepper Motor.

Pengaturan arah putaran pada motor stepper unipolar dapat dilakukan


dengan cara membalik urutan pemberian eksitasi pada lilitan-lilitan stator
atau membalik hubungan atau sambungan lilitan-lilitan stator yang
disambungkan pada rangkaian kontrol. Pada Tabel 4 ditunjukkan pemberian
eksitasi pada lilitan-lilitan stator pada mode Full Stepping, Tabel 5 untuk
operasi Half Stepping dan pada Tabel 6 untuk operasi High Torque Stepping.

Tabel 4. Half Stepping Mode untuk putaran reverse.

o ff o ff o ff on

o ff o ff on o ff

o ff on o ff o ff

on o ff o ff o ff

144
Tabel 5. Half Stepping Mode untuk putaran reverse.

Tabel 6. High Torque Stepping Mode untuk putaran reverse.

on o ff o ff on

o ff o ff on on

o ff on on o ff

on on o ff o ff

145
A3. Pengaturan Kecepatan Unipolar Stepper Motor

Pada prinsipnya pengaturan kecepatan Motor Stepper Unipolar adalah


dengan cara mengubah-ubah lebar pulsa (t) pada pemberian eksitasi untuk
tiap-tiap kumparan stator seperti ditunjukkan oleh Gambar 6 berikut:

Pada Gambar 6 terlihat bahwa waktu (t) yang digunakan untuk memberikan
eksitasi pada tiap-tiap lilitan stator sebesar 1 second (detik), hal ini berarti
bahwa gerakan yang dihasilkan oleh rotor tiap step (langkah) adalah 1 detik.
Agar rotor dapat berputar lebih cepat maka besarnya t harus diperkecil,
demikian sebaliknya bila ingin rotor bergerak lebih lambat maka besarnya t
harus diperbesar.

Contoh bentuk fisik dari Unipolar Stepping Motor ditunjukkan oleh gambar 7a
dan 7b.

146
Gambar 7a Gambar 7b

B. BIPOLAR STEPPER MOTOR

Bipolar Stepper Motor hampir sama atau mirip dengan Unipolar Stepper
Motor, namun pada motor stepper jenis bipolar tidak menggunakan
sambungan center tap. Oleh karena itu Motor stepper jenis ini memerlukan
jenis rangkaian kontrol yang berbeda. Prinsip dasar dari motor stepper
bipolar ditunjukkan oleh gambar 5.

Gambar 8. Lilitan pada Bipolar Stepper Motor

Pada gambar 5 ditunjukkan sebuah Bipolar Stepper Motor yang terdiri dari 2
lilitan. Kedua lilitan memiliki spesifikasi yang sama (identik) dan tidak
terhubung ke sumber daya. Model motor stepper bipolar secara konseptual
dapat dilihat pada gambar 9.

147
Gambar 9. Bipolar Stepper Motor

Prinsip kerja dari motor srepper jenis bipolar dapat dijelaskan sebagai
berikut: semua lilitan diaktifkan sesuai dengan urutannya untuk
menggerakkan rotor yang digambarkan sebagai anak panah pada gambar 6.
Pada diagram konseptual ditunjukkan bahwa motor stepper memiliki 90
derajat step per phasa. Kita asumsikan bahwa terminal 1a dihubungkan ke
sumber daya polaritas positip dan 1b ke negatip, maka rotor akan bergerak
ke arah lilitan 1a. Bila polaritas lilitan 1 dibalik (1a terhubung ke negatip dan
1b ke positip) maka rotor akan bergerak ke arah sebaliknya (lilitan 1b).
Dalam konsep urutan ”wave drive” searah putaran jarum jam (CW), lilitan 1
di-non aktifkan dan lilitan 2 dieksitasi untuk mengaktifkan phasa berikutnya.
Rotor akan dibawa atau digerakkan kearah lilitan yang dieksitasi sehingga
akan menghasilkan putaran yang kontinyu. Bila dua lilitan yang berurutan
dieksitasi secara bersama-sama maka rotor akan bergerak ke arah atau
posisi diantara kedua lilitan tersebut.

Pada Tabel 7 dituliskan urutan pemberian arus pada masing-masing lilitan


untuk 3 jenis operasi gerakan motor stepper bipolar. Polaritas hubungan
terminal lilitan ke sumber daya digunakan tanda + (positip) atau – (negatip).
Setelah mencapai step yang terakhir, urutan pemberian sumber daya pada
tiap-tiap lilitan diulangi lagi mulai dari awal. Untuk membalik arah putaran
rotor dapat dilakukan dengan cara membalik urutan pemberian eksitasi pada

148
tiap-tiap lilitan. Perhatikan bahwa urutan pemberian eksitasi pada motor
stepper jenis ini identik dengan urutan pemberian eksitasi pada motor
stepper unipolar.

Tabel 7. Urutan eksitasi pada motor stepper bipolar

Polaritas

Step pada lilitan Jenis (mode) Diskripsi


Operasi
ke- 2b 1b 2a 1a

1 - - - + Konsumsi daya paling kecil,


hanya 1 phasa yang diaktifkan
2 - - + - Wave Drive, tiap waktu.
One-Phase
3 - + - -

4 + - - -

1 - - + + Torsi yang dihasilkan besar,


dua phase yang berurutan
2 - + + - High-Torque, diaktifkan bersama-sama.
Two-Phase
3 + + - -

4 + - - +

1 - - - + Half-Step. Secara efektif


menggandakan resolusi
2 - - + + langkah (step) pada motor,
tetapi torsi yang dihasilkan
3 - - + -
tidak seragam pada tiap step-
4 - + + - Half-Step nya.

5 - + - -

6 + + - -

7 + - - -

8 + - - +

149
Contoh bentuk fisik dari motor stepper jenis bipolar ditunjukkan pada
gambar 10a dan 10b.

Gambar 10a Gambar 10b

C. APLIKASI MOTOR STEPPER

Aplikasi dari motor stepper diantaranya digunakan pada:

1. Cruise control
2. Auto air vents
3. Light leveling
4. Printer
5. Industrial machines
6. Automotive gauges
7. Office equipment
8. Computer drives
9. Medical scanners
10.Scientific Instrumentation

Dalam percobaan berikut, digunakan jenis motor stepper unipolar dengan


sudut langkah (step angle) sebesar 3,750.

150
ALAT DAN BAHAN
1. Pesawat Latih Mikrokontroler
2. Jumper secukupnya.
3. Unipolar Stepper Motor

LANGKAH KERJA

A. Operasi Full Step

1. Buat rangkaian seperti ditunjukkan pada gambar 1.

Gambar 1. Rangkaian Stepper Motor

2. Hubungkan pesawat latih Mikrokontroler ke sumber listrik jala-jala


220VAC.
3. Hubungkan pesawat latih Mikrokontroler dengan komputer (PC)
melalui soket USB yang terpasang.

151
4. Buka software editor (Notepad).
5. Ketik program berikut ini:

$mod51

Org 0h

START: MOV P1,#00001000B


CALL DELAY
MOV P1,#00000100B
CALL DELAY
MOV P1,#00000010B
CALL DELAY
MOV P1,#00000001B
CALL DELAY
JMP START

DELAY: MOV R0,#0FFH


LOOP: MOV R1,#0FFH
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET
END

6. Simpan program tersebut dengan nama full_step.asm


7. Lakukan kompilasi pada program tersebut.
8. Hidupkan sakelar power dan DC power pada pesawat latih.
9. Jalankan program tersebut menggunakan PROGISP software.
10. Amati gerakan pada motor stepper.
11.Catat arah gerakan motor stepper.
Arah gerakan motor ................................................................
12.Atur kecepatan stepper motor dengan cara mengganti-ganti nilai
pada register pada sub rutin program delay.
13. Buat program untuk membalik arah putaran stepper motor.
14. Simpan program anda dan beri nama dengan full_step1.asm.
15. Lakukan kompilasi pada program anda kemudian jalankan.
16. Apakah program anda bekerja sesuai yang diharapkan?
17. Matikan sakelar power pada pesawat latih.

152
B. Operasi Half Step

1. Buat rangkaian seperti pada operasi Full step (Gambar 1).


2. Ketik program berikut menggunakan notepad:

$mod51

Org 0h

START: MOV P1,#00001000B


CALL DELAY
MOV P1,#00001100B
CALL DELAY
MOV P1,#00000100B
CALL DELAY
MOV P1,#00000110B
CALL DELAY
MOV P1,#00000010B
CALL DELAY
MOV P1,#00000011B
CALL DELAY
MOV P1,#00000001B
CALL DELAY
MOV P1,#00001001B
CALL DELAY
JMP START

DELAY: MOV R0,#0FFH


LOOP: MOV R1,#0FFH
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET
END

3. Simpan program tersebut dengan nama half_step.asm


4. Lakukan kompilasi pada program tersebut.
5. Hidupkan sakelar power dan DC power pada pesawat latih.
6. Jalankan program tersebut menggunakan PROGISP software.
7. Amati gerakan pada motor stepper.

153
8. Catat arah gerakan motor stepper.
Arah gerakan motor ................................................................
9. Atur kecepatan stepper motor dengan cara mengganti-ganti nilai
pada register pada sub rutin program delay.
10. Buat program untuk membalik arah putaran stepper motor.
11. Simpan program anda dan beri nama dengan half_step1.asm.
12. Lakukan kompilasi pada program anda kemudian jalankan.
13. Apakah program anda bekerja sesuai yang diharapkan?
14. Matikan sakelar power pada pesawat latih.

B. Operasi High Torque

1. Buat rangkaian seperti pada operasi Full step (Gambar 1).

2. Ketik program berikut menggunakan notepad:

$mod51

Org 0h

START: MOV P1,#00001100B


CALL DELAY
MOV P1,#00000110B
CALL DELAY
MOV P1,#00000011B
CALL DELAY
MOV P1,#00001001B
CALL DELAY
JMP START

DELAY: MOV R0,#0FFH


LOOP: MOV R1,#0FFH
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET
END

154
2. Simpan program tersebut dengan nama half_step.asm
3. Lakukan kompilasi pada program tersebut.
4. Hidupkan sakelar power dan DC power pada pesawat latih.
5. Jalankan program tersebut menggunakan PROGISP software.
6. Amati gerakan pada motor stepper.
7. Catat arah gerakan motor stepper.
Arah gerakan motor ................................................................
8. Atur kecepatan stepper motor dengan cara mengganti-ganti nilai
pada register pada sub rutin program delay.
9. Buat program untuk membalik arah putaran stepper motor.
10. Simpan program anda dan beri nama dengan half_step1.asm.
11. Lakukan kompilasi pada program anda kemudian jalankan.
12. Apakah program anda bekerja sesuai yang diharapkan?
13. Matikan sakelar power pada pesawat latih.

155
PERCOBAAN 5
KEYPAD 4X3
TUJUAN:
Setelah meklakukan percobaan ini pembelajar diharapkan dapat:
1. Memahami rangkaian interface keypad 4x3 dengan mikrokontroler.
2. Memahami bahasa assembly untuk pengambilan data keypad.
3. Memahami bahasa assembly untuk pengambilan data dari keypad
dan mengeluarkannya ke LED.

PENDAHULUAN
Keypad sering digunakan sebagi suatu input pada beberapa peralatan
yang berbasis mikroprosessor atau mikrokontroller. Keypad
sesungguhnya terdiri dari sejumlah saklar, yang terhubung sebagai
baris dan kolom dengan susunan seperti yang ditunjukkan pada
gambar 1. Agar mikrokontroller dapat melakukan scan keypad, maka
port mengeluarkan salah satu bit dari 3 bit yang terhubung pada
kolom dengan logika low “0” dan selanjutnya membaca 4 bit pada
baris untuk menguji jika ada tombol yang ditekan pada kolom
tersebut. Sebagai konsekuensi, selama tidak ada tombol yang ditekan,
maka mikrokontroller akan melihat sebagai logika high “1” pada setiap
pin yang terhubung ke baris.

ALAT DAN BAHAN


1. Pesawat Latih Mikrokontroler Atmel
2. Display LED
3. Keypad 4X3
4. Jumper secukupnya.

156
LANGKAH KERJA

1. Buat rangkaian interface keypad 4x3 seperti ditunjukkan pada


gambar 1.

Gambar 1. Rangkaian interface keypad 4x3

2. Buat rangkaian untuk indikator data output menggunakan LED


seperti ditunjukkan pada gambar 2.

Gambar 2. Display LED sebagai Output Data Keypad

157
2. Buat program untuk membaca data dari keypad selanjutnya
ditampilkan pada LED seperti berikut:

$mod51

row0 bit P2.0; baris 0 = P2.0


row1 bit P2.1; baris 1 = P2.1
row2 bit P2.2; baris 2 = P2.2
row3 bit P2.3; baris 3 = P2.3
Col2 bit P2.4; kolom 2 = P2.4
Col1 bit P2.5; kolom 1 = P2.5
Col0 bit P2.6; kolom 0 = P2.6
;
keydata equ 70h; data output = memori 70H
keybounc equ 71h; data anti bounching = memori 71H
keyport equ P2; keypad menggunakan port 2
;
org 0h; alamat awal memori program berada pada 0000H
mov P2,#11111111b; set semua bit pada port 2 dengan logic 1
start: call keypad4x3 ; ambil data dari sub rutin scanning keypad 4X3
Mov A,keydata ;A = keydata
Cjne A,#0FFh,send ;
sjmp start ; LOOPING FOREVER
send: Mov P0,A ;P0 = A
Sjmp start ; LOOPING FOREVER PART 2
;
;====================================
; subroutine scan keypad 4x3
;====================================
Keypad4x3:
mov keybounc,#50 ;keybounc = 50
mov keyport,#0FFh ;keyport=P2= FFH
clr col2 ; col2 = 0 (kolom 2 diberi logic 0)
;
keyRow0_C2:
jb row0,keyRow1_C2; bila baris0 kolom2 tidak ada tombol ditekan, scan
baris1 kolom2.
djnz keybounc,KeyRow0_C2; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0FEh ;Siapkan data output 11111110B, FEH (tombol 1)
ret
;
KeyRow1_C2:
jb row1,keyRow2_C2; bila baris1 kolom2 tidak ada tombol ditekan, scan
baris2 kolom2.
djnz keybounc,keyRow1_C2; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0FBh ; Siapkan data output 11111011B, FBH (tombol 4)
ret

158
keyRow2_C2:
jb row2,keyRow3_C2; bila baris2 kolom2 tidak ada tombol ditekan, scan
baris3 kolom2.
djnz keybounc,keyRow2; bila ada tombol ditekan, kerjakan anti bounching
mov keydata,#0F8h ; Siapkan data output 11111000B, F8H (tombol 7)
ret
;
keyRow3_C2:
jb row3,keyRow0_C1; bila baris3 kolom2 tidak ada tombol ditekan, scan
baris0 kolom1.
djnz keybounc,keyRow3_C2; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0F0h ; Siapkan data output 11110000B, F0H (tombol *)
ret
;==========================================
KeyRow0_C1:
setb col2; kolom2 diberi logic 1
clr col1; kolom2 diberi logic 0
jb row0,keyRow1_C1; bila baris0 kolom1 tidak ada tombol ditekan, scan
baris1 kolom1.
djnz keybounc,KeyRow0_C1; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0FDh ; Siapkan data output 11111101B, FDH (tombol 2)
ret
;
KeyRow1_C1:
jb row1,keyRow2_C1; bila baris1 kolom1 tidak ada tombol ditekan, scan
baris2 kolom1.

djnz keybounc,keyRow1_C1; bila ada tombol ditekan, kerjakan anti


bounching
mov keydata,#0FAh ; Siapkan data output 11111010B, FAH (tombol 5)
ret
keyRow2_C1:
jb row2,keyRow3_C1; bila baris2 kolom1 tidak ada tombol ditekan, scan
baris3 kolom1.

djnz keybounc,keyRow2_C1; bila ada tombol ditekan, kerjakan anti


bounching
mov keydata,#0F7h ; Siapkan data output 11110111B, F7H (tombol 8)
ret
;
keyRow3_C1:
jb row3,keyRow0_C0; bila baris3 kolom1 tidak ada tombol ditekan, scan
baris0 kolom0.
djnz keybounc,keyRow3_C1; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#00h ; Siapkan data output 00000000B, 00H (tombol 0)

ret

;============================================
keyRow0_C0:

159
setb col1; kolom1 diberi logic 1
clr col0; kolom0 diberi logic 0
jb row1,keyRow2_C0; bila baris0 kolom0 tidak ada tombol ditekan, scan
baris1 kolom0.
djnz keybounc,KeyRow0_C0; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0FCh ; Siapkan data output 11111100B, FCH (tombol 3)
ret
;
KeyRow1_C0:
jb row1,keyRow2_C0; bila baris1 kolom0 tidak ada tombol ditekan, scan
baris2 kolom0.
djnz keybounc,keyRow1_C0; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0F9h ; Siapkan data output 11111001B, F9H (tombol 6)
ret
keyRow2_C0:
jb row2,keyRow3_C0; bila baris2 kolom0 tidak ada tombol ditekan, scan
baris3 kolom0.
djnz keybounc,keyRow2_C0; bila ada tombol ditekan, kerjakan anti
bounching
mov keydata,#0F6h ; Siapkan data output 11110110B, F6H (tombol 9)
ret
;
keyRow3_C0:
jb row3,No_key; bila baris3 kolom0 tidak ada tombol ditekan, kerjakan
No_key.

djnz keybounc,keyRow3_C0; bila ada tombol ditekan, kerjakan anti


bounching
mov keydata,#0Fh ; Siapkan data output 00001111B, 0FH (tombol #)
ret
;
Nokey: mov keydata,#0FFh
ret
end

4. Simpanlah program yang anda ketik dan beri nama : keypad.asm


5. Lakukan kompilasi program tersebut.
6. Hidupkan power pada pesawat latih.
7. Jalankan program tersebut dengan cara melakukan pemrograman
AT89S51 menggunakan PROGISP Software.
8. Tekan tiap tombol yang ada pada keypad kemudian amati display
penampil LED yang terpasang, catat hasil pengamatan anda pada
tabel berikut:

160
Tabel hasil pengamatan pada percobaan keypad.

TOMBOL DISPLAY LED


D7 D6 D5 D4 D3 D2 D1 D0
1
2
3
4
5
6
7
8
9
0
*
#

9. Matikan power pada pesawat latih.


10.Matikan power pada computer.
11.Kembalikan perlengkapan ke tempat semula.
12.Buat kesimpulan tentang hasil percobaan anda.

161
PERCOBAAN 6
LCD KARAKTER

TUJUAN:
Setelah selesai melakukan percobaan ini pembelajar diharapkan
dapat:
1. Memahami rangkaian interface mikrokontroller dengan LCD
Karakter 2 x16
2. Memahami program assembly untuk menampilkan data ke LCD
Karakter 2 x 16
3. Memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan
waktu tunda.
4. Menampilkan karakter pada posisi baris dan kolom tertentu.

162
Gambar 2. Rangkaian interface ke LCD Karakter 2 x16
Modul LCD Character dapat dengan mudah dihubungkan dengan
mikrokontroller seperti AT89S51. LCD yang akan kita praktikumkan ini
mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai
LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan
sebagai berikut:

Gambar 1. Modul LCD Karakter 2x16

163
Tabel 1.1 Pin dan Fungsi

PIN Name Function

1 VSS Ground voltage

2 VCC +5V

3 VEE Contrast voltage

Register Select
4 RS 0 = Instruction Register
1 = Data Register

Read/ Write, to choose write or read mode


5 R/W 0 = write mode
1 = read mode

Enable
6 E 0 = start to lacht data to LCD character
1= disable

7 DB0 LSB

8 DB1 -

9 DB2 -

10 DB3 -

11 DB4 -

12 DB5 -

13 DB6 -

14 DB7 MSB

15 BPL Back Plane Light

16 GND Ground voltage

164
Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu
LCD bahwa anda sedang mengirimkan sebuah data. Untuk
mengirimkan data ke LCD, maka melalui program EN harus dibuat
logika low “0” dan set pada dua jalur kontrol yang lain RS dan RW.
Ketika dua jalur yang lain telah siap, set EN dengan logika “1” dan
tunggu untuk sejumlah waktu tertentu ( sesuai dengan datasheet dari
LCD tersebut ) dan berikutnya set EN ke logika low “0” lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika low “0”, data
akan dianggap sebagai sebuah perintah atau instruksi khusus ( seperti
clear screen, posisi kursor dll ). Ketika RS berlogika high “1”, data
yang dikirim adalah data text yang akan ditampilkan pada display
LCD. Sebagai contoh, untuk menampilkan huruf “T” pada layar LCD
maka RS harus diset logika high “1”.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low
(0), maka informasi pada bus data akan dituliskan pada layar LCD.
Ketika RW berlogika high ”1”, maka program akan melakukan
pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW
selalu diberi logika low ”0”.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada
mode operasi yang dipilih oleh user ). Pada kasus bus data 8 bit, jalur
diacukan sebagai DB0 s/d DB7.
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD
Character,

Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

165
0 0 0 0 1 DL N F X X

CATATAN:
X : Don’t care
DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali

Entry Mode Set


Mengatur increment/ decrement dan mode geser

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 1 I/D S

Catatan:
I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode
karakter dituliskan ke DDRAM.
I/D = “0”, decrement
I/D = “1”, increment
S: Geser keseluruhan display kekanan dan kekiri
S=1, geser kekiri atau kekanan bergantung pada I/D
S=0, display tidak bergeser.

Display On/ Off Cursor


Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi
Cursor Blink.

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 1 D C B

166
D : Mengatur display
D = 1, Display is ON
D = 0, Display is OFF
Pada kasus ini data display masih tetap berada di DDRAM, dan dapat
ditampilkan kembali secara langsung dengan mengatur D=1.
C : Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Karakter ditunjukkan dengan kursor yang berkedip
B=1, kursor blink

Clear Display
Perintah ini berfungsi untuk menghapus layar

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 0 0 0 1

Geser Kursor dan Display


Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis
atau baca data display. Fungsi ini digunakan untuk koreksi atau
pencarian display.

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

0 0 0 0 0 0 S/C R/L X X

Catatan : x = Dont care

S/C R/L Note

167
0 0 Shift cursor position to the left

0 1 Shift cursor position to the right

1 0 Shift the entire display to the left

1 1 Shift the entire display to the right

POSISI KURSOR
Modul LCD terdiri dari sejumlah memory yang digunakan untuk
display. Semua teks yang kita tuliskan ke modul LCD adalah disimpan
didalam memory ini, dan modul LCD secara berturutan membaca
memory ini untuk menampilkan teks ke modul LCD itu sendiri.

Pada peta memori tersebut, daerah yang berwarna biru ( 00 s/d 0F


dan 40 s/d 4F ) adalah display yang tampak. Sebagaimanan yang
anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua
baris. Angka pada setiap kotak adalah alamat memori yang
bersesuaian dengan posisi dari layar. Demikianlah karakter pertama di
sudut kiri atas adalah menempati alamah 00h. Posisi karakter
berikutnya adalah alamat 01h dan seterusnya.
Akan tetapi, karakter pertama dari baris 2 sebagaimana yang
ditunjukkan pada peta memori adalah pada alamat 40h. Dimikianlah
kita perlu untuk mengirim sebuah perintah ke LCD untuk mangatur
168
letak posisi kursor pada baris dan kolom tertentu. Instruksi Set Posisi
Kursor adalah 80h. Untuk ini kita perlu menambahkan alamat lokasi
dimana kita berharap untuk menempatkan kursor.Sebagai contoh, kita
ingin menampilkan kata ”World” pada baris ke dua pada posisi kolom
ke sepuluh. Sesuai peta memori, posisi karakter pada kolom 11 dari
baris ke dua, mempunyai alamat 4Ah, sehingga sebelum kita tulis kata
”World” pada LCD, kita harus mengirim instruksi set posisi kursor, dan
perintah untuk instruksi ini adalah 80h ditambah dengan alamat
80h+4Ah =0Cah. Sehingga dengan mengirim perintah Cah ke LCD,
akan menempatkan kursor pada baris kedua dan kolom ke 11 dari
DDRAM.

INISIALISASI
Sebelum kita dapat menggunakan modul LCD, kita harus melakukan
inisialisasi dan mengkonfigurasikannya. Hal ini dijalankan dengan
mengirimkan sejumlah instruksi ke LCD. Antara lain: pengaturan lebar
data interface 8 bit atau 4 bit data bus, pemilihan ukuran font karakter
5x8 atau 5x7 dan lain-lain, dengan instruksi sebagai berikut.

Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;EN=pulse dan RS=0
mov r1,#00111000b ;Function set, ;Data 8 bit,2 line font 5x7
call write_inst ;Set bit EN=pulse dan RS=0
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
call write_inst ;EN=pulse dan RS=0
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret

Percobaan 1. Menulis Sebuah Karakter pada LCD


Karakter

169
Pada percobaan ini, karakter ‘A’ akan ditampilkan pada 7 Segmen
Display 1.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power
supply +5V.
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer.
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program.
5. Ketik program berikut ini:

$mod51
org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst
mov R1,#'A' ; Cetak Karakter A
call write_data
stop: sjmp stop
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7
call write_inst
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.0 ; P3.0 = RS =0
mov P2,R1 ; P2 = D7 s/d D0 = R1
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr P3.2 ; P3.2 =EN = 0
ret
;
Write_data:
setb P3.0 ; P3.0 = RS =1
mov P2,R1 ; P2 = D7 s/d D0 = R1

170
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr P3.2 ; P3.2 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end

6. Simpanlah program yang anda ketik dan beri nama : prog41a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan
Program PROGISP Software ( Lihat Petunjuk Penggunaan).
9. Lakukan pengamatan pada LED.
10. Lakukan modifikasi pada program tersebut untuk mencetak
karakter lain, sesuai tabel:

Nama Karakter Posisi Display

1 Row 1, Col 2

Z Row 1, Col 8

& Row 2, Col 12

Percobaan 2. Menulis Delapan Karakter pada LCD


Karakter

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai


berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power
supply +5V.

171
2. Hubungkan modul Microcontroler Trainer dengan power supply +5V.
3. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer.
4. Buka Program MIDE Studio for MCS-51, sebagai editor dan compiler
program.
5. Ketik program berikut ini:

$mod51

org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst
mov R1,#'W'
call write_data
mov R1,#'e'
call write_data
mov R1,#'l'
call write_data
mov R1,#'c'
call write_data
mov R1,#'o'
call write_data
mov R1,#'m'
call write_data
mov R1,#'e'
call write_data
stop: sjmp stop
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.0 ; P3.0 = RS =0
mov P2,R1 ; P2 = D7 s/d D0 = R1
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr P3.2 ; P3.2 =EN = 0
ret

172
;
Write_data:
setb P3.0 ; P3.0 = RS =1
mov P2,R1 ; P2 = D7 s/d D0 = R1
setb P3.2 ; P3.2 =EN = 1
call delay ; call delay time
clr p3.2 ; P3.2 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end

6. Simpanlah program yang anda ketik dan beri nama : prog42a.asm

7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.

8. Lakukan pemrograman mikrokontroller dengan menggunakan


Program PROGISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada LED.

10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

Nama Karakter Start Posisi Display

Selamat Datang Row 1, Col 1

Mikrokontroller Row 2, Col 1

Percobaan 3. Tulis Karakter Dengan Look Up Table

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai


berikut:

173
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power
supply +5V
2. Hubungkan modul Microcontroler Trainer dengan power supply +5V
3. Hubungkan modul Microcontroler Trainer dengan rangkaian
programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
5. Ketik program berikut ini:

$mod51

org 0h

call init_LCD
start: call write_char
stop: sjmp stop
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#16 ;R3=16,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
call write_inst
;
write1:clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
call write_data;
djnz r3,write1 ; R3 = R3-1,
ret
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst ;
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.6 ; P3.6 = RS =0

174
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
word1: DB ' Welcome Home '; Karakter yang disimpan di ROM
;
end

6. Simpanlah program yang anda ketik dan beri nama: prog43a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan
Program PROGISP Software ( Lihat Petunjuk Penggunaan).
9. Lakukan pengamatan pada LCD.
10. Lakukan modifikasi pada program tersebut untuk mencetak
karakter lain, sesuai tabel:

Nama Karakter Start Posisi Display

Selamat Datang Row 1, Col 1

Mikrokontroller Row 2, Col 1

175
PERCOBAAN 7
ANALOG TO DIGITAL CONVERTER (ADC)

1. ANALOG TO DIGITAL CONVERTER


Analog To Digital Converter (ADC) adalah pengubah input analog
menjadi kode – kode digital. ADC banyak digunakan sebagai Pengatur
proses industri, komunikasi digital dan rangkaian pengukuran/
pengujian.
Umumnya ADC digunakan sebagai perantara antara sensor yang
kebanyakan analog dengan sistim komputer seperti sensor suhu,
cahaya, tekanan/ berat, aliran dan sebagainya kemudian diukur
dengan menggunakan sistim digital (komputer).
Meskipun ada beberapa transduser yang memberikan output sinyal
digital secara langsung dan sedang dikembangkan, sebagian besar
transduser tetap hanya mengkonversi variabel dinamik ke dalam
sebuah sinyal listrik analog. Dengan peningkatan penggunaan logika
digital dan komputer di dalam kontrol proses, sangat perlu untuk
mempergunakan sebuah DAC untuk menghasilkan sebuah output yang
dikodekan secara digital. Fungsi transfer dari ADC dapat diekspresikan
dengan Persamaan berikut:

176
Dimana:
Vx = input tegangan analog
VR = tegangan referensi
b1 b2 . . . bn = output digital n-bit
Kita mempergunakan kesamaan pendekatan dalam persamaan ini
karena tegangan di sebelah kanan dapat berubah oleh ukuran step
yang terbatas oleh Persamaan berikut:
–n
ΔV = VR 2
Hal ini berarti bahwa ada ketidak pastian dari ΔV di dalam melakukan
konversi dari tegangan analog ke sinyal digital. Ketidak pastian ini
harus diambil ke dalam perhitungan di dalam aplikasi desain. Jika
permasalahan sesuai dengan pertimbangan menentukan suatu resolusi
tertentu terhadap tegangan analog, maka ukuran word dan referensi
harus dipilih untuk mendapatkan resolusi ini dalam bilangan yang
dikonversikan ke bilangan digital.

2. KARAKTERISTIK UMUM
Sejumlah besar fitur umum yang mungkin dimiliki oleh konverter A/D,
yang penting dalam aplikasi:
a. Input.
Biasanya berupa level tegangan analog. Level yang paling umum
adalah 0 – 10 volt atau –10 hingga +10 jika dimungkinkan konversi
bipolar. Dalam beberapa kasus, level ditentukan oleh sebuah
referensi suplai eksternal.
b. Output.

177
Sebuah word biner paralel atau serial yang merupakan hasil
pengkodean input analog.
c. Referensi.
Stabil, sumber dengan ripple kecil terhadap konversi.
d. Suplai Daya.
Biasanya, sebuah suplai bipolar ±12 hingga ±18 V diperlukan untuk
amplifier analog dan komparator dan sebuah suplai +5 V untuk
rangkaian digital.
e. Input Sample and Hold.
Error timbul jika tegangan input berubah selama proses konversi.
Untuk alasan ini, sebuah amplifier sample and hold selalu
dipergunakan pada input untuk memberikan sebuah tegangan input
tetap untuk proses konversi.
f. Sinyal Digital.
Sebagian besar ADC memerlukan sebuah logika input tinggi pada
jalur yang diberikan untuk menginisialisasi proses konversi. Ketika
konversi selesai, ADC biasanya memberikan sebuah level tegangan
tinggi pada jalur lainnya sebagai indikator untuk mengikuti
perlengkapan status.
g. Waktu Konversi.
ADC harus berurutan melalui sebuah set operasi sebelum dapat
menemukan output digital yang diinginkan. Untuk alasan ini, sebuah
bagian penting dari spesifikasi adalah waktu yang diperlukan untuk
konversi. Waktu adalah 10 – 100 μs bergantung pada jumlah bit dan
desain dari konverter.

3. PARAMETER-PARAMETER PENTING PADA ADC

a. Resolusi konversi ADC

178
Resolusi konversi dari sebuah konverter analog ke digital adalah,
dimana kita dapat mengkonversikan data analog kedalam bit-bit
digital tersebut, apakah data analog tersebut akan dikonversikan ke
dalam data 8bit, 16 bit atau 32bit, ini tergantung keinginan si
perancang design dan tergantung dari kekompatibelan device yang
nanti akan di interface kan.
Misalkan ingin meng interface kan ADC dengan mikrokontroller maka
harus dilihat support untuk berapa bit kah mikrokontroller tersebut?,
dan biasanya mikrokontroller support untuk ADC dengan resolusi 8 bit.

b. Time Konversi
Time konversi atau waktu konversi adalah waktu yang dibutuhkan oleh
ADC untuk mengkonversi data analaog ke digital, untuk menentukan
time konversi ini tentunya kita harus melihat di datasheet nya, dan
harus dilihat untuk kebutuhan seperti apa.
Time konversi semakin tinggi mungkin semakin baik, tetapi harus
didukung pula untuk interface nya seperti apa, missal untuk
mikrokontroller yang support untuk time lebih besar maka tidak akan
cocok bila menggunakan ADC dengan Time yang lebih besar,
penentuan time konversi ini perlu disesuaikan dengan design interface
nya seperti apa. Jika semua device nya mendukung untuk time yang
lebih cepat maka dengan menggunakan ADC yang time nya lebih
cepat itu akan menjadi lebih baik.

4. JENIS-JENIS ADC
Analog To Digital Converter dibutuhkan apabila akan diproses sinyal-
sinyal analog misal: dari fenomena alam = suara, cahaya, suhu, dll,
(degan bantuan sensor/transduser supaya keluar tegangan).

179
Terdapat dua jenis Rangkaian Dasar Analog to Digital (ADC) :
1). ADC jenis Counter Ramp
2). ADC jenis SAR (Succesive Aproximation Register) atau ADC Parallel

4.1. ADC JENIS COUNTER RAMP

Konverter A/D tipe ramp pada intinya membandingkan tegangan input


terhadap tegangan ramp yang naik secara linier. Sebuah pencacah
(counter) biner diaktifkan untuk mencacah step ramp sampai
tegangan ramp sama dengan input. Ramp ini sendiri dihasilkan oleh
sebuah rangkaian integrator op-amp.

Digital Ramp ADC merupakan jenis ADC yang bekerja berdasarkan


prinsip kerja counter. Input signal analog dibandingkan dengan input
lain pada komparator digital. Output dari komparator digital
diumpankan ke LOAD counter dan ke EDGE TRIGGER NEGATIVE
latches. Selanjutnya output dari counter diumpankan ke input DAC
[DAC yang digunakan adalah jenis Binary Weight Resistor] juga
diumpankan ke input Latches.

Output dari DAC diumpankan ke input negative komparator.


penjelasan mengenai komparator digital, counter, latches, dan DAC
akan dijelaskan dengan penggunaan ADC pada aplikasi high
temperature thermometer.

180
Gambar 1. ADC Jenis RAMP

Komparator Digital merupakan komparator khusus yang hanya


memiliki 2 kondisi output yaitu logik 1 atau nol.
Logik 1 berarti tegangan keluaran komparator berkisar 5 volt.
Logik 0 berarti tegangan keluaran komparator berkisar 0 volt.
Output komparator akan berlogik 1 jika hanya tegangan pada input
positive komparator lebih besar dari tegangan input negative
komparator.
Output komparator akan berlogik 0 jika tegangan pada input positive
= tegangan pada input negative, atau tegangan input negative lebih
besar dari tegangan input positive.

Input Output

+V > -V logik 1 [5 volt]


+V = -V logik 0 [0 volt]
+V < -V logik 0 [0 volt]

181
Counter adalah komponen yang melakukan pencacahan /
penghitungan. counter yang digunakan yaitu counter dengan LOAD.
input dari counter di groundkan [diberi tegangan 0 volt], clock diberi
pulsa [pulsa maksimum yang diperbolehkan adalah 50MHz]. LOAD
dihubungkan ke output komparator. ketika LOAD logik 1, maka
counter melakukan penghitungan dari mulai 0. ketika LOAD berlogik 0,
maka counter menghentikan penghitungan. DAC [jenis binary weight
resistor] adalah pengkonversi signal digital menjadi analog dengan
menggunakan beberapa resistor [tergantung jumlah bit yang akan
dikonversi]. misalkan input DAC 0010, tegangan referensi DAC = 5 V,
maka tegangan output [signal analognya] adalah NILAI DESIMAL DARI
BINER dibagi DUA PANGKAT n-1 dikali TEGANGAN REFERENSI. jadi
Vout = [2/2^3] x 5 = 2.5 volt. tegangan maksimum dari DAC ini
adalah 9.375 volt. Latches adalah bagian yang menahan sementara
data dari counter untuk selanjutnya diproses untuk dimunculkan pada
display [7 segment atau LCD]. latches bekerja berdasarkan prinsip
bistable multivibrator, yaitu multivibrator yang memiliki kondisi 2
kondisi output yaitu 0 dan 1. data dari counter akan ditahan oleh
latches, ketika EDGE TRIGGER NEGATIVE dari latches mendapat
transisi turun [perubahan dari logik 1 ke logik 0], maka latches akan
melanjutkan data dari counter ke display.

4.1.1. ADC RAMP SLOPE GANDA

182
Gambar 2. ADC Ramp Slope Ganda

ADC ini merupakan tipe yang paling umum dari konverter ramp.
Diagram yang disederhanakan dari piranti ini diperlihatkan pada
Gambar 2. Prinsip kerjanya berdasar pada kemampuan sinyal input
untuk menggerakkan integrator untuk waktu tetap T1, sehingga
menghasilkan sebuah output

Setelah waktu T1, input integrator secara elektronis tersaklar pada


suplai referensi yang bernilai negatif. Kemudian komparator melihat
sebuah tegangan input yang berkurang dari V1 sebagai

atau , karena VR adalah konstan dan V1 diperoleh dari Persamaan (3-7)

sebuah pencacah diaktifkan pada waktu T1 dan mencacah hingga


komparator mengindikasikan V2 = 0 pada waktu tx, Persamaan (3-9)
mengindikasikan bahwa Vx sebesar

183
Sehingga, waktu pencacah tx adalah linier terhadap Vx dan juga tidak
bergantung pada karakteristik integrator, yaitu R dan C. Prosedur ini
diperlihatkan dalam diagram waktu pada Gambar 3, konversi dimulai
sinyal digital konversi mulai (start) dan selesai (complete) juga
dipergunakan dalam piranti ini, dan (dalam beberapa kasus) referensi
internal atau eksternal dapat dipergunakan.

Gambar 3. Konverter A/D slope ganda mencacah waktu yang


diperlukanuntuk zero crossing output integrator dari sebuah input
yang diketahui

4.2. ADC jenis SAR (Succesive Aproximation Register)

Konverter A/D paralel-feedback menerapkan sistem umpan balik


(feedback)
untuk melakukan konversi seperti diperlihatkan pada Gambar 4. Pada
dasarnya, sebuah komparator dipergunakan untuk membandingkan

184
tegangan input Vx terhadap sebuah tegangan umpan balik VP yang
berasal dari sebuah DAC seperti tampak dalam gambar. Komparator
menghasilkan sinyal yang menggerakkan sebuah jaringan logika yang
menaikkan output digital (dan juga input DAC) hingga komparator
mengindikasikan dua sinyal adalah sama sesuai resolusi dari
konverter. Konverter paralel-feedback yang paling populer adalah
pendekatan successive. Pada piranti ini, susunan rangkaian logika
dibuat secara successive dan menguji setiap bit, dimulai dengan bit
paling penting (MSB) dari word. Kita memulainya dengan semua bit
nol.
Dari sini, operasi pertama adalah dengan mengeset b1 = 1 dan
–1
menguji VF = VR 2 terhadap Vx melalui komparator.
Jika Vx lebih besar, maka b1 adalah satu; b2 diset ke 1 dan dilakukan
–1 –2
test bagi Vx terhadap VV = VR(2 +2 ), dan seterusnya.
Jika Vx lebih kecil dari VR2–1, maka b1 direset ke nol; b2 diset ke 1 dan
– 2
dilakukan test bagi Vx terhadap VR 2 . Proses ini diulang hingga bit
terendah (least significant bit) dari word. Operasi yang terjadi paling
baik diilustrasikan melalui contoh.

185
Gambar 4. ADC jenis SAR

Metode SAR ini lebih cepat, yakni dengan memakai konfigurasi,


mengeluarkan kombinasi bit MSB = 1 =»1000 0000, apabila belum
sama (kurang dari tegangan analog input) maka bit MSB berikutnya
=1=» 1100 0000 apabila tegangan analog input ternyata lebih kecil
dari tegangan yang dihasilkan DAC maka langkah berikutnya
menurunkan kombinasi bit =» 1010 0000 (dst).
Misal: Diberi tegangan Analog Input sebesar 6,84 Volt dan tegangan
Ref ADC sebesar 10 Volt , sehingga :
Jika D7 = 1 Vout = 5 Volt
D6 = 1 , Vout = 2,5 Volt
D5 = 1, Vout = 1,25 Volt
D4 = 1, Vout = 0,625 Volt
:::
D0 = 1 , Vout = 0,0390625 Volt
Setelah diberi sinyal start maka konversi dimulai dengan memberikan
kombinasi 1000 0000, ternyata menghasilkan tegangan 5 Volt, berarti

186
masih kurang dari tegangan input 6,84 Volt. Kombinasi mejadi 1100
0000 sehinga tegangan Vout = 7,5 Volt dan ternyata lebih besar dari
6,84 Volt sehingga kombinasi menjadi 1010 0000 =» Tegangan = 6,25
Volt, masih kurang sehingga kombinasi naik lagi 1011 0000 demikian
seterusnya hingga mencapai tegangan 6,8359 Volt.

5. ANALOG TO DIGITAL CONVERTER ADC0804


Analog to Digital Converter (ADC) adalah sebuah piranti yang
dirancang untuk mengubah sinyal-sinyal analog menjadi sinyal - sinyal
digital. IC ADC 0804 dianggap dapat memenuhi kebutuhan dari
rangkaian yang akan dibuat. IC jenis ini bekerja secara cermat dengan
menambahkan sedikit komponen sesuai dengan spesifikasi yang harus
diberikan dan dapat mengkonversikan secara cepat suatu masukan
tegangan. Hal-hal yang juga perlu diperhatikan dalam penggunaan
ADC ini adalah tegangan maksimum yang dapat dikonversikan oleh
ADC dari rangkaian pengkondisi sinyal, resolusi, pewaktu eksternal
ADC, tipe keluaran, ketepatan dan waktu konversinya.
Beberapa karakteristik penting ADC :
1. Waktu konversi
2. Resolusi
3. Ketidaklinieran
4. Akurasi

Ada banyak cara yang dapat digunakan untuk mengubah sinyal analog
menjadi sinyal digital yang nilainya proposional. Jenis ADC yang biasa
digunakan dalam perancangan adalah jenis successive approximation
convertion atau pendekatan bertingkat yang memiliki waktu konversi
jauh lebih singkat dan tidak tergantung pada nilai masukan analognya

187
atau sinyal yang akan diubah. Dalam Gambar 5. memperlihatkan
diagram blok ADC tersebut.

Gambar 5. Diagram Blok ADC

Secara singkat prinsip kerja dari konverter A/D adalah semua bit-bit
diset kemudian diuji, dan bilamana perlu sesuai dengan kondisi yang
telah ditentukan. Dengan rangkaian yang paling cepat, konversi akan
diselesaikan sesudah 8 clock, dan keluaran D/A merupakan nilai
analog yang ekivalen dengan nilai register SAR.
Apabila konversi telah dilaksanakan, rangkaian kembali mengirim
sinyal selesai konversi yang berlogika rendah. Sisi turun sinyal ini akan
menghasilkan data digital yang ekivalen ke dalam register buffer.
Dengan demikian, keluaran digital akan tetap tersimpan sekalipun
akan di mulai siklus konversi yang baru.

IC ADC 0804 mempunyai dua masukan analog, Vin (+) dan Vin (-),
sehingga dapat menerima masukan diferensial. Masukan analog
sebenarnya (Vin) sama dengan selisih antara tegangan-tegangan yang

188
dihubungkan dengan ke dua pin masukan yaitu Vin= Vin (+) – Vin (-).
Kalau masukan analog berupa tegangan tunggal, tegangan ini harus
dihubungkan dengan Vin (+), sedangkan Vin (-) digroundkan. Untuk
operasi normal, ADC 0804 menggunakan Vcc = +5 Volt sebagai
tegangan referensi. Dalam hal ini jangkauan masukan analog mulai
dari 0 Volt sampai 5 Volt (skala penuh), karena IC ini adalah DAC 8-
bit, resolusinya akan sama dengan

(n menyatakan jumlah bit keluaran biner IC analog to digital


converter)

IC ADC 0804 memiliki generator clock intenal yang harus diaktifkan


dengan menghubungkan sebuah resistor eksternal (R) antara pin CLK
OUT dan CLK IN serta sebuah kapasitor eksternal (C) antara CLK IN
dan ground digital. Frekuensi clock yang diperoleh di pin CLK OUT
sama dengan :

Untuk sinyal clock ini dapat juga digunakan sinyal eksternal yang
dihubungkan ke pin CLK IN. ADC 0804 memilik 8 keluaran digital
sehingga dapat langsung dihubungkan dengan saluran data
mikrokomputer. Masukan (chip select, aktif rendah) digunakan untuk
mengaktifkan ADC 0804. Jika berlogika tinggi, ADC 0804 tidak aktif
(disable) dan semua keluaranberada dalam keadaanimpedansi tinggi.
Masukan (write atau start convertion) digunakan untuk memulai
proses konversi. Untuk itu harus diberi pulsa logika 0. Sedangkan
keluaran (interrupt atauend of convertion) menyatakan akhir konversi.

189
Pada saat dimulai konversi, akan berubah ke logika 1. Di akhir
konversi akan kembali ke logika 0.
Gambar 6 menunjukkan susunan kaki ADC tersebut. Beberapa
karakteristik
ADC 0804 adalah sebagai berikut:
• Memiliki 2 masukan analog : Vin (+) dan Vin(-) sehingga
memperbolehkan masukan selisih (diferensial). Dengan kata lain,
tegangan masukan analog yang sebenarnya adalah selisih dari
masukan kedua pin [ analog Vin = Vin(+) – Vin(-)]. Jika hanya satu
masukan maka Vin(-) dihubungkan ke ground. Pada operasi normal,
ADC menggunakan Vcc = +5V sebagai tegangan referensi, dan
masukan analog memiliki jangkauan dari 0 sampai 5 V pada skala
penuh.
• Mengubah tegangan analog menjadi keluaran digital 8 bit. Sehingga
resolusinya adalah 5V/255 = 19.6 mV
• Memiliki pembangkit detak (clock) internal yang menghasilkan
frekuensi f=1/(1,1RC), dengan R dan C adalah komponen eksternal.
• Memiliki koneksi ground yang berbeda antara tegangan digital dan
analog. Kaki 8 adalah ground analog. Pin 10 adalah ground digital.

190
Gambar 6. Konfigurasi PIN ADC0804

ADC 0804 merupakan ADC yang paling familier, yang paling sering
digunakan untuk keperluan pembuatan alat-alat ukur digital, dengan
karakteristik dasar, lebar data = 8 bit, waktu konversi = 100 uS. WR :
( input ) pin ini digunakan untuk memulai konversi tegangan analog
menjadi data digital, bila WR mendapat logika '0' maka konverter akan
mengalami reset; dan ketika WR kembali pada keadaan tinggi maka
konversi segera dimulai. Bila CS atau RD diberi logika '1' maka output
D0 s/d D7 akan berada dalam keadaan high impedanzi, sebaliknya bila
CS dan RD diberi logika '0' maka output digital akan keluar pada D0
s/d D7. INT: ( output ) pin ini digunakan sebagai indikator apabila ADC
talah selesai menkonversikan tegangan analog menjadi digital, INT
akan mengeluarkan logika '1' pada saat memulai konversi dan akan
berada pada logika '0' bila konversi telah selesai. Frekuensi clock
konverter harus terletak dalam daerah frekuensi 100 s/d 800 kHz. CLK
IN dapat diturunkan dari sumber clock eksternal. Clock internal dapat
dibangkitkan dengan memeberikan komponen R dan C pada CLK IN
dan CLK R. Vin : pin ini sebagai inputan tegangan analog yang akan
dikonversikan menjadi data digital.

6. Mode Operasi ADC0804

a. Mode Operasi Kontinyu


Agar ADC0804 dapat dioperasikan pada mode operasi kontinyu
(proses membaca terus menerus dan tanpa proses operasi jabat
tangan), maka penyemat CS dan RD ditanahkan, sedangkan penyemat
WR dan INTR tidak dihubungkan kemanapun. Prinsip kerja operasi

191
kontinyu ini yaitu ADC akan memulai konversi ketika INTR kembali
tidak aktif (logika ‘1’). Setelah proses konversi selesai, INTR akan aktif
(logika ‘0’). Untuk memulai konversi pertama kali WR harus
ditanahkan terlebih dahulu, hal ini digunakan untuk mereset SAR.
Namun pada konversi berikutnya untuk mereset SAR dapat
menggunakan sinyal INTR saat aktif (logika ‘0’) dan mulai konversi
saat tidak aktif (logika ‘1’).
Ketika selesai konversi data hasil konversi akan dikeluarkan secara
langsung dari buffer untuk dibaca karena RD ditanahkan. Saat sinyal
INTR aktif, sinyal ini digunakan untuk me-reset SAR. Saat INTR
kembali tidak aktif (logika ‘1’) proses konversi dimulai kembali.

b. Mode Operasi Hand-Shaking


ADC0804 dioperasikan pada mode hand shaking . Agar ADC dapat
bekerja, CS harus berlogika ‘0’. Ketika WR berlogika ‘0’, register SAR
akan direset, sedangkan ketika sinyal WR kembali ‘1’, maka proses
konversi segera dimulai. Selama konversi sedang berlangsung, sinyal
INTR akan tidak aktif (berlogika ‘1’), sedangkan saat konversi selesai
ditandai dengan aktifnya sinyal INTR (logika ‘0’).
Setelah proses konversi selesai data hasil konversi tetap tertahan pada
buffer ADC. Data hasil konversi tersebut akan dikeluarkan dengan
mengirim sinyal RD berlogika ‘0’. Setelah adanya sinyal sinyal RD ini,
maka sinyal INTR kembali tidak aktif.

192
PERCOBAAN 7
8-BIT MONOLITIC ADC

I. TUJUAN
Setelah melakukan percobaan ini mahasiswa diharapkan dapat:
1. Memahami prinsip kerja Rangkaian 8-Bit Monolitic ADC
2. Memahami karakteristik 8-Bit Monolitic ADC
3. Melakukan uji coba 8-Bit Monolitic ADC
4. Melakukan pengukuran output dari 8-Bit Monolitic ADC.

II. KESELAMATAN KERJA


1. Jangan menghidupkan Power pada pesawat latih (trainer) sebelum
anda yakin membuat rangkaian dengan benar.
2. Ikuti langkah kerja pada percobaan ini.

193
III. ALAT DAN BAHAN
1. Pesawat Latih A/D Converter
2. Jumper (konektor).
3. AVO meter.

IV. LANGKAH KERJA


1. Siapkan semua perlengkapan yang diperlukan.
2. Siapkan rangkaian untuk melakukan percobaan 8-Bit Monolitic ADC
seperti terlihat pada gambar 1 berikut:

Gambar 1. Rangkaian Percobaan 8-Bit Monolitic ADC

3. Hubungkan terminal output ADC ke rangkaian LEDs


4. Atur tegangan referensi sebesar 2.5 V
5. Siapkan Voltmeter untuk mengukur tegangan input analog.
6. Hidupkan Power pada Pesawat Latih
7. Atur tegangan input analog pada 0 Volt dengan cara mengatur
potensio meter yang telah disediakan.
8. Amati tampilan pada LED indikator output (D0 s/d D7), kemudian
catat

194
D7 = ... D6 =... D5 = ... D4 = ...D3 = ... D2 = ... D1 = .... D0 = ...
9. Sekarang atur tegangan input analog menjadi 0,25 Volt.
10. Amati tampilan pada LED indikator output (D0 s/d D7), kemudian
catat
D7 = ... D6 =... D5 = ... D4 = ...D3 = ... D2 = ... D1 = .... D0 = ...
11. Atur-atur tegangan input analog seperti terlihat pada tabel
pengukuran, tiap melakukan perubahan nilai tegangan analog input
lakukan pengamatan pada LED-LED indikator dan catat pada tabel
pengujian:

Tabel Pengujian
Input Output Digital
No. Analog
D7 D6 D5 D4 D3 D2 D1 D0
(Volt)
1 0 .... .... .... .... .... .... .... ....
2 0,25 .... .... .... .... .... .... .... ....
3 0,50 .... .... .... .... .... .... .... ....
4 0,75 .... .... .... .... .... .... .... ....
5 1,00 .... .... .... .... .... .... .... ....
6 1,25 .... .... .... .... .... .... .... ....
7 1,50 .... .... .... .... .... .... .... ....
8 1,75 .... .... .... .... .... .... .... ....
9 2,00 .... .... .... .... .... .... .... ....
10 2,25 .... .... .... ..... .... .... .... ....
11 2,50 .... .... .... .... .... .... .... ....
12 2,75 .... .... .... .... .... .... .... ....
13 3,00 .... .... .... .... .... .... .... ....
14 3,25 .... .... .... .... .... .... .... ....
15 3,50 .... .... .... .... .... .... .... ....
16 3,75 .... .... .... .... ..... .... .... ....
17 4,00 .... .... .... .... .... .... .... ....
18 4,25 .... .... .... .... .... .... .... ....
19 4,50 .... .... .... .... .... .... .... ....
20 4,75 .... .... .... .... .... .... .... ....
21 5,00 .... .... .... .... .... .... .... ....

195
12. Buat kesimpulan dari percobaan tersebut.
13. Matikan Power pada Pesawat Latih
14. Kembalikan semua peralatan ke tempat semula

PERCOBAAN 8
DIGITAL TO ANALOG CONVERTER (DAC)

1. DIGITAL TO ANALOG CONVERTER


Walaupun besaran fisis pada umumnya merupakan besaran analog,
kini berbagai peralatan elektronika telah banyak yang menyimpan,
mengolah, dan mengirimkan data dalam bentuk digital. Hal ini
disebabkan karena penggunaan sinyal-sinyal digital lebih banyak
memberikan keuntungan dari pada penggunaan sinyal-sinyal analog.
Proses yang lazim dilakukan untuk maksud diatas adalah mengubah
sinyal-sinyal analog menjadi sinyal-sinyal digital, kemudian dilakukan
pengolahan sinyal secara numerik, dan pada saatnya mengubah sinyal
digital menjadi sinyal analog.
Rangkaian sederhana untuk mengubah sinyal digital menjadi sinyal
analog ditunjukkan oleh gambar 1.
Rangkaian penjumlah Op-amp dapat digunakan untuk menyusun
suatu konverter D/A dengan memakai sejumlah hambatan masukan
yang diberi bobot dalam deret biner. Diperlihatkan dalam gambar di
bawah ini.

196
Gambar 1. Pengubah Digital ke Analog
Vref (E) adalah tegangan acuan (referensi) yang tepat dan semua
hambatan merupakan hambatan presisi guna mendapatkan arus-arus
masukan yang teliti. Saklar yang dipasang dapat dibuka atau ditutup.
Apabila semua saklar dalam keadaan terbuka, maka seluruh arus
masukan menjadi nol dan seluruh arus keluaran juga sama dengan
nol.
Semua bit tinggi:
Apabila semua saklar tertutup, arus-arus masukan sama dengan:

Arus keluaran dengan semua saklar tertutup adalah jumlah dari semua
arus masukan, yaitu:

Masukan digital:
Bila 0 menyatakan saklar terbuka dan 1 menyatakan saklar tertutup,
maka persamaan di atas dapat dituliskan ke dalam:

197
Seperti yang telihat pada persamaan diatas, bahwa DAC akan
mengambil harga yang dinyatakan dalam kode digital dan
mengubahnya menjadi arus atau tegangan yang sebanding dengan
harga digitalnya. Tegangan atau arus ini merupakan besaran analog,
karena untuk satu range tertentu mempunyai harga yang berbeda.
DAC akan mengubah bilangan biner yang direpresentasikan oleh level
logika digital ke suatu tegangan output yang sebanding dengan bobot
bilangan biner tersebut.

Dengan S0, S1, S2, dan S3 akan bernilai nol jika saklar terbuka, dan
bernilai 1 jika
saklar tertutup. Dengan memasukkan nilai R 3 = R, R2 = 2 R, R+ = 4 R,
R0 = 8 R, dan RF = 8R/15 akan didapat :

Pada dasarnya rangkaian DAC dibuat untuk memenuhi kebutuhan


akan besarnya pengaruh rangkaian elektronika digital dalam
perkembangan dunia elektronika. Sejak ditemukannya bahan

198
semikonduktor Silicon dan Germanium maka dengan cepat terjadi
revolusi dalam hal penyederhanaan dan keakurasian suatu rangkaian
elektronika. Disamping itu dengan diterapkannya rangkaian digital
akan menunjang sekali dalam hal penyimpanan dan mobilitas data.
Banyak sekali data-data yang sekarang bisa dioperasikan dengan
komputer adalah merupakan data-data yang dikonversi dari sinyal-
sinyal analog. Sebagai contoh sinyal suara ataupun video yang
berbentuk analog bisa diputar dan disimpan dengan menggunakan
komputer setelah sinyal-sinyal analog tersebut diubah menjadi data-
data digital.
Kelebihan yang dimiliki oleh data-data digital dibandingkan dengan
sinyal analog adalah adanya sifat kepastian data atau logika. Data
digital hanya dibedakan menjadi dua macam yaitu logika tinggi “1”
dan logika rendah “0”. Logika 1 mewakili tegangan 5 volt dan logika
rendah mewakili tegangan 0 volt. Contoh kelebihan sinyal digital
dibanding sinyal analog adalah pada penerima televisi atau radio
digital. Dengan menerapkan system digital sinyal yang dipancarkan
oleh stasiun televisi atau radio akan berbentuk data-data 1 dan 0,
dengan begitu pada saat proses transmisi atau pengiriman data sinyal
yang berubah atau rusak akibat gangguan transmisi hampir tidak akan
mengubah logika dari sinyal tersebut. Tetapi jika sinyal yang
dipancarkan adalah sinyal asli yang berupa sinyal analog maka jika
terjadi kerusakan sedikit saja akibat gangguan transmisi maka sinyal
yang akan diterima adalah sinyal yang telah rusak tersebut.
Sebuah DAC menerima informasi digital dan mentransformasikannya
ke dalam
bentuk suatu tegangan analog. Informasi digital adalah dalam bentuk
angka biner dengan jumlah digit yang pasti. Khususnya ketika
dipergunakan sebagai penghubung dengan sebuah komputer, angka

199
biner ini disebut word biner atau word komputer. Digit-digit tersebut
disebut bit word. Sehingga, sebuah word 8 bit akan memberikan
sebuah angka biner yang memiliki delapan digit, seperti 101101102.
Konverter D/A mengonversi sebuah word digital ke dalam sebuah
tegangan analog dengan memberikan skala output analog berharga
nol ketika semua bit adalah nol dan sejumlah nilai maksmum ketika
semua bit adalah satu. Hal ini dapat direpresentasikan secara
matematis dengan memperlakukan angka biner sebagai angka
pecahan. Dalam konteks ini, output dari konverter D/A dapat
ditentukan dengan menggunakan Persamaan yang memberikan skala
dari sejumlah tegangan referensi berikut ini.

Dimana
Vx = output tegangan analog
VR = tegangan referensi
b1 b2 . . . bn = word biner n-bit
Perlu diketahui bahwa minimum dari V x adalah nol, dan harga
maksimum ditentukan oleh ukuran dari word biner, karena dengan
semua bit yang diset berharga satu, ekivalen desimal mendekati harga
VR sesuai dengan peningkatan jumah bit.
Sehingga sebuah word 4-bit memiliki harga maksimum

Sedangkan sebuah word 8-bit mamiliki harga maksimum

1.1. Resolusi Konversi


Resolusi konversi juga merupakan sebuah fungsi jumlah dari bit-bit
yang ada dalam word. Lebih banyak bit, lebih kecil perubahan di
dalam output analog untuk perubahan 1-bit di dalam word biner
200
sehingga resolusi semakin besar. Perubahan terkecil yang mungkin
terjadi secara sederhana dinyatakan oleh

Dimana
ΔVx = perubahan output terkecil
VR = tegangan referensi
n = jumlah bit-bit di dalam word
sehingga, sebuah konverter D/A word 5-bit dengan tegangan referensi
10 volt
– 5
akan menghasilkan perubahan sebesar ΔVx = (10) (2 ) = 0.3125
volt per volt.

Gambar 2. Blok Diagram DAC

2. KARAKTERISTIK DAC
Untuk aplikasi modern hampir semua DAC berupa rangkaian
terintegrasi (IC), yang diperlihatkan sebagai kotak hitam memiliki
karakteristik input dan output tertentu. Dalam Gambar 1, kita lihat
elemen penting dari DAC dengan input dan output yang diinginkan.

201
Karakteristik yang berkaitan dapat diringkas oleh referensi dari
gambar ini.
2.1. Input Digital.
Secara khusus, jumlah bit dalam sebuah word biner parallel
disebutkan di dalam lembar spesifikasi. Biasanya, level logika TTL
dipergunakan kecuali dikatakan lain.
2.2. Catu Daya.
Merupakan bipolar pada level ± 12 V hingga ± 18 V seperti yang
dibutuhkan oleh amplifier internal.
2.3. Suplai Referensi.
Diperlukan untuk menentukan jangkauan tegangan output dan
resolusi dari konverter. Suplai ini harus stabil, memiliki riple yang
kecl. Dalam beberapa unit, diberikan referensi internal.
2.4. Output.
Sebuah tegangan yang merepresentasikan input digital. Tegangan
ini berubah dengan step sama dengan perubahan bit input digital
dengan step yang ditentukan oleh Persamaan (3-4). Output aktual
dapat berupa bipolar jika konverter didesain untuk
menginterpretasikan input digital negatif.
2.5. Offset.
Karena DAC biasanya diimplementasikan dengan op-amp, maka
mungkin adanya tegangan output offset dengan sebuah input nol.
Secara khusus, koneksi akan diberikan untuk mendukung
pengesetan ke harga nol dari output DAC dengan input word nol.
2.6. Waktu Konversi.
Sejumlah rangkaian DAC memberikan sebuah logika input yang
mempertahankan konversi dari saat terjadinya hingga diterimanya
sebuah perintah logika tertentu (1 atau 0). Dalam ini, word input
digital diabaikan hingga diterimanya input logka tertentu.

202
Dalam sejumlah hal, sebuah buffer input diberikan untuk
memegang (hold) word digital selama dilakukannya konversi
hingga selesai, bahkan word ini sendiri dapat muncuk pada jalur
input hanya dalam waktu singkat. Buffer-buffer ini biasanya berupa
flip-flop (FF) yang yang dimasukkan di antara terminal-terminal
input dari konverter dan jalur digital.

3. STRUKTUR DAC
Jelasnya, sebuah DAC dipergunakan sebagai kotak hitam (black box),
dan tidak ada pengetahuan mengenai cara kerja internal diperlukan.
Ada beberapa hal penting untuk menunjukkan bagaimana konversi
dapat diimplementasikan. Konversi yang paling sederhana
mempergunakan sebuah suatu deretan op-amp untuk input dengan
tujuan dipilih penguatan yang memberikan suatu output sesuai
dengan persamaan di atas.
Macam yang paling umum adalah mempergunakan sebuah jaringan
ladder resistif untuk menghasilkan fungsi transfer. Jaringan ini
diperlihatkan dalam Gambar 3 dalam hal konverter 4-bit. Dengan
pilihan resistor R-2R, dapat diperlihatkan malalui analisis jaringan
dimana tegangan output diberikan oleh persamaan:

Saklar merupakan saklar analog elektronik.


Gambar 2 Jaringan ladder merupakan suatu contoh untuk sebuah
rangkaian umum untuk konverter D/A.

203
Gambar 3. Contoh DAC menggunakan Ladder

Rangkaian Digital to Analog dapat dibangun dengan mudah


menggunakan Op-Amp yang diberi masukan dengan mengatur saklar-
saklar yang mewakili besaran digital. Nilai berlogika “1” bila saklar
dihubungkan dengan supply +5 volt dan logika “0” bila dihubungkan
dengan ground.
Rangkaian dasar Digital to Analog Converter (DAC) ada 2 jenis:
1. DAC jenis Binary Weigh Resistor
2. DAC jenis R-2R Ladder

3.1. DAC Jenis Binary Weigh Resistor

204
Gambar 4. Binary Weigh D/A Converter

Pada DAC jenis Binary Weight Resistor, pemasangan nilai Resistor


pada input-input Do, D1, D2,…adalah sebagai berikut: nilai R yang ada
di D1 adalah ½ dari nilai yang ada di Do, nilai R yang ada di D2 adalah
½ dari nilai yang ada di D1 ( atau 1/4 dari R yang ada di D0) dan
seterusnya. Pemasangan nilai R yang seperti itu adalah untuk
mendapatkan Vout yang linier ( kenaikan per stepnya tetap). Rin dicari
dengan mem-parallel nilai-nilai resistor yang ada pada masing-masing
input (D), bila input yang masuk lebih dari satu.
Pada rangkaian DAC diatas menggunakan dua buah IC Op-Amp LM741
yang sering digunakan sebagai amplifier. IC1 berfungsi sebagai
penghasil sinyal analog yang terbalik dan IC2 berfungsi membalikkan
kembali sinyal dari IC1.
Rangkaian dasar dari DAC adalah rangkaian penguat biasa, hanya saja
digunakan variasi dari beberapa resistor guna memperoleh sinyal
penguatan yang teratur. Aturan yang harus dipahami dari rangkaian
DAC ini adalah nilai dari resistor-resistor pada bagian input op-amp.
Nilai untuk resistor pada bit tinggi (R4) harus 2x dari resistor penguat

205
(R5), kemudian untuk bit selanjutnya harus 2x dari nilai resistor pada
bit yang lebih tinggi. Jadi jika rangkaian DAC menggunakan 4 bit maka
pada bit satuan (bit paling rendah) nilainya harus 8x dari bit ke-4. Dari
gambar di atas bit satuan diwakili oleh resistor 80 Kohm.

Contoh Kondisi :
- 0001 (1) = SW1 ditutup dan saklar lain dibuka, tegangan output
yang dihasilkan adalah (5K/80K) x 9 volt = 0,5625 volt
- 0010 (2) = SW2 ditutup dan saklar lain dibuka, tegangan
outputnya adalah (5K/40K) x 9 volt = 1,125 volt
- 0011 (3) = SW1 dan SW2 ditutup dan saklar lain dibuka,
tegangan outputnya adalah (5K/Rparalel 80K dan 40K) x 9 volt
= (5K/26,667K) X 9 volt = 1,6875 volt
- 1000 (8) = SW4 ditutup dan saklar lain dibuka, tegangan
outputnya adalah (5K/10K) x 9 volt = 4.5 volt.

Dari perhitungan diatas dapat ditarik kesimpulan bahwa dengan


tegangan output berbanding lurus dengan kondisi masukan, misal
untuk 1 desimal adalah 0.5625 volt maka, decimal 2 = 2 x 0.5625 =
1.125 volt, decimal 3 = 3 x 0.5625 = 1.6875 volt dan begitu
seterusnya. Kondisi ini dikarenakan adanya hubungan parallel antara
resistor-resistor input.

3.2. DAC Jenis R-2R Ladder

Sesuai namanya DAC berfungsi untuk mengubah data digital


(00110011) menjadi analog 0-5 V. sekarang kita akan membuat 8 bit
DAC maksudnya range yang bisa ditangani antara 0 (0000 0000)

206
sampai 255 (1111 1111) yang akan mengasilkan nilai tegangan output
0-5 Volt. sehingga setiap 1 bit bernilai 5/255=0.019 v. sehingga saat
input diberi data 129 (1000 0001) pada tegangan output keluar 129 x
0.019=2.451 V.

Berikut adalah contoh sederhana aplikasi DAC

Gambar 5. Blok Diagram DAC

Pada bagian ini akan dijelaskan tentang bagaimana membuat DAC


(Digital to Analog Converter) dengan biaya yang murah dan mudah
dalam pengguanaanya. Rangkaian R/2R cocok bagi para pemula yang
ingin menggunakan DAC dalam desain rangkaian elektronik.
Sebenarnya di pasaran sudah tersedia IC DAC dengan berbagai
ukuran. Tetapi untuk pemula biasanya penggunaan IC ini sangat sulit
sehingga sebagai alternatif digunakanlah R/2R resistor network.
rangkaiannya seperti gambar

207
Gambar 6. Contoh Rangkaian DAC

Rangkaian ini sebenarnya merupakan prinsip kerja IC DAC. Digital


input masuk melalui D0-D7. R/2R menggunakan 2 macam resistor
yang nilainya merupakan 2 x resistor satunya (lihat gambar). contoh
10K dengan 20 K atau 470K dengan 1 M (tidak harus sama persis
yang penting tidak terlalu jauh perbedaannya).

Troubleshooting

Secara teori output tegangan akan nampak seperti grafik

208
Gambar 7. Grafik Tegangan Output Fungsi Binary Input (Teori)

tetapi pada prakteknya akan nampak sebagi berikut:

jika terjadi demikian maka gunakanlah solusi berikut:

209
Gambar 9.

Kelebihan R/2R salah satunya adalah jika ingin menambah atau


mengurangi jumlah bit dapat dilakukan dengan mudah tinggal
menambah/mengurangi cabang yang berwarna hijau, tetapi ingat
resistor yang di blok merah harus tetap terhubung ke ground.

3.3. Rangkaian Aplikasi DAC dengan R-2R Ladder

210
Gambar 10. DAC Jenis R-2R Ladder

Pada DAC jenis R-2R Ladder pemasangan nilai Resistor pada input-
input nya adalah R-2R, jadi kalau Nilai R = 10k, maka 2R nya dipasang
20 K. Pemasangan nilai Resistor yang seperti itu adalah untuk
mendapatkan Vout yang linier ( kenaikan per stepnya tetap).

Langkah–langkah mencari Vout :

211
212
213
3.4. Digital to Analog Converter DAC0808
DAC0808 merupakan salah satu contoh kenverter D/A. IC ini tidak
mahal dan digunakan secara luas dalam beberapa aplikasi, D/A ini
menerapkan metode tangga R-2R 8 bit yang dilengkapi dengan
sumber arus acuan dan delapan buah transistor saklar untuk
mengarahkan arus biner. Suatu tegangan dan hambatan eksternal
dipergunakan untuk mengatur arus acuan pada nilai yang lazim
berlaku yaitu 2 mA. DAC0808 mempunyai waktu pemantapan 150ns
dan ketelitian relatif .
Konfigurasi pin ditunjukkan seperti pada gambar 11 dengan
penjelasan sebagai berikut. Pin 1 tidak dipakai ( NC singkatan dari no
connection ). Pin 2 adalah penghubung ke ground. Pin 3 (VEE ) harus
dipasang pada -12V. Pin 4 adalah saluran balik dari ground, yang
sifatnya sebagi output pembalik. Pin 5 s/d 12 merukan 8 bit masukan
data. Pin 13 (VCC ) harus dipasang pada catu daya +5V. Pin 14
dihubungkan dengan catu daya positif melalui hambatan R14, dan pin
15 dihubungkan ke ground melalui hambatan R15. Akhirnya sebuah
kapasitor antar pin 16 dan pin 13 berfungsi untuk memberi
kompensasi frekuensi bagi IC ini.

214
Gambar 11. Rangkaian DAC0808

Gambar 12. Konfigurasi PIN DAC0808

215
216
PERCOBAAN 8
8-BIT MONOLITIC D/A

I. TUJUAN
Setelah melakukan percobaan ini mahasiswa diharapkan dapat:
1. Memahami prinsip kerja Rangkaian 8-Bit Monolitic D/A
2. Memahami karakteristik 8-Bit Monolitic D/A

3. Melakukan uji coba 8-Bit Monolitic D/A


4. Melakukan pengukuran output dari 8-Bit Monolitic D/A

II. KESELAMATAN KERJA


1. Jangan menghidupkan Power pada pesawat latih (trainer) sebelum
anda yakin membuat rangkaian dengan benar.
2. Ikuti langkah kerja pada percobaan ini.

III. ALAT DAN BAHAN


1. Pesawat Latih D/A Converter
2. Jumper (konektor).
3. AVO meter.

IV. LANGKAH KERJA


1. Siapkan semua perlengkapan yang diperlukan.
2. Buat rangkaian seperti ditunjukkan oleh gambar 1

217
Gambar 1. Percobaan 8-Bit Monolitic D/A

3. Pasang Voltmeter pada terminal Output DAC.


4. Hidupkan saklar Power pada Pesawat Latih
5. Atur posisi saklar-saklar input digital sesuai dengan tabel berikut,
selanjutnya amati dan catat penunjukan jarum alat ukur Voltmeter
yang telah terpasang.

Tabel Pengujian dan Pengukuran


Input Digital Vo

No. D7 D6 D5 D4 D3 D2 D1 D0 (Volt)

1 0 0 0 0 0 0 0 0 …

2 0 0 0 0 0 0 0 1 …

3 0 0 0 0 0 1 0 1 …

4 0 0 0 0 0 1 1 1 …

5 0 0 0 0 1 0 1 0 …

218
6 0 0 0 0 1 1 0 0 …

7 0 0 0 0 1 1 1 1 …

8 0 0 0 1 0 0 1 0 …

9 0 0 0 1 0 1 1 1 …

10 0 0 0 1 1 0 1 0 …

11 0 0 0 1 1 1 0 1 …

12 0 0 0 1 1 1 1 1 …

13 0 0 1 0 0 1 0 0 …

14 0 0 1 0 0 1 1 1 …

15 0 0 1 0 1 0 1 1 …

16 0 0 1 0 1 1 1 0 …

17 0 0 1 1 0 0 0 0 …

18 0 0 1 1 0 1 0 1 …

19 0 0 1 1 1 0 0 0 …

20 0 0 1 1 1 1 0 0 …

21 0 0 1 1 1 1 1 1 …

22 0 1 0 0 0 1 1 0 …

23 0 1 0 0 1 1 1 1 …

24 0 1 1 0 0 1 1 0 …

25 0 1 1 1 1 0 0 0 …

26 1 0 0 0 0 0 0 0 …

27 1 1 1 0 0 0 0 0 …

28 1 1 1 1 1 1 1 1 …

6. Tentukan resolusi dari rangkaian DAC 8-Bit Monolitic di atas!


Resolusi = ……………………………………………………………………..

219
8. Buat Kesimpulan dari percobaan di atas!
9. Matikan Power pada Pesawat Latih
10. Kembalikan peralatan ke tempat semula.

220
PERCOBAAN 9
T I M E R/ COUNTER

TUJUAN
1. Mahasiswa memahami fungsi timer dan counter pada mkrokontroler
2. Mahasiswa memahami rangkaian interface untuk aplikasi timer dan
counter
3. Mahasiswa dapat memanfaatkan fungsi counter untuk mencacah
pulsa
4. Mahasiswa dapat memanfaatkan fungsi timer untuk membangkitkan
clock dengan periode tertentu.

FUNGSI COUNTER
Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang
dapat dikonfigurasikan sebagai timer atau counter, 8 bit, 13 bit atau
16 bit sesuai dengan mode yang dipilih. Gambar berikut merupakan
contoh aplikasi Counter 8 bit dengan menggunakan mode 3

Percobaan 9. Aplikasi Mode 3 sebagai counter 8 bit dengan output


LED

221
Pada percobaan ini, pulsa diambil melalui clock generator yang
dibangkitkan oleh IC 555 yang mempunyai frekuensi 1 Hz, hasil
cacahan biner pada register counter akan ditampilkan pada LED.

Lakukan beberapa langkah percobaan sebagai berikut:


1. Hubungkan 1 buah kabel antara P3.5 dengan output clock IC 555
2. Hubungkan jumper konektor LED_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
6. Ketik program berikut ini:

org 0h
Start: Mov TMOD,#00000111b ; mode 3 counter 8 bit timer0
Setb TR0 ; TR1 = 0, start counting
Get: Mov A, TL0 ; A = TL0
CPL A ; A = NOT A
Mov P0, A ; P0 = A
Sjmp Get ; Looping Forever
End

7. Simpanlah program yang anda ketik dan beri nama : prog91a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan

222
kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan
Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan pengamatan pada LED ? dan lengkapi tabel berikut.

INPUT DISPLAY LED


Clock D1 D2 D3 D4 D5 D6 D7 D8
1
2
3
4
:
20

Percobaan 9.2. Aplikasi Timer 0, Mode 3 sebagai counter 8 bit


dengan output 7 Segmen

Pada percobaan ini, pulsa diambil melalui clock generator yang


dibangkitkan oleh IC 555 yang mempunyai frekuensi 1 Hz, hasil
cacahan biner pada register counter akan ditampilkan pada 7 Segmen.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan 1 buah kabel antara P3.5 dengan output clock IC 555
2. Hubungkan jumper konektor 7Segmen_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
6. Ketik program berikut ini:
ratusan equ 30h
puluhan equ 31h
satuan equ 32h

223
Org 0h
Mov TMOD,#00000111b ; mode 3 counter 8 bit timer 0
Setb TR0 ; TR1 = 0, start counting
Get: Mov A, TL0 ; A = TL0
Call Bin2Dec ; panggil subroutine biner ke
desimal
Call Display7Segmen ; panggil subroutine display
7 segmen
Sjmp Get ;Looping Forever
;
Bin2Dec:
mov b,#100d
div ab
mov ratusan,a
mov a,b
mov b,#10d
div ab
mov puluhan,a
mov satuan,b
ret
;
Display7Segmen:
clr P3.5
clr P3.6
clr P3.7
mov A, ratusan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
call delay
;
setb P3.5
clr P3.6
clr P3.7
mov A, puluhan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
call delay
;
clr P3.5 ;
setb P3.6
clr P3.7
mov A, satuan

224
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
call delay
ret
;
delay: mov R0,#0
delay1: mov R2,#0fh
djnz R2,$
djnz R0,delay1
ret
;
Data7segmen:
db 11000000b,11111001b,10100100b,10110000b,10011001b
db 10010010b,10000010b,11111000b,10000000b,10010000b
;
end

7. Simpanlah program yang anda ketik dan beri nama : prog92a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan
PROGISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan pengamatan pada display 7 segmen ? dan lengkapi tabel
berikut.

Clock ke Display 7 Segmen


1 ?
2 ?
3 ?
4 ?
5 ?
: :
20 ?

FUNGSI TIMER
225
Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang
dapat dikonfigurasikan sebagai timer atau counter, 8 bit, 13 bit atau
16 bit sesuai dengan mode yang dipilih. Gambar berikut merupakan
contoh aplikasi Counter 16 bit dengan menggunakan mode 1

Percobaan 9.3. Aplikasi Timer 1, sebagai timer 16 bit dengan output


LED

Pada percobaan ini, clock akan dibangkitkan dengan menggunakan


fungsi timer 16 bit, dengan periode 1 detik, Ton = 0,5 detik dan Toff =
0,5 detik, dengan tampilan LED
Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap
65.536 udetik. Pada percobaan ini, untuk membangkitkan interupsi
setiap 1000 udetik maka data yang harus diisikan pada register TL1
dan TH1 adalah sebagai berikut:
65536 - 10000 = 55536 d or D8F0h
Maka interupsi TF1 akan segera dibangkitkan setiap 1000 x 1 udetik =
0,01 detik
pada pemrograman ini, RO diimplementasikan sebagai counter

226
software, Register R0 akan increment setiap Timer 1 overflow. Jika
register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan
nyala selama = 0,01 x 50 detik = 0,5 detik.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Lepas kabel yang menghubungkan antara P3.5 dengan output clock
IC 555
2. Hubungkan jumper konektor LED_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
6. Ketik program berikut ini:

Org 0h
Start: Setb P0.0 ;P0.0 = 1
call Delay ;call delay time
Clr P0.0 ;P0.0 = 0
call delay ;call delay time
Sjmp Start ;Looping Forever
;
Delay: Mov R0,#0 ;R0 = 0
Mov TMOD,#00010000b ;Mode 1, Fungsi =Timer 1 16 bit
Load: Mov TH1, #0D8h ;TH1 = D8h
Mov TL1, #0F0h ; TL1 = F0h
Setb TR1 ; TR1 = 1, Start Running
OFlow: JNB TF1, OFlow ; jump to OFlow if TF1 =0
Clr TR1 ; TR1 = 0
Clr TF1 : TF1 = 0
Inc R0 ; R0 = R0+1
CJNE R0,#50,Load
Ret
;
End

7. Simpanlah program yang anda ketik dan beri nama : prog93a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
227
kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan
PROGISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan pengamatan pada nyala LED
11. Lakukan modifikasi pada program tersebut untuk membangkitkan
frekuensi 10 Hz, 100 Hz, dan 500 Hz dan lakukan pengamatan
pada layar osciloscope

PERCOBAAN 10
INTERUPSI

TUJUAN
1. Pembelajar memahami sistem interupsi pada mikrokontroler
2. Pembelajar dapat menerapkan sistem interupsi pada pembuatan

228
jam digital
3. Pembelajar dapat memahami penggunaan bahasa assembly untuk
penggunakan sistem interupsi

Pada mikrokontroller menyediakan 5 buah sumber interupsi, 2 buah


interupsi eksternal, 2 buah interupsi timer, dan 1 buah interupsi serial.
Agar interupsi dapat dilayani maka instruksi assembly harus
ditempatkan pada alamat vektor berikut, sesuai dengan sumber
interupsi yang akan digunakan.

Source Vector Address


IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H

Org 0000h
Ljmp Start
Org 000bh
Ljmp Timer0Interupt
Start: ; Instruksi Rutinitas
; Instruksi Rutinitas
; Instruksi Rutinitas
Sjmp Start; { Looping Forever }
;
Timer0Interupt:
Reti
End

Pada contoh instruksi pemrograman tersebut tampak, apabila tidak


ada interupsi maka program akan menuju ke start dan menjalankan
rutinitas-rutinitas secara terus menerus, tetapi apabila suatu interupsi
yang dibangkitkan oleh overflow timer 0 terjadi, maka program yang
semula bersarang pada rutinitas akan melompat pada alamat vektor

229
0bh (alamat interupsi timer 0) dan melompat ke subrutine interupsi
Timer0Interupt.

Percobaan 11.1. Membangkitkan clock pada jam digital :DD


dengan memanfaatkan interupsi timer 0.

Pada percobaan akan dibangkitkan clock untuk jam digital, hanya


bagian detik puluhan (display 1) dan detik satuan (display 2) pada 7
segmen
Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap
65.536 udetik. Pada percobaan ini, untuk membangkitkan interupsi
setiap 50000 udetik maka data yang harus diisikan pada register TL1
dan TH1 adalah sebagai berikut:
65536 - 50000 = 15536 d or 3CB0hMaka interupsi TF1 akan segera
dibangkitkan setiap 50000 x 1 udetik = 0,05 detik
pada pemrograman ini, RO diimplementasikan sebagai counter
software, Register R0 akan increment setiap Timer 1 overflow. Jika
register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan
nyala selama = 0,05 x 20 detik = 1 detik
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder
74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program

230
5. Ketik program berikut ini

detik equ 30h


detikpuluhan equ 31h
detiksatuan equ 32h
counter20 equ 33h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start:
mov detik,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen

231
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
Setb P3.6
Setb P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
;
Setb P3.5 ;
clr P3.6
Setb P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret

;========================================
;LOOKUPTABLE
; Decode to Seven Segmen -> g f e d c b a

;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b

232
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End

6. Simpanlah program yang anda ketik dan beri nama : prog111a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan
PROGISP Software ( Lihat Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu detik yang ditampilkan
apakah sesuai dengan jam konvensional.

Display Detik (:DD) Jam Konvensional (Detik)


1
2
3
4
5
:
60

Percobaan 11.2. Membangkitkan clock pada jam digital MM:DD


dengan memanfaatkan interupsi timer 0.
Pada percobaan akan dibangkitkan clock untuk jam digital untuk detik
dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai
berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder
74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian

233
programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan
compiler program
5. Ketik program berikut ini:

detik equ 30h


detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#0
mov menit,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
satumenit:

234
inc menit
mov A,#60
cjne A,menit,Update
mov menit,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay

235
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret

;========================================
;LOOKUPTABLE
; Decode to Seven Segmen -> g f e d c b a

;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End

6. Simpanlah program yang anda ketik dan beri nama : prog112a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan

236
kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan
Program ISP Software ( Lihat Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu yang ditampilkan.

Display Detik (:DD) Jam Konvensional (Detik)


00:01
00:02
00:03
00:04
:
01:59

TUTORIAL M-IDE Studio MCS-51

Tujuan Umum

Menerapkan program M-IDE pada pemrograman mikrokontroler MCS-51.

Tujuan Khusus

1. Peserta Diklat dapat melakukan langkah-langkah membuka program M-


IDE.
2. Mengatur Setting Linker untuk build/kompilasi.
3. Mengatur Setting Linker untuk simulasi.
4. Mengatur Setting Linker untuk writer atau downloader.

237
5. Membuat file baru dan contoh program sederhana pada format .asm
6. Build program sampai tidak ada error atau memperbaikinya.
7. Link ke simulasi dan writer.

Pendahuluan

M-IDE Studio for MCS-51 adalah software lingkungan terintegrasi untuk


membuat program (text editor) mikrokontroler MCS-51. Selain itu disediakan
linker untuk kompiler, Simulasi dan writer.

 Text Editor digunakan untuk melakukan pembuatan dan perbaikan


program.
 Kompiler digunakan untuk membuat program dalam bentuk text menjadi
format hex atau kode operasi yang dikenali oleh mikrokontroler
 Simulasi digunakan untuk menguji coba program dan verifikasi program
supaya tidak terjadi kesalahan pada target.
 Writer digunakan untuk mengisi program ke target.

A. Langkah-langkah membuka program M-IDE

1. Start
2. All-Programs
3. MIDE-51 Package
4. MIDE-51
Sehingga tampil sebagai berikut :

238
Gambar 1.Tampilan M-IDE

B. Mengatur Setting Linker untuk build


Banyak kompiler yang digunakan untuk build program misalnya ASM51,
ASEM51, SDCC untuk c-compiler, dll

Langkah-langkah seting build :

 Edit
 Preference /F12
 Pilih seting Assembler ASEM51 Assembler pada Path
c:\mide\asem51

239
Gambar 2 Seting Kompiler

C. Mengatur Setting Linker untuk simulasi.


Banyak sofware simulasi untuk MCS 51 ini, seperti UMPS, Dscope-51, TS
Control Simulator 8051 evaluator, JSIM-51, Top view simulator, dll.

Langkah-langkah mengatur linker simulasi adalah sebagai berikut:

 Edit
 Preference /F12
 Pilih Simulator
 Isi execute File dengan C:\Program Files\FEPL\Topview Simulator -
Evaluation\Topview Simulator.exe atau browse pada sofware
simulator yang akan dipakai. Disini dipakai top view simulator

240
Gambar 3. Seting Simulator

D. Mengatur Setting Linker untuk writer atau downloader.


Banyak sofware downloader untuk MCS 51 ini, seperti Easy Downloader,
ISP, DLD, dll. Untuk seri s seperti 89S51 dapat menggunakan down
loader dengan hardware sederhana dan menggunakan software ISP (in
circuit serial programming).

Langkah-langkah mengatur linker simulasi adalah sebagai berikut:

 Edit
 Preference /F12
 Pilih Simulator
 Isi execute file dengan browse pada sofware Programmer yang
akan dipakai. Disini dipakai IspPgm.exe

241
Gambar 4. Seting Writer

E. Membuat file baru dan contoh program sederhana pada format .asm
 File
 New
 Buat program sederhana seperti penjumlahan dua bilangan
mov R0,#12 ;R0 diisi dengan data 12

mov A,#30 ; A diisi dengan data 30

arith:

add A,#15 ;add d'15' to A

subb A,R0 ;sub A from d'R0'

end

242
Gambar 5. Membuat Program sederhana

F. Build program sampai tidak ada error atau memperbaikinya.


Langkah-langkah build program :

 Pilih build

 Atau tekan tombol short cut “build current file” dengan simbol

243
Gambar 6. Tobol Build, simulasi dan writer

G. Link ke simulasi dan writer.


Langkah-langkah link ke simulasi dan writer

 Pilih Build
 Pilih Build and Sim untuk simulasi
 Pilih Build and Burn untuk writer (lihat Gambar 6)

244
TUTORIAL TOPVIEW SIMULATOR

Tujuan Umum

Mensimulasikan program menggunakan software simulator mikrokontroler MCS-


51

Tujuan Khusus

 Membuka program simulasi


 Loading file berakhiran hex
 Loading Program
 Edit Program
 Kompile/Assembli program
 Seting Modul External
 Menyimpan seting modul external
 Menjalankan Simulasi
 Melihat Register Internal
 Mengukur waktu dan jumlah siklus pada program maupun delay
 Penggunaan Modul LED
 Penggunaan Modul Saklar Momentary dan togel
 Penggunaan Modul Seven Segment
 Pengggunaan Modul Keyboard
 Penggunaan Modul LCD
 Penggunaan Modul LCD dan Keyboard
 Penggunaan Input Interupt
 Penggunaan IIC dan RTC
 Penggunaan Serial port Windows
 Penggunaan SPI

245
Pendahuluan

Program simulasi yang digunakan di sini adalah top view simulator. Dapat
digunakan untuk menganalisis register-register internal, SFR, GFR, RAM,
Program memori, waktu eksekusi, input-output window, modul-modul ekternal
seperti LED, seven segment, keypad, LCD, IIC, SPI dan serial port. Selain untuk
simulasi software ini dapat digunakan untuk editor dan juga build/kompiler.

A. Membuka program simulasi


Untuk membuka program ini ada beberapa cara sebagai berikut:

1. link dari M-IDE pada build and sim atau tombol


2. Langsung dengan menjalakankannya dari All programs atau short
cut dari desktop. (start  all program  Top view simulator
3. Pada saat pertama dibuka akan muncul kotak dialog sebagai
berikut :

Gambar 7 Seting awal

4. atur Select Device : Atmel 89C51

246
5. Operating Frequency : 12 MHz artinya 1 siklus setara dengan
1udetik. Atau sesuaikan dengan frekeunsi pada hardware.
6. pilih OK

B. Loading file berakhiran hex


Untuk menjalankan simulasi dibutuhkan file berakhiran *.hex sebagai
hasil dari kompile program dengan tanpa error.

Langkah-langkah untuk loading file hex adalah sebagai berikut :

1. file
2. load program ; cari file hex
3. sebagai contoh aritmetika.hex yang telah kita buat sebelumnya.

Gambar 8. Membuka file hex

4. pilih open setelah itu akan muncul kotak dialog sebagai berikut :

247
Gambar 9 Kotak dialog untuk loading file berhasil

5. ini menunjukkan ada enam baris program instruksi dari 000h sd


006h

C. Menjalankan Simulasi
Langkah-langkah mensimulasikan program:

1. ada baiknya kita membuka dulu program dengan cara (view 


program window)
2. ada dua pilihan dalam menjalankan simulasi yaitu run dan Single
Step. Untuk mode run program akan dijalankan terus menerus
secara real time. Sedangkan untuk single step, program dijalankan
tiap step intruksi. Pada mode ini, jalannya program dapat diamati
persiklus intruksi.
3. Untuk mode run sebagai berikut : (Run  Go) dan setelah selesai
simulasi pilih (Run  stop execution)
4. Untuk mode SingleStep ada dua pilihan lagi yaitu singleStep (F7)
atau step over (F8). Untuk single step semua program instruksi
akan dikejakan satu persatu. Sedangkan step over hanya
mengerjakan program utamanya saja atau subrutinya dikerjakan
secara cepat.

248
D. Melihat Register Internal
Langkah-langkah melihat register pada simulator

1. View
2. Register Window
3. buka aritmetika.hex, Jalankan simulasi dengan SingleStep (F7)
4. Lihat perubahan pada register yang ditandai dengan warna merah

Gambar 10. Register Internal

E. Loading Text File dan Membuat file baru


Topview simulator tidak sekedar untuk simulasi program tetapi juga
untuk text editor dan builder/kompiler.

249
Ada kalanya kita ingin melihat program sebenarnya yang kita tulis
pada text editor untuk membandingkannya dengan mnemonic-nya.
Kita tidak perlu kembali ke M-IDE lagi.

Langkah-langkahnya sebagai berikut :

1. File
2. Load text file (cari file dengan ektensi .asm)
3. Misalnya aritmetika.asm

Gambar 11. program asm pada simulator

Untuk membuat file baru ikuti langkah sebagai berikut:

1. File
2. Load text file (buat file dengan ektensi .asm)
3. Siap untuk membuat program.

F. Edit Program
Program yang telah dibuka tadi dapat diedit sesuai kebutuhan
dengan tidak perlu kembali ke text editor atau M-IDE. Dengan
Mengambil salah satu program asm sebagai templet, kita dapat
membuat program diprogram simulasi ini. Untuk melakukannya
program hasil perbaikan disimpan dengan nama yang berbeda :
(file  Save text file as)

250
G. Kompile program
Program yang baru diperbaiki atau program dengan nama baru dapat
dibuild atau dikompile disini dengan langkah-langkah sebagai berikut :

1. pilih Command
2. pilih Run Assembler
3. pilih Run

Gambar 12. Build pada simulator

4. Dan akan muncul file lst dengan keterangan jumlah error dan
langsung loading file hex.

Gambar 13. Listing dan keterangan jumlah kesalahan

251
H. Penggunaan Modul LED
1. Seting Modul LED seting modul LED disesuaikan dengan hardware
dan software yang akan digunakan. Misalnya untuk LED dengan
common anoda dan dari mikrokontroler adalah P0 maka
rangkaiannya sebagai berikut :

Gambar 14. Rangkaian LED

2. Seting modulnya sebagai berikut:


 File
 External modul seting
 LED

Gambar 15. Seting pada modul simulasi

 Contreng Port 0 pada select port line

252
 Karena common anoda maka aktive Low sehingga tidak perlu dicontreng
pada aktivating level seperti yang terlihat pada gambar 15.
 Pilih OK
 Simpan setingan modul dengan (file save module setting)
Beri nama LED_port0.MST. Seting ini dapat digunakan kapan saja dengan cara
(file  open module setting)

Gambar 16. LED common anoda warna merah terhubung dengan Port 0

 Untuk menampilkan setingan tersebut dapat dilakukan sebagai berikut


(View External MoDules  LED
 Untuk mencoba modul LED buat program sebagai berikut pada M-IDE:
Org 0h
Start: Mov P0,#11111111b; Kirim data biner 11111111 ke P0
Call Delay ; Memanggil waktu tunda
Mov P0,#00000000b; Kirim data biner 00000000 ke P0
Call Delay ; Memanggil waktu tunda
Sjmp start ;
Delay: mov R1,#255
Del1: mov R2,#255
Del2: djnz R2,del2
djnz R1,del1
ret ; end

 Simpan dan beri nama LED_ON_OFF.asm


 Build
 Build and Sim
 Load Program pada topview simulator

253
 Run
 Go Lihat hasil simulasi dan jika selesai (Run Stop Simulation)

I. Mengukur waktu dan jumlah siklus pada program maupun


delay
Masih menggunakan contoh program diatas kita dapat mengukur berapa waktu
yang dihasilkan oleh Delay pada program LED_ON_OFF.hex pada frekuensi
kerja 12MHz.

Langkah-langkahnya adalah sebagai berikut:

1. Run
2. Execute time calculation

Gambar 16 Menghitung waktu eksekusi

3. Isilah program starting address pada 0003 dan program ending address
0006 yaitu menghitung LCALL Delay
4. Hasilnya diperoleh sebagai berikut:

254
Gambar 17 Hasil hitungan siklus mesin dan waktu eksekusi

5. Jumlah siklus sebanyak 130820 dan waktu eksekusi selama 130,820


milidetik. Ini dengan anggapan frekuensi kerja 12MHz.

J. Penggunaan Modul Saklar Momentary dan togel


1. Rangkaian Modul

Gambar 18. Saklar Momentary dengan aktivasi level 0

255
Gambar 19. Saklar Momentary dengan aktivasi level 1

Gambar 20. Saklar Togel

2. Seting pada Simulasi

256
Gambar 21 Seting saklar

3. Simpan modul seting dengan nama file saklar.MST


4. Buat program sebagai berikut :
Org 0h

Start: Mov A, P2 ;Ambil data dari P2 dan Simpan ke A

CPL A ;Komplemen/ Invert terhadap A

Mov P0, A ;Kirim data A ke P0

sjmp start

end

5. Simpan dengan nama file (saklar.asm) dan build


6. Loading program
7. Jalankan Simulasi
8. Tampilkan Modul (View keypad); (View LED);

257
K. Penggunaan Modul Seven Segment
1. Rangkaian Modul ada 7 kemungkinan kombinasi yang dapat digunakan
yaitu:
 Non Multiplexed display dengan input BCD.

 Non Multiplexed display dengan input 7 segment.

 Multiplexed input BCD display with internal multiplexer.

 Multiplexed input 7 segment display dengan internal multiplexer.

 Multiplexed input BCD display dengan external multiplexer.

 Multiplexed input 7 segment display dengan external multiplexer.

258
Gambar 22. Rangkaian 7 segmen input BCD

259
260
 Multiplexed input 7 segment display dengan external multiplexer.

261
2. Seting pada Simulasi
Untuk satu seven segment tanpa multiplexer

262
3. Pilih Selection of Port line and Number of Digit

4. Simpan modul seting dengan nama file segment1.MST


5. Buat program sebagai berikut :
$mod51

;----------------
; MAIN PROGRAM
;----------------
mov b,#0 ; inisialisasi register b dengan 0
Mov P3,#191 ; inisialisasi 7 segment u/ mengaktifkan 7 seg
Digit 1
mulai:

263
anl b,#0Fh ; mengalikan register b dengan data 0F
( 0000 1111 )
mov a,b ; pindahkan register ke accumulator a
Lcall tampil ; panggil sub rutin tampil yang telah disimpan
ke a
mov p0,a ; pindahkan ke Port 0
Lcall DELAY500MS ; delay 500 milli second
inc b ; register b ditambah/dinaikkan
sjmp mulai ; kembali lagi ke mulai
;---------------
; delay 500 ms
;---------------
DELAY500MS:
PUSH ACC
PUSH 00H
MOV A,#032H ; 500 milli second

X10MS: CALL DELAY10MS


DJNZ ACC,X10MS
POP 00H
POP ACC
RET

;-------------
; DELAY 10 ms
;-------------
DELAY10MS:
PUSH ACC
PUSH 00H

MOV 00H,#050H
D10MS1: MOV A,#0C8H
DJNZ ACC,$
DJNZ R0,D10MS1

POP 00H
POP ACC
RET

;*************************************
;* Mengubah nilai 0..9 di Accumulator *
;* menjadi kombinasi ruas tampilan *
;*************************************

tampil:
INC A

264
MOVC A,@A+PC
RET

; -gfedcba
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 11111111B ; Blank
BlankDisplay:
DB 11111111B ; Blank
DB 11111111B ; Blank
DB 11000000B ;0
DB 11000000B ;0
End

6. Simpan dengan nama file (segmen1.asm) dan build


7. Loading program
8. Jalankan Simulasi
9. Tampilkan Modul (View Ekternal Module LED);

10. Ulangi langkah 2 sampai dengan 8 dengan setingan multiplexed input 7


segment display dengan external multiplexer.
11. Setingan modul sebagai berikut :

265
11 Pilih Selection of Port line and Number of Digit

12. Buat program sebagai berikut :

org 0h
start: clr P3.5
clr P3.6

mov P0,#11111001b ; Cetak Karakter '1'


call delay
;
setb P3.5
clr P3.6
mov P0,#10100100b ; Cetak Karakter '2'
266
call delay
;
clr P3.5 ;
setb P3.6
mov P0,#10110000b ; Cetak Karakter '3'
call delay
;
setb P3.5
setb P3.6
mov P0,#10011001b ; Cetak Karakter '4'
call delay
sjmp start ; Lompat ke Start
;=============================
;subroutine delay created to rise delay time
;=============================
delay: mov R1,#255
del1: mov R2,#70
del2: djnz R2,del2
djnz R1,del1
mov P0,#0ffh
ret
end

13. Jalankan program dan simulasikan sampai muncul tulisan 1234 secara
bersamaan walaupun setiap saat hanya satu segmen yang menyala.

L. Penggunaan Modul LCD


1. Rangkaian Modul

267
2. Seting pada Simulasi
 File
 External modul setting
 LCD

 Pilih Port Line Selection

268
 Pilih OK
3. Simpan modul seting dengan nama file LCD.MST
4. Buat program sebagai berikut :

org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst
mov R1,#'T'
call write_data
mov R1,#'E'
call write_data
mov R1,#'D'
call write_data
mov R1,#'C'
call write_data
mov R1,#' '
call write_data
mov R1,#'B'
call write_data
mov R1,#'a'
call write_data
mov R1,#'n'
call write_data
mov R1,#'d'
call write_data
mov R1,#'u'

269
call write_data
mov R1,#'n'
call write_data
mov R1,#'g'
call write_data
stop: sjmp stop
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr p3.5 ; write
clr P3.6 ; P3.6 = RS =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end

5. Simpan dengan nama file (LCD.asm) dan build


6. Loading program
7. Jalankan Simulasi

270
8. Tampilkan Modul (View LCD);

M. Penggunaan Modul Keyboard dan LCD


1. Rangkaian Modul

2. Seting pada Simulasi


 File
 External modul setting
 Keyboard

271
 Pilih Port Line Selection

272
 Pilih key name Setting

 Pilih OK
3. Simpan modul seting dengan nama file Keyboard.MST
4. Buat program sebagai berikut :
col4 bit P2.0
col3 bit P2.1
col2 bit P2.2
col1 bit P2.3
row1 bit P2.4
row2 bit P2.5
row3 bit P2.6
row4 bit P2.7
;
keydata equ 70h
keybounc equ 71h
keyport equ P2
org 0h
mov P2,#11111111b
call Init_LCD
start: call keypad4x4 ;calling subroutine keypad4x4
Mov A,keydata ;A = keydata
Cjne A,#0FFh,WrLCD;
sjmp start ;LOOPING FOREVER PART 1
;
WrLCD: Mov R1,#80h ;Pick DDRAM 1st row and 1st col
call write_inst
Mov R1,#30h
Add A,R1
Mov R1,A

273
call write_data ;write data
Sjmp start ;LOOPING FOREVER PART 2;
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
call write_inst ;
mov r1,#00001100b ;Display on, cursor off,cursor blink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.5 ; mode write
clr P3.6 ; P3.6 = RS =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
;====================================
; subroutine scan keypad 4x4
;====================================
Keypad4x4:
mov keybounc,#50 ;keybounc = 50
mov keyport,#0FFh ;keyport=P2= FF
clr col4 ;col4 = 0
;
keyCOR: jb row4,keyMEN ; Key COR
djnz keybounc,KeyCOR
mov keydata,#0Ah ;Data Output
ret
;
keyMEN: jb row3,keyUpA ; Key MEN

274
djnz keybounc,keyMEN
mov keydata,#0bh ;Data Output
ret
keyUpA:
jb row2,keyDnA ; Key Up Arrow
djnz keybounc,keyUpA
mov keydata,#0ch ;Data Output
ret
;
keyDnA:
jb row1,key3 ; Key Down Arrow
djnz keybounc,keyDnA
mov keydata,#0dh ;Data Output
ret
;==========================================
key3: setb col4
clr col3
jb row4,key6
djnz keybounc,key3 ; Key 3
mov keydata,#03h ;Data Output
ret
;
key6: jb row3,key9
djnz keybounc,key6 ; Key 6
mov keydata,#06h ;Data Output
ret
;
key9: jb row2,keyENT
djnz keybounc,key9 ; Key 9
mov keydata,#09h ;Data Output
ret
;
keyENT: jb row1,key2
djnz keybounc,keyENT ; Key ENT
mov keydata,#0eh ;Data Output
ret
;============================================
key2: setb col3
clr col2
jb row4,key5
djnz keybounc,key2
mov keydata,#02h ;Data Output
ret
;
key5: jb row3,key8
djnz keybounc,key5

275
mov keydata,#05h ; Data Output
ret
;
key8: jb row2,key0
djnz keybounc,key8
mov keydata,#08h ;Data Output
ret
;
key0: jb row1,key1
djnz keybounc,key0
mov keydata,#00h ;Data Output
ret
;==============================================
key1: setb col2
clr col1
jb row4,key4
djnz keybounc,key1
mov keydata,#01h ;Data Output
ret
;
key4: jb row3,key7
djnz keybounc,key4
mov keydata,#04h ;Data Output
ret
;
key7: jb row2,keyCAN
djnz keybounc,key7
mov keydata,#07h ;Data Output
ret
;
keyCAN: jb row1,Nokey
djnz keybounc,keyCAN
mov keydata,#0Fh ;Data Output
ret
;
Nokey: mov keydata,#0FFh
ret
;================================
;The end of Keypad 4x4 subroutine
;================================
delay: mov R0,#0
delay1: mov R2,#50
djnz R2,$
djnz R0,delay1
ret
end

276
5. Simpan dengan nama file (KEYBOARD_LCD.asm) dan build
6. Loading program pada topview simulator
7. Load Module setting LCD.MST
8. Jalankan Simulasi (Run  GO)
9. Tampilkan Modul (View LCD); (View Keyboard)

N. Penggunaan komunikasi IIC RTC dan 7 segment


1. Modul Rangkaian
IIC digunakan untuk komunikasi serial antara IC RTC atau EEPROM
menggunkan dua kabel SDA dan SCK.

277
Gambar 23 Rangkaian IIC RTC dan 7 segment

278
2. Seting IIC pada Simulasi
Pilih File External module setting  IIC

Gambar 24. Seting IIC

3. Seting RTC

Gambar 25 Seting RTC

279
4. Seting EEPROM

Gambar 26. Seting EEPROM

5. Seting 7 segmen sebagai berikut:

Gambar 27. Seting 7 Segment

Port Line Selection :

Digit1 A - P0.4

Digit1 B - P0.5

Digit1 C - P0.6

280
Digit1 D - P0.7

Digit1 dp - +5V

Digit2 A - P0.0

Digit2 B - P0.1

Digit2 C - P0.2

Digit2 D - P0.3

Digit2 dp - +5V

Digit3 A - P1.4

Digit3 B - P1.5

Digit3 C - P1.6

Digit3 D - P1.7

Digit3 dp - +5V

Digit4 A - P1.0

Digit4 B - P1.1

Digit4 C - P1.2

Digit4 D - P1.3

Digit4 dp - +5V

Digit5 A - P2.4

Digit5 B - P2.5

Digit5 C - P2.6

Digit5 D - P2.7

281
Digit5 dp - +5V

Digit6 A - P2.0

Digit6 B - P2.1

Digit6 C - P2.2

Digit6 D - P2.3

Digit6 dp - +5V

6. Atur port line selection sebagai berikut:

Gambar 28. Seting 7 segmen BCD nonMUX

7. Buat program sebagai berikut :


; program REAL TIME CLOCK dengan RTC dan 7 segmen
; dengan p3.0 sebagai serial clock (SCK)
; dan p3.1 sebagai serial data
org 00h
sjmp MULAI
;mulai dari alamat 50
org 50h
MULAI:
MOV SP,#50h ;50
MOV A,#04
ACALL SDA

282
MOV P0,A
MOV A,#03
ACALL SDA
MOV P1,A
MOV A,#02
ACALL SDA
MOV P2,A
SJMP MULAI
PUSH ACC
LCALL RTC
CC:
MOV A,#0A0h
MOV R7,#08
LCALL ATUR
LCALL STOP
POP ACC
MOV R7,#08
LCALL ATUR
LCALL STOP
MOV A,B
MOV R7,#08
LCALL ATUR
LCALL STOP
LCALL SCK
LCALL DR3
RET
SDA:
PUSH ACC ;84
LCALL RTC
MOV A,#0A0h
MOV R7,#08
LCALL ATUR
LCALL STOP
POP ACC
MOV R7,#08
LCALL ATUR
LCALL STOP
LCALL RTC
MOV A,#0A1h
MOV R7,#08
LCALL ATUR
LCALL STOP
MOV R7,#08
HOK:
SETB P3.0
NOP

283
MOV C,P3.1
CLR P3.0
MOV A,R5
RLC A
MOV R5,A
DJNZ R7,HOK
LCALL DDR
LCALL SCK
RET
DR3:
MOV R3,#40
WAHYU:
DJNZ R3,PANGGIL
SJMP SARI
PANGGIL:
LCALL RTC
MOV A,#85
MOV R7,#08
LCALL ATUR
LCALL STOP
JC WAHYU
SARI:
LCALL SCK
RET
ATUR:
CLR P3.0
LOOP:
CLR P3.0
RLC A
MOV P3.1,C
SETB P3.0
DJNZ R7,LOOP
RET
RTC:
SETB P3.0
NOP
SETB P3.1
NOP
CLR P3.1
NOP
CLR P3.0
RET
SCK:
CLR P3.1
NOP
SETB P3.0

284
NOP
SETB P3.1
RET
STOP:
NOP
NOP
CLR P3.0
NOP
SETB P3.1
NOP
NOP
SETB P3.0
NOP
NOP
NOP
MOV C,P3.1
CLR P3.0
RET
DDR:
SETB P3.1
NOP
SETB P3.0
NOP
CLR P3.0
RET
END
DDR:
SETB P3.1
NOP
SETB P3.0
NOP
CLR P3.0
RET
END

8. Kompile dan simulasikan seperti pada bagian sebelumnya


9. Dengan seting diatas tampilkan modul seven segmen, RTC dan register
seperi berikut ini :

285
Gambar 29 Hasil simulasi akan menampilkan jam, menit, detik sesuai dengan
register pada RTC.

O. Penggunaan Serial Port Windows


Serial port window dapat digunakan untuk mensimulasikan serial port
mikrokontroler dengan COM port pada komputer.

1. Rangkaian Modul

Gambar 30. Rangkaian serial komunikasi AT89X51

286
Gambar 31. Pada P0 dihubungkan dengan LED dan 7 segmen non multiplex
dengan input BCD.

2. Seting pada Simulasi untuk LED dan 7 segment


 File
 External modul setting

287
 LED

Gambar 32 Seting LED dan 7 Segment

 Pilih Port Line Selection


Digit1 A - P0.4

Digit1 B - P0.5

Digit1 C - P0.6

Digit1 D - P0.7

Digit1 dp - +5V

Digit2 A - P0.0

Digit2 B - P0.1

Digit2 C - P0.2

Digit2 D - P0.3

288
Digit2 dp - +5V

 Pilih OK
3. Simpan modul seting dengan nama file Serial.MST
4. untuk menampilkan serial port window cukup dengan pilih (View Serial
Port Window)

Gambar 33 Simulasi serial port

Bagian atas simulated Controller digunakan untuk mewakili buffer yang ada
pada mikrokontrol, sedangkan bagian bawah Simulated host digunakan untuk
menggantikan PC. Data yang dikirim dapat berupa byte atau dalam file.

5. Buat program sebagai berikut :


;komunikasi serial data dikirim dari komputer ke kontroler untuk ;menyalakan
lampu dan 7 segmen

$MOD51
org 0h
nop
call initserial
gets: call inchar

289
mov P0,a
sjmp gets
;
initserial:
mov scon,#10h ; Konfigurasi komunikasi serial
mov tmod,#20h ; Baud rate 2400 bps
mov th1,#-13
setb tr1
ret
;
inchar:
detect: jnb ri,detect ; Deteksi bit RI apakah data sudah diterima atau
belum
clr ri
mov a,sbuf
ret
;
End

6. Simpan dengan nama file (serial.asm) dan build


7. Loading program
8. Jalankan Simulasi
9. Tampilkan Modul (View External modulLED); (View Serial Port
Window);

Gambar 34. Hasil simulasi serial port dengan tampilan LED, 7 segment, buffer
TX dan RX dikedua terminal PC dan uC

290

Anda mungkin juga menyukai