Anda di halaman 1dari 103

MODUL MIKROKONTROLER

Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN I
ARSITEKTUR MIKROKONTROLER AT89S/CXX

1. Pendahuluan
Mikrokontroler disebut juga MCU atau uC adalah salah satu komponen
elektronik atau IC yang memiliki beberapa sifat seperti komputer, yaitu terdiri dari
CPU (Central Processing Unit) atau unit pemrosesan terpusat, kode memori, data
memori, I/O (Port untuk input dan output), yang dapat diprogram cara kerjanya,
bentuknya yang kecil dan harganya yang murah sehingga dapat ditanam
(embedded) di dalam berbagai peralatan rumah tangga, kantor, industri, robot, dll.
Beberapa mikrokontroler yang beredar dipasaran merupakan keluaran
beberapa pabrik yang sudah terkenal, misal:
 Intel, contoh: 8031, 89C51 dll
 Zilog, contoh: Z8, Z8F1680 dll
 Microchip, contoh: PIC16F84, PIC16F877 dll
 Motorola, contoh: 68HC11, MC68HC705V12CFN dll
 Philips Semiconductors, contoh: LPC2000, LPC900, LPC700 dll
 Atmel, contoh: Atmel AT91 series (ARM THUMB architecture), AT90, Tiny
& Mega series – AVR (Atmel Norway design), Atmel AT89 series (Intel
8051/MCS51 architecture)
Dalam pembahasan modul ini akan dijelaskan penggunaan mikrokontroler
dari Atmel jenis AT89S series, dengan alasan lebih mudah dalam
pemrogramannya, pengembangannya dan harganya yang murah serta telah banyak
beredar di pasaran.

Gambar 1.1. Bentuk Fisik Mikrokontroler

2. Struktur Mikrokontroler
Blok diagram umum mikrokontroler adalah sebagai berikut:

SMK N 1 Cimahi 2
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 1.2. Blok Diagram Mikrokontroler

Masing-masing bagian tersebut saling dihubungkan melalui internal BUS,


umumnya terdiri dari 3 jenis bus, yaitu: address bus, data bus dan control bus.
Diagram Arsitektur AT89SXX

Gambar 1.3. Arsitektur Mikrokontroler


Fungsi setiap bagian:
 Register adalah suatu tempat penyimpanan (Variabel) bilangan bulat 8 bit atau
16 bit. Pada umumnya register berjumlah banyak, dan masing-masing ada
yang memiliki fungsi khusus dan ada yang memiliki fungsi umum.
 Accumulator (register A), merupakan salah satu register khusus yang
berfungsi sebagai operand umum proses aritmatika dan logika.
 Program counter, merupakan salah satu register khusus yang berfungsi sebagai
pencacah/penghitung eksekusi program mikrokontroler
 ALU (Arithmetical and Logical Unit), ALU memiliki kemampuan khusus
dalam mengerjakan proses-proses arithmetika (penjumlahan, pengurangan,
perkalian dan pembagian) dan operasi logika (AND, OR, XOR dan NOT)
 Clock circuits, mikrokontroler merupakan rangkaian digital sekuensial,
dimana kerjanya berjalan melalui sinkronisasi clock. Karenanya diperlukan
clock circuits yang menyediakan clock bagi seluruh bagian rangkaian

SMK N 1 Cimahi 3
Modul Mikrokontroler Teknik Otomasi Industri

 Internal ROM (On Chip Flash), merupakan memori yang isinya tidak dapat
diubah atau dihapus (pada saat mikrokontroler berjalan) isinya hanya dapat
dibaca saja. ROM biasanya berisi program (urutan-urutan instruksi) untuk
menjalankan mikrokontroler. Data pada ROM dibaca secara berurutan.
 Internal RAM, merupakan memori yang isinya dapat diubah atau dihapus.
RAM pada
 mikrokontroler biasanya berisi data-data variable dan register. Data yang
tersimpan pada RAM bersifat hilang jika catu daya yang diberikan hilang
(mati).
 Stack pointer, merupakan bagian dari RAM yang memiliki metode
penyimpanan dan pengambilan data yang khusus. Dimana data yang paling
terakhir dimasukkan merupakan data yang pertama kali dibaca kembali
(LIFO).
 I/O port (serial dan parallel), merupakan sarana yang digunakan
mikrokontroler untuk mengakses peralatan di luar dirinya, memasukan dan
mengeluarkan data.
 Interrupt circuits, merupakan rangkaian yang mengendalikan sinyal-sinyal
interupsi bail internal maupun eksternal, dengan adanya sinyal interupsi akan
mengakibatkan program utama yang sedang dikerjakan berhenti sejenak, dan
bercabang/.loncat ke program rutin layanan interupsi (RLI) yang diminta,
setelah RLI selesai dikerjakan, mikrokontroler kembali melanjutkan program
utama yang tertunda tadi.
Setiap mikrokontroler memiliki blok diagram dan arsitektur yang berbeda
satu dengan yang lainnya, tergantung pada banyak device yang terintegrasi di
dalamnya, beberapa jenis mikrokontroler telah dilengkapi oleh ADC/DAC, PWM,
WDT dan lain-lain.

3. Cara Kerja Mikrokontroler


Prinsip kerja mikrokontroler adalah sebagai berikut:
 Berdasarkan nilai yang berada pada register Program Counter, mikrokontroler
mengambil data pada ROM dengan alamat sebagaimana yang tertera pada
register Program Counter. Selanjutnya isi dari register Program Counter
ditambah dengan satu (Increment) secara otomatis. Data yang diambil pada
ROM merupakan urutan instruksi program yang telah dibuat dan diisikan
sebelumnya oleh pengguna.
 Instruksi yang diambil tersebut diolah dan dijalankan oleh mikrokontroler.
Proses pengerjaan bergantung pada jenis instruksi, bisa membaca, mengubah
nilai-nilai pada register, RAM, isi Port, atau melakukan pembacaan dan
dilanjutkan dengan pengubahan data.
 Program Counter telah berubah nilainya (baik karena penambahan otomatis
pada langkah 1, atau karena pengubahan-pengubahan pada langkah 2).
Selanjutnya yang dilakukan oleh mikrokontroler adalah mengulang kembali
siklus ini pada langkah 1. Demikian seterusnya hingga power dimatikan.

SMK N 1 Cimahi 4
Modul Mikrokontroler Teknik Otomasi Industri

4. Organisasi Memori
Memori pada mikrokontroler digunakan untuk menyimpan data yang
diperlukan selama mikrokontroler bekerja. Memori pada mikrokontroler
dibedakan menjadi dua jenis, yaitu memori data dan memori program. Memori
program pada mikrokontroler AT89Sxx dikenal dengan On Chip Flash.Setiap
mikrokontroler memiliki kapasitas memori program yang berbeda-beda.
Tabel 1.1. Kapasitas memori beberapa jenis mikrokontroler dari Atmel
Kapasitas Memori Program Kapasitas Memori Data
MCU
Internal (On Chip Flash) Internal
AT89C/S1051 1K 64
AT89C/S2051 2K 128
AT89C/S51 4K 128
AT89C/S52 8K 256
AT89C/S55 20K 256
AT89S8252 8K 256
AT89S53 12K 256

Semua divais 8051 mempunyai ruang alamat yang terpisah untuk memori
program dan memori data, seperti yang ditunjukkan pada gambar1.3. dan gambar
1.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.

Gambar 1.4. Arsitektur Memori Mikrokontroller 8051

4.a. Memori Program


Memori program (ROM, EPROM dan FLASH) hanya dapat dibaca, tidak
ditulis. ROM / Read Only Memory adalah memori tempat menyimpan program /
source code.

SMK N 1 Cimahi 5
Modul Mikrokontroler Teknik Otomasi Industri

Seperti table di atas, untuk AT89S51 memiliki kapasitas ROM/ On Chip Flash
sebesar 4 Kbyte. ROM pada AT89S51 menempati address 0000H s/d 0FFFH. Apabila
didalam pembuatan program melebihi kapasitas tersebut, maka bisa dipergunakan
eksternal ROM untuk menambah memori, memori program eksternal dapat
mencapai 64K byte. Untuk membaca memori program eksternal mikrokontroller
mengirim sinyal PSEN (program store enable). Apabila dalam perancangan
hardware dirasakan tidak dimungkin untuk menambah memori eksternal, disarankan
untuk mengganti mikrokontroler dengan tipe yang lebih tinggi (memiliki kapasitas
On Chip Flash yang lebih besar).
Gambar 1.4. menunjukkan suatu peta bagian bawah dari memori program.
Setelah reset CPU mulai melakukan eksekusi dari lokasi 0000H. Sebagaimana
yang ditunjukkan pada gambar 1.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, sebagai contoh, menempatai 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.

Gambar 1.5. Peta Interupsi mikrokontroller 8051

Tabel 1.2. Vector Interupsi

Nama Interupsi Alamat Vector Interupsi

Reset 0000H

Eksternal 0 0003H

Timer 0 0008H

Eksternal 1 0013H

Timer 1 001BH

Serial Port 0023H

4.b. Memori Data

SMK N 1 Cimahi 6
Modul Mikrokontroler Teknik Otomasi Industri

Memori data pada mikrokontroler tersimpan pada internal RAM. RAM /


Random Access Memory adalah memori tempat menyimpan data sementara. RAM
berisi variable dan register.
Pada keluarga 8051, 128 byte terendah dari memori data, berada didalam
chip. apabila dalam aplikasi memerlukan memori RAM yang lebih besar, maka
bisa ditambahkan memori RAM eksternal seperlunya. RAM eksternal maksimal
64K byte. Dalam pengaksesan RAM Eksternal, mikrokontroller mingirimkan
sinyal RD ( baca ) dan WR ( tulis ).
Pada AT89S51 RAM dibagi menjadi 3 yaitu :
1. LOWER 128 byte yang menempati address 00 s/d 7F.
2. UPPER 128 byte yang menempati address 80 s/d FF.
3. SFR / Special Function Register 128 byte yang menempati address 80 s/d FF.
Address ini sama dengan address UPPER meski secara fisik berbeda.

Gambar 1.6. Memori data internal

128 byte RAM bagian bawah dikelompokkan lagi menjadi beberapa blok,
seperti yang ditunjukkan pada gambar 1.7. 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, R1,
R2, R3, R4, R5, R6 dan 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.

SMK N 1 Cimahi 7
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 1.7. RAM internal 128 byte paling bawah

Semua pada lokasi RAM 128 byte paling bawah dapat diakses baik
dengan menggunakan pengalamatan langsung dan tak langsung. 128 byte paling
atas hanya dapat diakses dengan cara tak langsung, gambar 1.8.

Gambar 1.8. RAM internal 128 byte paling atas

4.c. Special Function Register atau Register Fungsi Khusus


Sebuah peta memori yang disebut ruang special function register ( SFR )
ditunjukkan pada gambar berikut. Perhatikan bahwa tidak semua alamat-alamat
tersebut ditempati, dan alamat-alamat yang tak ditempati tidak diperkenankan
untuk diimplementasikan.

SMK N 1 Cimahi 8
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 1.9 Pemetaan SFR (Special Function Register)

 Accumulator
ACC adalah register akumulator. Mnemonik untuk instruksi spesifik
akumulator ini secara sederhana dapat disingkat sebagai A.
 Register B
Register B digunakan pada saat operasi perkalian dan pembagian. Selain
untuk keperluan tersebut diatas, register ini dapat digunakan untuk register bebas.
 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 disembarang tempat RAM. Pointer stack diawali di alamat 07h
setelah reset. Hal ini menyebabkan stack untuk memulai pada lokasi 08h.
 Data Pointer
Pointer Data (DPTR) terdiri dari byte atas (DPH) dan byte bawah (DPL).
Fungsi ini ditujukan untuk menyimpan data 16 bit. Dapat dimanipulasi sebagai
register 16 bit atau dua 8 bit register yang berdiri sendiri.
 Ports 0, 1, 2 dan 3.
P0, P1, P2 dan P3 adalah SFR yang ditempati oleh Port 0, 1, 2 dan 3. Menulis
suatu logika 1 terhadap sebuah bit dari sebuah port SFR ( P0, P1, P2 atau P3)
menyebabkan pin output port yang bersesesuaian akan berada dalam kondisi logika
high ‘1’. Dan sebaliknya.
 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.
 Registers Timer
Pasangan register ( TH0, TL0) dan (TH1, TL1) adalah register pencacah 16
bit untuk Timer/ Counter 0 dan 1, masing-masing.
 Register Control
Registers IP, IE, TMOD, TCON, SCON, dan PCON terdiri dari bit control
dan status.

SMK N 1 Cimahi 9
Modul Mikrokontroler Teknik Otomasi Industri

 Program Status Word


PSW atau Program Status Word berisi bit-bit status yang berkaitan dengan
kondisi atau keadaan CPU mikrokontroler pada saat tersebut. PSW berada dalam
lokasi ruang SFR. 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 didifinisikan sendiri. Bit
carry dapat juga anda guakan pada keperluan operasi aritmatika, juga bisa digunakan
sebagai universal akumulator untuk beberapa operasi boolean.

Bit Simbol Fungsi


7 CY Carry Flag, digunakan dalam operasi aritmatika, JUMP,
ROTATE, dan BOOLEAN
6 AC Auxillary Carry Flag, digunakan untuk aritmatika BCD
5 F0 User Flag 0
4 RS1 Register bank select bit 1
3 RS0 Register bank select bit 0
RS1 RS0
1 0 Select register bank 0
1 1 Select register bank 1
2 0 Select register bank 2
1 1 Select register bank 3
2 OV Over flow flag, digunakan dalam operasi aritmatika
1 - Tidak digunakan
0 P Parity flag, menunjukkan parity register A 1 = odd parity

5. Diagram Pin dan Fungsinya


Diagram pin AT89S51 kemasan PDIP adalah sebagai berikut:

SMK N 1 Cimahi 10
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 1.10. Diagram Pin AT89S51


Fungsi setiap pin adalah sebagai berikut:
 Pin 1 – 8, Port 1 (P1.0 sampai dengan P1.7), merupakan port input/output
delapan bit dua arah dengan internal pull-up.
P1.5 (MOSI), P1.6 (MISO) dan P1.7 (SCK) memiliki fungsi yang khusus
dalam komunikasi serial multiprosesor, dan pada pengisian program
mikrokontroler dengan ISP (In System Programming)
 Pin 9, digunakan untuk memberikan sistem reset pada Mikrokontroler,
 Pin 10 – 17, Port 3 (P3.1 sampai dengan P3.7), merupakan port input/output
delapan bit dua arah dengan internal pull-up.
Setiap pin pada Port 3 ini memiliki fungsi khusus yang langsung berhubungan
dengan hardware, fungsi tersebut adalah sebagai berikut:
P3.0 : RXD, port input/penerimaan data pada komunikasi serial
P3.1 : TXD, port output/pengiriman data pada komunikasi serial
P3.2 : (INT0), input interupsi eksternal channel 0 (active low)
P3.3 : (INT1), input interupsi eksternal channel 1 (active low)
P3.4 : T0, input clock ekternal untuk timer 0
P3.5 : T1, input clock ekternal untuk timer 1
P3.6 : (WR), merupakan saluran untuk kendali penulisan (active low), saat
mikrokontroler akan menulis data ke memori/device luar
P3.7 : (RD), merupakan saluran untuk kendali pembacaan (active low), saat
mikrokontroler akan membaca data dari memori/device luar
 Pin 18, XTAL 2
 Pin 19, XTAL 1
