bab viii mikrokontroler pendahuluan tujuan perkuliahan
TRANSCRIPT
BAB VIII MIKROKONTROLER
Pendahuluan
Dalam bab ini akan dibahas tujuan perkuliahan, pengertian mikrokontroler,
macam-macam dan tipe mikrokontroler, keunggulan dan kelemahan
mikrokontroler, arsitektur mikrokontroler, organisasi memori, instruksi dan
bahasa pemograman mikrokontroler, dan contoh-contoh program aplikasi.
Tujuan Perkuliahan
Setelah mempelajari bab ini, diharapkan mahasiswa mampu untuk :
1. Memahami pengertian mikrokontroler dan perbedaannya dengan
mikroprosesor
2. Menjelaskan beberapa tipe mikrokontroler keunggulanya dan
kelemahannya.
3. Memahami arsitektur mikrokontroler
4. Memahami organisasi memori mikrokontroler
5. Memahami set instruksi yang terdapat pada MCS-51.
6. Memahami bahasa pemograman pada MCS-51 .
7. Membuat program aplikasi .
8.1. Pengertian Mikrokontroler
Mikrokontroller sering disebut sebagai komputer single chip, hal ini karena
dalam chip mikrokontroler berisi semua komponen dasar komputer dalam skala
kecil. Mikrokontroler berbeda dengan mikroprosesor. Mikroprosesor adalah
single chip CPU yang digunakan dalam sistem komputer, sedangkan
mikrokontroler adalah single chip sistem komputer yang di dalamnya sudah
terdapat CPU, ROM, RAM, dan I/O. Bahkan ada mikrokontroler di dalamnya,
selain CPU, RAM, ROM, I/O terdapat ADC/DAC, timer, counter, decoder,
Clock, dan lain sebagainya. Kapasitas memori mikrokontroler pada umumnya
terbatas tidak seperti pada sistem komputer sekala besar.
145
8.2. Arsitektur
Setiap mikrokontroler mempunyai arsitektur yang berbeda-beda antara yang
satu dengan yang lainnya. Dibawah ini akan dijelaskan beberapa mikrokontroler
yang cukup populer yang telah beredar dipasaran. pemilihan mikrokontroler tentu
dengan berbagai pertimbangan yaitu memiliki dokumentasi yang baik, harga yang
terjangkau, dan dengan berbagai peralatan pengembangan yang lengkap
(development tools). Selanjutnya akan diperkenalkan beberapa mikrokontroler
berbagai produk antara lain, Intel 8051, Motorola 68HC11, Microchip PIC ,
Atmel 89C51, dan Zilog dengan seri Z 86.
Intel 8051
Menggunakan arsitektur modifikasi Harvard dengan alamat terpisah untuk
memori program dan data. Memori untuk program bisa dialamati hingga 64 K.
Memori bawah (4K, 8K atau 16K tergantung tipe) bisa terletak di chipnya.
Mikrokontroler ini memiliki 128 byte memori internal ditambah beberapa register
(SFR), juga bisa mengalamati hingga 64K memori eksternal untuk data. Fasilitas
software, baik untuk software komersil maupun gratis cukup tersedia untuk
mikrokontroler 8051 ini. Mikrokontroler ini memiliki banyak varian sehingga
mampu memenuhi keperluan yang berbeda. Mikrokontroler ini tidak hanya
diproduksi oleh Intel tetapi juga oleh beberapa yang lainnya.
MC 6805 (Motorola)
Memiliki arsitektur Von Neuman dimana instruksi, data, I/O, dan timer terdapat
pada satu daerah memori. Stack pointer yang dimiliki adalah 5 bit sehingga
kedalaman stack terbatas hingga 32 byte. Beberapa mikrokontroler dari keluarga
ini memiliki ADC, PLL, Frequency Synthesizer, serial I/O dan software security.
PIC (Micro Chip)
Mikrokontroler PIC merupakan mikrokontroler RISC (Reduced Instruction Set
Compute) yang pertama. Pada umumnya RISC mengakibatkan kesederhanaan
rancangan dan memungkinkan untuk menambah kemampuanya dengan biaya
yang rendah. Walaupun hanya memiliki sedikit instruksi (33 instruksi untuk
16C5x), keluarga PIC memiliki banyak keunggulan yang sudah merupakan bagian
dari chip. Dengan bus instruksi dan bus data yang terpisah (arsitektur Harvard),
146
PIC memungkinkan akses data dan program secara bersamaan sehingga menaikan
kinerja pemrosesannya. Keuntungan dari kesederhanaan rancangan ini adalah chip
yang sangat kecil, sedikit pin, dan pemakaian daya yang sangat kecil. Popularitas
mikrokontroler PIC ini meningkat sangat cepat. Dengan harga yang murah,
ukuran kecil dan hemat pemakaian daya, pada saat ini mikrokontroler tersebut
digunakan juga pada pemakaian lain seperti sebagai rangkaian logika. Terdapat
tiga keluarga PIC pada saat ini yaitu PIC16C5x, PIC16Cxx dan PIC17Cxx.
Z8 (Zilog)
Z8 merupakan turunan dari Zilog Z80. Memiliki arsitektur unik merupakan
arsitektur gabungan dengan tiga daerah memori, yaitu program memori, data
memori, dan CPU register file. Mikrokontroler ini memiliki UART, timer, DMA,
I/O hingga 40 buah pada chip-nya. Versi lainnya memiliki sync/async serial
channel. Keseluruhan mikrokontroler ini memiliki stack RAM yang dapat
dikonfigurasikan dan sistem interupsi, dua timer programmable dengan interupsi,
proteksi ROM, dua analog komparator dengan interupsi, dan 45 buah instruksi.
Arsitektur MCS-51
Mikrokontroler AT89C51 merupakan salah satu jenis mikrokontroler CMOS 8 bit
yang memiliki performa tinggi dengan disipasi daya rendah. Diagram blok
mikrokontroler AT89C51 secara garis besar ditunjukkan pada gambar 40.
Mikrokontroler ini memiliki flash PEROM 4 Kb, RAM internal dengan kapasitas
128 x 8 bit, 32 port I/O yang terbagi menjadi 4 buah port dengan 8 jalur I/O,
kemudian terdapat pula sebuah port serial dengan kontrol serial full duplex, dua
timer/counter 16 bit dan rangkaian osilator internal.
Selanjutnya pada bahasan ini akan dikemukakan dan diperkenalkan secara
lengkap dan mendalam adalah mikrokontroler AT 89C51. Dengan pertimbangan
mikrokontroler ini murah, lengkap instruksinya, dan mudah pemogramannnya
bagi pemula atau para hobist. Dibawah ini diperlihatkan arsitektur mikrokontroler
AT 89C51.
147
Gambar VIII.1. Diagram blok AT 89C51
(Sumber dari data book µC ATMEL) Diagram blok arsitektur mikrokontroler AT89S51, diambil dari datasheet
AT89S51 buatan Atmel, ditunjukan pada gambar VIII.1. Mikrokontroler ini
memiliki 40 konfigurasi pin seperti digambarkan pada gambarVIII.2. Fungsi dari
tiap–tiap pin dapat dikelompokkan menjadi sumber tegangan, kristal, kontrol,
dan I/O.
Disamping itu mikrokontroler ini dapat ditambahkan sebuah minimum
memori eksternal. Dari kedelapan line dapat digunakan sebagai suatu unit yang
berhubungan ke perangkat paralel seperti printer, pengubah digital ke analog, dan
sebagainya, atau tiap line dapat mengoperasikan sendiri ke perangkat single bit
seperti saklar, LED, transistor, selenoid, motor, dan speaker.
Mikrokontroler keluarga MCS-51 mempunyai 40 kaki, 32 kaki diantaranya
yaitu kaki untuk keperluan port paralel. Satu port terdiri dari 8 kaki, dengan
demikian 32 kaki tersebut membentuk 4 buah port paralel, yang dikenal sebagai
port 0, port 1, port 2 dan port 3.
8.2.1. Port Paralel AT89S51
Pada gambar VIII.2, port 1, 2, dan 3 memiliki Pullup internal, sedangkan
port 0 memiliki keluaran saluran terbuka atau open drain. Masing-masing jalur
I/O dapat digunakan secara independent sebagai masukan atau keluaran, tetapi
port 0
148
(a) (b)
(c) (d)
Gambar VIII.2 Konstruksi Port Paralel
tidak dapat digunakan sebagai jalur I/O serbaguna selama pengaksesan memori
eksternal atau dijadikan sebagai jalur ADDR/DATA. Agar dapat digunakan
sebagai masukan, bit pengancing port yang bersangkutan harus diberi logik 1,
yang akan mematikan transistor FET (Field Effect Transistor) penggerak
keluaran. Sehingga, untuk port 1, 2 dan 3, kaki-kakinya ditarik tinggi (pulled
high) oleh pullup internal, tetapi bisa juga ditarik rendah (pulled low) dengan
suatu sumber eksternal.
Port 0 tidak memiliki pullup internal. Pullup FET (FET bagian atas )
didalam penggerak keluaran P0 digunakan hanya pada saat port mengirimkan
logik 1 selama pengaksesan memori eksternal. Selain dari itu, pullup FET akan
selalu mati. Sehingga P0 tidak dapat digunakan sebagai jalur output, kecuali jika
dipasang resistor sebagai pullup external.
8.2.2. Timer Dan Counter AT89S51
Pada dasarnya Timer / Counter merupakan sarana masukan berupa
149
seperangkat pencacah biner (binary counter) yang terhubung langsung ke saluran
data mikrokontroler, sehingga mikrokontroler bisa membaca kondisi pencacah
dan bila diperlukan mikrokontroler dapat pula merubah kondisi pencacah tersebut.
Seperti layaknya pencacah biner, saat sinyal detak (clock) yang diberikan
sudah melebihi kapasitas pencacah, maka pencacah akan memberikan sinyal
overflow atau limpahan, limpahan pencacah ini dicatat dalam suatu register.
Sinyal detak yang diberikan ke pencacah dibedakan menjadi dua macam,
yang pertama ialah sinyal detak dengan frekuensi tetap yang sudah diketahui
besarnya dan yang kedua adalah sinyal detak dengan frekuensi yang bisa
bervariasi. Jika sebuah pencacah bekerja dengan frekuensi tetap, dikatakan
pencacah tersebut bekerja sebagai timer atau pewaktu, karena kondisi pencacah
tersebut setara dengan waktu yang bisa ditentukan secara pasti. Tetapi jika sebuah
pencacah bekerja dengan frekuensi yang bervariasi dikatakan pencacah tersebut
bekerja sebagai counter atau pencacah, kondisi pencacah tersebut menyatakan
banyaknya pulsa detak yang sudah diterima.
8.2.3. Port Serial AT89S51
Port serial pada AT89S51 dapat digunakan dalam 4 mode kerja yang
berbeda. Dari 4 mode tersebut, 1 mode diantaranya bekerja secara sinkron dan
lainnya bekerja secara asinkron. Keempat mode kerja tersebut yaitu :
1. Mode 0 Shift Register 8 Bit, Mode ini bekerja secara sinkron, data serial
dikirim dan diterima melalui kaki P3.0 (RXD), sedangkan kaki P3.1
(TXD) dipakai untuk menyalurkan clock pendorong data serial yang
dibangkitkan AT89S51. data dikirim/diterima 8 bit sekaligus, dimulai dari
bit yang bobotnya paling kecil atau LSB (bit 0) dan diakhiri dengan bit
yang bobotnya paling besar atau MSB (bit 7). Kecepatan pengiriman data
(baud rate) yaitu 1/12 frekuensi kristal yang digunakan.
2. Mode 1 UART 8 Bit Dengan Baud Rate Yang Dapat Diatur
Pada mode ini komunikasi dapat dilakukan secara 8 bit data asinkron yang
terdiri atas 10 bit, yaitu 1 bit start, 8 bit data dan 1 bit stop. Baud rate pada
mode ini dapat diatur dengan timer 1. Tidak seperti mode 0, pada mode ini
150
merupakan mode UART, fungsi-fungsi alternatif dari P3.0/RXD dan
P3.1/TXD digunakan. P3.0 berfungsi sebagai RXD, yaitu kaki untuk
penerimaan data serial dan P3.1 berfungsi sebagai TXD, yaitu kaki untuk
pengiriman data serial. Pengiriman data dilakukan dengan menuliskan
data yang akan dikirim ke register SBUF (Serial Buffer). Data serial akan
digeser keluar diawali dengan bit start dan diakhiri dengan bit stop dimulai
dari bit yang berbobot terendah (LSB) hingga bit berbobot tertinggi
(MSB). Bit TI akan set setelah bit stop keluar melali kaki TXD yang
menandakan bahwa proses pengiriman data telah selesai. Bit ini harus di-
clear oleh perangkat lunak setelah pengiriman data selesai.
3. Mode 2 UART 9 Bit Dengan Baud Rate Permanent
Pada mode ini, komunikasi data dilakukan secara asinkron dengan 11 bit,
1 bit start, 8 bit data, 1 bit ke 9 yang dapat diatur dan 1 bit stop. Pada
proses pengiriman data, bit ke 9 diambil dari bit TB8 dan pada proses
penerimaan data bit ke 9 diletakan pada RB8.
4. Mode 3 UART 9 Bit Dengan Baud Rate Yang Dapat Diatur
Mode ini sama dengan mode 2, hanya saja kecepatan pengiriman data
bisa diatur sesuai dengan keperluan, seperti halnya mode 1.
8.2.4. Interupsi AT89S51
Interupsi adalah suatu kejadian atau peristiwa yang menyebabkan
mikrokontroler berhenti sejenak untuk melayani interupsi tersebut. Program yang
dijalankan pada saat melayani interupsi disebut Interrupt Service Routine.
Pada mikrokontroler AT89S51 terdapat 5 sumber interupsi yaitu 2 interupsi
eksternal (eksternal 0 dan eksternal 1), 2 interupsi timer (timer 0 dan timer 1),
serta sebuah interupsi port serial.
Dua buah mode untuk menghemat catu daya, yaitu mode Idle yang
memungkinkan CPU berhenti tetapi RAM, timer/counter, serial port dan interupsi
tetap dapat berfungsi. Power down mode, memungkinkan RAM tetap menyimpan
isinya, mematikan osilator dan fungsi yang lain sampai kemudian ada riset.
151
8.2.5. Pena-pena ( pin-pin) AT89C51
Mikrokontroler AT 89C51 memiliki 40 pena (pin) seperti diperlihatkan pada
gambar VIII.3 fungsi dari tiap-tiap pin diperlihatkan pada tabel VIII.2 di bawah
ini.
a. Vcc ( kaki 40), suplay tegangan + 5 Volt
b. GND (kaki 20), ground atau pentanahan.
c. RST (kaki 9), merupakan kaki yang berfungsi untuk me-reset sistem
secara hardware selama 2 siklus mesin.
d. PSEN (kaki 29) ( Program Store Enable) merupakan sinyal pengontrol
yang membolehkan program memori ekternal masuk ke dalam bus selama
proses pemberian/pengambilan instruksi.
e. ALE/ PROG (kaki 30)(Address Latch Enable) menghasilkan pulsa-pulsa
untuk mengancing byte rendah (low byte) alamat selama mengakses
memori ekternal, berfungsi untuk menahan alamat memori ekternal selama
pelaksanaan instruksi, sedangkan PROG berfungsi sebagai masukan
pulsa program selama penulisan /memprogram Flash PEROM.
f. EA /Vpp (kaki 31), External Access Enable, jika dihubungkan ke ground
mikrokontroler akan mengeksekusi program dari memori ekternal lokasi
0000h hingga FFFFh, sedangkan bila dihubungkan dengan Vcc,
mikrokontroler akan mengakses program secara internal.
g. XTAL1 (kaki 19) input penguat osilator inversi dan input rangkaian
pewaktu (Clock) internal.
h. XTAL2 (kaki 18) output dari penguat osilator inverse.
i. Port 0 (kaki 32 – 39) merupakan port paralel 8 bit open drain
bidirectional. Bila digunakan untuk mengakses memori luar, port ini akan
memultiplek alamat memori dengan data. Port ini, digunakan juga untuk
proses penulisan dan pembacaan Flash PEROM.
j. Port 1 ( kaki 1-8) merupakan port paralel 8 bit dua arah yang dapat
digunakan untuk berbagai keperluan.
152
k. Port 2 (kaki 21-28) adalah port paralel 8 bit dua arah, port ini
mengirimkan byte alamat bila dilakukan pengaksesan memori ekternal.
l. Port 3 (kaki 10-17) adalah port paralel 8 bit dua arah yang memiliki fungsi
pengganti ( alternatif).
Tabel VIII.1 Fungsi Alternatif kaki port 3
Kaki port Fungsi Alternatif
P30 TxD (port masukan serial)
P31 RxD (port keluaran serial)
P32 0INT (Interupsi ekternal 0)
P33 1INT ( Interupsi ekternal 1)
P34 T0 ( masukan ekternal pewaktu 0)
P35 T1 ( masukan ekternal pewaktu 1)
P36 WR ( sinyal tanda baca memori data
ekternal)
P37 RD ( sinyal tanda tulis memori data
ekternal)
153
Gambar VIII.3 Konfigurasi pin Mikrokontroler AT 89C51 (Sumber dari data book ATMEL)
Tabel VIII.2 Deskripsi pin Mikrokontroler AT 89C51
Nomor pin Nama pin keterangan 20 GND Ground 40 VCC Power Suplay
32 - 39 P0.7 – P0.0 Port 0 31 EA/ VPP External Access Enable(EA) 30 ALE/PROG Address Latch Enable (ALE) 29 PSEN Program Store Enable (PSEN)
21 – 28 P2.7 – P2.0 Port 2 18 & 19 XTAL Osilator 10 – 17 P3.7 P3.0 Port 3
9 RST RESET 1 - 8 P1.7 – P1.0 Port 1
8. 3. Organisasi memori Mikrokontroler MCS-51.
8. 3.1. Memori Program
Mikrokontroler MCS-51 memiliki ruang alamat memori data dan program
yang terpisah. Memori program adalah tempat program (binary program) yang
akan dijalankan. Ruang maksimum untuk memori program sebesar 64 KB, akan
tetapi untuk memaksimumkan memori tersebut perlu menggunakan memori luar
(eksternal memori) disamping memori dalam (internal memori). Tidak semua
mikrokontroller dari keluarga MCS-51 mempunyai memori dalam seperti 8031,
dan untuk yang mempunyai memori dalam kapasitasnya juga berbeda-beda.
Gambar di bawah ini memperlihatkan peta memori program dari 8051,
Gambar VIII.4 Peta memori program
154
8.3.2. Memori Data
Memori data merupakan tempat menyimpan data-data yang dibutuhkan
untuk proses program. Semua keluarga MCS-51 selalu mempunyai Memori Data
Dalam (Internal Data Memory) akan tetapi kapasitasnya berbeda yaitu ada yang
256 byte (8051) dan ada yang 384 byte (8052). Sedangkan Memori Data Luar
(External Data Memory) mempunyai kapasitas maksimum 64 kb.
Gambar di bawah ini memperlihatkan peta memori data dari 8051
Gambar VIII.5 Peta memori data
8.3.3. Flash PEROM AT 89C51
Flash PEROM, merupakan teknologi terbaru ROM yang diperkenalkan oleh
berbagai perusahaan semikonduktor IC MCS-51 dapat dianggap sebagai IC Flash
PEROM. Sebagai Flash PEROM ada 5 hal yang dapat dilakukan, yakni :
a. Menghapus isi Flash PEROM semuanya sekaligus.
b. Mengisi Flash PEROM byte per byte.
c. Mengambil isi Flash PEROM byte per byte.
d. Selain itu untuk mencegah pembajakan, Flash PEROM dapat dikunci,
sehingga program yang disimpan di dalamnya tidak bisa diambil keluar
dari chip. Disediakan tiga macam pengaman yang berbeda tingkat.
e. Mikrokontroler produksi Atmel masing-masing mempunyai kode produksi,
ini memudahkan program di komputer mengenali chip mikrokontroler
jenis apa yang dipasangkan pada flash PEROM Programmer.
155
Hal-hal tersebut diatas diatur lewat kombinasi sinyal yang diberikan pada
P36 dan P37 ( kaki no 16 dan 17) serta P26 dan P27 ( kaki no 27 dan 28). Selain
sinyal-sinyal itu perlu pula diatur tegangan yang diumpankan ke Vpp (kaki no
31), untuk keperluan pengisian informasi ke dalam Flash PEROM diperlukan
tegangan 12 Volt yang disertai dengan pulsa pada PROG (kaki no 30).
Sedangkan untuk pembacaan cukup memakai tegangan Vpp 5 Volt. Mode kerja
Flash PEROM AT 89C51 diperlihatkan pada tabel dibawah ini .
Tabel VIII.3 Mode Kerja Flash PEROM AT89C51.
Mode Kerja P37 P36 P27 P26 Vpp PROG
Menghapus Isi PEROM L L L H 12 V L
Mengisi PEROM H H H L 12 V L
Membaca PEROM H H L L 5 V H
Proteksi bit 1 H H H H 12 V L
Proteksi bit 2 L L H H 12 V L
Proteksi bit 3 L H L H 12 V L
Membaca tanda ATMEL L L L L 5 V H
Daerah indirect address
Yaitu lokasi memori data yang diakses dengan cara penunjukkan alamat yang
tidak langsung. Sebagai gambaran diperlihatkan mengisi data pada 8052 dengan
masing-masing pada alamat 80H.
Contoh 1 : MOV 80H, #11H
Contoh 2 : MOV R0, #80H
MOV @R0, #22H
Pada contoh 1 transfer data direct address berlaku pengisian data ke blok
memori SFRs (P0) yang beralamat 80H, sedangkan pada contoh 2 transfer data
indirect address berlaku pengisian data ke memori data yang biasanya beralamat
80H (hanya pada 8052). Untuk daerah memori data dari alamat 00H sampai 7FH
tidak ada perbedaan lokasi data antara 8951 dan 8952.
156
Daerah direct address
Yaitu lokasi memori data yang diakses dengan cara langsung menuliskan
alamat lokasi memorinya.
Contoh : MOV 30H, #33H (Lokasi memori data yang beralamat 30H diisi data 33H)
Daerah memori data dari alamat 00h s/d 7fh
78 7F 70 77 68 6F 60 67 58 5F 50 57 48 4F 40 47 38 3F 30 37 28 2F 20 27 18 1F 10 17 08 0F 00 07
SRATCH PAD AREA
REGISTER BANK
BIT ADDRESSABLE SEGMENT
Daerah memori data dari alamat 80h s/d ffh
Terdapat dua kategori memori data pada alamat 80H s/d FFH untuk keluarga
MCS-51, yaitu :
• Kontroler yang mempunyai 1 blok data memori
• Kontroler yang mempunyai 2 blok data memori yang beralamat sama.
Untuk kategori yang mempunyai 2 blok data memori masing-masing blok disebut
blok SFRs (Special Function Register) dan blok memori data biasa.
Tabel VIII.4 Komposisi SFRs
Simbol Nama Alamat * ACC Accumulator 0E0H * B B Register 0F0H * PSW Program Status Word 0D0H SP Stack Pointer 81H DPTR Data Pointer 2 Bytes DPL Low Byte 82H DPH High Byte 83H
157
*P0 Port 0 80H *P1 Port 1 90H *P2 Port 2 0A0H *P3 Port 3 0B0H *IP Interrupt Priority Control 0B8H *IE Interrupt Enable Control 0A8H TMOD Timer/ Counter Mode Control 89H *TCON Timer/ Counter Control *+T2CON Timer/ Counter 2 Control TH0 Timer/ Counter Control 0 high byte TL0 Timer/ Counter Control 0 low byte TH1 Timer/ Counter Control 1 high byte TL1 Timer/ Counter Control 1 low byte +TH2 Timer/ Counter Control 2 high byte +TL2 Timer/ Counter Control 2 low byte +RCAP2H T/C Capture Reg. High Byte +RCAP2L T/C Capture Reg. Low Byte *SCON Serial Control SBUF Serial Data Buffer PCON Power Control
Tabel VIII.5 Isi SFRs setelah power on atau reset
Register Data (Biner) * ACC 00000000 * B 00000000 * PSW 00000000 SP 00000111 DPTR DPL 00000000 DPH 00000000 *P0 11111111 *P1 11111111 *P2 11111111 *P3 11111111 *IP 8051 xxx00000
8052 xx000000 *IE 8051 0xx00000
8052 0x000000 TMOD 00000000 *TCON 00000000 *+T2CON 00000000 TH0 00000000 TL0 00000000 TH1 00000000 TL1 00000000 +TH2 00000000 +TL2 00000000
158
+RCAP2H 00000000 +RCAP2L 00000000 *SCON 00000000 SBUF Indeterminate PCON 0xxxxxxx
FUNGSI-FUNGSI REGISTER PADA SFRs
• PSW (Program Status Word)
PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 CY AC F0 RS1 RS0 0V - P
CY = Carry Flag
AC = Auxiliary Carry
F0 = Flag 0 disediakan bebas untuk pengguna
RS1 = Register Bank Selector 1
RS0 = Register Bank Selector 0
0V = Overflow Flag
P = Parity Flag (dari AC)
RS1 RS0 Register Bank Address 0 0 0 00H – 07H 0 1 1 08H – 0FH 1 0 2 10H – 17H 1 1 3 18H – 1FH
Masing-masing Register Bank mempunyai 8 register dengan penamaan R0 s/d R7
• IE (INTERRUPT ENABLE REGISTER)
IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 EA - ET2 ES ET1 EX1 ET0 AX0
EA : Enable All Interrupt
ET2 : Enable Timer 2 Overflow or Capture Interrupt
ES : Enable Serial Port Interrupt
ET1 : Enable Timer 1 Overflow Interrupt
EX1 : Enable External 1 Interrupt
159
ET0 : Enable Timer 0 Overflow Interrupt
EX0 : Enable External 0 Interrupt
• IP (INTERRUPT PRIORITY REGISTER)
IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 - - PT2 PS PT1 PX1 PT0 PX0
PT2 : Interrupt Priority Timer 2
PS : Interrupt Priority Serial Port
PT1 : Interrupt Priority Timer 1
PX1 : Interrupt Priority External 1
PT0 : Interrupt Priority Timer 0
PX0 : Interrupt Priority External 0
• TCON (TIMER/ COUNTER CONTROL REGISTER)
TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1 : Timer 1 Overflow Flag
TR1 : Timer 1 Run Control Bit
TF0 : Timer 0 Run Control Bit
IE1 : External Interrupt 1 Edge Flag
IT1 : Interrupt 1 Type Control Bit
IE0 : External Interrupt 0 Edge Flag
IT0 : Interrupt 0 Type Control Bit
• TMOD (TIMER/ COUNTER MODE REGISTER)
GATE C/T M1 M0 GATE C/T M1 M0 TIMER 1 TIMER 0
GATE : Menentukan pengontrolan Timer/ Counter oleh Hardware (INTx) atau
software (TRx)
C/T : Timer or Counter Selector
M 1 : Mode Slector Bit
M 0 : Mode Selector Bit
160
M 1 M 0 Mode Operasi 0 0 0 13 Bit Timer 0 1 1 16 Bit Timer/ Counter 1 0 2 8 Bit Auto Reload Timer/ Counter 1 1 3 Timer 0 8 Bit Timer (TL0 & TH0), Timer 1 Stop
• T2CON (TIMER/ COUNTER 2 CONTROL REGISTER) T2CON.7
T2CON.6 T2CON.5 T2CON.4 T2CON.3 T2CON.2 T2CON.1 T2CON.0
TF 2 EXF 2 RCLK TCLK EXEN2 TR2 C/ T2 CP/RL2
TF2 : Timer 2 Overflow Flag
EXF2 : Timer 2 External Flag
RCCLK : Receive Clock Flag
TLCK : Transmit Clock Flag
EXEN2 : Timer 2 External Enable Flag
TR2 : Software START/ STOP Control Timer 2
C/ T2 : Timer or Counter Select
CP/ RL2 : Capture/ Reload Flag
• SCON (SERIAL PORT CONTROL REGISTER)
SCON.7
SCON.6 SCON.5 SCON.4 SCON.3 SCON.2 SCON.1 SCON.0
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0 : Serial Port Mode
SM1 : Serial Port Mode
SM2 : Enable Komunikasi Multiprosessor pada mode 2 & 3
REN : Enable Serial Reception
TB8 : Bit ke 9 akan dikirim
RB8 : Pada mode 2 & 3, bit ke 9 akan diterima, pada mode 1 (SM2=0) RB8 = Stop bit.
TI : Transmit Interrupt Flag
RI : Receive Interrupt Flag
161
SM0 SM1 MODE DESC BAUD RATE 0 0 0 Shift Register F. Osc/ 12 0 1 1 8 bit UART Variable 1 0 2 9 bit UART F.Osc/ 64 atau F.Osc/ 32 1 1 3 9 bit UART Variable
Mode pengalamatan mcs-51
Terdapat 5 (lima) mode pengalamatan, yaitu :
1. Direct Addressing (pengalamatan langsung), Operand sumber berisi alamat
data.
Contoh : MOV A, 7FH (7FH merupakan alamat memori data)
2. Indirect Addressing (pengalamatan tidak langsung), Operand sumber berisi
alamat memori data yang datanya menunjukkan alamat data yang dimaksud.
Contoh : ADD, @R0 (R0 berisi alamat memori data)
3. Register Addressing, Operand adalah register yang berisi data.
Contoh : MOV A, R1
4. Immediate Addressing, Operand berisi data langsung yang akan ditransfer.
Contoh : MOV A, #12H
5. Index Addressing, Metode pengalamatan ini hanya digunakan pada memori
program yaitu untuk mengambil data dengan menggunakan DPTR atau
Program Counter sebagai alamat dasarnya (Base of Table) dan menggunakan
Akumulator sebagai alamat relatifnya (Table Entry Number)
Contoh : MOVC A, @ A + DPTR atau MOVC A, @ A + PC
8.4. Instruksi dan Bahasa Pemograman
Instruksi-instruksi pada keluarga MCS-51 dibagi dalam 5 kelompok, yaitu :
1. Instruksi operasi Arithmetic
• Operasi penjumlahan tanpa Carry
Sintaks : ADD A, (src-byte)
Operasi : A A + (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
ADD A, Rn 1 1 0010 1rrr
162
ADD A, Direct 2 1 0010 0101 (direct address)
ADD A, @ Ri 1 1 0010 011I
ADD A, #data 2 1 0010 0100 (immediate data)
• Operasi Penjumlahan dengan Carry
Sintaks : ADDC A, (src-byte)
Operasi : A A + C + (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
ADDC A, Rn 1 1 0011 1rrr
ADDC A, Direct 2 1 0011 0101 (direct address)
ADDC A, @ Ri 1 1 0011 011I
ADDC A, #data 2 1 0011 0100 (immediate data)
• Operasi Pengurangan dengan Borrow
Sintaks : SUBB A, (src-byte)
Operasi : A A - C - (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
SUBB A, Rn 1 1 1001 1rrr
SUBB A, Direct 2 1 1001 0101 (direct address)
SUBB A, @ Ri 1 1 1001 011i
SUBB A, #data 2 1 1001 0100 (immediate data)
• Operasi Increment
Sintaks : INC (byte)
Operasi : (byte) (byte) + 1
Anggotanya :
OpCode Byte Cycles Encoding
INC A 1 1 0000 0100
INC Rn 2 1 0000 1rrr
INC direct 1 1 0011 011I (direct address)
INC @Ri 2 1 0011 0100
INC DPTR 1 2 1010 0011
163
• Operasi Decrement
Sintaks : DEC (byte)
Operasi : (byte) (byte) - 1
Anggotanya :
OpCode Byte Cycles Encoding
DEC A 1 1 0001 0100
DEC Rn 1 1 0001 1rrr
DEC direct 2 1 0001 010I (direct address)
DEC @Ri 1 1 0001 011i
• Operasi Perkalian
Sintaks : MUL AB
Operasi : A7 -0 A x B
BB15 - 8
OpCode Byte Cycles Encoding
MUL AB 1 4 1010 0100
• Operasi Pembagian
Sintaks : DIV AB
Operasi : A15 - 8 A / B
BB7 - 0
OpCode Byte Cycles Encoding
DIV AB 1 1 1101 0100
2. Instruksi Operasi Logical
• Operasi AND
Sintaks : ANL (dest-byte) (src-byte)
Operasi : (dest – byte) (dest – byte) (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
ANL A, Rn 1 1 0101 1rrr
ANL A, Direct 2 1 0101 0101 (direct address)
ANL A, @ Ri 1 1 0101 011i
ANL A, #data 2 1 0101 0100 (immediate data)
164
ANL direct, A 2 1 0101 0010 (direct address)
ANL direct, #data 3 2 0101 0011 (direct addres) (immediate data)
• Operasi OR
Sintaks : ORL (dest-byte) (src-byte)
Operasi : (dest – byte) (dest – byte) (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
ORL A, Rn 1 1 0100 1rrr
ORL A, Direct 2 1 0100 0101 (direct address)
ORL A, @ Ri 1 1 0100 011i
ORL A, #data 2 1 0100 0100 (immediate data)
ORL direct, A 2 1 0100 0010 (direct address)
ORL direct, #data 3 2 01000011(direct address)
(immediate data)
• Operasi XOR
Sintaks : ORL (dest-byte) (src-byte)
Operasi : (dest – byte) (dest – byte) (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
XRL A, Rn 1 1 0110 1rrr
XRL A, Direct 2 1 0110 0101 (direct address)
XRL A, @ Ri 1 1 0110 011i
XRL A, #data 2 1 0110 0100 (immediate data)
XRL direct, A 2 1 0110 0010 (direct address)
XRL direct, #data 3 2 01100011(direct addres)
(immediate data)
• Operasi CLEAR
Sintaks : CLR A
165
Operasi : A 0
CLR A 1 1 1110 0100
• Operasi Complement
Sintaks : CPL A
Operasi : A A’
OpCode Byte Cycles Encoding
CPL A 1 1 1111 0100
• Operasi Rotasi tanpa Carry
PUTAR KIRI
Sintaks : RL A
Operasi : An + 1 An n = 0 – 6
A0 A7
OpCode Byte Cycles Encoding
RL A 1 1 0010 0011
PUTAR KANAN
Sintaks : RR A
Operasi : An + 1 An n = 0 – 6
A7 A0
OpCode Byte Cycles Encoding
RR A 1 1 0000 0011
• Operasi Rotasi dengan Carry
PUTAR KIRI
Sintaks : RL A
Operasi : An + 1 An n = 0 – 6
A0 C
C A7
166
OpCode Byte Cycles Encoding
RLC A 1 1 0011 0011
PUTAR KANAN
Sintaks : RRC A
Operasi : An + 1 An n = 0 – 6
A7 C
C A7
OpCode Byte Cycles Encoding
RLC A 1 1 0001 0011
• Operasi PERTUKARAN NIBLE (4bit)
Sintaks : SWAP A
Operasi : A3-0 A7-4
OpCode Byte Cycles Encoding
SWAP A 1 1 1100 0100
1. Instruksi Transfer Data
• Instruksi Transfer Data pada Memori Data Internal
Sintaks : MOV (dest-byte) (src-byte)
Operasi : (dest – byte) (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
MOV A, Rn 1 1 1110 1rrr
MOV A, Direct 2 1 1110 0101 (direct address)
MOV A, @ Ri 1 1 1110 011i
MOV A, #data 2 1 0111 0100 (immediate data)
MOV Rn, A 1 1 1111 1rrr
MOV Rn, Direct 2 2 1010 1rrr (direct address)
MOV Rn, #data 2 1 0111 1rrr (immediate data)
MOV Direct, A 2 1 1111 0101 (direct address)
MOV Direct, Rn 2 2 1000 1rrr (direct address)
167
MOV Direct, Direct 3 2 1000 0101 (dir.addr.(src))
(dir.addr.(dest))
MOV Direct, @Ri 2 2 1000 011I (direct address)
MOV Direct, #data 3 2 01110101 (direct address)
(immediate data)
MOV @Ri, A 1 1 1111 011I
MOV @Ri, Direct 2 2 1010 011I
MOV @Ri, #data 2 1 0111 011I (immediate data)
MOV DPTR, data16 3 2 1001 0000 (immd.data 15-8)
(immd.data 7-0)
• Operasi Transfer Data pada Memori Data external
Sintaks : MOVX (dest-byte) (src-byte)
Operasi : (dest – byte) (src-byte)
Anggotanya :
OpCode Byte Cycles Encoding
MOVX A, @Ri 1 2 1110 001I
MOVX A, @DPTR 1 2 1110 0000
MOVX @Ri, A 1 2 1111 001I
MOVX @DPTR, A 1 2 1111 0000
• Operasi Transfer Data pada Memori Program
Sintaks : MOVC A, @A + (base-reg)
Operasi : A (A + (base-reg)
Anggotanya :
OpCode Byte Cycles Encoding
MOVC A, @Ri 1 2 1001 0011
MOVC A, @DPTR 1 2 1000 0011
• Operasi Transfer data pada stack
• Simpan ke stack
Sintaks : PUSH Direct
168
Operasi : SP SP + 1
(SP) (direct)
OpCode Byte Cycles Encoding
PUSH direct address 2 2 1100 0000 (direct address)
• Ambil dari stack
Sintaks : POP Direct
Operasi : Direct (SP)
SP SP – 1
OpCode Byte Cycles Encoding
PUSH direct address 2 2 1100 0000 (direct address)
• Operasi Pertukaran Data
• Pertukaran Byte
Sintaks : XCH A, (byte)
Operasi : A (byte)
Anggotanya :
OpCode Byte Cycles Encoding
XCH A, Rn 1 1 1100 1rrr
XCH A, direct 2 1 1100 0101 (direct address)
XCH A, @Ri 1 1 1100 011I
• Pertukaran Nible
Sintaks : XCHD A, A, @Ri
Operasi : A3-0 (Ri3-0 )
OpCode Byte Cycles Encoding
XCHD A, @Ri 1 1 1101 011I
169
2. Instruksi Manipulasi Variabel Boolean
• Operasi Clear Bit
Sintaks : CLR Bit
Operasi : Bit 0
Anggotanya :
OpCode Byte Cycles Encoding
CLR C 1 1 1100 001I
CLR Bit 2 1 1100 0010 (bit address)
• Operasi Set Bit
Sintaks : SETB Bit
Operasi : Bit 1
Anggotanya :
OpCode Byte Cycles Encoding
SETB C 1 1 1101 001I
SETB Bit 2 1 1101 0010 (bit address)
• Operasi Complement Bit
Sintaks : CPL Bit
Operasi : Bit Bit’
Anggotanya :
OpCode Byte Cycles Encoding
CPL C 1 1 1011 001I
CPL Bit 2 1 1011 0010 (bit address)
• Operasi AND bit
Sintaks : ANL C, (src-bit)
Operasi : C C ^ bit atau C C ^ bit’
Anggotanya :
OpCode Byte Cycles Encoding
ANL C, bit 2 2 1000 0010 (bit address)
ANL C,/bit 2 2 1011 0000 (bit address)
• Operasi OR bit
Sintaks : ORL C, (src-bit)
170
Operasi : C C V bit atau C C V bit’
Anggotanya :
OpCode Byte Cycles Encoding
ORL C, bit 2 2 0111 0010 (bit address)
ORL C,/bit 2 2 1010 0000 (bit address)
• Operasi Transfer Bit
Sintaks : MOV (dest-bit) , (src-bit)
Operasi : (dest-bit) (src-bit)
Anggotanya :
OpCode Byte Cycles Encoding
MOV C, bit 2 1 1010 0010 (bit address)
MOV bit, C 2 2 1001 0010 (bit address)
• Operasi JUMP oleh Bit
• JUMP Jika Bit Set
Sintaks : JB C, rel
Operasi : Jika bit = 1, maka PC PC + rel
OpCode Byte Cycles Encoding
JB bit, rel 3 2 0010 0000 (bit address)(rel.address)
• JUMP Jika Bit Set dan Bit tersebut di – Clear - kan
Sintaks : JBC Bit, rel
Operasi : Jika bit = 1, maka Bit = 0 dan PC PC + rel
OpCode Byte Cycles Encoding
JBC bit, rel 3 2 0001 0000 (bit address)(rel.address)
• JUMP Jika Carry Set
Sintaks : JC rel
Operasi : Jika C = 1, maka PC PC + rel
OpCode Byte Cycles Encoding
JC rel 2 2 0010 0000 (rel.address)
171
• JUMP Jika Bit Not Set
Sintaks : JNB Bit, rel
Operasi : Jika bit = 0, maka PC PC + rel
OpCode Byte Cycles Encoding
JNB bit, rel 3 2 0011 0000 (bit address)(rel.address)
• JUMP Jika Carry Not Set
Sintaks : JNC rel
Operasi : Jika C = 0, maka PC PC + rel
Anggotanya :
OpCode Byte Cycles Encoding
JNB rel 2 2 0101 0000 (rel.address)
3. Instruksi Percabangan (Program Branching)
• Operasi Pemanggilan Sub Routine
• Absolute Call
Sintaks : ACALL addr11
Operasi : PC PC + 2
SP SP + 1
(SP) PC7 – 0
SP SP + 1
(SP) PC15 – 8
PC10-0 Page Address
OpCode Byte Cycles Encoding
ACALL addr11 2 2 a10 a9 a81 0001 a7 a6 a5 a4 a3 a2 a1 a0
• Long Call
Sintaks : LCALL addr 16
Operasi : PC PC +3
SP SP + 1
(SP) PC7 – 0
SP SP + 1
172
(SP) PC15 – 8
PC10-0 Addr 15 - 0
OpCode Byte Cycles Encoding
ACALL addr11 3 2 0001 0010 a15 - 8 a7 - 0
• Operasi Kembali Sub routine
• Return dari Subroutine
Sintaks : RET
Operasi : PC15 – 8 (SP) SP SP – 1
PC15 – 8 (SP) SP SP – 1
Opcode Byte Cycle Encoding
RET 1 2 0010 0010
• Return dari Interupt (Subroutine)
Sintaks : RETI
Operasi : PC15 – 8 (SP) SP SP – 1
PC15 – 8 (SP) SP SP – 1
Opcode Byte Cycle Encoding
RETI 1 2 0011 0010
• Operasi JUMP tanpa Kondisi
• Absolute Jump
Sintaks : AJMP
Operasi : PC PC + 2
PC10 – 0 page address
Opcode Byte Cycle Encoding
AJMP addr16 3 2 a10 a9 a8 00001 a7 a6 a5 a4 a3 a2 a1 a0
• Long Jump
Sintaks : LJMP
Operasi : PC PC + 2
PC15 – 0 addr15-0
173
Opcode Byte Cycle Encoding
LJMP addr16 3 2 0000 0001 a15-8 a7-0
• Short Jump
Sintaks : SJMP relative addr.
Operasi : PC PC + 2
PC PC + rel
Opcode Byte Cycle Encoding
SJMP rel 2 2 1000 0000 (rel address)
• Relative DPTR Jump
Sintaks : JMP @A + DPTR
Operasi : PC A + DPTR
PC A + DPTR
Opcode Byte Cycle Encoding
JMP @A + DPTR 1 2 0111 0011
• Operasi Jump dengan Kondisi
• Jump jika ACC sama dengan nol
Sintaks : JZ relative
Operasi : PC PC + 2
jika A = 0, maka PC PC + rel
Opcode Byte Cycle Encoding
JZ rel 2 2 0110 0000 (relative address)
• Jump jika ACC tidak sama dengan nol
Sintaks : JNZ relative
Operasi : PC PC + 2
jika A = 0, maka PC PC + rel
Opcode Byte Cycle Encoding
JNZ rel 2 2 0111 0000 (relative address)
174
• Jump jika perbandingan dest – byte tidak sama dengan src – byte
Sintaks : CJNE (dest-byte), (src-byte), rel
Operasi : PC PC + 3
jika (dest-byte) ≠ (src-byte) maka PC PC + rel
jika (dest-byte) = (src-byte) maka C 1, selain itu C 0
Anggotanya :
Opcode Byte Cycle Encoding
CJNE A, direct, rel 3 2 10110101 (directa.addr)(rel addr)
CJNE A, # data, rel 3 2 10110100 (immediate data)(rel addr)
CJNE Rn, # data, rel 3 2 10111rrr (immediate data)(rel addr)
CJNE @Ri, #data, rel 3 2 1011011r (immediate)(rel addr)
• Jump jika hasil DEC byte data tidak sama dengan nol
Sintaks : DJNZ (byte), rel
Operasi : PC PC + 2
(byte Byte - 1
jika (byte) > 0, atau (byte) < 0, maka PC PC + rel
Anggotanya :
Opcode Byte Cycle Encoding
DJNZ Rn, rel 2 2 1101 1rrr (relative address)
DJNZ direct, rel 3 2 1101 0101 (direct addr) (rel. addr)
4. Tanpa Fungsi
Sintaks : NOP
Operasi : PC PC + 1
Opcode Byte Cycle Encoding
NOP 1 1 0000 0000
175
8.5. Contoh – Contoh Program Mikrokontroler sederhana
Aplikasi pada lampu LED
1. Program Lampu Flip Flop pada Port 0 ; Program Lampu Flip Flop pada Port 0 $mod51 mulai: mov p0,#0ffh call delay mov p0,#0 call delay jmp mulai ; Sub rutin Delay delay: mov r0,#0 delay1: mov r1,#0 djnz r1,$ djnz r0,delay1 ret end 2. Program Lampu Flip Flop pada Port 0 ; Program Lampu Flip Flop pada Port 0 $mod51 mulai: mov p0,#00fh call delay mov p0,#0f0h call delay jmp mulai ; Sub rutin Delay delay: mov r0,#0 delay1: mov r1,#0 djnz r1,$ djnz r0,delay1 ret end 3. 3. Program Lampu berjalan pada Port 0 ; Program Lampu berjalan pada Port 0 $mod51 mulai: mov p0,#11111110b call delay mov p0,#11111101b call delay mov p0,#11111011b call delay mov p0,#11110111b call delay mov p0,#11101111b call delay mov p0,#11011111b call delay mov p0,#10111111b call delay mov p0,#01111111b
176
call delay jmp mulai ; Sub rutin Delay delay: mov r0,#0 delay1: mov r1,#0 djnz r1,$ djnz r0,delay1 ret end 4. Program Lampu Flip Flop pada Port 0 ; Program Lampu Flip Flop pada Port 0 $mod51 mulai: mov a,#11111111b mulai1: rrc a mov p0,a call delay jmp mulai1 ; Sub rutin Delay delay: mov r0,#0 delay1: mov r1,#0 djnz r1,$ djnz r0,delay1 ret end 5. Program Lampu Flip Flop pada Port 0 ; Program Lampu Flip Flop pada Port 0 $mod51 mulai: mov a,#11111111b mulai1: rlc a mov p0,a call delay jmp mulai1 ; Sub rutin Delay delay: mov r0,#0 delay1: mov r1,#0 djnz r1,$ djnz r0,delay1 ret end Aplikasi pada 7 Segment 1. Program –1
$mod51 org 0h
main: mov p2,#11000000b ;0 clr p1.4 call delay mov p2,#11110011b ;1
177
call delay mov p2,#10001001b ;2 call delay mov p2,#10100001b ;3 call delay mov p2,#10110010b ;4 call delay mov p2,#10100100b ;5 call delay mov p2,#10000100b ;6 call delay mov p2,#11110001b ;7 call delay mov p2,#10000000b ;8 call delay mov p2,#10100000b ;9 call delay jmp main delay: mov r7,#100 delay_loop1: mov r6,#100 delay_loop2: mov r5,#100 djnz r5,$ djnz r6,delay_loop2 djnz r7,delay_loop1 ret end 2. Program -2
$mod51 org 0h
main: mov p2,#11000000b ;0 setb p1.4 call delay mov p2,#11110011b ;1 call delay mov p2,#10001001b ;2 call delay mov p2,#10100001b ;3 call delay mov p2,#10110010b ;4 call delay mov p2,#10100100b ;5 call delay mov p2,#10000100b ;6 call delay mov p2,#11110001b ;7 call delay mov p2,#10000000b ;8 call delay mov p2,#10100000b ;9 call delay
178
jmp main delay: mov r7,#100 delay_loop1: mov r6,#100 delay_loop2: mov r5,#100 djnz r5,$ djnz r6,delay_loop2 djnz r7,delay_loop1 ret end 3. Program -3
$mod51 Counter_Low equ 30h Counter_High equ 31h Scanning equ 32h org 0
main: mov Counter_Low,#0 mov Counter_High,#0 mov Scanning,#100 main_loop: clr a mov p2,a clr P1.4 mov a,Counter_Low call Tabel_Data mov p2,a call delay clr a mov p2,a setb P1.4 mov a,Counter_High call Tabel_Data mov p2,a call delay djnz Scanning,Main_Loop mov Scanning,#100 inc Counter_Low mov a,Counter_Low cjne a,#10,main_loop mov Counter_Low,#0 inc Counter_High mov a,Counter_High cjne a,#10,main_loop mov Counter_High,#0 jmp main_loop Tabel_Data: cjne a,#0,TabelData_1 mov a,#11000000b ;0 ret TabelData_1: cjne a,#1,TabelData_2 mov a,#11110011b ;1
179
ret TabelData_2: cjne a,#2,TabelData_3 mov a,#10001001b ;2 ret TabelData_3: cjne a,#3,TabelData_4 mov a,#10100001b ;3 ret TabelData_4: cjne a,#4,TabelData_5 mov a,#10110010b ;4 ret TabelData_5: cjne a,#5,TabelData_6 mov a,#10100100b ;5 ret TabelData_6: cjne a,#6,TabelData_7 mov a,#10000100b ;6 ret TabelData_7: cjne a,#7,TabelData_8 mov a,#11110001b ;7 ret TabelData_8: cjne a,#8,TabelData_9 mov a,#10000000b ;8 ret TabelData_9: cjne a,#9,TabelData_Out mov a,#10100000b ;9 TabelData_Out: ret delay: mov r7,#1 delay_loop1: mov r6,#10 delay_loop2: mov r5,#100 djnz r5,$ djnz r6,delay_loop2 djnz r7,delay_loop1 ret end
Aplikasi pada KEYPAD
P1.3 P1.2 P1.1 P1.0
1 2 3 4 5 6 7 8 9 0 A BC d E F
P3.7 P3.6 P3.5 P3.4
180
1. Program -1 $mod51 org 0 clr p1.4 mulai: mov P1,#11110111b jb p3.7,key_1 mov p2,#11110011b;1 sjmp mulai key_1: jb p3.6,key_2 mov p2,#10001001b;2 sjmp mulai key_2: jb p3.5,key_3 mov p2,#10100001b;3 sjmp mulai key_3: jb p3.4,key_4 mov p2,#10110010b;4 sjmp mulai key_4: mov p1,#11111011b jb p3.7,key_5 mov p2,#10100100b;5 key_5: jb p3.6,key_6 mov p2,#10000100b;6 sjmp mulai key_6: jb p3.5,key_7 mov p2,#11110001b;7 sjmp mulai key_7: jb p3.4,key_8 mov p2,#10000000b;8 sjmp mulai key_8: mov p1,#11111101b jb p3.7,key_9 mov p2,#10100000b;9 key_9: jb p3.6,key_10 mov p2,#11000000b;0 ljmp mulai key_10: jb p3.5,key_11 mov p2,#10010000b ;A ljmp mulai key_11: jb p3.4,key_12 mov p2,#10000110b ;b key_12: mov p1,#11111110b jb p3.7,key_13 mov p2,#11001100b;C
181
sjmp mulai key_13: jb p3.6,key_14 mov p2,#10000011b;d key_14: jb p3.5,key_15 mov p2,#10001100b;E ljmp mulai key_15: jb p3.4,key_16 mov p2,#10011100b;0 ljmp mulai key_16: ljmp mulai end
Contoh program dan rangkaiannya
1. Merancang aplikasi lampu berjalan dari kiri kekanan dan dari kanan ke
kiri lengkap dengan program dan perhitungan delaynya.
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
RST9
P3.010
P3.111
P3.212
P3.313
P3.414
P3.515
P3.616
P3.717
XTAL218
XTAL119
GND20
VCC 40
P0.0 39
P0.1 38
P0.2 37
P0.3 36
P0.4 35
P0.5 34
P0.6 33
P0.7 32
EA/VPP 31
ALE/PROG 30
PSEN 29
P2.7 28
P2.6 27
P2.5 26
P2.4 25
P2.3 24
P2.2 23
P2.1 22
P2.0 21
AT89C51
11.0592MHz
33pF 33pF
+10uF
10K
5V
5V
5V
8x150
8xLED
Gambar VIII.6 Rangkaian Untuk Menyalakan Led 8 buah.
Bahasa Pemograman a) Lampu berjalan yang bergerak satu per satu dari kiri kekanan secara
berulang-ulang. ORG 0H ; Awal program dimulai pada alamat 0H
Mulai: MOV A,#07FH ; Isi Akumululator dengan data 7FH Putar:
MOV P0,A ; Salin data dari Akumuklator ke P0 (nyalakan 1 lampu)
RR A ; Putar 1 bit data pada Akumulator ke arah kanan
182
ACALL Tunda ; Panggil subrutin tunda untuk waktu Tunda penyalaan
SJMP Putar ; Lompat ke label mulai (lakukan secara berulang) ; Led akan nyala jika diberi logik 0 Tunda: MOV R5,# 250 ; Isi Register 5 dengan data 250 Tunda1: MOV R6,#100 ; Isi Register 6 dengan data 100 Tunda2: MOV R7,#10 ; Isi Register 7 dengan data 10 DJNZ R7,$ ; Kurangi R7 dengan 1 sampai 0 * DJNZ R6,Tunda2 ; Kurangi R6 jika belum 0 lompat ke label tunda2
** DJNZ R5,Tunda1 ; Kurangi R7 jika belum 0 lompat ke label tunda1
*** RET ; Kembali ke program utama
End ; Waktu tunda ( siklus DJNZ = 2 µS) : ; * : 2 (R7) = 2 (10) = 20 µS ; ** : 2 (R7 x R6) = 2 (10 x 100) = 2000 µS ; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 500000 µS ; ------------- + ; 502020 µS 500 mS ≈
b) Bahasa pemogramannya jika lampu ingin bergerak dari kanan ke kiri yaitu
Mulai: MOV A,#0FEH ; Intruksi yang diganti
Putar: MOV P0,A RL A ; Intruksi yang diganti ACALL Tunda SJMP Putar ; Led akan nyala jika diberi logik 0
c) Bahasa program untuk menggerakan lampu dari tengah ke pinggir dengan waktu tunda 200 mili detik yaitu
ORG 0H ; Awal program dimulai pada alamat 0H
Mulai: MOV P0,#11100111B ; Isi port 0 dengan data 11100111B
ACALL Tunda ; Panggil subrutin Tunda MOV P0,#11011011B ; Isi port 0 dengan data 11011011B ACALL Tunda ; Panggil subrutin Tunda MOV P0,#10111101B ; Isi port 0 dengan data 10111101B
183
ACALL Tunda ; Panggil subrutin Tunda MOV P0,#01111110B ; Isi port 0 dengan data 01111110B ACALL Tunda ; Panggil subrutin Tunda SJMP Mulai ; Lompat ke label mulai (lakukan berulang) ; Led akan nyala jika diberi logik 0 Tunda: MOV R5,# 250 ; Isi Register 5 dengan data 250 Tunda1: MOV R6,#40 ; Isi Register 6 dengan data 40 Tunda2: MOV R7,#10 ; Isi Register 7 dengan data 10 DJNZ R7,$ ; Kurangi R7 dengan 1 sampai 0 * DJNZ R6,Tunda2 ; Kurangi R6 jika belum 0 lompat ke label tunda2
** DJNZ R5,Tunda1 ; Kurangi R7 jika belum 0 lompat ke label tunda1
*** RET ; Kembali ke program utama
End ; Waktu tunda ( siklus DJNZ = 2 µS) : ; * : 2 (R7) = 2 (10) = 20 µS ; ** : 2 (R7 x R6) = 2 (10 x 40) = 800 µS ; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 200000 µS ; ------------- + ; 200820 µS 200 mS ≈
2. Merancang dan membuat rangkaian counter dengan menggunakan
mikrokontroler AT89C51.
a. Rangkailah up counter dengan menggunakan seven segment dan IC
mikrokontroler AT89C51 yang bekerja pada port 2 seperti gambar
dibawah.
b. Buatlah bahasa pemrograman untuk up counter yang bergerak naik
dari angka 0 ampai 9 secara berulang-ulang dengan waktu tunda
500 mili detik.
c. Tulis bahasa pemograman yang telah dibuat dikomputer dengan
menggunakan software Pinnacle. Kemudian simulasikan program
tersebut secara software sampai tidak ada kesalahan.
d. Setelah program disimulasikan dan tidak ada kesalahan kemudian
isikan program tersebut kedalam IC mikrokontroler dengan
menggunakan progrmmer Atmel.
184
e. Selanjutnya pindakan IC yang telah diprogram ke Emulator untuk
disimulasikan secara hardware.
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
RST9
P3.010
P3.111
P3.212
P3.313
P3.414
P3.515
P3.616
P3.717
XTAL218
XTAL119
GND20
VCC 40
P0.0 39
P0.1 38
P0.2 37
P0.3 36
P0.4 35
P0.5 34
P0.6 33
P0.7 32
EA/VPP 31
ALE/PROG 30
PSEN 29
P2.7 28
P2.6 27
P2.5 26
P2.4 25
P2.3 24
P2.2 23
P2.1 22
P2.0 21
AT89C51
11.0592MHz
33pF 33pF
+10uF
10K
5V
5V
5V
8x150
a
bf
c
g
de
DPY
[LEDgn]
8
1234567
ab
cd
e
fg
Gambar VIII.7 Rangkaian Counter dengan display seven segment
. Bahasa Pemograman
ORG 0H ; Awal program dimulai pada alamat 0H Mulai:
MOV P2,#11000000B ; Isi port 2 dengan data 10110000B (angka 0) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#11111001B ; Isi port 2 dengan data 11110011B (angka 1) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#10100100B ; Isi port 2 dengan data 10100100B (angka 2) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#10110000B ; Isi port 2 dengan data 10110000B (angka 3) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#10011001B ; Isi port 2 dengan data 10011001B (angka 4) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#10010010B ; Isi port 2 dengan data 10010010B (angka 5) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#10000010B ; Isi port 2 dengan data 10000010B (angka 6) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#11111000B ; Isi port 2 dengan data 11111000B (angka 7) ACALL Tunda ; Panggil subrutin tunda MOV P2,#10000000B ; Isi port 2 dengan data 10000000B (angka 8) ACALL Tunda ; Panggil subrutin Tunda MOV P2,#10010000B ; Isi port 2 dengan data 10010000B (angka 9) ACALL Tunda ; Panggil subrutin Tunda SJMP Mulai ; Lompat ke label mulai (lakukan berulang)
; Seven segmen akan menyala jika diberi logik 0 Tunda:
185
MOV R5,# 250 ; Isi Register 5 dengan data 250 Tunda1: MOV R6,#100 ; Isi Register 6 dengan data 100 Tunda2: MOV R7,#10 ; Isi Register 7 dengan data 10 DJNZ R7,$ ; Kurangi R7 dengan 1 sampai 0 * DJNZ R6,Tunda2 ; Kurangi R6 jika belum 0 lompat ke label tunda2
** DJNZ R5,Tunda1 ; Kurangi R7 jika belum 0 lompat ke label tunda1
*** RET ; Kembali ke program utama
End ; Waktu tunda ( siklus DJNZ = 2 µS) : ; * : 2 (R7) = 2 (10) = 20 µS ; ** : 2 (R7 x R6) = 2 (10 x 100) = 2000 µS ; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 500000 µS ; ------------- + ; 502020 µS 500 mS ≈
3. Merancang dan membuat rangkaian penggerak motor stepper dengan
menggunakan Mikrokontroler
a. Rangkaian penggerak motor stepper dengan menggunakan IC
mikrokontroler AT89C51 yang bekerja pada port 1. Ikuti standar
rangkaian seperti gambar dibawah.
b. Buatlah bahasa pemograman untuk penggerak motor stepper yang
bergerak searah dengan jarum jam secara berulang-ulang dengan
waktu tunda 500 mili detik.
c. Tulis bahasa pemograman yang telah dibuat dikomputer dengan
menggunakan software Pinnacle. Kemudian simulasikan program
tersebut secara software sampai tidak ada kesalahan.
d. Setelah progaram disimulasikan dan tidak ada kesalahan kemudian
isikan program tersebut kedalam IC mikrokontroler dengan
menggunakan programmer Atmel.
e. Selanjutnya pindahkan IC yang telah diprogram ke Emulator untuk
disimulasikan secara hardware.
186
P1.01
P1.12
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
RST9
P3.010
P3.111
P3.212
P3.313
P3.414
P3.515
P3.616
P3.717
XTAL218
XTAL119
GND20
VCC 40
P0.0 39
P0.1 38
P0.2 37
P0.3 36
P0.4 35
P0.5 34
P0.6 33
P0.7 32
EA/VPP 31
ALE/PROG 30
PSEN 29
P2.7 28
P2.6 27
P2.5 26
P2.4 25
P2.3 24
P2.2 23
P2.1 22
P2.0 21
AT89C51
11.0592MHz
33pF 33pF
+10uF 10K
5V
5V
M1
MOTOR STEPPE R
Q3BD140
Q2BD140
Q1BD140
Q4BD140
D31N4002
D21N4002
D11N4002
D41N4002
R41 K
R31 K
R21 K
R11 K
5V
5V
Gambar VIII.8 Rangkaian penggerak Stepper Motor
Bahasa Pemograman
ORG 0H Mulai: MOV P1,#11111110B ; Isi port 1 dengan data 11111110B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111101B ; Isi port 1 dengan data 11111101B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111011B ; Isi port 1 dengan data 11111011B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11110111B ; Isi port 1 dengan data 11110111B ACALL Tunda ; Panggil subrutin Tunda SJMP Mulai ; Lompat ke label mulai (lakukan berulang)
; Motor akan berputar jika diberi logik 0. Tunda: MOV R5,# 250 ; Isi Register 5 dengan data 250 Tunda1: MOV R6,#100 ; Isi Register 6 dengan data 100 Tunda2: MOV R7,#10 ; Isi Register 7 dengan data 10 DJNZ R7,$ ; Kurangi R7 dengan 1 sampai 0 *
187
DJNZ R6,Tunda2 ; Kurangi R6 jika belum 0 lompat ke label tunda2 **
DJNZ R5,Tunda1 ; Kurangi R7 jika belum 0 lompat ke label tunda1 ***
RET ; Kembali ke program utama End ; Waktu tunda ( siklus DJNZ = 2 µS) : ; * : 2 (R7) = 2 (10) = 20 µS ; ** : 2 (R7 x R6) = 2 (10 x 100) = 2000 µS ; *** : 2 (R7 x R6 x R5) = 2 (10 x 100 x 250) = 500000 µS ; ------------- + ; 502020 µS 500 mS ≈
1. Potongan program yang harus diganti agar motor bergerak berlawanan arah
dengan jarum jam yaitu: Mulai: MOV P1,#11110111B ; Isi port 1 dengan data 11110111B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111011B ; Isi port 1 dengan data 11111011B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111101B ; Isi port 1 dengan data 11111101B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111110B ; Isi port 1 dengan data 11111110B ACALL Tunda ; Panggil subrutin Tunda SJMP Mulai ; Lompat ke label mulai (lakukan berulang) ; Motor akan berputar jika diberi logik 0. 2. Program untuk menggerakan motor stepper searah dengan jarum jam
sejauh 180º dengan waktu tunda 200 mili detik yaitu :
ORG 0H Mulai: MOV R0,#24 ; Isi R0 dengan data 24 ( 180o putaran) Putar: MOV P1,#11110111B ; Isi port 1 dengan data 11110111B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111011B ; Isi port 1 dengan data 11111011B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111101B ; Isi port 1 dengan data 11111101B ACALL Tunda ; Panggil subrutin Tunda MOV P1,#11111110B ; Isi port 1 dengan data 11111110B ACALL Tunda ; Panggil subrutin Tunda DJNZ R0,Putar ; Kurangi R0 dengan 1 jika belum 0 lompat ke Putar
188
SJMP $ ; Lompat kedirinya sendiri (program berhenti) ; 1 putaran motor stepper terdapat 192 step, untuk menjalankan 180o terdapat 96 ; step. Dalam menjalankan motor stepper dilakukan setiap 4 step sekali. Sehingga ; untuk memutar 180o terdapat 96 : 4 = 24 kali.
; Motor akan berputar jika diberi logik 0. Tunda: MOV R5,#250 ; Isi Register 5 dengan data 250 Tunda1: MOV R6,#40 ; Isi Register 6 dengan data 40 Tunda2: MOV R7,#10 ; Isi Register 7 dengan data 10 DJNZ R7,$ ; Kurangi R7 dengan 1 sampai 0 DJNZ R6,Tunda2 ; Kurangi R6 jika belum 0 lompat ke label tunda2 DJNZ R5,Tunda1 ; Kurangi R7 jika belum 0 lompat ke label tunda1 RET ; Kembali ke program utama
End ; Waktu tunda ( siklus DJNZ = 2 µS) : ; * : 2 (R7) = 2 (10) = 20 µS ; ** : 2 (R7 x R6) = 2 (10 x 40) = 800 µS ; *** : 2 (R7 x R6 x R5) = 2 (10 x 40 x 250) = 200000 µS ; ------------- + ; 200820 µS 200 mS ≈
8.6. Ringkasan
1. Mikrokontroler adalah mikrokomputer yang dalam satu chip terdapat CPU,
RAM, ROM, dan I/O.
2. Di dalam chip mikrokontroler selain terdapat komponen utama,yaitu CPU,
RAM, ROM, dan I/O, juga ada yang dilengkapi dengan ADC/DAC, Counter,
Timer, Clock, dan lain-lain. Hal ini akan tergantung pada disain arsitektur
mikrokontroler itu sendiri, dengan pertimbangan teknologi yang digunakan.
3. Setiap mikrokontroler mempunyai keunggulan dan kekurangan tergantung
pada kelengkapan (fitur-fitur) yang dimiliki oleh mikrokontroler.
4. Instruksi dan bahasa pemograman mikrokontreoler tidak kompatibel antara
yang satu dengan yang lain.
5. Mikrokontroler AT89C51 merupakan salah satu jenis mikrokontroler CMOS
8 bit yang memiliki flash PEROM 4Kb, RAM internal dengan kapasitas 128 x
8 bit, 32 port I/O yang terbagi menjadi 4 buah port dengan 8 jalur I/O,
189
kemudian terdapat pula sebuah port serial dengan control serial full duplex,
dua timer/ counter 16 bit dan rangkaian osilator
6. Mikrokontroler MCS-51 memiliki ruang alamat memori data dan program
yang terpisah.
8.7. Soal Latihan
1. a). Jelaskan perbedaan mikrokontroler 8051 dengan 89C51!
b). Gambarkan diagram blok arsitektur 89C51 dan jelaskan fungsi setiap
bloknya!
2. Jelaskan organisasi memori pada mikrokontroler 89C51!
3. Jelaskan perbedaan antara direct addressing dengan indirect addressing
dan berikan contohnya !
4. Jelaskan 6 mode penglaman pada mikrokontroler 89C51 serta dilengkapi
dengan contoh setiap modenya!
5. Bila Program Status Word berisi 18 h.yang terdapat pada RAM Internal
89C51 bank register berapa yang terpilih!
6. Dari alamat berapakah Special Function Register dapat dialamati dan pada
alamat berapa!
7. Jelaskan fungsi dari pin PSEN dan AE pada mikrokontroler 89C51!
8. Buat program untuk mengurangkan bilangan yang berada pada lokasi
memori 2000 dengan bilangan pada lokasi memori 2001!
9. Jelaskan yang dimaksud Idle Mode dan power down mode pada
mikrokontroler 89C51!
10. Buat program untuk menjumlahkan bilangan pada R0 = 137, R1 = 33, dan
R3 = 56 !
11. Buat program untuk membagi bilangan pada R 0 : R 1 : R 2. (R0 = 100; R1
= 2 ; dan R2 = 10)!
12. Jelaskan program dibawah ini : SMOD 51 MAIN CPL P1,0 CALL DELAY JMP MAIN DELAY MOV R7, # 50 DE LAY1 MOV R 6, # 100
190
DELAY 2 MOV R 5, # 100. DJNZ R5, $ DJNZ R 6, DELAY 2 DJNZ R 7, DELAY 1 RET END.
13. Jelaskan program dibawah ini
ORG 0H Mulai: MOV P0,#11100111B
ACALL Tunda MOV P0,#11011011B ACALL Tunda MOV P0,#10111101B ACALL Tunda MOV P0,#01111110B ACALL Tunda SJMP Mulai. RET End.
191