XTAL 1 dan XTAL 2 merupakan masukan untuk rangkaian osilator internal,
rangkaiannya terdiri dari 2 buah kapasitor (C1 dan C2) dan kristal.
Nilai C1 dan C2 harus seimbang, nilainya berkisar 30pF atau 33pF
Nilai Kristal agar osilator internal bekerja berkisar 1MHz sampai 24 MHz,
namun yang paling lazim digunakan berkisar, 8 MHz, 11,0592MHz dan 12
MHz. Pada komunikasi serial dan penggunaan timer lebih akurat digunakan
kristal dengan nilai 11,0592 MHz
 Pin 20, GND, masukan catu daya 0 Volt atau Ground
 Pin 21 – 28, Port 2 (P2.0 sampai dengan P2.7), merupakan port input/output
delapan bit dua arah dengan internal pull-up. Juga dapat difungsikan untuk
jalur alamat byte tinggi (A8 sampai dengan A15) pada penggunaan memori
luar.
 Pin 29, (PSEN), Program Strore Enable (active low), sinyal pengontrol yang
diberfungsi untuk membaca program dari memori eksternal.
 Pin 30, ALE atau (PROG) active low, address latch enable, berfungsi menahan
sementara alamat byte rendah pada proses pengalamatan ke memori eksternal
 Pin 31, (EA) atau VPP, merupakan pin yang berfungsi untuk memilih program
untuk menjalankan mikrokontroler, jika EA = 0 atau di-ground-kan maka akan
digunakan program pada memori eksternal, jika EA = 1, maka akan digunakan
program pada on chip flash.
 Pin 32 – 39, Port 0 (P0.1 sampai dengan P0.7), merupakan port input/output
delapan bit dua arah tanpa internal pull-up, sehingga dalam aplikasi harus

SMK N 1 Cimahi 11
Modul Mikrokontroler Teknik Otomasi Industri

ditambahkan resistor pull-up eksternal pada masing-masing pin, resistor pull


up bernilai 4.7K Ohm terpasang langsung ke VCC
 Pin 40, VCC, catu daya +5 Volt DC
Berikut ini adalah rangkaian sistem minimum AT89S51:

Gambar 1.11. Rangkaian Sistem Minimum AT89S51


6. Siklus Mesin
Dalam mikrokontroler dikenal istilah Machine Cycle (MC) / Siklus Mesin,
dimana :
1 MC = 6 state = 12 periode clock
Jika frekuensi crystal yang digunakan adalah 12 MHz maka :
1 MC = 12/frekuensi crystal = 12/12 MHz =1uS

Gambar 1.12. Siklus Mesin

LEMBAR EVALUASI

1. Apa yang dimaksud dengan BUS dan jelaskan jenis-jenis BUS!


2. Apa yang dimaksud dengan register umum? Beri contoh!
3. Apa yang dimaksud dengan register khusus? Beri contoh!

SMK N 1 Cimahi 12
Modul Mikrokontroler Teknik Otomasi Industri

4. Pada penggunaan memori terdapat istilah volatile dan non volatile, jelaskan
kedua istilah tersebut!
5. Jelaskan istilah berikut:
a. Parallel
b. Serial
c. PDIP
d. PLCC
e. Pull Up
6. Gambarkan arsitektur Von Neumann!
7. Apa yang dimaksud dengan vector interupsi?
8. Sebutkan jenis-jenis ROM yang kamu ketahui!
9. Apa yang dimaksud direct addressing dan indirect addressing? Jelaskan!
10. Gambarkan diagram pin IC 6116, berikan penjelasan fungsi setiap pinnya dan
berikan penjelasan kegunaan IC 6116 tersebut!

MODUL PEMBELAJARAN II
SET INSTRUKSI DAN PEMROGRAMAN ASSEMBLY MCS51

A. Pendahuluan
Sebagaimana yang telah dijelaskan pada modul sebelumnya, untuk
menjalankan sebuah sistem mikrokontroler diperlukan program, dimana program
tersebut merupakan urutan instruksi yang menentukan sebuah mikrokontroler
bekerja. Program/instruksi sebuah mikrokontroler ditulis dengan menggunakan
bahasa mesin dengan kode bilangan hexadecimal.
Untuk memudahkan pemrograman, maka digunakan bahasa pemrograman
yang lebih tinggi dan dapat dimengerti untuk memrogramannya, namun sudah
tentu hasil dari bahasa tersebut merupakan bahasa mesin untuk diterapkan dalam
pengguanaan mikrokontroler. Banyak ragam bahasa yang dapat digunakan untuk
pemrograman mikrokontroler, antara lain: assembler, basic, C dan lain-lain.
Dalam modul ini dijelaskan penggunaan bahasa assembly untuk memrograman
mikrokontroler.

B. Operan dan Set Instruksi MCS51


Operan dalam mikrokontroler adalah data yang tersimpan di dalam
memori, register, dan input/output (I/O). Instruksi yang dikenal secara umum
dikelompokkan menjadi beberapa kelompok yaitu instruksi untuk pemindahan
data, aritmatika, operasi logika, pengaturan, aliran program, dan beberapa hal

SMK N 1 Cimahi 13
Modul Mikrokontroler Teknik Otomasi Industri

khusus. Kombinasi dari instruksi dan operan itulah yang membentuk instruksi
pengatur kerja mikrokontroler.
Misalnya, instruksi MOV A, 7Fh merupakan sebuah instruksi pemindahan
data karena MOV merupakan instruksi dasar yang memerintahkan penyalinan
data. Sedangkan operannya adalah data yang disalin, dalam hal ini adalah data
yang ada di lokasi memori 7Fh disalin ke akumulator A.

B.1. Mode Pengalamatan dalam MCS51


Data atau operan bisa berada di tempat yang berbeda sehingga dikenal
beberapa cara untuk mengakses data/operan tersebut yang dinamakan sebagai
mode pengalamatan (addressing mode) antara lain:

1. Mode pengalamatan segera (immediate addressing mode)


Immediate addressing dinamakan seperti ini, karena nilai yang akan
disimpan didalam memori, secara langsung berada dalam kode instruksi.
Immediate addressing adalah pengalamatan yang sangat cepat karena nilai yang
akan diloadkan berada didalam instruksi tersebut.
Cara ini menggunakan konstanta, misalnya: MOV R0, #30h. Contoh
tersebut mempunyai arti bahwa data konstantanya yaitu 20h (sebagai data konstan
harus diawali dengan ‘#’ dan tanda ‘h’ untuk menyatakan format bilangan
heksadesimal) disalin ke Register 0. Yang perlu benar-benar diperhatikan dalam
instruksi ini adalah bilangan 30h merupakan bagian dari instruksi (menjadi satu
dengan op-kode instruksi).

Gambar 2.1. immediate addressing mode

Contoh-contoh immediate addressing mode:


MOV A,#20h ; simpan data (8 bit) 20h kedalam register A
MOV 70h,#0h ; simpan data (8 bit) 0h kedalam RAM dengan alamat 70h
MOV DPTR,#1234h ;simpan data (16 bit) 1234h kedalam DPTR

2. Mode pengalamatan langsung (direct addressing mode)


Disebut direct addressing karena nilai yang akan disimpan didalam
memori, diperoleh secara langsung dari memori yang lain.
Misalnya: MOV A, 30h. Instruksi ini mempunyai arti bahwa data yang
berada di dalam memori dengan lokasi 30h disalin ke akumulator A. Sekilas
instruksi ini sama dengan instruksi sebelumnya, namun terdapat perbedaan pada
tanda ‘#’. Jika instruksi pertama menggunakan tanda ‘#’ yang menandai 30h
sebagai data konstan, sedangkan dalam instruksi ini tidak digunakan tanda ‘#’,
maka 30h diartikan sebagai suatu lokasi memori.

SMK N 1 Cimahi 14
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 2.2. direct addressing mode

Contoh-contoh direct addressing mode:


MOV 8Ch, A ; simpan data dari register A ke lokasi memori 8Ch
MOV R1, 12h ; simpan data dari lokasi memori 12h ke register R1
MOV 80h, 77h ; simpan data dari lokasi memori 77h ke lokasi memori 80h

3. Mode pengalamatan tidak langsung (indirect addressing mode)


Mode pengalamatan tidak langsung digunakan untuk mengakses data yang
berada di dalam memori, tetapi lokasi memori tidak disebut secara langsung tapi
dititipkan ke register lain. Misalnya:
MOV A,@R0
Dalam instruksi ini register R0 dipakai untuk menyimpan lokasi memori,
sehingga instruksi ini mempunyai arti memori yang alamat lokasinya tersimpan
dalam R0 isinya disalin ke Akumulator A. Tanda ‘@’ digunakan untuk menandai
lokasi memori yang tersimpan di dalam R0. Sebagai contoh, misal R0 akan
digunakan untuk menandai alamat RAM 40h yang berisi data 67h. Ketika
instruksi diatas dieksekusi maka mikrokontroler akan melihat nilai dari R0, yang
berisi 40h, dan mengirimkan isi RAM 40h (dalam hal ini mempunyai nilai 67h) ke
akumulator.
Selain register R0, register serbaguna lainnya yang bisa digunakan sebagai
register penampung alamat adalah R1.

Gambar 2.3. indirect addressing mode

SMK N 1 Cimahi 15
Modul Mikrokontroler Teknik Otomasi Industri

Contoh-contoh indirect addressing mode:


R0 atau R1 digunakan untuk menunjukkan destination address:
MOV @R0,#30h ; salin data 30h ke alamat memori yang tersimpan dalam R0
MOV @R0,30h ; salin data pada alamat memori 30h ke alamat memori
yang tersimpan dalam R0
MOV @R0,A ; salin data dari register A ke alamat memori yang
tersimpan dalam R0

R0 atau R1 digunakan untuk menunjukkan source address:


MOV 7Fh,@R0 ; salin data dari alamat memori yang tersimpan dalam R0
ke alamat memori 7Fh
MOV A,@R0 ; salin data dari alamat memori yang tersimpan dalam R0
ke A

4. Mode pengalamatan register (register addressing mode)


Mode pengalamatan register digunakan untuk menyalin data dari register
sumber ke register tujuan. Misalnya:
MOV A,R5
Instruksi ini mempunyai arti bahwa data dalam register serbaguna R5 disalin ke
akumulator A. Instruksi ini menjadikan register serbaguna R0 sampai R7 dapat
digunakan sebagai tempat penyimpanan data yang praktis dan kerjanya sangat
cepat.

Gambar 1.4. register addressing mode

Contoh-contoh register addressing:


MOV R0,A ; salin data dari register A ke register R0
MOV A,R7 : salin data dari register R7 ke register A

5. Mode pengalamatan code tidak langsung (code indirect addressing mode)


MCS51 mempunyai cara penyebutan data dalam memori program yang
dilakukan secara tak langsung, misalnya:
MOVC A,@A+DPTR
Dalam instruksi ini MOV diganti dengan MOVC, tambahan huruf C artinya
tersebut dimaksud untuk membedakan bahwa instruksi ini digunakan untuk
memori program. MOV tanpa huruf C artinya digunakan untuk memori data.
Tanda @ digunakan untuk menandai A+DPTR yang berfungsi untuk menyatakan
lokasi memori yang isinya disalin ke akumulator A, dalam hal ini nilai yang

SMK N 1 Cimahi 16
Modul Mikrokontroler Teknik Otomasi Industri

tersimpan dalam DPTR (Data Pointer Register 2 byte) ditambah dengan nilai
yang tersimpan dalam Akumulator A (1 byte) sama dengan lokasi memori
program yang diakses.

B.2. Set Instruksi dalam MCS51


Secara keseluruhan MCS51 mempunyai 255 macam instruksi, yang
dibentuk dengan mengkombinasikan instruksi dan operan. Instruksi tersebut
dikelompokkan sebagai berikut:

1. Kelompok Penyalinan/ Tranfer Data

Instruksi Operan Arti


MOV A,Rn Salin data pada Rn ke dalam register A
MOV A,direct Salin data pada alamat RAM direct ke dalam
register A
MOV A,@Ri Salin data pada alamat yang ditunjuk oleh Ri ke
dalam Register A
MOV A,#data Masukan data ke dalam register A
MOV Rn,A Salin data pada register A ke dalam register Rn
MOV Rn,direct Salin data pada alamat RAM direct ke dalam
register Rn
MOV Rn,#data Masukan data ke dalam register Rn
MOV direct,A Salin data pada register A ke dalam alamat RAM
direct
MOV direct,Rn Salin data pada register Rn ke dalam alamat
RAM direct
MOV direct,direct Salin data pada alamat RAM direct ke dalam
alamat RAM direct
MOV direct,@Ri Salin data pada alamat yang ditunjuk oleh Ri ke
dalam alamat RAM direct
MOV direct,#data Masukan data ke dalam alamat RAM direct
MOV @Ri,A Salin data yang terdapat pada register kedalam
alamat yang ditunjuk oleh Ri
MOV @Ri,direct Salin data yang terdapat pada alamat RAM direct
kedalam alamat yang ditunjuk oleh Ri
MOV @Ri,#data Masukan data kedalam alamat yang ditunjuk oleh
Ri
MOV DPTR,#data1 Masukan data 16 bit kedalam data pointer
6
MOVC A,@A+DPTR Salin data pada alamat 16 bit yang ditunjuk oleh
A+DPTR ke dalam register A
MOVC A,@A+PC Salin data pada alamat 8 bit yang ditunjuk oleh
A+PC ke dalam register A
MOVX A,@Ri Salin data pada alamat 8 bit memori eksternal
yang ditunjuk oleh Ri ke dalam register A
MOVX A,@DPTR Salin data pada alamat 16 bit memori eksternal
yang ditunjuk oleh DPTR ke dalam register A
MOVX @Ri,A Salin data pada register A ke dalam alamat 8 bit

SMK N 1 Cimahi 17
Modul Mikrokontroler Teknik Otomasi Industri

memori eksternal yang ditunjuk oleh register Ri


MOVX @DPTR,A Salin data pada register A de dalam alamat 16 bit
memori eksternal yang ditunjuk oleh DPTR
PUSH direct Push direct byte ke stack
POP direct Pop stack ke direct byte
XCH A,Rn Tukar isi register Rn dengan isi register A
XCH A,direct Tukar isi alamat RAM direct dengan isi register A
XCH A,@Ri Tukar isi alamat RAM yang ditunjuk oleh Ri
dengan isi register A
XCHD A,@Ri Tukar nible rendah data pada alamat yang
ditunjuk oleh Ri dengan nible rendah isi register
A

2. Kelompok Instruksi Aritmatika


Instruksi Operan Arti
ADD A,Rn Tambahkan isi register A dengan isi Register n
ADD A,direct Tambahkan isi register A dengan data pada alamat
RAM
ADD A,@Ri Tambahkan isi register A dengan data pada alamat
yang ditunjuk oleh register Ri
ADD A,#data Tambahkan isi register A dengan data langsung
ADDC A,Rn Tambahkan isi register A dengan isi Register n
dengan carry
ADDC A,direct Tambahkan isi register A dengan data pada alamat
RAM dengan carry
ADDC A,@Ri Tambahkan isi register A dengan data pada alamat
yang ditunjuk oleh register Ri dengan carry
ADDC A,#data Tambahkan isi register A dengan data langsung
dengan carry
SUBB A,Rn Kurangkan isi register A dengan isi Register n
SUBB A,direct Kurangkan isi register A dengan data pada alamat
RAM
SUBB A,@Ri Kurangkan isi register A dengan data pada alamat
yang ditunjuk oleh register Ri
SUBB A,#data Kurangkan isi register A dengan data langsung
INC A Tambahkan dengan satu isi register A
INC Rn Tambahkan dengan satu isi register Rn
INC direct Tambahkan dengan satu isi dari alamat RAM
direct
INC @Ri Tambahkan dengan satu isi dari alamat RAM
yang ditunjuk oleh Ri
DEC A Kurangkan dengan satu isi register A
DEC Rn Kurangkan dengan satu isi register Rn
DEC direct Kurangkan dengan satu isi dari alamat RAM
direct
DEC @Ri Kurangkan dengan satu isi dari alamat RAM yang
ditunjuk oleh Ri

SMK N 1 Cimahi 18
Modul Mikrokontroler Teknik Otomasi Industri

INC DPTR Tambahkan dengan satu nilai data pointer


MUL AB Kalikan isi pada regiater A dengan isi pada
register B
DIV AB Lakukan pembagian data pada register A dengan
data pada register B
DA A Desimal adjust Akumulator

3. Kelompok Instruksi Logika


Instruksi Operan Arti
ANL A,Rn AND kan data yang terdapat di A dengan data
pada Register Rn
ANL A,direct AND kan data yang terdapat di A dengan data
pada alamat direct
ANL A,@Ri AND kan data yang terdapat di A dengan data
pada alamat yang ditunjuk oleh register Ri
ANL A,#data AND kan data yang terdapat di A dengan data
langsung
ANL Direct,A AND kan data pada alamat direct dengan data
pada register A
ANL Direct,#data AND kan data pada alamat direct dengan data
langsung
ORL A,Rn OR kan data yang terdapat di A dengan data pada
Register Rn
ORL A,direct OR kan data yang terdapat di A dengan data pada
alamat direct
ORL A,@Ri OR kan data yang terdapat di A dengan data pada
alamat yang ditunjuk oleh register Ri
ORL A,#data OR kan data yang terdapat di A dengan data
langsung
ORL Direct,A OR kan data pada alamat direct dengan data pada
register A
ORL Direct,#data OR kan data pada alamat direct dengan data
langsung
XRL A,Rn Eksklusif OR kan data yang terdapat di A dengan
data pada Register Rn
XRL A,direct Eksklusif OR kan data yang terdapat di A dengan
data pada alamat direct
XRL A,@Ri Eksklusif OR kan data yang terdapat di A dengan
data pada alamat yang ditunjuk oleh register Ri
XRL A,#data Eksklusif OR kan data yang terdapat di A dengan
data langsung
XRL Direct,A Eksklusif OR kan data pada alamat direct dengan
data pada register A
XRL Direct,#data Eksklusif OR kan data pada alamat direct dengan
data langsung
CLR A Kosongkan nilai akumulator
CPL A Komplemenkan nilai yang terdapat pada

SMK N 1 Cimahi 19
Modul Mikrokontroler Teknik Otomasi Industri

akumulator
RL A Putar ke kiri satu kali data yang terdapat pada
akumulator
RLC A Putar ke kiri satu kali beserta carry data yang
terdapat pada akumulator
RR A Putar ke kanan satu kali data yang terdapat pada
akumulator
RRC A Putar ke kanan satu kali beserta carry data yang
terdapat pada akumulator
SWAP A Tukar nible rendah dan nible tinggi data yang
terdapat pada akumulator

4. Kelompok Instruksi Manipulasi Boolean


Instruksi Operan Arti
CLR C Clear carry
CLR Bit Clear direct bit
SETB C Set carry
SETB Bit Set direct bit
CPL C Komplemen carry
CPL Bit Komplemen direct bit
ANL C,bit AND kan carry dengan direct bit
ANL C,~bit AND kan carry dengan NOT dari direct bit
ORL C,bit OR kan carry dengan direct bit
ORL C,~bit OR kan carry dengan NOT dari direct bit
MOV C,bit Pindahkan data dari direct bit ke carry
MOV C,~bit Pindahkan data dari NOT direct bit ke carry
JC Rel Loncat ke alamat rel/label rel jika carry=1
JNC Rel Loncat ke alamat rel/label rel jika carry=0
JB Bit,rel Loncat ke alamat rel/label rel jika direct bit=1
JNB Bit,rel Loncat ke alamat rel/label rel jika direct bit=0
JBC Bit,rel Loncat ke alamat rel/label rel jika bit=1 dan clear
bit

5. Kelompok Instruksi Percabangan


Instruksi Operan Arti
ACALL Addr11 Panggil subrutin dengan alamat tujuan pada
jangkauan lebar data maksimal 11-bit
LCALL Addr16 Panggil subrutin dengan alamat tujuan pada
jangkauan lebar data maksimal 16-bit
RET Kembali dari sub rutin
RETI Kembali dari sub rutin layanan interupsi
AJMP Addr11 Loncat ke alamat tujuan pada jangakauan lebar
data maksimal 11 bit
SJMP Rel Loncat ke relatif address
LJMP Addr16 Loncat ke alamat tujuan pada jangakauan lebar
data maksimal 16 bit
JMP @A+DPTR Loncat ke alamat relatif terhadap DPTR

SMK N 1 Cimahi 20
Modul Mikrokontroler Teknik Otomasi Industri

JZ Rel Loncat ke alamat rel/label rel jika register A


bernilai 0
JNZ Rel Loncat ke alamat rel/label rel jika register A tidak
bernilai 0
CJNE A,direct,rel Bandingkan isi register A, dengan isi alamat
direct, loncat ke alamat/label rel jika tidak sama
CJNE A,#data,rel Bandingkan isi register A, dengan data langsung,
loncat ke alamat/label rel jika tidak sama
CJNE @Ri,#data,rel Bandingkan isi alamat yang ditunjuk oleh register
Ri dengan data langsung, loncat ke alamat/label
rel jika tidak sama
CJNE Rn,#data,rel Bandingkan isi register Rn dengan data langsung,
loncat ke alamat/label rel jika tidak sama
DJNZ Rn,rel Kurangi isi register Rn, loncat ke alamat/label rel
jika isi Rn tidak nol
DJNZ Direct,rel Kurangi isi alamat direct, loncat ke alamat/label
rel jika isi Rn tidak nol
NOP Not operation

C. Pemrograman Bahasa Assembly


Program bahasa assembly adalah sebuah program yang terdiri atas label-
label, mnemonik, dan lain sebagainya. Bahasa assembly tidak dapat dijalankan
oleh prosesor. Program bahasa yang dapat dijalankan oleh prosesor adalah
program bahasa mesin. Program bahasa mesin adalah sebuah program yang
mengandung kode-kode biner yang merupakan instruksi-instruksi yang bisa
dipahami prosesor. Program yang dapat menerjemahkan program bahasa
assembly ke program bahasa mesin disebut Assembler.

C.1. Format Bahasa Assembly

1. Label
Sebuah label mewakili suatu alamat dari instruksi (atau data) yang mengikat.
Label ini digunakan sebagai operan pada instruksi-instruksi percabangan. Misal:
Org 0h
Terus: MOV P0, A
Sjmp Terus
End
2. Mnemonik

SMK N 1 Cimahi 21
Modul Mikrokontroler Teknik Otomasi Industri

Mnemonik merupakan instruksi program seperti MOV, ADD, INC, JMP,


dan lain-lain.
3. Operan
Operan ditulis setelah mnemonik, bisa berupa alamat atau data yang
digunakan instruksi yang bersangkutan. Bisa juga berupa label yang mewakili
alamat suatu data atau berupa simbol yang mewakili suatu data konstanta. Ada
beberapa instruksi MCS51 yang tidak memerlukan operan seperti RET dan lain-
lain.
4. Komentar
Komentar harus diawali dengan tanda titik koma ( ; ). Sebuah baris atau
bagian dari suatu baris akan dianggap sebagai komentar jika diawali dengan titik
koma ( ; ). Sub-rutin dari bagian-bagian besar program yang mengerjakan suatu
operasi biasanya diawali dengan blok komentar yang menjelaskan fungsi sub-
rutin atau bagian besar program tersebut.

C.2. Pengarah Assembler (Assembler Directive)


Pengaruh assembler merupakan instruksi pada program assembler itu
sendiri, bukan sebagai instruksi bahasa assembly yang akan dijalankan
mikrokontroler yang bersangkutan.
1. ORG (Origin)
ORG digunakan untuk menentukan lokasi awal program atau instruksi yang ada
dibawahnya disimpan. Bentuk dari ORG adalah:
ORG ekspresi

Contoh : ORG 2000H


MOV DPTR,#4000H
Maka perintah MOV DPTR,#4000H yang berada dibawah ORG #2000H
akan terletak dialamat 2000H.
2. END
END biasanya diletakkan diakhir baris dari file program sumber assembly
sebagai tanda akhir pernyataan bagi program assembler dalam melakukan proses
assembly.
3. EQU (Equate)
EQU digunakan untuk menggantikan suatu bilangan dengan suatu nama
simbol.
Contoh:
Bilangan EQU 50H
Mov A,#Bilangan
Bilangan pada instruksi “Mov A,#Bilangan” berisi 50H
4. DB (Define Byte)
Sintaks pengarah DB adalah:
Label: DB ekspresi, ekspresi, …
Pengarah DB menyiapkan memori kode dengan nilai-nilai byte. Ekspresi
berisikan daftar satu atau lebih nilai-nilai byte (masing-masing bisa berupa
ekspresi lain) dipisahkan dengan koma.
Contoh:
SQUARES: DB 0, 1, 4, 9, 16, 25 ; kuadrat angka 0 s/d 5
PESAN: DB ‘LOGIN:’, 0 ; string karakter dengan akhiran 0

SMK N 1 Cimahi 22
Modul Mikrokontroler Teknik Otomasi Industri

LEMBAR EVALUASI
1. Carilah berapa siklus mesin untuk setiap instruksi pada bahasa assembly!
2. Apa yang dimaksud dengan flowchart dan carilah simbol-simbolnya?
Jelaskan!

MODUL PEMBELAJARAN III


PRAKTIKUM OUTPUT
LED

TUJUAN:
1. Siswa memahami rangkaian mikrokontroller untuk menghidupkan dan
mematikan LED.
2. Siswa dapat memahami program assembly untuk menghidupkan dan
mematikan LED.
3. Siswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan
RR, CJNE, dan DJNZ.
4. Siswa memahami pembuatan instruksi waktu tunda.

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI DAN GAMBAR RANGKAIAN


Syarat LED menyala adalah adanya perbedaan potensial antara anoda dan
katoda, dimana anoda harus lebih positif dari katoda, dengan kata lain di anoda

SMK N 1 Cimahi 23
Modul Mikrokontroler Teknik Otomasi Industri

harus lebih besar dari katoda, dengan demikian akan ada arus yang mengalir (bias
forward) melalui LED, dan menyebabkan LED menyala.

Gambar 3.1 Rangkaian Display LED

Perhatikan pada gambar 3.1 tersebut. Delapan buah LED terhubung ke


port 0, yang difungsikan sebagai output. Pada konfigurasi tersebut LED akan
nyala bila diberi logika LOW ‘0’ melalui port 0 (Aktif Low), dan LED akan
padam bila diberi logika HIGH ‘1’ melalui port 0. Agar LED ini dapat aktif maka
jumper EN LED harus dihubungkan singkat.

Pada rangkaian di atas, anoda terhubung dengan vcc (+5V), agar LED
menyala katoda harus diberi tegangan lebih rendah dari vcc yaitu diberi 0 volt
yang diberikan dari I/O port mikrokontroler, tegangan 0 volt ini identik dengan
memberikan logik “0” pada port I/O. Bagaimana agar LED tidak menyala? Agar
LED tidak menyala, hal sebaliknya harus kita lakukan, dengan tidak memberikan
arus yang mengalir (secara bias forward) melalui LED, hal ini dapat dilakukan
dengan cara memberikan tegangan katoda lebih positif dari anode (bias reverse),
namun hal sedikit beresiko dan tidak aman. Cara yang tepat adalah memberikan
tegangan sama antara anoda dan katoda, jika dilihat dari rangkaian di atas, anoda
telah tehubung dengan vcc (+5 v) dan katoda terhubung dengan I/O port
mikrokontroler, tegangan 5 volt dari I/O port mikrokontroler dapat diperoleh
dengan memberikan logik “1” pada I/O port.

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program

SMK N 1 Cimahi 24
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 3.2. Tampilan kosong MIDE Studio for MCS51

4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP
Software

Gambar 3.4. Tampilan program ISP Software


8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 3.1. Instruksi MOV
Pada percobaan 3.1 ini LED akan dihidupkan atau dimatikan dengan
mengirimkan data tertentu pada port 0.

Gambar 1.3. Diagram alir percobaan 3.1

Programnya adalah sebagai berikut:

SMK N 1 Cimahi 25
Modul Mikrokontroler Teknik Otomasi Industri

Org 0h
Start: Mov P0,#11110000b ; Isi P0 dengan 11110000
sjmp start ; lompat ke start
End

Gantilah data tersebut diatas dengan data seperti pada tabel berikut dan
lakukan pencatatan LED mana yang padam.

Percobaan 3.2. Pembuatan Subrutine Waktu Tunda


Pada percobaan ini, 8 LED akan berkedip secara kontinu.

Gambar 3.5. Diagram alir percobaan 3.2

Programnya adalah sebagai berikut:


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 r0,#5
Del1: mov r1,#255
Del2: mov r2,#255
djnz r2,$
djnz r1,Del2

SMK N 1 Cimahi 26
Modul Mikrokontroler Teknik Otomasi Industri

djnz r0,Del1
ret
end

Perhatikan perhitungan waktu sebagai berikut:


Dikerjakan Cycle Total
1: Delay: mov r0,#5 1x 1 1
2: Del1:mov r1,#255 1x5x 1 5
3: Del2:mov r2,#255 1 x 255 x 5 = 1.275 x 1 1.275
4: djnz r2,$ 255 x 255 x 5 = 325.125 x 2 650.250
5: djnz r1,Del2 255 x 5 = 1.275 x 2 2.550
6: djnz r0,Del1 5x 2 10
7: ret +
654.091

Jadi waktu totalnya = 654.091 siklus.


Jika menggunakan frekuensi kristal 12 MHz waktu yang dibutuhkan untuk
menyelesaikan sub-rutin delay ini adalah 654.091 siklus x 1 μs = 654.091 μs =
0,654 detik.
Untuk mengganti lamanya waktu tunda atau delay dapat dilakukan dengan
mengubah nilai register r0, r1, atau r2.

Percobaan 3.3. Instruksi Setb dan Clr


Pada percobaan ini, sebuah LED dapat dihidupkan atau dimatikan dengan
perintah setb dan clr.
Programnya adalah sebagai berikut:
Org 0h
Start: Clr P0.0 ; Mengirimkan logika ‘0’ ke P0.0
Sjmp start ; jump ke start
End

Gantilah data tersebut untuk menghidupkan LED yang lain: LED 2, LED
3, LED 4, LED 5, LED 6, LED 7 dan LED 8.
Lakukan percobaan berikut untuk mengedipkan LED, dengan
mengetikkan program berikut ini.
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

SMK N 1 Cimahi 27
Modul Mikrokontroler Teknik Otomasi Industri

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
Call Delay;
Sjmp start ; lompat ke start
;
Delay: mov r0,#5
Del1: mov r1,#255
Del2: mov r2,#255
djnz r2,$
djnz r1,Del2
djnz r0,Del1
ret
end
Percobaan 3.4. Instruksi RL/ RR ( Rotate Left dan Right )
Pada percobaan ini, sebuah LED akan berjalan dari kiri ke kanan dan
sebaliknya, program ini memanfaatkan instruksi RL dan RR.

Gambar 3.6. Diagram alir percobaan 3.4


Ketik program berikut ini:
Org 0H
Start: Mov A,#11111110b ;isi A dengan 11111110b
Mov R0,#7 ;isi R0 dengan 7
Kiri: Mov P0,A ;copy A ke P0
Call Delay ;panggil sub rutine delay
RL A ;data A diputar ke kiri
DEC R0 ;data R0 dikurangi 1
CJNE R0,#0,Kiri ;bandingkan R0 dg 0, if NE jump kiri
;
Mov R0,#7

SMK N 1 Cimahi 28
Modul Mikrokontroler Teknik Otomasi Industri

Kanan: Mov P0,A


Call Delay
RR A ;data A diputar ke kanan
DEC R0 ;data R0 dikurangi 1
CJNE R0,#0,Kanan ;bandingkan R0 dg 0, if NE jump kanan
Sjmp Start
;
Delay: mov R1,#255
Del1: mov R2,#255
Del2: djnz R2,del2
djnz R1,del1
ret
end

Lakukan modifikasi program 3.4. tersebut dengan mengganti


instruksi CJNE dan DEC dengan instruksi DJNZ.
Latihan
1. Buatlah Flip-Flop LED urutan genap dan ganjil!
2. Buatlah Running LED dari tengah ke pinggir kemudian kembali lagi!

3. Buatlah sebuah program, agar LED menyala bergantian dari bit paling rendah
sampai bit paling tinggi, ulangi sebanyak 9 kali. Instruksi kunci DJNZ
4. Jelaskan berapa detik waktu tundaan berikut dikerjakan jika dipanggil
tunda: mov r0,#5
ulang1: mov r1,#10
ulang2: mov r2,#100
djnz r2,$
djnz r1,ulang2
djnz r0,ulang1
ret

SMK N 1 Cimahi 29
Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN IV
PRAKTIKUM INPUT DAN OUTPUT
PUSH BUTTON

TUJUAN:
1. Siswa memahami rangkaian mikrokontroller dengan interface ke saklar
2. Siswa dapat memahami program assembly untuk mengambil data saklar dan
mengeluarkan data ke LED.
3. Siswa memahami beberapa instruksi assembly dasar, MOV, JB, JNB, Setb,
Clr, RL, RR dan DJNZ.

ALAT DAN BAHAN:


6. Komputer
7. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
8. Trainner Mikrokontroler
9. Perangkat lunak progisp.exe
10. Peralatan keselamatan kerja

URAIAN MATERI
Mikrokontroler sebagai unit pengendali yang kecil, mampu secara
otomatis mengendalikan sebuah peralatan ataupun merespon terlebih dahulu
terhadap input kemudian mengolah/merespon input tersebut dan kemudian
mengendalikan peralatan lainnya. Input yang harus diberikan kepada
mikrokontroler merupakan input digital, artinya hanya memiliki level tegangan
+5V (logik “1”) atau level tegangan 0V (logik“0”).
Secara sederhana input dapat diberikan dari sebuah switch/push button
yang salah satu kakinya terhubung dengan Vcc untuk mendapatkan logik “1”
ketika ditekan (active high), namun dalam teknik ini perlu menambah sebuah
resistor dari setiap bit input ke ground (gnd) / resistor pull down, hal ini dilakukan
untuk mendapatkan logik “0” ketika push button tidak ditekan, karena harus
berasumsi bahwa ketika ditekan akan mendapatkan logik “1” dan ketika tidak

SMK N 1 Cimahi 30
Modul Mikrokontroler Teknik Otomasi Industri

ditekan akan mendapatkan logik “0” (push button memiliki dua keadaan, yaitu
ditekan dan tidak ditekan).
Teknik kedua dalam memberikan input menggunakan push button yaitu
active low, yakni ketika push button ditekan akan menginputkan logik “0”, dengan
teknik ini tidak diperlukan pemberian sebuah resistor ke Vcc / pull up untuk setiap
bit, karena mikrokontroler sendiri (kecuali P0) telah memiliki internal pull up,
kecuali untuk P0 harus diberikan eksternal pull up sebesar 4.7k ohm.

GAMBAR RANGKAIAN

Gambar 4.1. konfigurasi push button dengan active low

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP
Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 2.1 Membaca Input secara byte

SMK N 1 Cimahi 31
Modul Mikrokontroler Teknik Otomasi Industri

Untuk Membaca port mikrokontroller sebagai Input secara byte dapat


dilakukan dengan instruksi sbb:
Mov A,P2 ; Mengisikan data Port 2 ke Accumulator
Percobaan Menyalakan LED (Port 0) sesuai dengan Push Button (Port 2)
yang ditekan dengan menggunakan pembacaan input secara byte adalah sebagai
berikut:

Gambar 4.2. Diagram alir percobaan 2.1


Programnya adalah sebagai berikut:
Org 0h
Awal: MOV A,P2
MOV P0,A
Sjmp awal
End

Percobaan 2.2 Membaca Input secara Bit


Untuk Membaca data input secara Bit dapat dilakukan sebagai berikut:
a. Jb P2.0,Procedure
Jika P2.0 berlogik “1” maka loncat ke procedure, tapi jika tidak terus
kebawah untuk menjalankan program selanjutnya
b. Jnb P2.0,Procedure
Jika P2.0 berlogik “0” maka loncat ke procedure, tapi jika tidak terus
kebawah untuk menjalankan program selanjutnya
Dengan konfigurasi active low, teknik pembacaan perbit, menyalakan
LED (active low) sesuai dengan push button yang ditekan. LED pada P0 dan
push button pada P2, adalah sebagai berikut:
org 0h
jnb p2.0,satu
jnb p2.1,dua
jnb p2.2,tiga
jnb p2.3,empat
jnb p2.4,lima
jnb p2.5,enam
jnb p2.6,tujuh
jnb p2.7,delapan
jmp 0h
satu: mov p0,#11111110b
jmp 0h
dua: mov p0,#11111101b
jmp 0h

SMK N 1 Cimahi 32
Modul Mikrokontroler Teknik Otomasi Industri

tiga: mov p0,#11111011b


jmp 0h
empat: mov p0,#11110111b
jmp 0h
lima: mov p0,#11101111b
jmp 0h
enam: mov p0,#11011111b
jmp 0h
tujuh: mov p0,#10111111b
jmp 0h
delapan: mov p0,#01111111b
jmp 0h
end

Percobaan 2.3. Mengatur Arah Gerak LED Ke Kanan-Kiri dengan Saklar


Push Button P2.0 dan P2.1
Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti
penekanan tombol P2.0 (arah kiri) atau P2.1 (arah kanan).

Gambar 4.2. Diagram alir percobaan 2.3

Programnya adalah sebagai berikut:


org 0h
CekP20: JB P2.0,CekP21 ; Menguji bit P2.0, apakah adalah logika '1'
call RLeft ; Jika P2.0=0, maka LED putar kiri
CekP21: JB P2.1,CekP20 ; Menguji bit P2.1, apakah adalah logika '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,#11111110b ;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 adalah logika '1'
sjmp EndRLeft ;Jika P2.1=0, maka lompat ke EndRLeft
RLeft2: RL A
sjmp RLeft1
EndRLeft: ret

SMK N 1 Cimahi 33
Modul Mikrokontroler Teknik Otomasi Industri

;
;======================================
;Subrutin ini digunakan untuk menggerakkan LED Ke Kiri
;======================================
RRight: mov A,#01111111b ;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 adalah logika '1'
sjmp EndRRight ;Jika P2.0=0, maka lompat ke EndRRight
RRight2: RR A
sjmp RRight1
EndRRight: ret

;=======================================
;subroutine delay time
;=======================================
delay: mov r0,#5
del1: mov r1,#255
del2: mov r2,#255
djnz r2,$
djnz r1,Del2
djnz r0,Del1
ret
end

LATIHAN

1. Menyalakan LED dengan menu:


PUSH BUTTON-1: RUNNING LED (terus menerus)
PUSH BUTTON-2: FLIP-FLOP Nible rendah dengan nible tinggi
(terus menerus)
PUSH BUTTON-3: Menyala dari tengah ke pinggir (terus menerus)
2. Buatlah Program tombol cerdas cermat untuk tiga group, dengan ketentuan
sbb: jika salah satu tombol ditekan, maka LED menyala sesuai group yang
menekan tombol, dan tombol yang lain tidak akan berpengaruh. Sampai
tombol reset ditekan

SMK N 1 Cimahi 34
Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN V
PRAKTIKUM INPUT DAN OUTPUT
SEVEN SEGMENT DISPLAY

TUJUAN:
1. Siswa memahami rangkaian mikrokontroller untuk menghidupkan dan
mematikan seven segment.
2. Siswa dapat memahami program assembly untuk menghidupkan dan
mematikan seven segment.
3. Siswa dapat memahami teknik switching dan scanning pada seven segment
4. Siswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL, RR
dan DJNZ.
5. Siswa dapat memahami penggunaan ROM untuk menyimpan konstanta

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI DAN GAMBAR RANGKAIAN


Seven segment display terdiri dari dua jenis, yaitu jenis common catode
dan common anode. Seven segment display pada dasarnya adalah komponen LED
(diode yang dapat memancarkan cahaya) yang disusun sedemikian rupa sehingga
dapat dibentuk sebagai display/penampil data. Karena seven segment merupakan
LED yang tersusun, maka syarat utama agar segment dapat menyala, hampir sama
dengan syarat LED biasa agar dapat menyala, yaitu anode harus diberi tegangan
lebih positif dari katode.
Pada seven segment jenis common catode (CC), semua kaki katode pada
setiap segment terhubung secara keseluruhan, agar segment menyala, kaki
common ini harus diberi tegangan lebih rendah dari data yang diberikan pada

SMK N 1 Cimahi 35
Modul Mikrokontroler Teknik Otomasi Industri

setiap kaki anode, atau agar lebih praktis, kaki common di-ground-kan, sehingga
untuk menyalakan segment, dapat diberikan data dengan logik “1”.

Gambar 5.1 Konfigurasi LED pada seven segment common catode


Hal yang sebaliknya terjadi pada seven segment jenis CA (Common
Anode), semua kaki anode terhubung secara keseluruhan, sehingga untuk bisa
menyalakan segment, kaki anode harus terhubung ke Vcc, data setiap segment
menerima logik “0” agar dapat menyala.

Gambar 5.2 Konfigurasi LED pada seven segment common anode


Seven segment umumnya terdiri dari 8 bagian, yaitu: segment a, segment
b, segment c, segment d, segment e, segment f, segment g dan titik/point p.
Karena setiap segment hanya memiliki dua logika, 1 dan 0, maka dapat
dimungkin setiap segment terhubung kesetiap bit pada sebuah port (perlu
difahami bahwa setiap port memiliki 8 buah pin/bit). Sehingga dengan demikian
caranya maka hanya akan terhubung maksimal 4 buah sevent segment kepada satu
buah mikrokontroler yang memiliki 4 port.
Bagaimana jika ingin digunakan lebih dari empat buah sevent segment
sebagai display?
Dalam hal ini bisa dipergunakan teknik pensaklaran / switching dengan
menggunakan transistor, sebagai contoh akan digunakan seven segment jenis CA,
dengan cara ini sebuah port dapat digunakan sebagai gerbang untuk mengeluarkan
data bagi seven segment mana saja yang akan dinyalakan, dan port yang lain
dapat digunakan untuk mengaktifkan dan mengnonaktifkan transistor switch
untuk seven segment. Cara lainnya yaitu dengan menggunakan IC dekoder
misalnya dekoder 74ls138. Seperti terdapat pada gambar 5.3.

SMK N 1 Cimahi 36
Modul Mikrokontroler Teknik Otomasi Industri

(a)

(b)
Gambar 5.3. (a) Rangkaian display 7 segmen (b) rangkaian dekoder
74ls138

Tabel 5.1. Tabel kebenaran 74LS138

INPUT
ENABLE OUTPUT
SELECTOR
C B A G1 /G2A /G2B Y1 Y2 Y2 Y3 Y4 Y5 Y6 Y7
0 0 0 1 0 0 0 1 1 1 1 1 1 1
0 0 1 1 0 0 1 0 1 1 1 1 1 1
0 1 0 1 0 0 1 1 0 1 1 1 1 1
0 1 1 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 0 1 1 1 1 0 1 1 1
1 0 1 1 0 0 1 1 1 1 1 0 1 1
1 1 0 1 0 0 1 1 1 1 1 1 0 1
1 1 1 1 0 0 1 1 1 1 1 1 1 0

Pada tabel kebenaran tersebut tampak bahwa seven segment yang hidup
tergantung pada output dari dekoder 74LS138, yang sedang mengeluarkan logika
low ”0”, sehingga dari 8 buah display tersebut, selalu hanya satu display yang
akan dihidupkan. Agar display tampak nyala secara bersamaan maka ketiga
display tersebut harus dihidupkan secara bergantian dengan waktu tunda tertentu.
Pada gambar tersebut seven segment commont anoda dikendalikan dengan
menggunakan transistor PNP melalui decoder 74LS138, apabila ada logika low
pada basis transistor, maka 7 segment akan nyala dan sebaliknya akan padam.

Gambar 5.4. Modul 7 Segment tunggal

SMK N 1 Cimahi 37
Modul Mikrokontroler Teknik Otomasi Industri

Tabel 5.2. Data Display 7 Segmen

P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0


Display
g f e d c b a
1 0 0 0 0 0 0 0
1 1 1 1 0 0 1 1
0 1 0 0 1 0 0 2
0 1 1 0 0 0 0 3
: : : : : : : :
0 0 0 1 0 0 0 A
0 0 0 0 0 1 1 b

Pada tabel tersebut tampak bahwa untuk menghidupkan sebuah segmen,


harus dikirimkan data logika low ”0” dan sebaliknya untuk mematikan segmen,
harus dikirimkan data logika high ”1”.

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP
Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 5.1Tulis Karakter pada 7 Segmen
Pada percobaan ini, karakter ‘A’ akan ditampilkan pada 7
Segmen Display 1.

Gambar 5.5. Diagram alir percobaan 5.1


Ketik program berikut ini:
org 0h
start: clr P3.5 ; P3.5 = ‘0’

SMK N 1 Cimahi 38
Modul Mikrokontroler Teknik Otomasi Industri

clr P3.6 ; P3.6 = ‘0’


clr P3.7 ; P3.7 = ‘0’
mov P0,#10001000b ; isi P0 dg. 10001000. Cetak
Karakter 'A'
sjmp start ; Lompat ke start
end

Pada percobaan ini, karakter ‘AbC’ akan ditampilkan pada 7 Segmen


Display 1, Display 2 dan Display 3 secara berturutan

Gambar 5.6. Diagram alir percobaan 5.2

Ketik program berikut ini:

SMK N 1 Cimahi 39
Modul Mikrokontroler Teknik Otomasi Industri

org 0h
start: clr P3.5 ; P3.5 = '0'
clr P3.6 ; P3.6 = '0'
clr P3.7 ; P3.7 = '0'
mov P0, #10001000b ; isi P0 dg. 10001000. Cetak
Karakter 'A'
call delay ; Panggil Waktu Tunda
;
setb P3.5 ; P3.5 = '1'
clr P3.6 ; P3.6 = '0'
clr P3.7 ; P3.7 = '0'
mov P0,#10000011b ; isi P0 dg.100000011. Cetak
Karakter 'b'
call delay ; Panggil Waktu Tunda
;
clr P3.5 ; P3.5 = '0'
setb P3.6 ; P3.6 = '1'
clr P3.7 ; P3.7 = '0'
mov P0,#11000110b ; Cetak Karakter 'C'
call delay ; Panggil Waktu Tunda
sjmp start ; Lompat ke start
delay: mov R1,#25
del1: mov R2,#25
del2: djnz R2,del2
djnz R1,del1
ret
end

Latihan
1. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain pada
seven segment sesuai tabel:
Nama Karakter Posisi Display
HAlloguy -
YournAme -

2. Buatlah program untuk menampilkan angka pada seven segment display 1


sesuai dengan penekanan pushbutton. Pushbutton 1 ditekan akan
menampilkan angka 1 dan seterusnya sampai pushbutton 8 akan menampilkan
angka 8

Percobaan 5.3 Up Counter 0-9


Pada percobaan ini pada seven segment display 1 akan ditampilkan up
counter dari angka 0 sampai 9.
Programnya adalah sebagai berikut:
Org 0h
clr P3.5
clr P3.6
clr P3.7

SMK N 1 Cimahi 40
Modul Mikrokontroler Teknik Otomasi Industri

start: mov R1,#0


loop: mov a,R1
acall Konversi
mov P0,a
acall delay
inc R1
cjne R1,#10,loop
sjmp start
;------------------------------
delay: mov R7,#2
l1: mov R6,#255
l2: mov R5,#255
l3: djnz R5,l3
djnz R6,l2
djnz R7,l1
ret
Konversi: inc a
movc a,@a+pc
ret
;-----------tabel konversi-----CC
db 11000000b ;0
db 11111001b ;1
db 00100100b ;2
db 00110000b ;3
db 00011001b ;4
db 00010010b ;5
db 00000010b ;6
db 01111000b ;7
db 00000000b ;8
db 00010000b ;9
end

Latihan
Modifikasi program di atas untuk membuat program down counter!
Percobaan 5.4. Setting Up/ Dn dan Enter dengan Display ke 7 Segmen.
Pada percobaan ini, akan dibuat suatu simulasi setting UP (P2.1)/ DN
(P2.2) dan penekanan tombol Enter (P2.0), dan di displaykan ke display 7
Segmen. Data display akan bertambah dari 00 s/d 99 atau berkurang dari 99 s/d
00, sesuai dengan penekanan pada tombol UP/ DN. Bila ditekan tombol Enter,
maka tombol UP/ DN tidak akan berfungsi lagi.
Programnya adalah sebagai berikut:

Org 0h
ratusan equ 30h
puluhan equ 31h
satuan equ 32h
;
start:

SMK N 1 Cimahi 41
Modul Mikrokontroler Teknik Otomasi Industri

mov R7,#1 ;inisialisasi data setting


Setup: mov A,R7 ;simpan data R7 ke A
call bin2dec
call display2sevensegmen
jnb p2.0,getout ;bila sw1(P2.0) ditekan mk getout(selesai)
jb P2.1,SetDn ;bila sw2(P2.1) ditekan mk INC R7
inc R7 ;R7:=R7+1
acall delay ;waktu tunda lama penekanan tombol
cjne R7,#100d,setup ;deteksi apakah setting=100d
mov R7,#1 ;reset R7 -> 1
sjmp Setup
;
SetDn: Mov A,R7 ;simpan data R7 ke A
call bin2dec
call display2sevensegmen
jnb P2.0,getout ;bila sw1(P2.0) ditekan mk getout(selesai)
jb p2.2,Setup ;bila sw2(P2.1) ditekan mk INC R7
dec R7 ;R7:=R7-1
acall delay ;waktu tunda lama penekanan tombol
cjne R7,#0d,setDn;deteksi apakah setting=0d
mov R7,#99d ;reset R7 -> 99
sjmp Setdn
getout: sjmp getout
;
Display2SevenSegmen:
mov A,puluhan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
clr P3.5 ;
Setb P3.6
Setb P3.7
call delay
;
mov A,satuan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
Setb P3.5 ;
Setb P3.6
Setb P3.7
call delay
ret
;
Bin2Dec:
mov b,#100d
div ab
mov ratusan,a

SMK N 1 Cimahi 42
Modul Mikrokontroler Teknik Otomasi Industri

mov a,b
mov b,#10d
div ab
mov puluhan,a
mov satuan,b
ret
;
delay: mov R0,#30
delay1:mov R2,#255
djnz R2,$
djnz R0,delay1
ret
;
Data7segmen:
db 11000000b,11111001b,10100100b,10110000b,10011001b
db 10010010b,10000010b,11111000b,10000000b,10010000b
end

Latihan
1. Buatlah Up Down Counter dari 0 – 9 secara manual.
Jika tombol 1 ditekan angka menghitung naik 1 digit.
Jika tombol 2 ditekan angka menghitung turun 1 digit

2. Buatlah program untuk menampilkan kata “otomasi” berkedip-kedip


3. Buatlah program untuk running text, untuk menampilkan kata “teknik otomasi
industri”

SMK N 1 Cimahi 43
Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN VI
PRAKTIKUM INPUT DAN OUTPUT
KEYPAD MATRIX 4X4

TUJUAN:
1. Siswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller
2. Siswa memahami bahasa assembly untuk pengambilan data keypad
3. Siswa memahami bahasa assembly untuk pengambilan data keypad dan
mengeluarkan ke LED
4. Siswa memahami bahasa assembly untuk pengambilan data keypad dan
mengeluarkan ke 7 Segmen

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI DAN GAMBAR RANGKAIAN

SMK N 1 Cimahi 44
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 6.1 Rangkaian interface keypad 4x4

Keypad serig 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 susuan seperti
yang ditunjukkan pada gambar 6.2. Agar mikrokontroller dapat melakukan scan
keypad, maka port mengeluarkan salah satu bit dari 4 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.

Gambar 6.3. Rangkaian dasar keypad 4x4

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.

SMK N 1 Cimahi 45
Modul Mikrokontroler Teknik Otomasi Industri

7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP


Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 6.1 scan data keypad 1x4, COR-MEN-UpArrow-DnArrow
Pada percobaan ini, akan dilakukan scan data keypad COR-MEN-UpArr.-
DnArr. dan mengeluarkan data ke LED.
Ketik program berikut ini:

org 0h
satu equ 11111001b
empat equ 10011001b
tujuh equ 11111000b
can equ 10001001b
baris1 equ p2.0
baris2 equ p2.1
baris3 equ p2.2
baris4 equ p2.3
kolom1 equ p2.4
kolom2 equ p2.5
kolom3 equ p2.6
kolom4 equ p2.7

clr p3.5
clr p3.6
clr p3.7
;scan angka 1 4 7 dan can
scan:
mov p2,#11111111b
clr kolom1
a1: jb baris1,a4
mov p0,#satu
jmp scan
a4: jb baris2,a7
mov p0,#empat
jmp scan
a7: jb baris3,acan
mov p0,#tujuh
jmp scan
acan: jb baris4,scan
mov p0,#can
jmp scan
end

Latihan:
1. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 2-5-
8-0, 3-6-9-ENT, dan cor-men-up-down

SMK N 1 Cimahi 46
Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN VII


PRAKTIKUM OUTPUT
MOTOR STEPPER

TUJUAN:
1. Siswa mamahami rangkaian interface mikrokontroller dengan motor stepper
2. Siswa memahami rangkaian driver motor stepper ULN2003
3. Siswa memahami bahasa assembly untuk mengatur arah putaran motor
stepper
4. Siswa memahami bahasa assembly untuk mengatur arah putaran motor
stepper dengan menggunakan saklar.

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI DAN GAMBAR RANGKAIAN


Motor stepper sangat berbeda dengan motor DC. Motor DC biasa akan
berputar terus selama power supply ada. Tidak ada rangkaian cerdas tertentu yang

SMK N 1 Cimahi 47
Modul Mikrokontroler Teknik Otomasi Industri

diperlukan untuk mengendalikan motor tersebut, kecuali hanya memperlambat


putaran atau membalik arah putaran dengan menerapkan polaritas balik.
Sedangkan pada motor stepper jika diberikan power, maka motor ini akan berada
dalam keadaan diam, agar motor dapat berputar, sinyal yang masuk ke motor
harus diubah. Selain itu perbedaan motor stepper dengan motor DC biasa yaitu
motor DC memiliki bagian lilitan sebagai elektromagnet pada rotornya dan bagian
statornya terdapat magnet permanen, pada motor stepper memiliki magnet
permanen sebagai rotornya dan lilitan sebagai elektromagnetnya pada bagian
statornya. Secara umum berikut gambaran dari motor stepper.

Gambar 7.1 Struktur Motor Stepper

Sebagai ilustrasi, dapat dibayangkan sebuah kompas dengan


elektromagnet disekitarnya. Sebagaimana digambarkan pada gambar 7.2., apabila
power yang diberikan pada elektromagnet diganti, maka akan merubah posisi
jarum dari kompas.

Gambar 7.2. Ilustrasi sebuah kompas dengan elektromagnet

Dengan empat buah elektromagnet maka gerakan akan melompat secara


kasar. Sekarang bayangkan susunan yang sama dengan 100 elektromagnet yang
mengitari kompas. Dengan mangatur energi yang mengalir pada setiap
elektromagnet dalam berurutan, maka jarum akan memerlukan sebanyak 100
langkah untuk melakukan satu kali putaran. Tetapi dengan pengaturan 100
elektromagnet secara individu, akan memerlukan elektronika yang kompleks.

SMK N 1 Cimahi 48
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 7.3. Ilustrasi motor stepper dengan jarum kompas dengan elektromagnet

Pada ilustrasi tersebut, huruf-huruf yang melingkar mewakili


elektromagnet. Semua magnet dengan huruf yang sama berada dalam keadaan
koneksi. Ketika anda memberi arus pada rangkaian tersebut, maka semua
elektromagnet dengan huruf yang sama akan on pada saat itu, untuk
menggerakkan kompas, maka elektromaget berikutnya harus dialiri arus, sehingga
akan menimbulkan gerakan. Semakin banyak lilitan yang digunakan maka akan
semakin halus pergerakan dari kompas tersebut, sehingga akan dihasilkan
pergerakan sudut yang semakin kecil, dan sebaliknya jika jumlah lilitan sedikit
maka pergerakan sudut akan semakin kasar. Secara umum besar tolakan antar
lilitan pada stepper adalah 1,8 .
0

Gambar 7.4 Sistematika pengaktivan lilitan

Tinjau skema dan rangkaian pada gambar 7.3 dan gambar 7.4, agar motor
berputar kearah kanan maka lilitan pada stepper harus aktif secara bergantian
dimulai dari L1-L2-L3-L4 kemudian siklus ini diulangi kembali agar motor
stepper terus menerus berputar. Dengan sistematika di atas, kita bisa mengatur
arah putaran motor stepper tersebut, dengan memberikan sistematika pengaktifan
lilitan yang terbalik dimulai dari L4-L3-L2- L1 dan mengulangi siklus ini, atau
dengan mengulangi beberapa siklus untuk mendapatkan perputaran motor stepper
pada sudut tertentu. Ataupun dengan mengatur lebar pulsa pengaktifan untuk
mendapatkan kecepatan putaran motor yang diinginkan.

SMK N 1 Cimahi 49
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 7.5. Bentuk fisik motor stepper disk drive 1,2”

Rangkaian driver untuk motor stepper dapat dibuat dengan menggunakan


rangkaian trasistor, ataupun yang paling mudah dengan menggunakan IC driver
khusus, misal ULN2003.

Gambar 7.6. Rangkaian interface motor stepper dengan driver ULN2003

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP
Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 7.1.a. Penggerak Motor Stepper Searah Jarum Jam
Pada percobaan ini, motor stepper akan berputar searah jarum jam, terus
menerus Untuk melakukan percobaan ini hubungkan kabel parallel antara P0
(P0.7..P0.4) dengan input motor stepper (D3..D0).

SMK N 1 Cimahi 50
Modul Mikrokontroler Teknik Otomasi Industri

Ketik program berikut ini:


org 0h
start: call StepCW
sjmp start
;
StepCW:
mov P0,#11101111b ; Turn on driver 1
call delay ; call delay time
mov P0,#11011111b ; Turn on driver 2
call delay ; call delay time
mov P0,#10111111b ; Turn on driver 3
call delay ; call delay time
mov P0,#01111111b ; Turn on driver 4
call delay ; call delay time
ret
;
delay: mov R0,#255
delay1:mov R2,#255
djnz R2,$
djnz R0,delay1
ret
end

Percobaan 7.1.b. Penggerak Motor Stepper berlawanan arah Jarum Jam


Pada percobaan ini, motor stepper akan berputar berlawanan arah jarum
jam, terus menerus Untuk melakukan percobaan ini hubungkan kabel parallel
antara P0 (P0.7..P0.4) dengan input motor stepper (D3..D0).

Ketik program berikut ini:

org 0h
start: call StepCCW
sjmp start
;
StepCCW:
mov P0,#01111111b ; Turn on driver 1
call delay ; call delay time
mov P0,#10111111b ; Turn on driver 2
call delay ; call delay time
mov P0,#11011111b ; Turn on driver 3
call delay ; call delay time
mov P0,#11101111b ; Turn on driver 4
call delay ; call delay time
ret
;
delay: mov R0,#255

SMK N 1 Cimahi 51
Modul Mikrokontroler Teknik Otomasi Industri

delay1:mov R2,#255
djnz R2,$
djnz R0,delay1
ret
end
Percobaan 7.2. Pengaturan Arah Putaran Motor Melalui Saklar
Pada percobaan ini, motor stepper akan berputar searah jarum jam, atau
berlawanan arah jarum jam bergantung pada posisi push button yang ditekan
(P2.0 atau P2.1) secara terus menerus.
Ketik program berikut ini:
org 0h
start:
jnb p2.0,StepCW
jnb p2.1,StepCCW
jmp start
StepCW:
mov P0,#11101111b ; Turn on driver 1
call delay ; call delay time
mov P0,#11011111b ; Turn on driver 2
call delay ; call delay time
mov P0,#10111111b ; Turn on driver 3
call delay ; call delay time
mov P0,#01111111b ; Turn on driver 4
call delay ; call delay time
jnb p2.1,StepCCW
jmp StepCW
;
StepCCW:
mov P0,#01111111b ; Turn on driver 1
call delay ; call delay time
mov P0,#10111111b ; Turn on driver 2
call delay ; call delay time
mov P0,#11011111b ; Turn on driver 3
call delay ; call delay time
mov P0,#11101111b ; Turn on driver 4
call delay ; call delay time
jnb p2.0,StepCW
jmp StepCCW
;
delay: mov R0,#255
delay1: mov R2,#255
djnz R2,$
djnz R0,delay1
ret
end

Percobaan 7.3. Memutar stepper bolak-balik Sebesar 1800

SMK N 1 Cimahi 52
Modul Mikrokontroler Teknik Otomasi Industri

Pada percobaan ini motor stepper akan berputar bolak-balik sebesar 1800.
Programnya adalah sebagai berikut:
org 0h
mov r3,#25 ;menunjukkan jumlah data yang diberikan ke motor stepper
;agar berputar 1800
; 1800/(1,80 x 4) = 25
sudut1:
mov p0,#11101111b
call tunda
mov p0,#11011111b
call tunda
mov p0,#10111111b
call tunda
mov p0,#01111111b
call tunda
djnz r3,sudut1
mov r3,#25
sudut2:
mov p0,#01111111b
call tunda
mov p0,#10111111b
call tunda
mov p0,#11011111b
call tunda
mov p0,#11101111b
call tunda
djnz r3,sudut2
jmp 0h
tunda:mov r0,#5
tunda1:mov r1,#50
tunda2:mov r2,#50
djnz r2,$
djnz r1,tunda2
djnz r0,tunda1
ret
end

Latihan
1. Buatlah program untuk memutar stepper 1800 dan kembali berputar 1800
berlawanan arah
2. Buatlah program menu pilihan penekanan push button pada p2
P2.0 900 P2.2 1800 P2.4 -900 P2.6 -1800
P2.1 2700 P2.3 3600 P2.5 -2700 P2.7 -3600
3. Modifikasi program pada soal nomor 3, agar stepper berputar dengan
kecepatan yang berbeda-beda!
4. Rancanglah sebuah rangakaian dan gambar alat penjejak cahaya, dengan LDR
sebagai sensornya, dan stepper sebagai penggeraknya, agar alat tersebut selalu

SMK N 1 Cimahi 53
Modul Mikrokontroler Teknik Otomasi Industri

mengikuti arah cahaya yang terang.

MODUL PEMBELAJARAN VIII


PRAKTIKUM OUTPUT
MOTOR DC

TUJUAN:
1. Siswa memahami rangkaian Driver Motor DC

2. Siswa memahami pemrograman assembly memutarkan motor DC

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI DAN GAMBAR RANGKAIAN


Motor DC adalah suatu motor penggerak yang dikendalikan dengan arus
searah (DC). Motor DC berputar terus selama power supply ada. Untuk membalik
arah putaran motor dapat dilakukan dengan menerapkan polaritas balik. Motor
DC memiliki bagian lilitan sebagai elektromagnet pada rotornya dan bagian
statornya terdapat magnet permanen.

SMK N 1 Cimahi 54
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 8.1. Motor DC

Untuk menggerakkan motor dc, digunakan IC H-Bridge Motor Driver L293,


yang mampu memberikan arus maksimum sebesar 1A ke tiap motor. Sebuah IC
L293 bekerja pada sistem H-Bridge. Dimana dalam satu modul IC terdapat dua buah
sistem H-Bridge sehingga dapat mengendalikan dua buah motor DC. Masing-masing H-
Bridge dikendalikan oleh empat buah gerbang TTL. Input L293 ada 6 jalur, terdiri dari
input data arah pergerakan motor dan pengendali jalan atau kecepatan motor.
Pada gambar di bawah ini terlihat pin 2,7 (1A DAN 2A) sebagai input yang
berfungsi sebagai pengendali arah putaran motor. Sedangkan pin 1 (1,2En)
sebagai enable yang berfungsi sebagai pengendali jalan atau kecepatan motor.

Gambar 8.2. Rangkaian Driver Motor L293


Untuk menentukan arah pergerakan motor maka pada input L293 harus
diberikan kondisi sesuai dengan tabel berikut :
Tabel 8.1. Tabel Kebenaran Driver Motor

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.

SMK N 1 Cimahi 55
Modul Mikrokontroler Teknik Otomasi Industri

7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP


Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 8.1. Penggerak Motor DC Searah Jarum Jam
Pada percobaan ini, motor DC akan berputar searah jarum jam, terus
menerus Untuk melakukan percobaan ini hubungkan kabel parallel antara P0
(P0.2..P0.0) P dengan motor DC (EN,2A,dan 1A).
Ketik program berikut ini:
org 0h
start: setb p0.2 ;EN
clr p0.0 ;1A
setb p0.1 ;2A
sjmp start
end

Percobaan 8.2. Penggerak Motor DC berlawanan arah Jarum Jam


Pada percobaan ini, motor DC akan berputar berlawanan arah jarum jam,
terus menerus Untuk melakukan percobaan ini hubungkan kabel parallel antara P0
dengan motor DC.
Ketik program berikut ini:
org 0h
start: setb p0.2 ;EN
setb p0.0 ;1A
clr p0.1 ;2A
sjmp start
end
LATIHAN
1. Buatlah program untuk memutarkan motor DC searah jarum jam selama dua
detik kemudian berhenti selama dua detik dan berputar berlawanan arah jarum
jam selama dua detik.
2. Buatlah program untuk memutarkan motor DC dengan menggunakan tombol:
Tombol 1 untuk memutarkan motor DC searah jarum jam
Tombol 2 untuk memutarkan motor DC berlawanan arah jarum jam
Tombol 3 untuk menghentikan putaran motor DC
3. Buatlah program untuk memutarkan motor DC mengunakan Down Counter
yang tampil pada 7segment. Motor DC berputar Setelah Down Counter
menghitung dari 9 sampai 0.
4. Bagaimana cara mrngatur kecepatan motor ? Jelaskan yang dimaksud dengan
PWM (Pulse Width Modulation)!

SMK N 1 Cimahi 56
Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN IX
PRAKTIKUM OUTPUT
LCD KARAKTER

TUJUAN
1. Siswa memahami rangkaian interface mikrokontroller dengan LCD Karakter
2 x 16

2. Siswa dapat memahami program assembly untuk menampilkan data ke LCD


Karakter 2 x 16

3. Siswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan
waktu tunda.

4. Siswa memahami mencetak karakter pada posisi baris dan kolom tertentu

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe

SMK N 1 Cimahi 57
Modul Mikrokontroler Teknik Otomasi Industri

5. Peralatan keselamatan kerja

URAIAN MATERI DAN GAMBAR RANGKAIAN

Gambar 9.1. 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 9.2. Modul LCD Karakter 2x16

Tabel 9.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

SMK N 1 Cimahi 58
Modul Mikrokontroler Teknik Otomasi Industri

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

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 sebagi 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:

1. Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 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

SMK N 1 Cimahi 59
Modul Mikrokontroler Teknik Otomasi Industri

N: Pengaktivan baris
N=0, 1 baris
N=1, 2 baris
F: Penentuan ukuran font karakter
F=0, 5x7
F=1, 5x8

2. Entry Mode Set


Mengatur increment/ decrement dan mode geser
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 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

3. Display On/ Off Cursor


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

KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 0 0 1 D C B
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

4. Clear Display
Perintah hapus layar
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 0 0 0 0 0 1

SMK N 1 Cimahi 60
Modul Mikrokontroler Teknik Otomasi Industri

5. 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 1 S/C R/L X X

Catatan : x = Dont care


S/C R/L Note
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

A. 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 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.

Set Alamat Memori DDRAM


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

SMK N 1 Cimahi 61
Modul Mikrokontroler Teknik Otomasi Industri

0 0 1 A A A A A A A

Catatan:
A : Alamat RAM yang akan dipilih
Sehingga alamat RAM LCD adalah 000 0000 S/D 111 1111 b atau 00 s/d 7Fh

B. 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

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP
Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 9.1. Tulis Sebuah Karakter pada LCD Karakter
Pada percobaan ini, karakter ‘A’ akan ditampilkan pada LCD Karakter.

SMK N 1 Cimahi 62
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 4.4. Diagram alir (a) rutin utama cetak karakter “A”, (b) subrutin
inisialisasi LCD karakter pada percobaan 4.1

Programnya adalah sebagai berikut:

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:

SMK N 1 Cimahi 63
Modul Mikrokontroler Teknik Otomasi Industri

clr P3.5 ; P3.5 = 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.5 ; P3.5 = 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

LATIHAN 1
Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai
table di bawah ini:

Nama Karakter Posisi Display


1 Row 1, Col 2
Z Row 1, Col 8
& Row 2, Col 12

Percobaan 9.2. Tulis Delapan Karakter pada LCD Karakter


Pada percobaan ini, kalimat ” Welcome” akan ditampilkan pada LCD
Karakter pada baris 1dan colom 1.

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'

SMK N 1 Cimahi 64
Modul Mikrokontroler Teknik Otomasi Industri

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.5 ; P3.5 = 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.5 ; P3.5 = 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

LATIHAN 2

SMK N 1 Cimahi 65
Modul Mikrokontroler Teknik Otomasi Industri

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 9.3. Tulis Karakter Dengan Look Up Table


Pada percobaan ini, kalimat ”Welcome home” akan ditampilkan
pada layar LCD Karakter dengan menggunakan look up table.

org 0h
call init_LCD
start: call write_char
stop: sjmp stop
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#12 ;R3=12,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.5 ; P3.5 = 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

SMK N 1 Cimahi 66
Modul Mikrokontroler Teknik Otomasi Industri

;
Write_data:
setb P3.5 ; P3.5 = 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
;
word1: DB 'Welcome Home' ; Karakter yang disimpan di ROM
end

LATIHAN 3
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 9.4. Perintah Geser Satu Karakter


Pada percobaan ini, karakter ”A” akan ditampilkan pada layar LCD Karakter dan
dilakukan proses geser ke kanan.

Programnya adalah sebagai berikut:


geserL equ 00011011b ; 0 0 0 1 S/C R/L X X
geserR equ 00011111b ; 0 0 0 1 S/C R/L X X
org 0h
call init_LCD
start: mov R1,#80h
call write_inst
mov R1,#'A' ; Karakter yang akan digeser
call write_data
mov R3,#40 ; 40x geser ke kanan
Next: mov R1,#geserR
call write_inst
call ldelay
djnz R3,next

SMK N 1 Cimahi 67
Modul Mikrokontroler Teknik Otomasi Industri

sjmp start
;
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 ; RS = 0, write mode instruction
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1
call delay ; call delay time
clr P3.7 ; EN = 0
ret
;
Write_data:
setb P3.5 ; RS = 1, write mode data
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN =1
call delay ; call delay time
clr p3.7 ; EN = 0
ret
Ldelay: mov R2,#030h
Ld1: call delay
djnz R2,Ld1
ret
;
delay: mov R0,#0
delay1:mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
end

LATIHAN 4
1. Buatlah program untuk menampilkan kalimat ”Welcome
home” pada layar LCD Karakter dengan menggunakan look
up table dan dilakukan proses geser ke kiri.
2. Dengan memanfaatkan instruksi shift display dan cursor,
cetaklah kata Teknik Otomasi Industri yang dapat

SMK N 1 Cimahi 68
Modul Mikrokontroler Teknik Otomasi Industri

bergeser kekanan sebanyak 5x dan bergeser kekiri


sebanyak 5x dan berhenti.
3. Buatlah interaksi geser karakter ke kanan dan ke kiri,
dengan menggunakan tombol P2.0, P2.1, untuk mengatur
geser ke kanan dan ke kiri, untuk dengan kata Aku Suka
Mikrokontroler

MODUL PEMBELAJARAN X
T I M E R/ COUNTER

TUJUAN
1. Siswa memahami fungsi timer dan counter pada mikrokontroller

2. Siswa memahami rangkaian interface untuk aplikasi timer dan counter

3. Siswa dapat memanfaatkan fungsi counter untuk mencacah pulsa

SMK N 1 Cimahi 69
Modul Mikrokontroler Teknik Otomasi Industri

4. Siswa dapat memanfaatkan fungsi timer untuk membangkitkan clock dengan


periode tertentu.

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI
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 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 (register)
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 10.1. AT89S51 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 10 .1. Konsep dasar Timer/Counter sebagai sarana input


Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi 2
macam, yang pertama ialah 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 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

SMK N 1 Cimahi 70
Modul Mikrokontroler Teknik Otomasi Industri

menyatakan banyaknya pulsa yang sudah diterima pencacah. Untaian pencacah


biner yang dipakai, bisa merupakan pencacah biner menaik (count up binary
counter) atau pencacah biner menurun (count down binary counter).

Fasilitas Timer/Counter
Keluarga mikrokontroler MCS51, misalnya AT89S51 dan AT89Sx051,
dilengkapi dengan dua perangkat Timer/Counter, masing-masing dinamakan
sebagai Timer 0 dan Timer 1. Sedangkan untuk jenis yang lebih besar, misalnya
AT89S52, 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 MCS51, bagi
pemakai mikrokontroler MCS51 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). Pencacah biner pembentuk
Timer/Counter MCS51 merupakan pencacah biner menaik (count up binary
counter) yang mencacah dari 0000H sampai FFFFH, saat kedudukan pencacah
berubah dari FFFFH kembali ke 0000H 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
dialamat secara bit) dan register TMOD (Timer Mode Register, memori-data
internal nomor 89H). Pencacah biner Timer 0 dan 1 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 8 bit, bisa disusun menjadi 4 macam Mode pencacah
biner seperti terlihat dalam Gambar 10.2 sampai Gambar 10.5.
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 di-kombinasi lain. Susunan TL0, TH0, TL1 dan TH1
pada masing-masing mode adalah sebagai berikut:

Mode 0 – Pencacah Biner 13 bit

Gambar 10.2 Mode 0 - Pencacah Biner 13 Bit

SMK N 1 Cimahi 71
Modul Mikrokontroler Teknik Otomasi Industri

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 MCS48 (mikrokontroler pendahulu MCS51), dengan maksud
rancangan alat yang dibuat dengan MCS48 bisa dengan mudah diadaptasikan ke
MCS51. Mode ini tidak banyak dipakai lagi.

Mode 1 – Pencacah Biner 16 bit

Gambar 10.3 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 0000H (biner 0000 0000 0000 0000), 0001H, 0002H …
sampai FFFFH (biner 1111 1111 1111 1111), kemudian melimpah kembali
menjadi 0000H.

Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang

Gambar 10.4 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 0FFH menjadi 00H). Dengan cara ini bisa didapatkan
sinyal limpahan yang frekuensinya ditentukan oleh nilai yang disimpan dalam
TH0.

Mode 3 – Gabungan Pencacah Biner 16 bit dan 8 Bit

SMK N 1 Cimahi 72
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 10.5 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 ketiga adalah TH0 yang dipakai sebagai
pencacah biner 8 bit dengan TF1 sebagai sarana pemantau limpahan. 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.

Register-register Pengatur Timer

Gambar 10.6 Denah susunan bit dalam register TMOD


Register TMOD dibagi menjadi 2 bagian secara simitris, 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 10.6.
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 (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 10.8).

SMK N 1 Cimahi 73
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 10.7 Denah susunan bit dalam register TCON


Register TCON dibagi menjadi 2 bagian, 4 bit pertama (bit 0 .. bit 3, bagian
yang diarsir dalam Gambar 3b) dipakai untuk keperluan mengatur masukan INT0
dan INT1. Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian
secara simitris yang dipakai untuk mengatur Timer0 dan Timer 1, sebagai berikut:
1. Bit TFx (TF0 atau TF1) merupakan bit penampung limpahan (lihat Gambar
10.2), TFx akan menjadi ‘1’ setiap kali pencacah biner yang terhubung padanya
melimpah (kedudukan pencacah berubah dari FFFFH kembali menjadi
0000H). 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 MCS51
menjalankan rutin layanan interupsi (ISR– Interupt Service Routine).
2. Bit TRx (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
sinyal denyut ini diatur bersama oleh TRx dan sinyal pada kaki INT0/INT1
(lihat Gambar 10.8).

Mengatur Timer
Gambar 10.8 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 10.8. Diagram blok timer/counter

SMK N 1 Cimahi 74
Modul Mikrokontroler Teknik Otomasi Industri

Setelah MCS51 di-reset register TMOD bernilai 00H, hal ini berarti :
1. Bit C/T* =’0’, menurut Gambar 10.8 keadaan ini membuat saklar S1 ke posisi
atas, sumber sinyal denyut berasal dari osilator kristal 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.
2. Tapi jika sistem yang dirancang menghendaki agar Timer 1 bekerja sebagai
counter untuk menghitung pulsa yang masuk lewat kakai T1 (P3.5), maka
posisi saklar S1 harus dikebawahkan dengan membuat bit C/T* menjadi ‘1’.
3. 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’.
4. 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 10.8, maka bit M1 harus dibuat menjadi ‘0’ dan bit M0 menjadi
‘1’. Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan
mengendalikan Timer seperti terlihat dalam contoh-contoh berikut : Setelah
reset TMOD bernilai 00H, 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, ‘b’
merupakan akhiran yang menandakan bahwa bilangan di belakangnya adalah
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

SMK N 1 Cimahi 75
Modul Mikrokontroler Teknik Otomasi Industri

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 MCS51 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 diperintah
dengan instruksi

SETB TR1

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

CLR TR1

Di atas hanya dibahas Timer 1 saja, tata canya 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 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.
Sebagimana ditunjukkan pada gambar 10.8 mikrokontroller dapat beraksi
sebagai timer atau counter, sesuai dengan kebutuhan. Perhatikan pada saklar
sebelah kiri dan kanan pada diagram blok tersebut. Mikrokontroller 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.6) dan kaki INT1.

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.

SMK N 1 Cimahi 76
Modul Mikrokontroler Teknik Otomasi Industri

7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP


Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 10.1. Mencacah pulsa clock dengan aplikasi
Mode 0 sebagai
counter 13 bit dengan output LED pada TIMER 0
Pada percobaan ini, pulsa diambil melalui clock generator yang
dibangkitkan oleh IC 555, hasil cacahan biner pada register counter Timer 0
akan ditampilkan pada LED.
Pada percobaan ini hubungkan 1 buah kabel antara P3.4 dengan output
clock IC 555.
Diagram alir percobaan adalah sebagai berikut:

Programnya adalah sebagai berikut:

org 0h
Start: Mov TMOD,#00000100b ;Timer 0 mode 0 counter 13 bit sebagai
counter
Setb TR0 ; TR1 = 0, start counting
Get: Mov A, TL0 ; A = TL0
CPL A ; A = NOT A
Mov P0, A ; P0 = A, display ke LED
Sjmp Get ; Looping Forever
End

Lakukan pengamatan pada LED ? dan lengkapi tabel berikut.


INPUT DISPLAY LED
Clock D1 D2 D3 D4 D5 D6 D7 D8
1
2
3

SMK N 1 Cimahi 77
Modul Mikrokontroler Teknik Otomasi Industri

:
20

Percobaan 10.2. Mencacah pulsa clock dengan 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, hasil cacahan biner pada register counter akan
ditampilkan pada 7 Segmen.
Pada percobaan ini hubungkan 1 buah kabel antara P3.4 dengan output
clock IC 555.
Programnya adalah sebagai berikut:

ratusan equ 30h


puluhan equ 31h
satuan equ 32h
Org 0h
Mov TMOD,#00000111b ; mode 3 counter 8 bit timer 0
Setb TR0 ; TR0 = 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

SMK N 1 Cimahi 78
Modul Mikrokontroler Teknik Otomasi Industri

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
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

Lakukan pengamatan pada display 7 segmen dan lengkapi tabel berikut.


Clock ke Display 7 Segmen
1 ?
2 ?
3 ?
4 ?
5 ?
: :
20 ?

Percobaan 10.3. Aplikasi counter 0, Mode 1


Pada program berikut akan dibuat aplikasi counter/penghitung, dimana
jika P3.4 atau kaki T0 yang telah terhubung dengan sebuah push button active low
telah ditekan 4 kali, maka akan menyalakan LED yang terhubung dengan P0
selama kurang lebih 0.6 detik.

SMK N 1 Cimahi 79
Modul Mikrokontroler Teknik Otomasi Industri

org 0h
mov p3,#0ffh
mov tmod,#00000101b
mov th0,#11111111b
mov tl0,#11111100b ; clk-1=>11111101 clk-2=>11111110 clk-3=>11111111
; clk-4=>overflow
setb tr0
jnb tf0,$
clr tr0
clr tf0
mov p0,#00h
call tunda
mov p0,#0ffh
jmp 0h
tunda:mov r0,#5
tunda1:mov r1,#255
tunda2:mov r2,#255
djnz r2,$
djnz r1,tunda2
djnz r0,tunda1
ret
end

Percobaan 10.4. Aplikasi Timer 0 Mode 1 sebagai timer 16 bit untuk waktu
tundaan dengan output LED pada P0
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
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.
Lepas kabel yang menghubungkan antara P3.5 dengan output clock IC
555. Ketik rogram sebagai berikut:

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

SMK N 1 Cimahi 80
Modul Mikrokontroler Teknik Otomasi Industri

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
JNB TF1, $
Clr TR1 ; TR1 = 0
Clr TF1 : TF1 = 0
Inc R0 ; R0 = R0+1
CJNE R0,#50,Load
Ret
End

Percobaan 10.5. Aplikasi Timer 0, Mode 1 sebagai pembangkit frekuensi


5000Hz, output pada buzzer yang terhubung dengan P0.0
org 0h
cpl p0.0
call tunda
jmp 0h
tunda:
mov tl0,#low(-100)
mov th0,#high(-100)
mov tmod,#00000001b
setb tr0
jnb tf0,$
clr tf0
clr tr0
ret
end

Latihan
1. Buatlah sirine yang dapat menghasilkan frekuensi 1kHz dan 10kHz
2. Buatlah up counter pada seven segment display, yang akan naik setiap 2 detik
3. Buatlah aplikasi up counter pada display seven segment, dimana kenaikan
datanya setelah push button yang terhubung dengan T1 (P0.5) ditekan
sebanyak 5 kali.

SMK N 1 Cimahi 81
Modul Mikrokontroler Teknik Otomasi Industri

MODUL PEMBELAJARAN XI
PORT SERIAL

TUJUAN
1. Siswa memahami rangkaian interface port serial

2. Siswa memahami mengkonfigurasikan komunikasi serial pada port serial PC

3. Siswa memahami penulisan bahasa assembly untuk konfigurasi port serial

4. Siswa memahami penulisan pemrograman delphi untuk komunikasi dengan


mikrokontroller.

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI
Terdapat dua cara dalam transfer data. Pertama, data dikirimkan secara
serempak sejumlah delapan bit pada delapan saluran berbeda (satu bit menempati
satu saluran). Cara ini dinamakan transfer data secara parallel. Kedua, data
dikirimkan secara berurutan perbit kedalam satu saluran (satu saluran digunakan
untuk menyalurkan bit pertama sampai bit terakhir). Cara ini dinamakan transfer
data secara serial. Jika dua device saling mengirim dan/atau menerima data, maka
akan terjadi komunikasi data. Sehingga dalam aspek komunikasi data terdapat dua
macam jenis komunikasi data, yaitu komunikasi data parallel dan komunikasi data
serial.
Setiap jenis komunikasi terdapat kelebihan dan kekurangan masing-
masing, diantaranya:
Aspek Komunikasi parallel Komunikasi Serial
Kecepatan transfer Dikirim serempak, lebih Dikirim satu persatu, lebih
data cepat lambat
Minimal 8+1, terlalu Minimal 2+1, sedikit, hemat
Jumlah saluran
banyak, boros
Pendek, maksimal +/- 5 Panjang, maksimal +/- 15
Panjang saluran
meter meter
TTL, RS232
Level bit “0”=0V “0”=antara +3V - +15V,
“1”=5V “1”=antara -3V – 15V

Salah satu komunikasi yang paling ampuh untuk diimplementasikan dalam


sistem komunikasi digital adalah komunikasi dengan memanfaatkan jalur serial
RS232. Mikrokontroller 89s51 telah memiliki fasilitas UART, sehingga dapat

SMK N 1 Cimahi 82
Modul Mikrokontroler Teknik Otomasi Industri

melakukan komunikasi secara serial dengan level RS2322 antar peralatan atau
dengan komputer. MAX232 merupakan IC yang difungsikan untuk merubah
format TTL ke RS232 atau sebaliknya.

Gambar 11.1 Sistem komunikasi serial mikrokontroller dengan PC

Gambar 11.2. Rangkaian skematik MAX232

Dikenal 2 macam cara transmisi data secara seri. Kedua cara tersebut
dibedakan oleh sinyal denyut (clock) yang dipakai untuk men-‘dorong’ data seri,
jika 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 MCS51 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:

SMK N 1 Cimahi 83
Modul Mikrokontroler Teknik Otomasi Industri

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 MCS51. 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.

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 sekali gus, 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 MCS51 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).

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 MCS51 yang
berfungsi sebagai pengirim, bit 9 tersebut berasal dari bit TB8 dalam register
SCON. Pada MCS52 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. Pada mode asinkron
(Mode 1, Mode 2 dan Mode 3), port seri MCS51 bekerja secara full duplex,
artinya pada saat yang sama port seri ini bisa mengirim data sekali gus 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 MCS51. 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 MCS51, 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.

Register-register Port Seri MCS51


MCS51 dilengkapi dengan 2 register dan beberapa bit tambahan untuk keperluan
pemakai port seri.

SMK N 1 Cimahi 84
Modul Mikrokontroler Teknik Otomasi Industri

SBUF merupakan SFR (Special Function Register) yang terletak pada memori-
data internal dengan nomor 99H. SBUF mempunyai kegunaan ganda, data yang
disimpan pada SBUF akan dikirim keluar MCS51 lewat port seri, sedangkan data
dari luar MCS51 yang diterima port seri diambil dari SBUF pula. Jadi meskipun
hanya menempati satu nomor memori-data internal (nomor 99H), sesungguhnya
SBUF terdiri dari 2 register yang berbeda.

SCON merupakan SFR (Special Function Register) yang terletak pada memori-
data internal dengan nomor 98H, merupakan register utama untuk mengatur kerja
port seri MCS51. 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 mengaktifkan 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 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

SMK N 1 Cimahi 85
Modul Mikrokontroler Teknik Otomasi Industri

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 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.
SerialOut:
JNB TI,$ ; tunggu data sebelumnya selesai dikirim
MOV SBUF,A ; kirim data baru
CLR TI ; petanda ada pengiriman baru
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. 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.
SerialIn:
JNB RI,$ ; tunggu SBUF berisi data baru
MOV A,SBUF ; ambil data
CLR RI ; pentanda data sudah diambil
RET

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

SMK N 1 Cimahi 86
Modul Mikrokontroler Teknik Otomasi Industri

dinamakan sebagai SPI (Serial Peripheral Interface) dan National Semiconductor


menciptakan 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 MCS51 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.

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:

2SMOD
BaudRate= x (oscilator Frequency)
64

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:

2SMOD oscilator Frequency


BaudRate= x
32 12 x [256−(TH 1)]

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:

2SMOD oscilator Frequency


BaudRate= x
32 12 x [256−(TH 1)]

Contoh:
jika diinginkan baudrate 19200 bps, berapa nilai isi ulang yang harus diisikan
kedalam
TH1?
Jawaban:
TH1=256-((1/192)x((11.0592X1000000)/19200)))
TH1=256-3
TH1=253=0fdh
Dalam hal ini SMOD berlogika 1.
Berikut beberapa baudrate yang sering digunakan:

SMK N 1 Cimahi 87
Modul Mikrokontroler Teknik Otomasi Industri

BPS Oscilator SMOD TH1 Reload Real BPS Error


4800 12 MHz 1 -13 (f3h) 4807 0.16%
2400 12 MHz 0 -13 (f3h) 2404 0.16%
2400 12 MHz 1 -26 (e6h) 2404 0.16%
1200 12 MHz 0 -26 (e6h) 1202 0.16%
1200 12 MHz 1 -52 (cch) 1202 0.16%
19200 11.0592 MHz 1 -3 (fdh) 19200 0%
9600 11.0592 MHz 0 -3 (fdh) 9600 0%
9600 11.0592 MHz 1 -6 (fah) 9600 0%
4800 11.0592 MHz 0 -6 (fah) 4800 0%
4800 11.0592 MHz 1 -12 (f4h) 4800 0%
2400 11.0592 MHz 0 -12 (f4h) 2400 0%
2400 11.0592 MHz 1 -24 (e8h) 2400 0%
1200 11.0592 MHz 0 -24 (e8h) 1200 0%
1200 11.0592 MHz 1 -48 (d0h) 1200 0%

LANGKAH KERJA
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler
program
4. Ketik program
5. Simpanlah program yang telah diketik dan beri nama : namafile.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan
kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP
Software
8. Lakukan pengamatan hasil running program dan catat hasilnya.

PERCOBAAN-PERCOBAAN
Percobaan 11.1 Menghidupkan LED melalui komunikasi
serial RS232 dengan Program Hyperterminal
Pengujian sistem komunikasi antara mikrokontroller dengan
port serial computer dapat dilakukan dengan memanfaatkan
program hyperterminal pada sistem yang berbasis under
windows ( 98, ME dan XP ). Kelebihan penggunakan program ini,
tidak diperlukan suatu bahasa pemrograman dan kelemahannya,
terbatas hanya pada proses pengujian. Pada percobaan ini LED
dihidupkan dan dimatikan melalui pengiriman karakter (0 – 9 )
pada keyboard PC.

SMK N 1 Cimahi 88
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 11.1 Pemilihan menu communication pada Accessories

Gambar 11.2 Pemilihan menu HyperTerminal pada communication

(a) (b)

Gambar 11.3. (a) Pemberian nama koneksi (b) Pemilihan koneksi


pada COM1

SMK N 1 Cimahi 89
Modul Mikrokontroler Teknik Otomasi Industri

(a) (b)

Gambar 11.4. (a) Properties serial komunikasi (b) windows


HyperTerminal

Lakukan beberapa langkah percobaan sebagai berikut:


1. Hubungkan jumper konektor ke LED_EN
2. Hubungkan modul Microcontroller Trainer dengan power supply
+5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian
programmer
4. Buka Program Hyperterminal dan inputkan angka 0 s/d 9 pada
keyboard PC

Gambar 11.6. (a) Diagram alir rutin utama (b) subrutine ambil
karakter pada percobaan 10.1

Ketik program asembly berikut ini:

SMK N 1 Cimahi 90
Modul Mikrokontroler Teknik Otomasi Industri

org 0h
nop
call initserial
gets:call inchar
mov P0,a
sjmp gets
;
initserial:
mov scon,#50h ; Konfigurasi komunikasi serial mode 1
mov tmod,#20h ; Baud rate 2400 BPS
mov th1,#0F3h
setb tr1
ret
;
inchar:
detect: jnb ri,detect ; Deteksi bit RI apakah data sudah
diterima atau belum
clr ri
mov a,sbuf
subb a,#30h ; merubah kode ascii menjadi integer
cpl a ; komplemen A
ret
;
End

Soal Tantangan:
1. Rencanakan program assembly untuk pengambilan data pada
port serial dan lakukan pendeteksian apakah tombol yang
ditekan pada keyboard PC adalah ‘0’ dan ‘1’, bila tombol yang
ditekan adalah ‘0’ maka LED yang terhubung pada P0 akan
berputar ke kanan dan sebaliknya bila tombol yang ditekan
adalah ‘1’ maka LED yang terhubung ke P0 akan berputara ke
kiri.
2. Rencakan program assembly untuk mengambil data pada port
serial dan lakukan pendeteksian apakah tombol yang ditekan
pada keyboard PC adalah 0, 1,2 s/d 9. Dan outputkan data
tersebut pada 7 segmen, sesuai dengan angka yang ditekan.
3. Lakukan perhitungan pada baudrate port serial dengan
kecepatan 9600 BPS, dan terapkan pada soal tantangan 2.

Percobaan 11.2 Mengambil data satu karákter pada


mikrokontroller
dengan Hyperterminal.
Pada percobaan ini, data satu carácter akan dikirimkan dari
mikrokontroller ke komputer melalui port serial dan ditampilkan
pada layar Hyperterminal.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply
+5V

SMK N 1 Cimahi 91
Modul Mikrokontroler Teknik Otomasi Industri

2. Hubungkan modul Microcontroller Trainer dengan rangkaian


programmer
3. Buka Program Hyperterminal
4. Ketik program asembly berikut ini:

org 0h
nop
call initserial
mov A,#’1’ ; apa yang akan terjadi bila tanda petik
dihilangkan
call sendout
getout: sjmp getout
;
initserial:
mov scon,#42h ; Konfigurasi komunikasi serial mode 1
mov tmod,#20h ; Baud rate 2400 BPS
mov th1,#0F3H
setb tr1
ret
;
Sendout:
detecto: jnb ti,detecto;
clr ti ;
mov sbuf,a ;
ret

Program kedua:

org 0h
nop
call initserial
mov dptr,#MyCharacter
gets: clr A
Movc A,@A+dptr
cjne A,#0,Next
sjmp getout
Next: call sendout
inc dptr
sjmp gets
getout: sjmp getout
;
initserial:
mov scon,#42h ; Konfigurasi komunikasi serial mode 1
mov tmod,#20h
mov th1,#0F3H; Baud rate 2400 BPS
setb tr1
ret
;
Sendout:
detecto: jnb ti,detecto;

SMK N 1 Cimahi 92
Modul Mikrokontroler Teknik Otomasi Industri

clr ti ;
mov sbuf,a ;
ret
MyCharacter:
DB ' Selamat Datang Di Laboratorium
Mikrokontroller',13,10,0
End

Latihan
1. Rencanakan program untuk cetak angka 1 sebanyak 1x, angka 2
sebanyak 2x, dan
angka 3 sebanyak 3x pada program hyperterminal, putunjuk pakai
DJNZ

MODUL PEMBELAJARAN XIII


INTERUPSI

TUJUAN
1. Siswa memahami sistem interupsi pada mikrokontroller

2. Siswa dapat memahami penggunakan bahasa assembly untuk penggunakan


sistem interupsi

SMK N 1 Cimahi 93
Modul Mikrokontroler Teknik Otomasi Industri

ALAT DAN BAHAN:


1. Komputer
2. Perangkat lunak M-IDE 51, untuk mengkompilasi bahasa Assembly
3. Trainner Mikrokontroler
4. Perangkat lunak progisp.exe
5. Peralatan keselamatan kerja

URAIAN MATERI
8051 mempunyai 5 buah sumber interupsi. Dua buah interupsi eksternal,
dua buah interupsi timer dan sebuah interupsi port serial. Meskipun memerlukan
pengertian 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 memahami. Saat kaki RESET pada IC
mikroprosesor/mikrokontroler menerima sinyal reset (pada MCS51 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 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, yakni menentukan aliran program prosesor (mengisi Program Counter
dengan vektor reset). Program yang dijalankan dengan cara reset, merupakan
program utama bagi prosesor.
Peristiwa perangkat keras yang dipakai 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
‘petanda’ (flag), catatan dalam petanda 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 13.1.

SMK N 1 Cimahi 94
Modul Mikrokontroler Teknik Otomasi Industri

Gambar 13.1 Bagan kerja prosesor melayani interupsi


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. Jika 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. Saat 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.

Sumber interupsi MCS51


AT89S51 mempunyai 6 sumber interupsi, yakni Interupsi External
(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 AT89S52 mempunyai 2 sumber interupsi lain, yakni Interupsi
Timer 2 bersumber dari Timer 2 yang memang tidak ada pada AT89S51.
Bit IE0 (atau bit IE1) dalam TCON merupakan petanda (flag) yang
menandakan adanya permintaan Interupsi Eksternal. Ada 2 keadaan yang bisa
meng-aktip-kan petanda 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. Kalau bit IT0 (atau IT1) =’0’ maka bit IE0 (atau IE1) dalam TCON menjadi ‘1’
saat kaki INT0=’0’.

SMK N 1 Cimahi 95
Modul Mikrokontroler Teknik Otomasi Industri

2. Kalau 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.
Bit TF0 (atau bit TF1) dalam TCON merupakan petanda (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).
Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0 (atau bit TF1)
dikembalikan menjadi ‘0’, menandakan permintaan Interupsi Timer sudah
dilayani.
Interupsi port seri terjadi karena dua hal, yang pertama terjadi setelah port
seri selesai mengirim data 1 byte, permintaan interupsi semacam ini ditandai
dengan petanda (flag) TI=’1’. Yang kedua terjadi saat port seri telah menerima
data 1 byte secara lengkap, permintaan interupsi semacam ini ditandai dengan
petanda (flag) RI=’1’. Petanda di atas tidak dikembalikan menjadi ‘0’ menjelang
prosesor menjalankan ISR dari Interupsi port seri, karena petanda tersebut masih
diperlukan ISR untuk menentukan sumber interupsi berasal dari TI atau RI. Agar
port seri bisa dipakai kembali setelah mengirim atau menerima data, petanda-
petanda tadi harus di-nol-kan lewat program.
Petanda 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.

Mengaktifkan Interupsi
Semua sumber permintaan interupsi yang di bahas di atas, masing-masing
bisa di-aktipkan atau di-nonaktip-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 Gambar 2. 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-aktip. Untuk
mengaktipkan salah satu sistem interupsi, bit pengatur interupsi bersangkutan
diaktipkan dan juga EA yang mengatur semua sumber interupsi. Misalnya
instruksi yang dipakai untuk mengaktipkan interupsi ekternal INT0 adalah SETB
EX0 disusul dengan SETB EA.

MSB LSB
EA X X ES ET1 EX1 ET0 EX0

BIT SYMBOL FUNCTION


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

SMK N 1 Cimahi 96
Modul Mikrokontroler Teknik Otomasi Industri

acknowledged. If EA=1, each interrupt source is


individually enabled or disabled by setting or clearing
its enable bit.
IE.6 - -
IE.5 - -
ES Enables or disables the Serial Port interrupt. If ES=0, the
IE.4
Serial Port interrupt is disabled.
ET1 Enables or disables the Timer 1 Overflow interrupt. If
IE.3
ET1=0, the Timer 1 interrupt is disabled.
EX1 Enables or disables External Interrupt 1. If EX1=0,
IE.2
External interrupt 1 is disabled.
ET0 Enables or disables the Timer 0 Overflow interrupt. If
IE.1
ET0=0, the Timer 0 interrupt is disabled.
EX0 nables or disables External interrupt 0. If EX0=0,
IE.0
External interrupt 0 is disabled.

Vektor Interupsi
Saat MCS51 menanggapi permintaan interupsi, Program Counter diisi
dengan sebuah nilai yang dinamakan sebagai vektor interupsi, yang merupakan
nomor awal dari memori-program yang menampung ISR untuk melayani
permintaan interupsi tersebut. Vektor interupsi itu dipakai untuk melaksanakan
inststuksi LCALL yang diaktipkan secara 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.

Source Vector Address


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

Tingkatan Perioritas
Masing-masing sumber interupsi bisa ditempatkan pada dua tingkatan
perioritas yang berbeda. Pengaturan tingkatan perioritas isi dilakukan dengan bit-
bit yang ada dalam register IP (Interrupt Priority). Bit PX0 dan PX1 untuk
mengatur tingkatan perioritas 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 Gambar 13.2. Setelah reset, semua bit dalam

SMK N 1 Cimahi 97
Modul Mikrokontroler Teknik Otomasi Industri

register IP bernilai ‘0’, artinya semua sumber interupsi ditempatkan pada


tingkatan tanpa perioritas. Masing-masing sumber interupsi bisa ditempatkan pada
tingkatan perioritas 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 perioritas bisa diinterupsi
oleh sumber interupsi yang berada dalam tingkatan perioritas utama. Tapi
interupsi yang berada pada tingkatan perioritas yang sama, tidak dapat saling
menginterupsi.
Jika 2 permintaan interupsi terjadi pada saat yang bersamaan, sedangkan
kedua interupsi tersebut terletak pada tingkatan perioritas yang berlainan, maka
interupsi yang berada pada tingkatan perioritas utama akan dilayani terlebih dulu,
setelah itu baru melayani interupsi pada tingkatan tanpa perioritas. Jika kedua
permintaan tersebut bertempat pada tingkatan perioritas 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. Bagan Lengkap Sistem Interupsi
MCS51. Meskipun sistem interupsi MCS51 termasuk sederhana dibandingkan
dengan sistem interupsi MC68HC11 buatan Motorola, tapi 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.
Gambar 2 menggambarkan sistem interupsi MCS51 selangkapnya, 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 2 mewakili bit dalam register yang harus diatur
untuk mengendalikan sumber interupsi, kotak bergambar bendera kecil
merupakan flag (petanda) dalam register yang mencatat adanya permintaan
interupsi dari masing-masing sumber interupsi. Kedudukan saklar dalam gambar
tersebut menggambarkan kedudukan awal setelah MCS51 di-reset. Gambar ini
sangat membantu saat penulisan program menyangkut interupsi MCS51.

Interrupt Priority Register ( IP )


MSB LSB
X X X PS PT1 PX1 PT0 PX0
BIT SYMBOL FUNCTION
IP.7 - -
IP.6 - -
IP.5 - -
PS Defines the Serial Port interrupt priority level. PS=1
IP.4
programs it to the higher priority level.
PT1 Defines the Timer 1 interrupt priority level. PT1=1
IP.3
programs it to the higher priority level.
PX1 Defines the External Interrupt 1 priority level. PX1=1
IP.2
programs it to the higher priority level.
IP.1 PT0 Enables or disables the Timer 0 interrupt priority level.

SMK N 1 Cimahi 98
Modul Mikrokontroler Teknik Otomasi Industri

PT0=1
programs it to the higher priority level.
PX0 Defines the External Interrupt 0 priority level. PX0=1
IP.0
programs it to the higher priority level.

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 0bh (alamat interupsi timer 0) dan melompat ke
subrutine interupsi Timer0Interupt.

PERCOBAN-PERCOBAAN
Percobaan 13.1. Mengaktifkan interupsi eksternal INT0
Pada percobaan ini akan dibuat sebuah system interupsi
eksternal yang menggunakan pin INT0, untuk menerima sinyal
interupsi dari luar, berupa pulsa. Apabila system tidak mendapat
interupsi, maka delapan LED akan padam, sebaliknya apabila
ada interupsi yang berupa pulsa dari monostabil, maka delapan
LED akan berkedip, terus menerus, sampai tombol reset ditekan.
Untuk melakukan percobaan ini lakukan beberapa langkah
sebagai berikut:
1. Hubungkan kabel dari P3.2. ke output rangkaian monostabil
2. Tekan tombol SW pada pushbutton untuk memberikan trigger
pada monostabil, apabila monostabil mendapat trigger maka
monostabil akan mengeluarkan pulsa satu kali.

Ketik program sebagai berikut:

Org 0h
Sjmp start
Org 03h

SMK N 1 Cimahi 99
Modul Mikrokontroler Teknik Otomasi Industri

Sjmp AdaInterupsiExt0
Start: call InitInterupsiExt0
Forever: mov P0,#11111111b
Sjmp Forever
InitInterupsiExt0:
Setb IT0 ; interupsi transisi hi-lo
Setb EX0 ; aktifkan interupsi eksternal
Setb EA
Ret
AdaInterupsiExt0:
mov P0,#11111111b
call delay
mov P0,#00000000b
call delay
reti
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
end

Percobaan 13.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.
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 ;

SMK N 1 Cimahi 100


Modul Mikrokontroler Teknik Otomasi Industri

;
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:
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 ;

SMK N 1 Cimahi 101


Modul Mikrokontroler Teknik Otomasi Industri

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
;
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
;========================================
; LO O K U PTAB LE
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;

SMK N 1 Cimahi 102


Modul Mikrokontroler Teknik Otomasi Industri

End

Lakukan pengamatan untuk data waktu yang ditampilkan.


Display Detik (:DD) Jam Konvensional (Detik)
00:01
:
01:59

SMK N 1 Cimahi 103

Anda mungkin juga menyukai