+ All Categories
Home > Documents > Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Date post: 22-Oct-2015
Category:
Upload: ewamihawk
View: 347 times
Download: 18 times
Share this document with a friend
Description:
praktikum mikrokontroller
Popular Tags:
267
Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 1 Microcontroller AT89s51 Trainer Kit Experiment Manual Petunjuk Praktikum Microcontroller AT89sXXX Trainer Kit Oleh: Triwiyanto Media Pengembangan Mikrokontroler Keluarga MCS-51 Site: www.mytutorialcafe.com Email: [email protected] Jl. Ngagel Rejo Utara V/24, 031-72098904, 081-55126883
Transcript
Page 1: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 1

Microcontroller AT89s51 Trainer Kit Experiment Manual

Petunjuk Praktikum

Microcontroller AT89sXXX Trainer Kit

Oleh: Triwiyanto

Media Pengembangan Mikrokontroler

Keluarga MCS-51

Site: www.mytutorialcafe.com Email: [email protected] Jl. Ngagel Rejo Utara V/24, 031-72098904, 081-55126883

Page 2: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 2

PERCOBAAN 1 DISPLAY LED

TUJUAN:

1. Mahasiswa memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED.

2. Mahasiswa dapat memahami program assembly untuk menghidupkan dan mematikan LED.

3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR.

4. Mahasiswa memahami pembuatan instruksi waktu tunda GAMBAR:

D1

P0.0..P0.7

D8

VCC

J3

EN LED12

Gambar 1.1 Rangkaian Display LED

Perhatikan pada gambar 1.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, dan LED akan padam bila diberi logika HIGH ‘1’ melalui port 0. Agar Display LED ini dapat aktiv maka jumper EN LED harus dihubungkan singkat.

Percobaan 1.1. Menghidupkan LED dengan Instruksi MOV Pada percobaan 1.1 ini LED akan dihidupkan atau dimatikan dengan mengirimkan data tertentu pada port 0. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper pada LED_EN, untuk mengaktifkan 8 buah LED 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 3: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 3

Gambar 1.2. Tampilan kosong MIDE Studio for MCS51

Gambar 1.3. Diagram alir percobaan 1.1 5. Ketik program berikut ini:

Org 0h

Start: Mov P0,#11110000b ; Isi P0 dengan 11110000 sjmp start ; lompat ke start End 6. Simpanlah program yang anda ketik dan beri nama : prog11a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Gambar 1.4. Tampilan program ISP Software

9. Lakukan pengamatan pada LED

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

Page 4: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 4

D0 D1 D2 D3 D4 D5 D6 D7 LED YANG PADAM

1 1 1 1 1 1 1 0

1 1 1 1 1 1 0 1

1 1 1 1 1 0 1 1

1 1 1 1 0 1 1 1

1 1 1 0 1 1 1 1

1 1 0 1 1 1 1 1

1 0 1 1 1 1 1 1

0 1 1 1 1 1 1 1

Percobaan 1.2. Pembuatan Subrutine Waktu Tunda Pada percobaan ini, 8 LED akan berkedip secara kontinu, yang diakibatkan oleh pemberian waktu tunda. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 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

Gambar 1.5. Diagram alir percobaan 1.2

4. Ketik program berikut ini:

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 ; lompat ke start ; Delay: mov R1,#255 ; Isi 255 ke R1 Del1: mov R2,#255 ; Isi 255 ke R2 Del2: djnz R2,del2 ; Dec. R2 dan lompat ke del2 if NZ djnz R1,del1 ret end

Page 5: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 5

5. Simpanlah program yang anda ketik dan beri nama : prog12a.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 ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED 9. Gantilah data tersebut untuk mengedipkan sebuah LED, dua buah LED dan

seterusnya,sesuai tabel berikut ini.

D0 D1 D2 D3 D4 D5 D6 D7 LED YANG PADAM

1 1 1 1 1 1 1 0

1 1 1 1 1 1 0 0

1 1 1 1 1 0 0 0

1 1 1 1 0 0 0 0

1 1 1 0 0 0 0 0

1 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

Percobaan 1.3. Instruksi Setb dan Clr Pada percobaan ini, sebuah LED atau lebih dapat dihidupkan atau dimatikan dengan perintah setb dan clr. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan 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 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 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 ; Memanggil waktu tunda Sjmp start ; lompat ke start ; Delay: mov R1,#255 Del1: mov R2,#255 Del2: djnz R2,del2 djnz R1,del1

Page 6: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 6

ret end 5. Simpanlah program yang anda ketik dan beri nama : prog13a.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 ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED 9. Rencanakan program untuk mengedipkan dua buah LED, tiga buah LED dan seterusnya dengan instruksi Setb dan Clr.

Percobaan 1.4. LED Berjalan dengan 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. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 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

Gambar 1.6. Diagram alir percobaan 1.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

Page 7: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 7

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 Kanan: Mov P0,A Call Delay RR A ;data A diputar ke kanan DEC R0 ;data RO 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 5. Simpanlah program yang anda ketik dan beri nama : prog14a.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 ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED Soal Tantangan:

1. Lakukan perubahan pada program tersebut untuk menjalankan/ menggerakkan dua buah LED kekiri dan kekanan,

2. Lakukan modifikasi program 1.4. tersebut dengan mengganti instruksi CJNE dan DEC dengan instruksi DJNZ.

Page 8: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 8

PERCOBAAN 2 SAKLAR PUSH BUTTON

TUJUAN:

1 Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar 2. Mahasiswa dapat memahami program assembly untuk mengambil data saklar dan

mengeluarkan data ke LED. 3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan

RR.

GAMBAR:

SW1

SW8

P2.7..P2.0

(a)

D1

P0.0..P0.7

D8

VCC

J3

EN LED12

( b )

Gambar 2.2. Rangkaian Interface (a) Push Button dan LED (b)

Page 9: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 9

Pada gambar 2.2.a tersebut tampak rangkaian push button, bila saklar ditekan maka port sesuai dengan bit tersebut akan mendapat logika low ‘0’ dan sebaliknya bila saklar tidak ditekan maka port tersebut akan mendapat logika high ‘1’.

Percobaan 2.1. Mengambil Data Saklar dan Mengeluarkan ke LED Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan bit saklar yang ditekan. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Buka jumper pada EN_DAC apabila sedang terhubung. 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Start

Ambil Data SaklarA P2

Komplemen A

A:= NOT A

Output data ke LED

P0 A

Gambar 2.3. Diagram alir percobaan 2.1

5. Ketik program berikut ini:

Org 0h Start: Mov A, P2 ;copy data P2 dan Simpan ke A CPL A ;Komplemen/ Invert terhadap A Mov P0, A ;Kirim data A ke P0 sjmp start ;lompat ke start end 6. Simpanlah program yang anda ketik dan beri nama : prog21a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada LED.

Saklar Kondisi LED yang Nyala (D1-D2-D3-D4-D5-D6-D7-D8 SW1

SW2

SW3

SW4

SW5

SW6

Page 10: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 10

SW7 SW8

Percobaan 2.2. 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). Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 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

Gambar 2.4. Diagram alir percobaan 2.2

4. Ketik program berikut ini:

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 ; sjmp CekP20 ; jump forever to CekP20 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 11111110 to Acc RLeft1: mov P0,A ;send data A 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 ;data A di putar ke kiri sjmp RLeft1 ;lompat ke Rleft1 EndRLeft: ret ;

Page 11: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 11

;==================================================== ;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 ;data A putar ke kanan sjmp RRight1 ;lompat ke Rright1 EndRRight: ret ;============================================= ;subroutine delay time ;============================================= delay: mov R1,#255 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret end 5. Simpanlah program yang anda ketik dan beri nama : prog22a.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 ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED. Soal Tantangan:

1. Lakukan modifikasi pada percobaan 2.2. tersebut sesuai dengan dengan mengganti port dengan P2.2 ( putar kanan ) dan P2.3 ( putar kiri ).

2. Buatlah suatu percobaan untuk menghidupkan dan mematikan sebuah led yang terhubung ke P0.0, dengan menggunakan sebuah saklar P2.0, sehingga apabila saklar ditekan sekali, LED nyala, dan ditekan berikutnya maka LED akan padam.

Percobaan 2.3. Setting Up/Dn dan Enter dengan display LED Pada percobaan ini, LED yang ON akan bertambah atau berkurang mengikuti penekanan tombol P2.1 (UP) atau P2.2 (DN). LED akan berhenti bertambah atau atau berkurang bila ditakan tombol P2.0 ( ENTER). Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 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

Page 12: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 12

Gambar 2.5. Diagram alir percobaan 2.3 4. Ketik program berikut ini: org 0h start: mov R7,#1 ;inisialisasi data setting Setup: mov A,R7 ;simpan data R7 ke A cpl A ;komplemen A, mov P0,A ;output data ke LED jnb p2.0,getout;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, antar 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 cpl A ;komplemen A, mov P0,A ;output data ke LED

Page 13: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 13

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,#1d ;reset R7 -> 1 sjmp Setdn getout: sjmp getout ; delay: mov R0,#255 delay1: mov R2,#255 djnz R2,$ djnz R0,delay1 ret end 5. Simpanlah program yang anda ketik dan beri nama : prog23a.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 ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED. Soal Tantangan:

1. Lakukan modifikasi pada percobaan tersebut sesuai dengan dengan mengganti port tersebut dengan P2.5 (Setting UP), P2.6 (Setting Dn) dan P2.7 (Enter).

Page 14: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 14

PERCOBAAN 3 DISPLAY 7 SEGMEN

TUJUAN: 1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen 2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke 7 segment 3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu

tunda.

VCC

aa

VCC

ee

c

FCS 9013

PNP

7 x 220 ohm

d

f

FCS 9013

b

Common Anoda

PNP

FCS 9013

VCC

FCS 9013

VCC

P0.6..P0.0

FCS 9013

PNP

VCC

FCS 9013

PNP

g

Y7..Y0

g

f

VCC

FCS 9013

PNP

c

8 x 1k ohm

VCC

PNP

d

FCS 9013

VCC

b

PNPPNP

(a)

VCC

P3.6 U8

74LS138

123

645

15141312111097

ABC

G1G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

P3.5

R28

10K

J2

EN 7 SEGMEN12

Y7..Y0

P3.7

VCC

(b)

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

Tabel 3.1. Tabel kebenaran 74LS138

SELEKTOR ENABLE OUTPUT C B A G1 /G2A /G2B Y0 Y1 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 segmen yang hidup tergantung pada output dari dekoder 74LS138, yang sedang mengeluarkan logika low ”0”, sehingga dari 8 buah

Y0

Page 15: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 15

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 3.2 Modul 7 Segment tunggal Tabel 3.2. Data Display 7 Segmen

P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 g f e d c b a

Display

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

1 0 0 0 1 1 0 C

:

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

Percobaan 3.1. Tulis Karakter “A” pada 7 Segmen ( Display 1 ) Pada percobaan ini, karakter ‘A’ akan ditampilkan pada 7 Segmen Display 1 Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 16: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 16

Gambar 3.3 Diagram alir percobaan 3.1

5. Ketik program berikut ini:

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' sjmp start ; Lompat ke start end 6. Simpanlah program yang anda ketik dan beri nama : prog31a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada 7 segmen. 10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

No Nama Karakter Posisi Display 1 C Display 2

2 E Display 5

3 3 Display 8

Percobaan 3.2. Tulis Tiga Karakter ”AbC” pada 7 Segmen Pada percobaan ini, karakter ‘AbC’ akan ditampilkan pada 7 Segmen Display 1, Display 2 dan Display 3 secara berturutan Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 17: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 17

Gambar 3.4 Diagram alir percobaan 3.2

5. Ketik program berikut ini:

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

Page 18: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 18

; 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 ;============================================= ;subroutine delay created to rise delay time ;============================================= delay: mov R1,#25 del1: mov R2,#25 del2: djnz R2,del2 djnz R1,del1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog32a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada 7 segmen. 10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

No Nama Karakter Posisi Display 1 EFG Display 1, Display 2, Display 3

2 HJL Display 3, Display 4, Display 5

3 1A3 Display 6, Display 7, Display 8

Percobaan 3.3. Tulis 8 Karakter pada 7 Segmen Pada percobaan ini, karakter ‘12345678’ akan ditampilkan pada 7 Segmen Display 1, Display 2 dan Display 3 s/d Display 8 secara berturutan : Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini:

org 0h

start: clr P3.5 clr P3.6 clr P3.7 mov P0,#11111001b ; Cetak Karakter '1' call delay ; setb P3.5 clr P3.6 clr P3.7

Page 19: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 19

mov P0,#10100100b ; Cetak Karakter '2' call delay ; clr P3.5 setb P3.6 clr P3.7 mov P0,#10110000b ; Cetak Karakter '3' call delay ; setb P3.5 setb P3.6 clr P3.7 mov P0,#10011001b ; Cetak Karakter '4' call delay ; clr P3.5 clr P3.6 setb P3.7 mov P0,#10010010b ; Cetak Karakter '5' call delay ; setb P3.5 clr P3.6 setb P3.7 mov P0,#10000010b ; Cetak Karakter '6' call delay ; clr P3.5 setb P3.6 setb P3.7 mov P0,#11111000b ; Cetak Karakter '7' call delay ; setb P3.5 setb P3.6 setb P3.7 mov P0,#10000000b ; Cetak Karakter '8' call delay ; sjmp start ; Lompat ke Start ;============================================= ;subroutine delay created to rise delay time ;============================================= delay: mov R1,#25 del1: mov R2,#25 del2: djnz R2,del2 djnz R1,del1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog33a.asm

Page 20: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 20

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada 7 Segmen. 10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

No Nama Karakter 1 A b C d E F G H

2 9 8 7 6 5 4 3 2

3 J K L n O P r S

Soal Tantangan:

1. Buatlah tulisan data pada 7 Segmen, dan buatlah tulisan tersebut berjalan ke kanan. 2. Buatlah tuisan Surabaya pada 7 segmen, dan buatlah tulisan tersebut berjalan ke kiri.

Percobaan 3.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. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 21: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 21

Gambar 3.5. Diagram alir percobaan 3.4. 5. Ketik program berikut ini: Org 0h ratusan equ 30h puluhan equ 31h satuan equ 32h ; start: 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 ;

Page 22: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 22

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 mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b 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

Page 23: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 23

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

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada 7 Segmen.

Page 24: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 24

PERCOBAAN 4 LCD KARAKTER

TUJUAN: 1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x 16 2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke LCD Karakter

2 x 16 3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu

tunda. 4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu

VSS

2

1116

7VCC

D2

EN

LCD Character

3

14

D5

8

1

GND

10k

Potensio Multiturn

D1

P3.7

D74

13

12

9BPL

6

P0.7..P0.0

2 X 16

VCC

D4

J3

EN LCD 1 2

10

D1

RSP3.6

D3

D6

D0

15

Gambar 4.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 4.2. Modul LCD Karakter 2x16

Page 25: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 25

Tabel 4.1 Pin dan Fungsi

PIN Name Function

1 VSS Ground voltage

2 VCC +5V

3 VEE Contrast voltage

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

5 R/W Read/ Write, to choose write or read mode 0 = write mode 1 = read mode

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

7 DB0 LSB

8 DB1 -

9 DB2 -

10 DB3 -

11 DB4 -

12 DB5 -

13 DB6 -

14 DB7 MSB

15 BPL Back Plane Light

16 GND Ground voltage

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

Page 26: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 26

Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,

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 N=1, Display dua baris N=0, Display satu baris

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

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.

Page 27: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 27

C : Menampilkan kursor C = 1, kursor ditampilkan C = 0, kursor tidak ditampilkan B : Karakter ditunjukkan dengan kursor yang berkedip B=1, kursor blink

Clear Display Perintah ini 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

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

KONTROL DATA

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

0 pulse 0 0 0 0 1 D/C R/L X X

Catatan : x = Dont care

D/C R/L Note

0 0 Geser posisi kursor ke kiri

0 1 Geser posisi kursor ke kanan

1 0 Geser keseluruhan display ke kiri

1 1 Geser keseluruhan display ke kanan

Memori LCD 1. DDRAM ( Display Data RAM ) Memori DDRAM digunakan untuk menyimpan karakter yang akan ditampilkan. 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.

Gambar 4.3. Lokasi memori display LCD Karakter

Page 28: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 28

Pada peta memori tersebut, daerah yang berwarna kuning ( 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.

Page 29: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 29

2. CGROM ( Character Generator ROM ) Sebuah peta karakter yang dapat ditampilkan, sesuai dengan lokasi dari masing-masing karakter.

Page 30: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 30

INISIALISASI

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

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

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

Page 31: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 31

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

5. Ketik program berikut ini:

org 0h

call init_LCD start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1 call write_inst ; panggil tulis instruksi mov R1,#'A' ; Cetak Karakter A call write_data ; panggil tulis 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 ;

Page 32: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 32

Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; copy R1 ke P0 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; copy R1 ke P0 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 6. Simpanlah program yang anda ketik dan beri nama : prog41a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada karakter yang tercetak pada LCD. 10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

No Nama Karakter Posisi Display 1 1 Row 1, Col 2

2 Z Row 1, Col 8

3 & Row 2, Col 12

Percobaan 4.2. Tulis Delapan Karakter pada LCD Karakter Pada percobaan ini, kalimat ” Welcome” akan ditampilkan pada LCD Karakter pada baris 1 dan colom 1 Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini:

Page 33: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 33

org 0h call init_LCD start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1 call write_inst mov R1,#'W' call write_data mov R1,#'e' call write_data mov R1,#'l' call write_data mov R1,#'c' call write_data mov R1,#'o' call write_data mov R1,#'m' call write_data mov R1,#'e' call write_data stop: sjmp stop Init_lcd: mov r1,#00000001b ;Display clear call write_inst mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7 call write_inst mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; copy R1 ke P0 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; copy R1 ke P0 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

Page 34: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 34

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

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada display LCD Karakter 10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

No Nama Karakter Posisi Display 1 Selamat Datang Baris 1, Colom 1

2 Mikrokontroller Baris 2, Colom 1

Percobaan 4.3. Tulis Karakter Dengan Look Up Table Pada percobaan ini, kalimat ”Welcome home” akan ditampilkan pada layar LCD Karakter dengan menggunakan look up table. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini:

org 0h

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

Page 35: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 35

mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; copy R1 ke P0 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; copy R1 ke P0 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 6. Simpanlah program yang anda ketik dan beri nama : prog43a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

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

No Nama Karakter Posisi Display 1 Selamat Datang Baris 1, Colom 1

2 Mikrokontroller Baris 2, Colom 1

Soal Tantangan: 1. Dengan memanfaatkan instruksi shift display dan cursor, cetaklah kata Surabaya yang

dapat bergeser kekanan sebanyak 10 x dan bergeser kekiri sebanyak 10x dan berhenti. 2. 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 Surabaya

Page 36: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 36

PERCOBAAN 5 ANALOG TO DIGITAL CONVERTER ( ADC )

TUJUAN: 1. Mahasiswa memahami rangkaian interface mikrokontroller dengan ADC 0804 2. Mahasiswa memahami setting tegangan referensi Vref ADC0804 3. Mahasiswa memahami perhitungan tegangan resolusi ADC0804 4. Mahasiswa dapat memahami program assembly untuk menampilkan data ADC ke 7

Segmen 5. Mahasiswa dapat memahami program assembly untuk menampilkan data ADC ke LCD

Karakter 2 x 16

VCC

D1

3V

G 74LS244

P3.2

10k

P3.3

P3.4

VCC

10

10k

VCC

VCC

150p

13

2

13

2

10k

8

R6

220

ADC0804

67

9

1112131415161718

194

5

123

+IN-IN

VREF/2

DB7DB6DB5DB4DB3DB2DB1DB0

CLKRCLKIN

INTR

CSRDWR

20P1.7..P1.0

PROG

RUN/ EN ADC

65

4

32

1

Gambar 5.1 Rangkaian ADC0804

DASAR TEORI Konverter A/D tersedia secara komersial sebagai rangkaian terpadu dengan resolusi 8 bit sampai dengan 16 bit. Pada percobaan ini akan memperkenalkan ADC0801, yaitu sebagai sebuah konverter A/D 8 bit yang mudah diinterfacekandengan sistem mikrokontroller. A/D ini menggunakan metode approksimasi berturut-turut untuk mengkonversikan masukan analog (0-5V) menjadi data digital 8 bit yang ekivalen. ADC0801 mempunyai pembangkit clock internal dan memerlukan catu daya +5V dan mempunyai waktu konversi optimum sekitar 100us.

Page 37: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 37

Gambar 5.2 Konfigurasi pin ADC0804 Diagram konfigurasi pin ADC0804 ditunjukkan pada gambar 5.2. Pin 11 sampai 18 ( keluaran digital ) adalah keluaran tiga keadaan, yang dapat dihubungkan langsung dengan bus data bilamana diperlukan. Apabila CS ( pin 1 ) atau RD (pin2) dalam keadaan high (“1”), pin 11 sampai 18 akan mengambang ( high impedanze ), apabila CS dan RD rendah keduanya, keluaran digital akan muncul pada saluran keluaran. Sinyal mulai konversi pada WR (pin 3). Untuk memulai suatu konversi, CS harus rendah. Bilamana WR menjadi rendah, konverter akam mengalami reset, dan ketika WR kembali kepada keadaan high, konversi segera dimulai. Konversi detak konverter harus terletak dalam daereh frekuensi 100 sampai 800kHz. CLK IN ( pin 4) dapat diturunkan dari detak mikrokontroller, sebagai kemungkinan lain, kita dapat mempergunakan pembangkit clock internal dengan memasang rangkaian RC antara CLN IN ( pin 4) dan CLK R ( pin 19). Pin 5 adalah saluran yang digunakan untuk INTR, sinyal selesai konversi. INTR akan menjadi tinggi pada saat memulai konversi, dan akan aktiv rendah bila konversi telah selesai. Tepi turun sinyal INTR dapat dipergunakan untuk menginterupsi sistem mikrokontroller, supaya mikrokontroller melakukan pencabangan ke subrutine pelayanan yang memproses keluaran konverter. Pin 6 dan 7 adalah masukan diferensial bagi sinyal analog. A/D ini mempunyai dua ground, A GND (pin 8) dan D GND ( pin10). Kedua pin ini harus dihubungkan dengan ground. Pin 20 harus dihubungkan dengan catu daya +5V A/D ini mempunyai dua buah ground, A GND ( pin 8 ) dan D GND ( pin 10). Keduanya harus dihubungkan dengan catu daya, sebesar +5V.

Pada A/D 0804 REFV merupakan tegangan referensi yang digunakan untuk offset suatu

keluaran digital maksimum. Dengan persamaan sebagai berikut:

maksVV INREF 21=

255

MAKSVV IN

RESOLUSI =

Misalnya anda menginginkan masuk analog maksimum sebesar 4 V, maka:

2421 == xVREF volt

Page 38: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 38

0156,0255

4==RESOLUSIV volt

Resolusi ini mempunyai arti sebagai berikut:

No INV ( volt ) Data Digital ( biner )

1 0,000 0000 0000

2 0,0156 0000 0001

3 0,0313 0000 0010

4 :

5 4 1111 1111 A/D ini dapat dirangkai untuk menghasilkan konversi secara kontinu. Untuk melaksanakannya, kita harus menghubungkan CS, dan RD ke ground dan menyambungkan WR dengan INTR seperti pada gambar dibawah ini. Maka dengan ini keluaran digital yang kontinu akan muncul, karena sinyal INTR menggerakkan masukan WR. Pada akhir konversi INTR berubah menjadi low, sehingga keadaan ini akan mereset konverter dan mulai konversi. Tabel 5.1 Koneksi Interface ADC ke Mikrokontroller

ADC Mikrokontroller

/INTR P3.2

/WR P3.3

/RD P3.4

D0 s/d D7 P1.0 s/d P1.7

Tabel 5.2. Instruksi logika pada pin kontrol A/D 0804

INPUT OUTPUT /WR /RD /INTR DO S/D D7

KEGIATAN

1 1 1 Hi-Z Berada dalam keadaan High Impedansi

0 1 1 Hi-Z A/D mengalami reset Data

1 1 1 Hi-Z Mulai konversi Analog ke Digital

1 1 0 Hi-Z Konversi telah selesai

1 0 1 D0 s/d D7 Data digital telah siap diambil

Page 39: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 39

Percobaan 5.1. ADC0804 dan Display ke 7 Segmen Pada percobaan ini, Data ADC yang telah diubah dalam desimal ( ratusan, puluhan dan satuan) akan ditampilkan pada 8 x 7 Segmen pada Display 1, Display 2, dan Display 3 yang masing-masing menampilkan data ratusan, puluhan dan satuan.

(a)

VCC

P3.6 U8

74LS138

123

645

15141312111097

ABC

G1G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

P3.5

R28

10K

J2

EN 7 SEGMEN12

Y7..Y0

P3.7

VCC

(b)

Gambar 5.3. Interface rangkaian display 7 segmen

Tabel 5.1. kebenaran 74LS138

SELEKTOR ENABLE OUTPUT C B A G1 /G2A /G2B Y0 Y1 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 segmen 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

VCC

aa

VCC

ee

c

FCS 9013

PNP

7 x 220 ohm

d

f

FCS 9013

b

Common Anoda

PNP

FCS 9013

VCC

FCS 9013

VCC

P0.6..P0.0

FCS 9013

PNP

VCC

FCS 9013

PNP

g

Y7..Y0

g

f

VCC

FCS 9013

PNP

c

8 x 1k ohm

VCC

PNP

d

FCS 9013

VCC

b

PNPPNP

Page 40: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 40

secara bersamaan maka ketiga display tersebut harus dihidupkan secara bergantian dengan waktu tunda tertentu. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 5.4. Diagram alir rutin utama percobaan 5.1

Gambar 5.5. Diagram alir subrutin proses ADC

Page 41: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 41

Gambar 5.6. Diagram alir subrutin konversi hex ke desimal

Gambar 5.7. Diagram alir subrutin display ke 7 Segmen

6. Ketik program berikut ini:

Page 42: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 42

org 0h

ratusan equ 30h puluhan equ 31h satuan equ 32h ; org 0h start: call ADC call Bin2Dec call Display2SevenSegmen sjmp start ; ;======================================== ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 ; Reset ADC. P3.3 = 0 Nop ; delay 1us Nop ; delay 1 us Nop ; delay 1 us setb P3.3 ; Start Conversi eoc: jb P3.2,eoc ; Tunggu interupsi INT, apakah P3.2= 1, jika Ya ; lompat ke EOC clr P3.4 ; Baca Data. P3.4=0 mov A,P1 ; Copy data P1 ke A setb P3.4 ; Disable RD. P3.4=1 ret ; ;================================================= ;Subrutin ini untuk menampilkan data ke 7 Segmen ;dalam bentuk: ratusan, puluhan, and satuan ;data desimal diubah ke segmen dengan menggunakan ;Look up table Data7segmen ;================================================= Display2SevenSegmen: mov A, ratusan ;Copy data Ratusan ke A mov DPTR,#Data7segmen ;Copy Address #Data7segmen ke DPTR movc A,@A+DPTR ;Copy Isi A+DPTR ke A mov P0,A ;Copy A ke P0 Setb P3.5 ;Decoder, A=1, clr P3.6 ;B=0 Setb P3.7 ; dan C=1 call delay ;Panggil waktu tunda ; mov A,puluhan mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A clr P3.5 ; Setb P3.6 Setb P3.7 call delay ;

Page 43: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 43

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 ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; ;======================================== ;Subrutin ini untuk merubah data biner ke desimal ;menjadi 3 digit = ratusan-puluhan-satuan ;========================================= Bin2Dec: mov b,#100d div ab mov ratusan,a mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b ret ; Data7segmen: db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b ; end 7. Simpanlah program yang anda ketik dan beri nama : prog51a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Soal Tantangan: 1. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU, pada

Display1, 2, 3 dan 4 diikuti dengan data ADC.( contoh: SUHU 255 ) 2. Lakukan modifikasi pada program tersebut dengan manambahkan kata UOLT, pada

Display5, 6, 7dan 8 setelah data ADC.( contoh: 255 UOLT)

Page 44: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 44

Percobaan 5.2. ADC0804 dan Display ke LCD Karakter 2x16 Pada percobaan ini, Data ADC dalam desimal akan ditampilkan pada LCD Karakter 2x16 pada Baris 1, Colom 1, 2 dan 3, yang masing-masing menampilkan data ratusan, puluhan dan satuan.

VSS

2

1116

7VCC

D2

EN

LCD Character

3

14

D5

8

1

GND

10k

Potensio Multiturn

D1

P3.7

D74

13

12

9BPL

6

P0.7..P0.0

2 X 16

VCC

D4

J3

EN LCD 1 2

10

D1

RSP3.6

D3

D6

D0

15

Gambar 5.8. Rangkaian Interface LCD Karakter Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 5.9 Diagram alir utama percobaan 5.2 6. Ketik program berikut ini:

Page 45: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 45

org 0h

ratusan equ 30h puluhan equ 31h satuan equ 32h ; org 0h call init_LCD call write_char start: call ADC call Bin2Dec call Write2LCD sjmp start ; ;======================================= ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 setb P3.4 ret ; ;================================================= ;Subrutin untuk menampilkan data ke LCD character 2 x16 ;pada DDRAM 0C9 0CA 0CB untukratusan, puluhan, and satuan ;================================================= Write2LCD: mov r1,#0c9h call write_inst mov a,ratusan add a,#30h mov r1,a call write_data ; mov r1,#0cah call write_inst mov a,puluhan add a,#30h mov r1,a call write_data ; mov r1,#0cbh call write_inst mov a,satuan add a,#30h mov r1,a

Page 46: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 46

call write_data ret ; ;======================================= ;Subrutin ini untuk merubah data biner ke desimal ;menjadi 3 digit = ratusan-puluhan-satuan ;======================================= Bin2Dec: mov b,#100d div ab mov ratusan,a mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b ret ; ;=============================================== ;Subrutin untuk menampilkan tulisan Data ADC0804 ; pada baris 1 ;=============================================== write_char: mov dptr,#word1 ;DPTR = [ address word1 ] mov r3,#16 ;R3=16,number character to be display mov r1,#80h ;R1=80h,address DDRAM start position acall write_inst ; write1:clr a ; A = 0 movc a,@a+dptr ; A = [A+ DPTR] mov r1,A ; R1 = A inc dptr ; DPTR = DPTR +1 acall write_data ; djnz r3,write1 ; R3 = R3-1, ret ; Init_lcd: mov r1,#00000001b ;Display clear call write_inst mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7 call write_inst mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; write_inst: clr P3.6 ; RS = P2.0 = 0, write mode instruction mov P0,R1 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay ; call delay time

Page 47: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 47

clr P3.7 ; EN = 0 = P2.1 ret ; Write_data: setb P3.6 ; RS = P2.0 = 1, write mode data mov P0,R1 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay ; call delay time clr p3.7 ; EN = 0 = P2.1 ret ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; word1: DB ' Data ADC0804 ' end

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

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2 diikuti dengan data ADC.

Percobaan 5.3. Aplikasi program komparator dengan memanfaatkan instruksi aritmatika dan instruksi lompatan untuk pengaturan suhu dengan display LCD Karakter Dalam dunia elektronika, rangkaian komparator, umumnya diwujudkan dengan memanfaatkan rangkaian op-amp yang dibangun sebagai komparator. Sesuai dengan prinsip kerja komparator, membandingkan dua buah tegangan yang masuk pada input INV dan NON INV, untuk menghasilkan suatu output tegangan saturasi. Dengan memanfaatkan instruksi aritmatika SUBB dan instruksi lompatan JZ dan JC, maka rangkaian analog ini dapat digantikan dengan menggunakan pemrograman assembly.

Gambar 5.10 Rangkaian komparator analog dengan IC OP-AMP

Page 48: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 48

Apabila tegangan yang masuk pada VREF lebih besar daripada tegangan yang masuk pada VIN maka VOUT akan mengeluarkan tegangan ~0 volt. Dan sebaliknya bila tegangan yang masuk pada VREF lebih kecil dari pada VIN maka VOUT akam mengeluarkan tegangan VSAT. ControlSuhu:

mov a,dataSetting ; contoh dataSetting=50 mov b,dataADC ; contoh dataADC=30 clr c subb a,b jnz OnHeater ret

OnHeater: jc OffHeater call HeaterOn ;Instruksi hidupkan heater ret

OffHeater: Call HeaterOff ;Instruksi matikan heater ret ;

Pada instruksi tersebut diambil selisih antara dataSetting dan dataADC dengan menggunakan instruksi SUBB, pengurangan ini akan menghasilkan tiga keadaan yaitu: NOL, NEGATIF atau POSITIF. Hasil-hasil inilah yang harus dideteksi, keadaan NEGATIF dapat dideteksi dengan memantau bit C (carry ), keadaan NOL dapat dideteksi dengan memantau register A (accumulator). Apabila diberikan keadaan input sesuai dengan contoh tersebut maka: A=dataSetting=50 B=dataADC=30 SUBB A,B A=50-30 =20 (keadaan POSITIF) Sesuai dengan instruksi diatas maka program akan menuju ke Ret OnHeater, pada baris ini dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan POSITIF maka C=0 (clear) sehingga program akan memanggil HeaterOn Apabila diberikan keadaan input sesuai dengan contoh tersebut maka: A=dataSetting=50 B=dataADC=50 SUBB A,B A=50-50 =00 (keadaan NOL) Sesuai dengan instruksi diatas maka program akan menuju ke Ret. Apabila diberikan keadaan input sesuai dengan contoh tersebut maka: A=dataSetting=50 B=dataADC=51 SUBB A,B

Page 49: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 49

A=50-51 =-1 (keadaan NEGATIF) Sesuai dengan instruksi diatas maka program akan menuju ke OnHeater, pada baris ini dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan NEGATIF maka C=1 (clear) sehingga program akan memanggil label OffHeater Pada percobaan 5.3. ini indikator heater On dan Off, ditunjukkan pada layar LCD Karakter pada baris 1. seperti yang ditunjukkan pada pemrograman berikut ini: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Start

Subrutin Control Suhu

Subrutin Konversi Bin2Dec

Ratusan-Puluhan-Satuan

Inisialisasi LCD

Subrutin ADC

Inisialisasi DataSetting

dataSetting 50

Subrutin Display2LCD

Start

Simpan dataSetting

A dataSetting

Simpan dataADC

B dataADC

Reset bit C

C 0

SUBB A,B

A=0 ?

C=1 ?

NO End

YES

NO

End End

YES

(a) (b)

Heater On Heater Off

Gambar 5.11. Diagram alir (a) rutin utama (b) subrutin kontrol suhu pada percobaan 5.3. dataSetting equ 30h dataADC equ 31h ratusan equ 32h puluhan equ 33h satuan equ 34h org 0h mov dataSetting,#50d; contoh datasetting=50 call init_lcd start: call ADC call ControlSuhu call bin2dec call Display2LCD sjmp start ;

Page 50: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 50

ControlSuhu: mov a,dataSetting ; contoh dataSetting=50 mov b,dataADC ; contoh dataADC=30 clr c subb a,b jnz OnHeater ret OnHeater: jc OffHeater call HeaterOn ;Instruksi hidupkan heater ret OffHeater: Call HeaterOff ;Instruksi matikan heater ret ; HeaterOn: mov R1,#80h call write_inst mov R1,#'O' call write_data ; mov R1,#81h call write_inst mov R1,#'n' call write_data ; mov R1,#82h call write_inst mov R1,#' ' call write_data ret HeaterOff: mov R1,#80h call write_inst mov R1,#'O' call write_data ; mov R1,#81h call write_inst mov R1,#'f' call write_data ; mov R1,#82h call write_inst mov R1,#'f' call write_data ret ;======================================= ;Subrutin ini untuk merubah data biner ke desimal ;menjadi 3 digit = ratusan-puluhan-satuan ;======================================= Bin2Dec:

Page 51: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 51

mov A,dataADC mov b,#100d div ab mov ratusan,a mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b ret ;================================================= ;Subrutin untuk menampilkan data ke LCD character 2 x16 ;pada DDRAM 0C9 0CA 0CB untukratusan, puluhan, and satuan ;================================================= Display2LCD: mov r1,#0c0h call write_inst mov a,ratusan add a,#30h mov r1,a call write_data ; mov r1,#0c1h call write_inst mov a,puluhan add a,#30h mov r1,a call write_data ; mov r1,#0c2h call write_inst mov a,satuan add a,#30h mov r1,a call write_data ret ;======================================= ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 mov dataADC,A setb P3.4 ret ; Init_lcd:

Page 52: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 52

mov r1,#00000001b ;Display clear call write_inst mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7 call write_inst mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; write_inst: clr P3.6 ; RS = P2.0 = 0, write mode instruction mov P0,R1 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay ; call delay time clr P3.7 ; EN = 0 = P2.1 ret ; Write_data: setb P3.6 ; RS = P2.0 = 1, write mode data mov P0,R1 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay ; call delay time clr p3.7 ; EN = 0 = P2.1 ret ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog53a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2 diikuti dengan data ADC.

Percobaan 5.4. Kalibrasi dataADC ke suhu dengan menggunakan metode Look Up Table.

Kenapa kita membutuhkan look up table?: Look up table adalah suatu cara yang digunakan untuk menghindari proses perkalian dan pembagian yang bertele-tele dan memusingkan bila dilakukan dengan menggunakan bahasa assembly, yang tentunya harus dilakukan bila kita akan kalibrasi suatu alat ukur. Contoh kalibrasi Termometer dengan menggunakan persamaan persamaan berikut ini: Suhu = DataADC * 100/ 255 oC.

Page 53: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 53

Contoh table untuk konversi data ke besaran suhu ( dengan menggunakan program Microsoft Excell ). Karena data decimal maksimal adalah 255 dan suhu maksimal 100 maka Data look up tablenya adalah 255/100.

Data Desimal Suhu Ratusan Puluhan Satuan Pecahan 0 0 0 0 0 0 1 0.4 0 0 0 4 2 0.8 0 0 0 8 3 1.2 0 0 1 2 4 1.6 0 0 1 6 5 2.0 0 0 2 0 6 2.4 0 0 2 4 7 2.7 0 0 2 7 8 3.1 0 0 3 1 9 3.5 0 0 3 5

10 3.9 0 0 3 9

: : : : : :

: : : : : :

: : : : : :

243 95.3 0 9 5 3 244 95.7 0 9 5 7 245 96.1 0 9 6 1 246 96.5 0 9 6 5 247 96.9 0 9 6 9 248 97.3 0 9 7 3 249 97.6 0 9 7 6 250 98.0 0 9 8 0 251 98.4 0 9 8 4 252 98.8 0 9 8 8 253 99.2 0 9 9 2 254 99.6 0 9 9 6 255 100.0 1 0 0 0

Pada percobaan 5.4, kalibrasi dilakukan untuk perubahan range desimal (0 s/d 255) menjadi range suhu(000.0 s/d 100.0 oC) 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program dataADC equ 30h org 0h start: call ADC call Display2SevenSegmen sjmp start ;

Page 54: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 54

;======================================= ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 mov dataADC,A setb P3.4 ret ; Display2SevenSegmen: mov DPTR,#ratusan ; DPTR = [ Ratusan ] mov A,DataADC ; A = [DataADC] movc A,@A+DPTR ; A = [A+DPTR] mov DPTR,#Data7segmen ; DPTR = [Data7Segmen] movc A,@A+DPTR ; A = [A+DPTR] mov P0,A ; Copy A ke P0 Clr P3.5 ; Decoder, A=1, Clr P3.6 ; B=0 Setb P3.7 ; dan C=1 call delay ; Panggil waktu tunda ; mov DPTR,#puluhan ; DPTR = [ Puluhan ] mov A,DataADC ; A = DataADC movc A,@A+DPTR ; A =[ A+DPTR] mov DPTR,#Data7segmen ; DPTR = [Data7Segmen] movc A,@A+DPTR ; A = [A+DPTR] mov P0,A Setb P3.5 Clr P3.6 Setb P3.7 call delay ; mov DPTR,#Satuan mov A,DataADC movc A,@A+DPTR mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A Clr P3.5 ; Setb P3.6 Setb P3.7 call delay ; mov DPTR,#Pecahan mov A,DataADC movc A,@A+DPTR

Page 55: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 55

mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A Setb P3.5 ; Setb P3.6 Setb P3.7 call delay ret ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; Pecahan: db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5 db 9,3,7,1,5,9,3,6,0,4,8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4 db 8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0,4,8,2,6,0,4,7,1,5,9,3 db 7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2 db 6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1 db 5,9,3,7,1,5,9,3,6,0,4,8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0 db 4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0 ; Satuan: db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4 db 4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9 db 9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,2,2,2,3,3,3,4 db 4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9 db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4 db 4,4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9 db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0 ; puluhan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1 db 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 db 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4 db 4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 db 5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7 db 7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 db 8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0 ; Ratusan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ; Data7segmen:

Page 56: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 56

db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b ; end

Page 57: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 57

PERCOBAAN 6 DIGITAL TO ANALOG CONVERTER

TUJUAN

1. Mahasiswa memahami rangkaian interface mikrokontroller dengan DAC0808 2. Mahasiswa memahami setting arus referensi pada DAC 3. Mahasiswa memahami perhitungan output tegangan 4. Mahasiswa memahami pemrograman assembly DAC

Vr+

A7 R22K5

8

4

A4

A3

VCC

A2

16

-12V

Vr-

R14 10K

1 3

2

A1

C1

15pF

7

9

NC

-12V

COMP

12V

13

VCC

A5

VCC

P2.0..P2.7

DAC0808

14

R3

5K

10

J3

EN DAC12

11

J3

IREF

1 2

IOUT

Voutput2

15

VEE

1

+

-

U3

3

26

74

GND

A6

A8

6

12

3

5

Gambar 6.1. Rangkaian DAC0808

TEORI DASAR DAC0808 merupakan salah satu contoh kenverter D/A. IC ini tidak mahal dan digunakan secara luas dalam beberapa aplikasi, D/A ini menerapkan metode tangga R-2R 8 bit yang dilengkapi dengan sumber arus acuan dan delapan buah transistor saklar untuk mengarahkan arus biner. Suatu tegangan dan hambatan eksternal dipergunakan untuk mengatur arus acuan pada nilai yang lazim berlaku yaitu 2 mA. DAC0808 mempunyai waktu pemantapan 150ns

dan ketelitian relatif LSB21± .

Konfigurasi pin ditunjukkan seperti pada gambar 6.2. dengan penjelasan sebagai berikut. Pin 1 tidak dipakai ( NC singkatan dari no connection ). Pin 2 adalah penghubung ke ground. Pin 3 (

EEV ) harus dipasang pada -12V. Pin 4 adalah saluran balik dari ground, yang sifatnya sebagi

output pembalik. Pin 5 s/d 12 merukan 8 bit masukan data. Pin 13 ( CCV ) harus dipasang pada

Page 58: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 58

catu daya +5V. Pin 14 dihubungkan dengan catu daya positif melalui hambatan R14, dan pin 15 dihubungkan ke ground melalui hambatan R15. Akhirnya sebuah kapasitor antar pin 16 dan pin 13 berfungsi untuk memberi kompensasi frekuensi bagi IC ini.

Gambar 6.2. Pin konfigurasi

Percobaan 6.1. Mengeluarkan Tegangan Tertentu pada DAC Pada percobaan ini, suatu tegangan tertentu akan dikeluarkan melalui DAC Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper pada konektor EN_DAC untuk mengaktifkan rangkaian DAC 2. Atur arus IREF dengan menghubungkan konektor dengan menggunakan ampermeter, atur

potensio R14 untuk memberikan referensi arus tertentu sekitar 2mA 3. Pasang jumper pada konektor IREF 4. Hubungkan modul Microcontroller Trainer dengan power supply +5V 5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 59: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 59

Gambar 6.3. Diagram alir percobaan 6.1

7. Ketik program berikut ini:

org 0h start: mov P2,#50 ; isi data 50 ke P2 sjmp start

end

8. Simpanlah program yang anda ketik dan beri nama : prog61a.asm

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

10. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

11. Lakukan pengamatan dengan menggunakan Voltmeter. 12. Lakukan modifikasi pada program tersebut untuk mengelurakan tegangan lain, sesuai tabel:

No Output Tegangan ( volt ) Data Desimal 1 1 ….. 2 1,5 ….. 3 2 ….. 4 2,5 ….. 5 3 ….. 6 3,5 ….. 7 5 ….. 8 6 ….. 9 7 …..

10 8 …..

Percobaan 6.2. Mengeluarkan Tegangan Tangga 0 s/d 10V Pada percobaan ini, tegangan tertentu akan dikeluarkan melalui DAC Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper pada konektor EN_DAC untuk mengaktifkan rangkaian DAC 2. Atur arus IREF dengan menghubungkan konektor dengan menggunakan ampermeter, atur

potensio R14 untuk memberikan referensi arus tertentu sekitar 2mA 3. Pasang jumper pada konektor IREF 4. Hubungkan modul Microcontroller Trainer dengan power supply +5V 5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 60: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 60

Inisialisasi DataA 0

Waktu Tunda

A:=A+1

Start

Output Data ke DACP2 A

A=255 ?NO

Inisialisasi DataA 0

YES

Gambar 6.4. Diagram alir percobaan 6.2

7. Ketik program berikut ini:

org 0h mov A,#0 ; isi A dengan 0

start: mov P2,A ; copy A ke P2 inc A ; A:=A+1 call delay ;panggil waktu tunda cjne A,#255,start ;bandingkan A dg 255 jump start if NE mov A,#0 ;isi A dg. 0 sjmp start ;lompat ke start

; delay: mov R1,#255 del1: mov R2,#255 del2: djnz R2,del2

djnz R1,del1 ret

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

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan pengamatan dengan menggunakan Voltmeter.

Page 61: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 61

PERCOBAAN 7 KEYPAD 4X4

TUJUAN: 1. Mahasiswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller 2. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad 3. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan

mengeluarkan ke LED 4. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan

mengeluarkan ke 7 Segmen 5. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan

mengeluarkan ke LCD Karakter

2

KEYPAD 4 X 4

5

7

3

9

P2.7..P2.0

0

6

1

8

4

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

Page 62: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 62

C1

R1

C4

C3

C2

R2

R3

R4

2 3 COR

4 5 6 MEN

7 8 9

CAN 0 ENT

1

Gambar 7.3. Rangkaian dasar keypad 4x4

7.1. Percobaan scan data keypad 1x4, COR-MEN-UpArrow-DnArrow Pada percobaan ini, akan dilakukan scan data keypad COR-MEN-UpArr.- DnArr. Seperti yang ditunjukkan pada gambar 7.3 dan mengeluarkan data ke LED. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Buka jumper pada DAC_EN, apabila sedang terpasang. 2. Hubungkan jumper pada LED_EN. 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

D1

P0.0..P0.7

D8

VCC

J3

EN LED12

Gambar 7.4. Display LED sebagai Output Data Keypad 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 63: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 63

Panggil Subrutin KeypadKeydata Tombol ditekan

A:= NOT A

Simpan Keydata Ke AA Keydata

Start

A=FF ?

NO

YES

Output Data ke LEDP0 A

Gambar 7.5. Diagram alir rutin utama percobaan 7.1

Gambar 7.6. Diagram alir subrutin keypad 4 x 1

6. Ketik program berikut ini: col4 bit P2.0 col3 bit P2.1 col2 bit P2.2 col1 bit P2.3 row1 bit P2.4

Page 64: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 64

row2 bit P2.5 row3 bit P2.6 row4 bit P2.7 ; keydata equ 70h keybounc equ 71h keyport equ P2 ; org 0h mov P2,#11111111b ;isi P2 dg. 11111111 start: call keypad4x4 ;calling subroutine keypad4x4 Mov A,keydata ;Copy keydata ke A Cjne A,#0FFh,send ;Bandingkan apakah A=FF if Not E, jump ke send sjmp start ;LOOPING ke start send: CPL A ;A = NOT A Mov P0,A ;Copy A ke P0 Sjmp start ;LOOPING FOREVER PART 2 ; ;========================================== ; subroutine scan keypad 1 column x 4 row ;========================================== Keypad4x4: mov keybounc,#50 ;keybounc = 50 mov keyport,#0FFh ;keyport=P2= FF clr col4 ;col4= P2.0 = 0 ; keyCOR:

jb row4,keyMEN ;Key COR. Jump ke keyMEN, ;jika row4= 1

djnz keybounc,KeyCOR ;delay untuk bouncing mov keydata,#0Ah ;Data Output = 0Ah ret ; keyMEN:

jb row3,keyUpA ; Key MEN djnz keybounc,keyMEN mov keydata,#0bh ;Data Output = 0bh ret ; keyUpA:

jb row2,keyDnA ; djnz keybounc,keyUpA mov keydata,#0ch ; Data Output = 0ch ret ; keyDnA:

jb row1,Nokey ; djnz keybounc,keyDnA mov keydata,#0dh ; Data Output = 0dh ret Nokey:mov keydata,#0FFh ret

Page 65: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 65

;================================ ;The end of Keypad 4x4 subroutine ;================================ delay: mov R0,#0 delay1:mov R2,#50 djnz R2,$ djnz R0,delay1 ret end 7. Simpanlah program yang anda ketik dan beri nama : prog71a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 3-6-9-ENT 11. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 2-5-8-0 12. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 1-4-7-CAN

7.2. Percobaan scan data keypad 4x4 dan mengeluarkan ke LCD Pada percobaan ini, akan dilakukan scan data keypad dan mengeluarkan data ke LCD Karakter. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper EN_LCD 2. Buka jumper pada EN_DAC, apabila sedang terpasang 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

VSS

2

1116

7VCC

D2

EN

LCD Character

3

14

D5

8

1

GND

10k

Potensio Multiturn

D1

P3.7

D74

13

12

9BPL

6

P0.7..P0.0

2 X 16

VCC

D4

J3

EN LCD 1 2

10

D1

RSP3.6

D3

D6

D0

15

Gambar 7.7. Rangkaian LCD Karakter 2x16 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 66: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 66

Gambar 7.8. Diagram alir subrutin keypad 4x4 6. Ketik program berikut ini:

col4 bit P2.0 col3 bit P2.1 col2 bit P2.2 col1 bit P2.3 row1 bit P2.4 row2 bit P2.5 row3 bit P2.6 row4 bit P2.7 keydata equ 70h keybounc equ 71h keyport equ P2 org 0h mov P2,#11111111b call Init_LCD start: call keypad4x4 ;calling subroutine keypad4x4 Mov A,keydata ;A = keydata Cjne A,#0FFh,WrLCD; sjmp start ;LOOPING FOREVER PART 1 ; WrLCD: Mov R1,#80h ;Pick DDRAM 1st row and 1st col call write_inst Mov R1,#30h Add A,R1 Mov R1,A call write_data ;write data Sjmp start ;LOOPING FOREVER PART 2; ;

Page 67: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 67

Init_lcd: mov r1,#00000001b ;Display clear call write_inst ; mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7 call write_inst ; mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret ;==================================== ; subroutine scan keypad 4x4 ;==================================== Keypad4x4: mov keybounc,#50 ;keybounc = 50 mov keyport,#0FFh ;keyport=P2= FF clr col4 ;col4 = 0 ; keyCOR: jb row4,keyMEN ; Key COR djnz keybounc,KeyCOR mov keydata,#0Ah ;Data Output ret ; keyMEN: jb row3,keyUpA ; Key MEN djnz keybounc,keyMEN mov keydata,#0bh ;Data Output ret keyUpA: jb row2,keyDnA ; Key Up Arrow djnz keybounc,keyUpA mov keydata,#0ch ;Data Output ret ; keyDnA: jb row1,key3 ; Key Down Arrow djnz keybounc,keyDnA

Page 68: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 68

mov keydata,#0dh ;Data Output ret ;========================================== key3: setb col4 clr col3 jb row4,key6 djnz keybounc,key3 ; Key 3 mov keydata,#03h ;Data Output ret ; key6: jb row3,key9 djnz keybounc,key6 ; Key 6 mov keydata,#06h ;Data Output ret ; key9: jb row2,keyENT djnz keybounc,key9 ; Key 9 mov keydata,#09h ;Data Output ret ; keyENT: jb row1,key2 djnz keybounc,keyENT ; Key ENT mov keydata,#0eh ;Data Output ret ;============================================ key2: setb col3 clr col2 jb row4,key5 djnz keybounc,key2 mov keydata,#02h ;Data Output ret ; key5: jb row3,key8 djnz keybounc,key5 mov keydata,#05h ; Data Output ret ; key8: jb row2,key0 djnz keybounc,key8 mov keydata,#08h ;Data Output ret ; key0: jb row1,key1 djnz keybounc,key0 mov keydata,#00h ;Data Output ret ;============================================== key1: setb col2 clr col1 jb row4,key4 djnz keybounc,key1 mov keydata,#01h ;Data Output

Page 69: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 69

ret key4: jb row3,key7 djnz keybounc,key4 mov keydata,#04h ;Data Output ret key7: jb row2,keyCAN djnz keybounc,key7 mov keydata,#07h ;Data Output ret keyCAN: jb row1,Nokey djnz keybounc,keyCAN mov keydata,#0Fh ;Data Output ret Nokey: mov keydata,#0FFh ret ;================================ ;The end of Keypad 4x4 subroutine ;================================ delay: mov R0,#0 delay1: mov R2,#50 djnz R2,$ djnz R0,delay1 ret end

5. Simpanlah program yang anda ketik dan beri nama : prog72a.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 ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LCD 9. Lakukan modifikasi pada program tersebut untuk menampilkan data keypad ke lokasi

DDRAM LCD:

No Lokasi Display Data Keypad 1 Baris 2 Kolom 2

2 Baris 2 Kolom 16

10. Lakukan modifikasi pada rangkaian tersebut untuk menampilan data keypad ke display 7 segmen sesuai dengan percobaan 3.

Page 70: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 70

PERCOBAAN 8 MOTOR STEPPER

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

dengan menggunakan saklar.

O3

9

I1

VCC

O4

VCC

I6

O1

I4

16

8

MOTOR STEPPER

I3

I2

GND VCC

P0.3..P0.0

I5

O2

O7

O5

1

I7

ULN2003

O6

Gambar 8.1. Rangkaian interface motor stepper dengan driver ULN2003

DASAR TEORI Pada Motor DC biasa, akan berputar dan berputar terus selama power supply ada. Tidak ada rangkaian cerdas tertentu yang diperlukan untuk mengendalikan motor tersebut, kecuali hanya memperlambat putaran atau membalik putaran, dengan menerapkan polaritas balik. Motor stepper adalah sangat berbeda. Jika anda memberikan power pada motor ini, maka motor ini akan berada dalam keadaan diam, agar motor dapat berputar, anda harus merubah sinyal yang masuk ke motor. Sebagai ilustrasi, dapat dibayangkan sebuah kompas dengan elektromagnet disekitarnya. Sebagaimana digambarkan pada gambar 2.2., apabila power yang diberikan pada elektromagnet diganti, maka akan merubah posisi jarum dari kompas.

Page 71: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 71

Gambar 8.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.

Gambar 8.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. Table 8.1. Full Step Mode

A B C D Comment

1 0 0 0 Take a step clock wise

0 1 0 0 another step clock wise

0 0 1 0 another step clock wise

0 0 0 1 another step clock wise

0 0 0 1 No step take

0 0 1 0 Take a step back

Page 72: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 72

Mode Half Steps Dengan menghidupkan dua koil pada waktu yang bersamaan maka motor akan berada dalam posisi diantaranya.

Figure 8.4. Half step mode

Table 8.2. Half Step Mode

A B C D Comment

1 0 0 0 Take a step clock wise

1 1 0 0 Half a step clock wise

0 1 0 0 The complete full step clock wise

0 1 1 0 another half step clock wise

0 0 1 0 The complete full step clock wise

0 0 1 1 Another half step clock wise

0 0 0 1 The complete full step clock wise

1 0 0 1 another half step clock wise

1 0 0 0 Start position

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

Page 73: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 73

Percobaan 8.1. Menggerakkan Motor Stepper Searah Jarum Jam Pada percobaan ini, motor stepper akan berputar searah jarum jam, terus menerus Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan kabel parallel antara P0 dengan motor stepper 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 8.6. Diagram alir percobaan 8.1

5. Ketik program berikut ini: org 0h start: call StepCW sjmp start ; StepCW: mov P0,#11101111b ; Turn on driver 1. isi P0 dg 11101111b call delay ; call delay time mov P0,#11011111b ; Turn on driver 2. isi P0 dg 11011111b call delay ; call delay time mov P0,#10111111b ; Turn on driver 3. isi P0 dg 10111111b call delay ; call delay time mov P0,#01111111b ; Turn on driver 4. isi P0 dg 01111111b call delay ; call delay time ret StepCCW:

Page 74: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 74

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 delay1:mov R2,#255 djnz R2,$ djnz R0,delay1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog81a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan arah putaran motor stepper apakah sudah sesuai ? 10. Lakukan modifikasi program tersebut diatas, untuk putaran motor yang berlawanan arah

jarum jam CCW.

Percobaan 8.2 Pengaturan Arah Putaran CW/ CCW Motor Stepper 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.

SW1

SW8

P2.7..P2.0

Gambar 8.7. Rangkaian pushbutton Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan kabel parallel antara P0 dengan motor stepper 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

Page 75: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 75

4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

P2.0 = 1?

Putar CW

P2.1 = 1?

Putar CCW

YES

NO

YES

Start

A A

Gambar 8.8. Diagram alir percobaan 8.2

5. Ketik program berikut ini:

org 0h start: CW: JB P2.0,CCW ; jump ke ccw jika P2.0=1. SW1 call stepCW sjmp start ; CCW: JB P2.1,CW ; jump ke cw jika P2.1=1. SW2 Call stepCCW Sjmp start ; StepCW: mov P0,#11101111b ; isi P0 dg.11101111. 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 ; 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 delay1: mov R2,#255 djnz R2,$ djnz R0,delay1

Page 76: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 76

ret end

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

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan pengamatan arah putaran motor stepper apakah sudah sesuai ? 11. Lakukan modifikasi program tersebut diatas, saklar push button yang lain.

Page 77: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 77

PERCOBAAN 9 T I M E R/ COUNTER

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

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

Gambar 9.1 Diagram blok timer counter

Percobaan 9.1. Mencacah pulsa clock dengan aplikasi Mode 0 sebagai counter 13 it dengan output LED Pada percobaan ini, pulsa diambil melalui clock generator yang dibangkitkan oleh IC 555 yang mempunyai frekuensi 1 Hz, hasil cacahan biner pada register counter dari Timer 0 akan ditampilkan pada LED. Lakukan beberapa langkah percobaan sebagai berikut: 1. Hubungkan 1 buah kabel antara P3.4 dengan output astable/ clock IC 555 2. Hubungkan jumper konektor LED_EN

Page 78: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 78

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

Gambar 9.2 Diagram alir percobaan 9.1

6. Ketik program berikut ini: org 0h Start: Mov TMOD,#00000100b ; TIMER 0

; mode 0 counter 13 bit sebagai counter Setb TR0 ; TR0 = 1, 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

D1

P0.0..P0.7

D8

VCC

J3

EN LED12

Gambar 9.3. Rangkaian display LED

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

Page 79: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 79

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan pengamatan pada LED ? dan lengkapi tabel berikut.

Clock D 1 D 2 D 3 D 4 D 5 D 6 D 7 D 8 1

2

3

;

;

20

Percobaan 9.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 yang mempunyai frekuensi 1 Hz ( output astable ), hasil cacahan biner pada register counter akan ditampilkan pada 7 Segmen. Lakukan beberapa langkah percobaan sebagai berikut: 1. Hubungkan 1 buah kabel antara P3.5 dengan output clock IC 555 2. Hubungkan jumper konektor 7Segmen_EN 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Inisialisasi Timer0

Mode 0 sbg counter 13 bit

TMOD #00000100b

Start

Konversi Hex ke Desimal

Jalankan Timer

Setb TR0

Display ke 7 Segmen

Ambil data counter

A TL0

Gambar 9.4. Diagram alir percobaan 9.2 6. Ketik program berikut ini:

Page 80: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 80

ratusan equ 30h puluhan equ 31h satuan equ 32h Org 0h Mov TMOD,#00000100b ; mode 0 counter 13bit 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 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

Page 81: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 81

delay1: mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; Data7segmen: db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b ; end 7. Simpanlah program yang anda ketik dan beri nama : prog92a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan pengamatan pada display 7 segmen ? dan lengkapi tabel berikut.

Clock ke Display 7 Segmen 1 2 3

4 5 ;

20 11. Lakukan modifikasi pada program tersebut untuk menampilkan data counter ke

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

Page 82: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 82

Gambar 9.5. Diagram blok timer counter mode 1 16 bit

Percobaan 9.3. Membangkitkan clock dengan aplikasi Timer 1, sebagai timer 16 bit dengan output LED Pada percobaan ini, clock akan dibangkitkan dengan menggunakan fungsi timer 16 bit, dengan periode 1 detik, Ton = 0,5 detik dan Toff = 0,5 detik, dengan tampilan LED

Gambar 9.6. Periode clock

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. Lakukan beberapa langkah percobaan sebagai berikut: 1. Lepas kabel yang menghubungkan antara P3.5 dengan output clock IC 555 2. Hubungkan jumper konektor LED_EN 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

Page 83: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 83

5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Inisialisasi Timer 1

Mode 1 sbg Timer 16 bit

TMOD #00010000b

R0 #0

Start

Matikan Timer

Reset OverFlow

TR1 0

TF1 0

Jalankan Timer

Setb TR0

TF1=0 ?

R0:=R0+1

R0 = 50 ?

Inisialisasi Data Counter

TH1 #0D8h

TL1 #0F0h

End

Start

Delay

Delay

Matikan LED

P0.0 1

Hidupkan LED

P0.0 0

(b)

(a)

Gambar 9.7. Diagram alir (a) rutin utama (b)subrutin delay

6. Ketik program berikut ini:

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

Page 84: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 84

CJNE R0,#50,Load Ret ; End 7. Simpanlah program yang anda ketik dan beri nama : prog93.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan pengamatan pada nyala LED 11. Lakukan modifikasi pada program tersebut untuk membangkitkan frekuensi 10 Hz, 100 Hz,

dan 500 Hz dan lakukan pengamatan pada layar osciloscope

Page 85: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 85

PERCOBAAN 10 KOMUNIKASI SERIAL RS232

TUJUAN 1. Mahasiswa memahami rangkaian interface port serial 2. Mahasiswa memahami mengkonfigurasikan komunikasi serial pada port serial PC 3. Mahasiswa memahami penulisan bahasa assembly untuk konfigurasi port serial 4. Mahasiswa memahami penulisan pemrograman delphi untuk komunikasi dengan

mikrokontroller. 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 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 10.1 Sistem komunikasi serial mikrokontroller dengan PC

VCC

MAX232

138

1110

134526

129147

R1INR2INT1INT2IN

C+C1-C2+C2-V+V-

R1OUTR2OUTT1OUTT2OUT

+ 10u

P3.1 ( Tx )

+

10u

+

10u

P3.0 ( Rx )

15P1

PC DB9 Male

594837261

+

10u

16

VCC

Gambar 10.2. Rangkaian skematik MAX232

Page 86: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 86

Percobaan 10.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.

Gambar 10.1 Pemilihan menu communication pada Accessories

Gambar 10.2 Pemilihan menu HyperTerminal pada communication

(a) (b)

Gambar 10.3. (a) Pemberian nama koneksi (b) Pemilihan koneksi pada COM1

Page 87: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 87

(a) (b)

Gambar 10.4. (a) Properties serial komunikasi (b) windows HyperTerminal

D1

P0.0..P0.7

D8

J3

EN LED12

VCC

Gambar 10.5. Display LED

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

Page 88: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 88

Gambar 10.6. (a) Diagram alir rutin utama (b) subrutine ambil karakter pada percobaan 10.1 5. Ketik program asembly berikut ini: 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 6. Simpanlah program yang anda ketik dan beri nama : hiper1a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada nyala LED

Page 89: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 89

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

Page 90: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 90

Percobaan 10.2b Mengambil data karákter pada mikrokontroller dengan Hyperterminal. Pada percobaan ini, data 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 2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 3. Buka Program Hyperterminal 4. Ketik program asembly berikut ini:

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; clr ti ; mov sbuf,a ; ret MyCharacter: DB ' Selamat Datang Di Laboratorium Mikrokontroller',13,10,0 End

5. Simpanlah program yang anda ketik dan beri nama : hiper2a.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 ( Lihat Petunjuk Penggunaan)

Page 91: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 91

Soal Tantangan:

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

2. Rencanakan program untuk mengambil data mikrokontroller melalui port serial dan

ditampilkan pada layer Hyperterminal, dengan data-data sebagai berikut, secara berturutan: Nama : Budi Jenis Kelamin : Laki-Laki Tempat/ Tgl. Lahir : Surabaya, 12 September 1987

3. Rencanakan program untuk mengambil data saklar pada mikrontroller dan dikirimkan

melalui port serial dan ditampilkan pada layar Hyperterminal.

SW1

SW8

P2.7..P2.0

Dengan keterangan sebagai berikut: Bila sw0 s/d sw7 yang terhubung ke P2 pada mikrontroller, ditekan secara bergantian maka mikrontroller akan mengirimkan data ke PC sesuai dengan tombol yang ditekan, bila sw0 ditekan maka carácter 0 akan dikirim, bila sw1 ditekan maka carácter 1 akan dikirim ke PC secara serial, dan bila tidak ada tombol yang ditekan maka akan memunculkan carácter ‘X’ dan seterusnya. Dengan format tampilan sebagai berikut: Tombol yang sedang ditekan: X

4. Rencanakan program untuk mengambil data ADC pada mikrontroller dan dikirimkan

melalui port serial dan ditampilkan pada layar Hyperterminal

Page 92: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 92

VCC

D1

3V

G 74LS244

P3.2

10k

P3.3

P3.4

VCC

10

10k

VCC

VCC

150p

13

2

13

2

10k

8

R6

220

ADC0804

67

9

1112131415161718

194

5

123

+IN-IN

VREF/2

DB7DB6DB5DB4DB3DB2DB1DB0

CLKRCLKIN

INTR

CSRDWR

20P1.7..P1.0

PROG

RUN/ EN ADC

65

4

32

1

Dengan keterangan sebagai berikut: Data ADC yang diambil melalui port P2 ditampilkan pada 7 segmen, sehingga akan menampilan angka 000 s/d 255, selain ditampilkan ke 7 segmen data dari ADC juga ditampilkan pada program Hyperterminal, secara berkala setiap beberapa detik, dengan menggunakan delay. Dengan format tampilan sebagai berikut: Data ADC: 000

5. Rencanakan program untuk mengambil data counter pada mikrokontroller, dengan

Timer 0, mode 2 Autoreload sehingga akan mencacah dari 000 s/d 255, tampilkan data hasil cacahan tersebut pada 7 segmen dan kirim data hasil cacahan pada layer Hyperterminal, dengan format tampilan sebagai berikut: Data hasil cacahan: 000

6. Rencakan program untuk membuat jam digital dengan memanfaatkan Timer 0, mode

16 bit, mode1, dengan interupsi setiap 50.000 microsecond. Dengan tampilan pada 7 segmen, detik, menit dan jam, dengan format tampilan sebagai berikut:

Tanggal : 12-Mei-2008 Waktu : 00:00:00

Page 93: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 93

Percobaan 10.3 Menghidupkan LED melalui komunikasi serial RS232 PC dengan Pemrograman Delphi Pada percobaan ini, data dikirimkan melalui port communication serial PC secara serial dan ditangkap oleh mikrokontroller untuk dioutputkan ke LED

D1

P0.0..P0.7

D8

J3

EN LED12

VCC

Gambar 10.7. Display LED

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 M-IDE Studio for MCS-51, sebagai editor dan compiler program

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

5. Ketik program asembly berikut ini:

Page 94: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 94

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,#0F3 setb tr1 ret ; inchar: detect: jnb ri,detect ; Deteksi bit RI apakah data sudah diterima atau belum clr ri mov a,sbuf ret ; End

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

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada nyala LED 10. Buka Program Delphi

Page 95: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 95

Gambar 10.9 Diagram alir utama pengiriman data “1” ke port serial pada percobaan 10.1

11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial,

dengan tampilan sebagai berikut:

Atur properties Object Inspector, sebagai berikut:

Pada Object Inspector tersebut menjelaskan : 1. BaudRate = 2400 2. Connected = True 3. DataBits = 8 4. Port = COM1 5. StopBits = 1 Stop Bit

Gambar 10.10. Tampilan program delphi untuk menghidupkan LED

Page 96: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 96

Listing program Delphi: procedure TForm1.Button1Click(Sender: TObject); var data:byte; count:integer; begin data:=0; count:=1; comport1.write(data,count); end; procedure TForm1.Button2Click(Sender: TObject); var data:byte; count:integer; begin data:=255; count:=1; comport1.write(data,count); end;

12. Jalankan program delphi dengan menekan tombol F9 atau RUN 13. Lakukan penekanan pada tiap-tiap button dan lakukan pengamatan.

Percobaan 10.3. Mengendalikan arah gerakan LED melalui komunikasi serial RS232 dengan pemrograman Delphi Pada percobaan ini, arah gerakan LED kekiri atau kekanan, dikendalikan melalui komunikasi sercara serial RS232. Lakukan beberapa langkah percobaan sebagai berikut: 1. Pasang jumper LED_EN pada modul praktek 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 97: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 97

Gambar 10.11 Diagram alir utama percobaan 10.2

5. Ketik program asembly berikut ini:

org 0h nop call initserial gets: call inchar cjne a,#128,rotR sjmp rotL sjmp gets rotR: 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; call delay ; sjmp gets ; rotL: mov P0,#01111111b; call delay mov P0,#10111111b; call delay ; mov P0,#11011111b; call delay ; mov P0,#11101111b; call delay ; mov P0,#11110111b; call delay ; mov P0,#11111011b; call delay ; mov P0,#11111101b; call delay ; mov P0,#11111110b; call delay ; sjmp gets ; initserial: mov scon,#52h ;serial mode 1 configuration mov tmod,#20h ; Baud rate 2400 BPS mov th1,#-13 setb tr1

Page 98: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 98

ret ; inchar: detect: jnb ri,detect ;detecting do data have been accepted or not yet.

clr ri mov a,sbuf ret ; delay: mov R0,#255 delay1:mov R2,#255 djnz R2,$ djnz R0,delay1 ret ; End 6. Simpanlah program yang anda ketik dan beri nama : prog102a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada nyala LED 10. Buka Program Delphi

Start

Inisialisasi

Serial Komunikasi

Baudrate=2400

Data 8 bit, no paritas, 1 stop bit

Kirim Data ke Port Serial

3F8h Data

Status THR=20h ?

Inisialisasi Data

Data := 1

End

Kirim Data ke Port Serial

3F8h Data

Status THR=20h ?

Inisialisasi Data

Data := 128

End

Pilih Putar Kanan Pilih Putar Kiri

Gambar 10.12 Diagram alir pemrograman delphi percobaan 10.2 11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial.

Page 99: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 99

Gambar 10.13. Gambar tampilan program delphi untuk pengaturan LED procedure TForm1.Button1Click(Sender: TObject); var data:byte; count:integer; begin data:=0; count:=1; comport1.write(data,count); end; procedure TForm1.Button2Click(Sender: TObject); var data:byte; count:integer; begin data:=255; count:=1; comport1.write(data,count); end; 12. Simpanlah program yang anda ketik dan beri nama rotateserial.asm 13. Jalankan program delphi dengan menekan tombol F9 atau RUN 14. Lakukan penekanan pada tiap-tiap button dan lakukan pengamatan.

Percobaan 10.4. Pengambilan data SW melalui komunikasi serial RS232 PC dengan pemrograman Delphi Pada percobaan ini, arah gerakan LED kekiri atau kekanan, dikendalikan melalui komunikasi sercara serial RS232. Lakukan beberapa langkah percobaan sebagai berikut:

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. Lakukan pengetikan program assembly sebagai berikut

org 0h

call initserial ; start: mov A,P2; ambil data dari SW call Sendout; kirim data ke PC sjmp start ; Sendout:

Page 100: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 100

detect: jnb ti,detect; clr ti ; mov sbuf,a ; ret ; initserial: mov scon,#52h;initialize serial mode 1 mov tmod,#20h;timer1 mode 2 mov th1,#0F3h;Reload value for baud rate 2400 setb tr1 ret end

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

6. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

7. Lakukan pengamatan pada nyala LED 8. Buka Program Delphi, dan lakukan pemrograman Delphi dengan tampilan sebagai

berikut

7. Lakukan pengaturan pada properties dari object inspector berikut.

Page 101: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 101

8. Pada Objeck Inspector pilih tabulasi Events, dan click dua kali pada OnRxChar.

9. Tampilan akhir program, sebagai berikut:

10. Lakukan pengetikan instruksi program, sebagai berikut:

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); var buff:string;y:integer; begin comport1.ReadStr(buff,count); y:=ord(buff[1]); edit1.text:=inttostr(y); end;

Percobaan 10.4 Pengambilan data ADC melalui komunikasi secara serial RS232 PC dengan pemrograman Delphi Pada percobaan ini, data ADC0804 diambil menggunakan port 1 mikrokontroller dan dikirimkan melalui port serial ke PC

VCC

D1

3V

G 74LS244

P3.2

10k

P3.3

P3.4

VCC

10

10k

VCC

VCC

150p

13

2

13

2

10k

8

R6

220

ADC0804

67

9

1112131415161718

194

5

123

+IN-IN

VREF/2

DB7DB6DB5DB4DB3DB2DB1DB0

CLKRCLKIN

INTR

CSRDWR

20P1.7..P1.0

PROG

RUN/ EN ADC

65

4

32

1

Gambar 10.14. Rangkaian ADC0804

Page 102: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 102

Lakukan beberapa langkah percobaan sebagai berikut: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 10.15. Diagram alir utama percobaan 10.3

6. Ketik program berikut ini:

org 0h call initserial ; start: call ADC; ambil data dari adc call Sendout sjmp start ; ADC: clr P3.3 nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 setb P3.4 ret ; Sendout: detect: jnb ti,detect; clr ti ; mov sbuf,a ; ret ; initserial: mov scon,#52h;initialize serial mode 1 mov tmod,#20h;timer1 mode 2 mov th1,#0F3h;Reload value for baud rate 2400

Page 103: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 103

setb tr1 ret end 7. Simpanlah program yang anda ketik dan beri nama : prog103a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Buka Program Delphi

Gambar 10.16. Diagram alir pemrograman delphi percobaan 10.3

11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial

Gambar 10.17. Tampilan program delphi pengambilan data ADC 12. Simpanlah program yang anda ketik dan beri nama adcserial.asm 13. Jalankan program delphi dengan menekan tombol F9 atau RUN 14. Lakukan pengamatan pada data tampilan. procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); var buff:string;y:integer;

Page 104: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 104

begin comport1.ReadStr(buff,count); y:=ord(buff[1]); edit1.text:=inttostr(y); end; procedure TForm1.Button1Click(Sender: TObject); begin comport1.connected:=true; end;

10.5. Pengiriman karakter ke LCD Karakter melalui komunikasi serial RS232 dengan pemrograman Delphi Pada percobaan ini data karakter dikirimkan ke LCD Karakter melalui komunikasi secara serial, melalui pemrograman delphi. 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 10.18 Diagram alir rutin utama percobaan 10.4

5. Ketik program berikut ini: org 0h call initserial call init_LCD ; start: call GetChar mov r1,#0c0h acall write_inst

Page 105: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 105

add a,#30h mov r1,a acall write_data sjmp start ; GetChar: detect: jnb ri,detect ; clr ri mov a,sbuf ret ; initserial: mov scon,#52h;initialize serial mode 1 mov tmod,#20h;timer1 mode 2 mov th1,#0F3h;Reload value for baud rate 2400 setb tr1 ret ; Init_lcd:

mov r1,#00000001b ;Display clear call write_inst ; mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7 call write_inst ; mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret

; delay: mov R0,#0 delay1:mov R7,#0fh djnz R7,$ djnz R0,delay1 ret end

Page 106: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 106

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

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Buka Program Delphi 10. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial

dengan base address 3F8h

Gambar 10.19. Tapilan program delphi untuk pengiriman data

Page 107: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 107

PERCOBAAN 11 I N T E R U P S I

TUJUAN 1. Mahasiswa memahami sistem interupsi pada mikrokontroller 2. Mahasiswa dapat menerapkan sistem interupsi pada pembuatan jam digital 3. Mahasiswa dapat memahami penggunakan bahasa assembly untuk penggunakan sistem

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

Source Vector Address

IE0 0003H

TF0 000BH

IE1 0013H

TF1 001BH

RI + TI 0023H

Org 0000h

Ljmp Start

Org 000bh

Ljmp Timer0Interupt

Start: ; Instruksi Rutinitas

; Instruksi Rutinitas

; Instruksi Rutinitas

Sjmp Start; Looping Forever

;

Timer0Interupt:

:

:

Reti

End Pada contoh instruksi pemrograman tersebut tampak, apabila tidak ada interupsi maka program akan menuju ke start dan menjalankan rutinitas-rutinitas secara terus menerus, tetapi apabila suatu interupsi yang dibangkitkan oleh overflow timer 0 terjadi, maka program yang semula bersarang pada rutinitas akan melompat pada alamat vektor 0bh (alamat interupsi timer 0) dan melompat ke subrutine interupsi Timer0Interupt. Percobaan 11.1. Membangkitkan clock pada jam digital :DD dengan memanfaatkan interupsi timer 0. Pada percobaan akan dibangkitkan clock untuk jam digital, hanya bagian detik puluhan (display 1) dan detik satuan (display 2) pada 7 segmen

Page 108: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 108

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

Gambar 11.1. (a) Diagram alir rutin utama, (b) subrutin interupsi, dan (c) subrutin display ke 7 segmen percobaan 11.1 5. Ketik program berikut ini: detik equ 30h detikpuluhan equ 31h detiksatuan equ 32h counter20 equ 33h

Page 109: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 109

; Org 0h sjmp Start Org 0bh ;alamat vector interupsi timer0 Ljmp Interrupt_Timer0;lompat ke subroutine interupsi timer 0 ; Start: mov detik,#0 ;isi detik dg. 0 mov counter20,#20 call InitTimer ;panggil inittimer ; Forever: call ClockDisplay ;panggil clockdisplay sjmp Forever ; ;lompat forever ; Interrupt_Timer0: mov tl0,#0b0h ;isi TL0 dg B0h mov th0,#03ch ;isi TH0 dg 3Ch djnz Counter20, EndInterrupt;Counter20:=Counter20-1 ;jump EndInterupt if NZ mov Counter20,#20 call DoClock EndInterrupt: reti ; DoClock: inc detik mov A,detik cjne A,#60,Update mov detik,#0 Update:mov A,detik mov B,#10 DIV AB mov detikpuluhan,A mov detiksatuan,B ret ; ClockDisplay: Mov DPTR,#Decoder7Segmen mov A,detiksatuan Movc A,@A+DPTR mov P0,A clr P3.5 ; Setb P3.6 Setb P3.7 call delay ; Mov DPTR,#Decoder7Segmen mov A,detikpuluhan Movc A,@A+DPTR mov P0,A ;

Page 110: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 110

Setb P3.5 ; clr P3.6 Setb P3.7 call delay ret ; InitTimer: mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 ;Enable Timer 0 Interrupt setb EA ;Master Interrupt Enable setb TR0 ;Clock start running ret ; ;=============================== ;subroutine delay time ;=============================== delay: mov R1,#2 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret ;=============================== ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a ;======================================== Decoder7Segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; End 6. Simpanlah program yang anda ketik dan beri nama : prog111a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan untuk data waktu detik yang ditampilkan apakah sesuai dengan jam konvensional.

No Jam Digital (:DD) Jam Konvensional

1 1

2 2

3 3

4 4

5 5

6 6

Page 111: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 111

7 7 : :

30 30

Percobaan 11.2. Membangkitkan clock pada jam digital MM:DD dengan memanfaatkan interupsi timer 0. Pada percobaan akan dibangkitkan clock untuk jam digital untuk detik dan menit pada 7 segmen Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini: detik equ 30h detikpuluhan equ 31h detiksatuan equ 32h menit equ 33h menitpuluhan equ 34h menitsatuan equ 35h counter20 equ 36h ; Org 0h sjmp Start Org 0bh Ljmp Interrupt_Timer0 ; Start: mov detik,#0 mov menit,#0 call InitTimer ; Forever: call ClockDisplay sjmp Forever ; ; Interrupt_Timer0: mov tl0,#0b0h mov th0,#03ch djnz Counter20, EndInterrupt mov Counter20,#20 call DoClock EndInterrupt: reti ; DoClock: inc detik mov A,detik cjne A,#60,Update

Page 112: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 112

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

Page 113: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 113

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 ;======================================== ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a ;======================================== Decoder7Segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; End 6. Simpanlah program yang anda ketik dan beri nama : prog112a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan untuk data waktu yang ditampilkan.

No Jam Digital (MM:DD) Jam Konvensional

1 00:01

2 00:02

3 4

5

6

7

: :

: 01:59

Page 114: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 114

Percobaan 11.3. Membangkitkan clock down MM:DD dengan memanfaatkan interupsi timer 0. Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk detik dan menit pada 7 segmen Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini: detik equ 30h detikpuluhan equ 31h detiksatuan equ 32h menit equ 33h menitpuluhan equ 34h menitsatuan equ 35h counter20 equ 36h ; Org 0h sjmp Start Org 0bh Ljmp Interrupt_Timer0 ; Start: mov detik,#60 mov menit,#59 call InitTimer ; Forever: call ClockDisplay sjmp Forever ; ; Interrupt_Timer0: mov tl0,#0b0h mov th0,#03ch djnz Counter20, EndInterrupt mov Counter20,#20 call DoClock EndInterrupt: reti ; DoClock: dec detik mov A,detik cjne A,#0,Update mov detik,#60 satumenit: dec menit

Page 115: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 115

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

Page 116: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 116

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 ;======================================== ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a ;======================================== Decoder7Segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; End 10. Simpanlah program yang anda ketik dan beri nama : prog113a.asm

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

12. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

13. Lakukan pengamatan untuk data waktu yang ditampilkan.

Page 117: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 117

PERCOBAAN 12 INTERFACE KE KEYBOARD PC PS/2

TUJUAN

1. Mahasiswa memahami rangkaian interface keyboard PC PS/2 2. Mahasiswa memahami bahasa pemrograman assembly pengambilan data keyboard PC 3. Mahasiswa dapat menampilan data keyboard PC ke berbagai macam display antara

lain, LCD Karakter dan 7 Segmen

TEORI

Antarmuka keyboard standard adalah hubungan komunikasi serial. “Serial” yang menandakan bahwa data dikirim satu bit pada suatu waktu tertentu pada satu jalur tunggal. Serial komunikasi dipilih untuk antara muka keyboard karena hal ini simple dan mudah diterapkan, dan tidak banyak data per detik yang harus dikirimkan pada antar muka keyboard.

Ada empat jalur yang menghubungkan keyboard dan PC. Dua dari ini adalah power supply dan ground, yang digunakan untuk memberikan daya ke rangkaian keyboard. Dua sinyal yang lain adalah sebagai berikut:

1. Data Keyboard: Disinilah jalur bit-bit data dan perintah yang akan dikirimkan ke sistem PC dari keyboard.

2. Clock Keyboard: Ini merupakan sinyal clock regular, dengan suatu nilai yang berosilasi dari logika “1” ke “0” dengan pola yang teratur. Tujuan dari sinyal clock ini adalah untuk mensinkronisasi keyboard dan sistem, sehingga merekan selalu bekerja secara bersamaan.

Keyboard PC AT yang terkoneksi, hanya menggunakan empat buah kabel, kabel ini ditunjukkan pada gambar dibawah, untuk 5 pin DIM dan PS/2.

5 PIN DIN

(a)

1.KBD Clock 2.KBD Data 3.N/C 4.GND 5. +5V (VCC)

6 PIN DIN

(b)

1. KBD Clock 2. GND 3. KBD Data 4. N/C 5. +5V (VCC) 6. N/C

Gambar 12.1. Keyboard konektor (a) XT (b) PS/2

Diagram dibawah ini menunjukkan kode scan yang menandai tombol individu. Kode scan ditunjukkan pada bagian bawah dari tombol. Contoh kode scan untuk tombol ESC adalah 76. Semua kode scan ditunjukkan dalam Hex.

Page 118: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 118

Gambar 12.2. Peta data keyboard PC

Sebagaimana yang anda lihat, kode scan ditandai dengan kode yang random. Pada beberapa kasus, cara yang paling mudah untuk menerjemahkan kode scan ke ASCII adalah dengan menggunakan metode look up table.

Transmisi data, dari keyboard ke sistem, dilakukan dengan frame 11 bit. Bit pertama adalah bit start ( logika 0 ), diikuti dengan 8 bit data ( LSB first ), satau bit paristas ( paritas ganjil ) dan bit stop ( logika 1 ). Setiap bit harus dibaca pada sisi turun dari clock.

Gambar 12.3. Sinyal clock dan data

P3.3

VCC

10

K

Konektor Keyboard PS2/ Female

IN4148

2

..

. .

.

3

VCC

4 .

5

P3.2

IN4148

16

VCC

10

K

Gambar 12.4 Interface rangkaian keyboard PC PS/2

Page 119: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 119

D1

P0.0..P0.7

D8

J3

EN LED12

VCC

Gambar 12.5. Rangkaian interface LED

Percobaan 12.1. Pengambilan data karakter keyboard PC dan display ke LED Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada LED. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3. 2. Pasang jumper LED_EN 2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 12.6. Diagram alir (a) rutin utama, (b) subrutin ambil_keyboard pada percobaan 12.1

Page 120: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 120

Gambar 12.7 Diagram alir (a) subrutin ambil_scancode, (b) subrutin konversi_scancode pada percobaan 12.1

6. Ketik program berikut ini: (download file prog122a.asm) dispclr equ 00000001b funcset equ 00111000b entrmod equ 00000110b dispon equ 00001100b KbdData bit P3.2 KbdClock bit INT1;P3.3 DataKeyboard equ 30h ; org 0h Forever: JB KbdClock,$ acall ambilKeyboard jnc Forever Mov P0, Datakeyboard clr C sjmp Forever

Page 121: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 121

; ;============================================ ;Subrutine AmbilKeyboard ;Subrutine berikut berfungsi untuk mendeteksi apakah keyboard ;sedang ditekan atau dilepas. Bila tombol tidak dilepas maka ;akan menuju pada subrutine ;Kybd_tidakLepas ;dan memberi tanda pada bit C = 0 sehingga bila C = 0 ; maka data tidak akan dicetak ;Bila tombol keyboard dilepas maka data scan code diambil ;dan dikonversi ke dengan dengan menggunakan ; look up table serta menandai bit C = 1 ;=========================================== AmbilKeyboard: acall ambil_scancode cjne a,#0F0h,kybd_tidakLepas JB KbdClock,$ acall ambil_Scancode Setb C Acall Konversi_Scancode ret ; Kybd_tidakLepas: Clr C ret ; ;====================================================== ;Subrutine Konversi_ScanCode ;Pada subrutine ini digunakan untuk menerjemahkan scan code ke bentuk ;karakter dengan menggunakan look up table. ;====================================================== Konversi_ScanCode: Mov DPTR,#TableKeyboard movc A,@A+DPTR mov DataKeyboard,A ret ; ;========================== ;Subrutin deteksi tombol keyboard ;========================== Ambil_scanCode: clr A Jnb KbdClock,$ mov R0,#08h Ambil_ScanCode2: Jb KbdClock,$ Mov C,KbdData Rr A mov acc.7,C Jnb KbdClock,$ Djnz R0,Ambil_ScanCode2 Jb KbdClock,$ Jnb KbdClock,$

Page 122: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 122

Jb KbdClock,$ Jnb KbdClock,$ ret ; delay: mov R5,#0 delay1:mov R4,#02fh djnz R4,$ djnz R5,delay1 ret TableKeyboard: DB 00 DB 0F9H DB 00 DB 0F5H,0F3H,0F1H,0F2H,0FCH DB 00H DB 0FAH,0F8H,0F6H,0F4H DB 0C0H DB '~' DB 00H DB 00H DB 0C1H DB 0C2H DB 00H DB 0C3H DB 'Q1' DB 00H,00H,00H DB 'ZSAW2' DB 00H,00H DB 'CXDE43' DB 00H,00H DB ' VFTR5' DB 00H,00H DB 'NBHGY6' DB 00H,00H,00H DB 'MJU78' DB 00H,00H DB ',KIO09' DB 00H,00H DB './L;P-' DB 00H,00H,00H DB 27H DB 00H DB '[=' DB 00H,00H DB 0C5H DB 0C6H DB 0AH DB ']' DB 00H DB '\' DB 00H,00H,00H,00H,00H,00H,00H,00H DB 08H

Page 123: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 123

DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 0DH DB 00H DB 0FBH DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 0F7H end 7. Simpanlah program yang anda ketik dan beri nama : prog122a.asm 8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. 9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan) 10. Lakukan pengamatan untuk data keyboard yang ditampilkan.

Percobaan 12.1. Pengambilan data karakter keyboard PC dan display ke LCD Karakter Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada layar LCD Karakter.

VSS

2

1116

7VCC

D2

EN

LCD Character

3

14

D5

8

1

GND

10k

Potensio Multiturn

D1

P3.7

D74

13

12

9BPL

6

P0.7..P0.0

2 X 16

VCC

D4

J3

EN LCD 1 2

10

D1

RSP3.6

D3

D6

D0

15

Gambar 12.8. Rangkaian interface LCD karakter 2x16 Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3. 2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 6. Ketik program berikut ini:

Page 124: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 124

dispclr equ 00000001b funcset equ 00111000b entrmod equ 00000110b dispon equ 00001100b KbdData bit P3.3 KbdClock bit INT0 DataKeyboard equ 30h ; org 0h nop call init_LCD ; Forever: JB KbdClock,$ call GetDataKeyboard jnc Forever acall LCD_Out clr C sjmp Forever ; ;================================== ;Subroutine Get Data From Keyboard ;================================== GetDataKeyboard: call Get_scancode cjne a,#0F0h,kybd_pressed JB KbdClock,$ call Get_Scancode Setb C call Convert_Scancode ret ; Kybd_pressed: Clr C ret ; ;=============================== ;Subroutine Convert Scan Data ;Using Look Up Table ;=============================== Convert_ScanCode: Mov DPTR,#TableKeyboard movc A,@A+DPTR mov DataKeyboard,A ret ; LCD_Out: mov R7, #80h acall write_inst mov R7,DataKeyboard acall write_data ret

Page 125: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 125

; init_lcd: mov R7,#dispclr acall write_inst mov R7,#funcset acall write_inst mov R7,#dispon acall write_inst mov R7,#entrmod acall write_inst ret ; Get_scanCode: clr A Jnb KbdClock,$ mov R0,#08h Get_ScanCode2: Jb KbdClock,$ Mov C,KbdData Rr A mov acc.7,C Jnb KbdClock,$ Djnz R0,Get_ScanCode2 Jb KbdClock,$ Jnb KbdClock,$ Jb KbdClock,$ Jnb KbdClock,$ ret ; Write_inst: clr P3.6 ; RS = P2.0 = 0, write mode instruction mov P0,R7 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay; call delay time clr P3.7 ; EN = 0 = P2.1 ret ; Write_data: setb P3.6 ; RS = P2.0 = 1, write mode data mov P0,R7 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay; call delay time clr p3.7 ; EN = 0 = P2.1 ret ; ; delay: mov R5,#0 delay1:mov R4,#02fh djnz R4,$ djnz R5,delay1 ret ;

Page 126: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 126

TableKeyboard: DB 00 DB 0F9H DB 00 DB 0F5H,0F3H,0F1H,0F2H,0FCH DB 00H DB 0FAH,0F8H,0F6H,0F4H DB 0C0H DB '~' DB 00H DB 00H DB 0C1H DB 0C2H DB 00H DB 0C3H DB 'Q1' DB 00H,00H,00H DB 'ZSAW2' DB 00H,00H DB 'CXDE43' DB 00H,00H DB ' VFTR5' DB 00H,00H DB 'NBHGY6' DB 00H,00H,00H DB 'MJU78' DB 00H,00H DB ',KIO09' DB 00H,00H DB './L;P-' DB 00H,00H,00H DB 27H DB 00H DB '[=' DB 00H,00H DB 0C5H DB 0C6H DB 0AH DB ']' DB 00H DB '\' DB 00H,00H,00H,00H,00H,00H,00H,00H DB 08H DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H DB 0DH DB 00H DB 0FBH DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H DB 0F7H End

Page 127: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 127

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

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan pengamatan untuk data keyboard yang ditampilkan. 11. Lakukan modifikasi program tersebut untuk menampilkan data keyboard PC lebih dari satu

karakter ke LCD karakter.

Percobaan 12.2. Pengambilan data karakter keyboard PC dan display ke 7 Segmen Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada disply 7 Segmen

VCC

aa

VCC

ee

c

FCS 9013

PNP

7 x 220 ohm

d

f

FCS 9013

b

Common Anoda

PNP

FCS 9013

VCC

FCS 9013

VCC

P0.6..P0.0

FCS 9013

PNP

VCC

FCS 9013

PNP

g

Y7..Y0

g

f

VCC

FCS 9013

PNP

c

8 x 1k ohm

VCC

PNP

d

FCS 9013

VCC

b

PNPPNP

(a)

VCC

P3.6 U8

74LS138

123

645

15141312111097

ABC

G1G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

P3.5

R28

10K

J2

EN 7 SEGMEN12

Y7..Y0

P3.7

VCC

(b)

Gambar 12.9. Rangkaian Display 8x7 segmen (a) dan rangkaian decoder (b)

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3. 2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord 3. Pasang jumper 7 SegmenEN 4. Hubungkan modul Microcontroller Trainer dengan power supply +5V 5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 7. Ketik program berikut ini:

Page 128: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 128

BAB 13 INTERFACE KE PRINTER DOT MATRIKS

TUJUAN 1. Mahasiswa memahami rangkaian interface keyboard PC PS/2 2. Mahasiswa memahami bahasa pemrograman assembly pengambilan data keyboard PC 3. Mahasiswa dapat menampilan data keyboard PC ke berbagai macam display antara lain,

LCD Karakter dan 7 Segmen TEORI

Gambar 13.1. Pin Konfigurasi Printer Dot Matriks

Gambar 13.2. Penamaan sinyal pada printer DB25 Female

Page 129: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 129

Selama operasi printer standart, cara data ditransmisikan melalui jalur parallel port adalah bervariasi, tetapi pada prinsipnya adalah sebagai berikut: 1. Untuk mengirimkan sebuah byte data, software mengeluarkan byte ke jalur data,

selanjutnya mengeluarkan pulsa STROBE. 2. Disisi lain Printer, menguji jalur BUSY, dan komputer menunggu untuk jalur busy sebelum

mengirimkan byte berikutnya. 3. Pada implemantasi yang lain, jalur ACK digunakan printer untuk menginformasikan PC

bahwa data telah diterima. 4. Jalur PAPER EMPTY adalah jalur untuk menginformasikan ke PC bahwa kertas telah

keluar. 5. Printer juga mengirim sinyal SELECTED ke PC untuk mengindikasikan bahwa printer

sedang on line dan siap untuk menerima data 6. Sinyal ERROR dari printer dapat digunakan untuk berbagai macam error yang akan

menyebabkan printer tidak dapat menerima data. 7. AUTOFEED, memberitahukan ke printer untuk secara automatik menyisipkan line feed

setelah carriage return 8. INIT, inisialisasi printer setelah pemberia catu daya

123

Reset

Connector DB25 Female PCB

1325122411231022

921

820

719

618

517

416

315

214

1

Busy

D0-D7

12345678

Strobe

Gambar 13.3. Koneksi interface printer

Percobaan 13.1 Cetak sebuah karakter dengan menggunakan printer dot matriks

Pada percobaan ini, satu karakter akan dicetak pada kertas dengan menggunakan sebuah printer melalui interface ke mikrokontroller. 1. Hubungkan konektor 8 bit ke P2 dan konektor 3 bit ke P3 2. Hubungkan modul printer ke konektor printer DB25 female 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Page 130: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 130

Gambar 13.4. Diagram alir cetak data satu karakter pada percobaan 13.1

6. Ketik program berikut ini:

busy bit P3.0

strobe bit P3.1

portData equ P2

;

org 0h

start:call printchar; cetak sebuah karakter "A"

quit: sjmp Quit ; Hang Forever until reset pressed

;

;======================================================

;Subrutin ini digunakan untuk cetak satu karakter

;melalui D0 s/d D7

;sebelum melakukan cetak karakter, sinyal BUSY harus

;dideteksi, sampai terdeteksi sinyal dg logika low

;selanjutnya kirim sinyal STROBE dengan pulsa( --__-- )

;======================================================

Printchar:

mov portData,'A'

jb busy,$

setb strobe

clr strobe

acall delay

Setb strobe

acall delay

ret

;

delay: mov R7,#2

del1: mov R6,#20

DJNZ R6,$

DJNZ R7,del1

ret

;

end

7. Simpanlah program yang anda ketik dan beri nama : prog132a.asm 8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. 9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Page 131: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 131

10. Lakukan modifikasi program tersebut untuk menampilkan data 3 kalimat ke printer dot matriks

Percobaan 13.2 Cetak dua buah kalimat dengan menggunakan printer dot matriks Pada percobaan ini, dua buah kalimat akan dicetak pada kertas dengan menggunakan sebuah printer melalui interface ke mikrokontroller. 1. Hubungkan konektor 8 bit ke P2 dan konektor 3 bit ke P3 2. Hubungkan modul printer ke konektor printer DB25 female 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

Gambar 13.5. (a) Diagram alir rutin utama (b) subrutin cetak satu karakter pada percobaan 13.2 6. Ketik program berikut ini: busy bit P3.0 strobe bit P3.1 portData equ P2 ; org 0h start: call word_Welcome ; to print ' Welcome To ' call enter ; new line feed call word_Lab ; to print ' Computer Laboratory ' call enter ; new line feed ; quit: sjmp Quit ; Hang Forever until reset pressed

Page 132: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 132

; ;================================================= ;This subroutine is used to print single character ;trough Port Data ;before printing a character,a busy signal must be detected ;till a low logic received, than a strobe ( --__-- ) pulse ;must be generate to starts printing a character. ;================================================= Printchar: mov portData,A jb busy,$ setb strobe clr strobe acall delay Setb strobe acall delay ret ; delay: mov R7,#2 del1: mov R6,#20 DJNZ R6,$ DJNZ R7,del1 ret ;============================================= ;This subroutine is used to print a text ' Welcome To' ;this subroutine will print character by character till '$' ;character is detected, when this character is detected then ;It's indicated that a text has finished ;============================================= word_welcome: mov DPTR,#Text_welcome lagi1: clr A movc A,@A+DPTR cjne A,#'$',Print1 sjmp Out1 Print1: call Printchar inc dptr call delay sjmp lagi1 Out1: ret ; ;============================================= ;This subroutine is used to print a text ' Computer Laboratorium' ;this subroutine will print character by character till '$' ;character is detected, when this character is detected then ;It's indicated that a text has finished ;============================================== word_Lab: mov DPTR,#Text_lab lagi2: clr A movc A,@A+DPTR cjne A,#'$',Print2

Page 133: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 133

sjmp Out2 Print2: call Printchar inc dptr call delay sjmp lagi2 Out2: ret ; Enter: mov A,#0dh call printchar call delay mov A,#0ah call printchar ret ; Text_welcome: DB ' Welcome To $' Text_Lab: DB ' Computer Laboratory $' ; end 7. Simpanlah program yang anda ketik dan beri nama : prog132a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

10. Lakukan modifikasi program tersebut untuk menampilkan data 3 kalimat ke printer dot matriks

Page 134: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 134

PERCOBAAN 14 REAL TIME CLOCK (RTC) 12C887

TUJUAN 1. Mahasiswa memahami tentang real time clock 2. Mahasiswa memahami rangkaian interface RTC dengan mikrokontroller 3. Mahasiswa memahami pembuatan program pengambilan data RTC TEORI DASAR

Real Time Clock merupakan suatu chip (IC) yang memiliki fungsi sebagai penunjuk waktu. RTC DS 12C887 memiliki register yg dapat menunjukkan detik, menit, jam, tanggal, bulan dan tahun. RTC ini didesain memiliki 128 lokasi RAM yang terdiri dari 15 byte untuk data waktu serta kontrol, dan 113 byte sebagai RAM yang dapat digunakan sebagai RAM pada umumnya.

RTC DS 12C887 menggunakan bus yang termultipleks untuk menghemat pin. Timing yang digunakan untuk mengakses RTC dapat menggunakan intel timing atau motorola timing. RTC ini juga dilengkapi dengan pin IRQ untuk kemudahan dalam proses.

Operasi dari RTC

Berikut ini gambar pin-pin dari RTC DS 12C887, jumlah total pin-nya sebanyak 13

buah :

Gambar 14.1 Pin RTC DS 12C887

Berikut ini akan ditampilkan blok diagram dari RTC DALLAS 12C887. Terlihat dari blok diagram tersebut bawhwa RTC terbagi menjadi beberapa bagian utama dengan kontrol maupun I/O untuk operasinya.

Page 135: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 135

Tabel 14.1. berikut ini menjelaskan fungsi masing-masing pin yang ada :

Nama Pin Keterangan

MOT Motorola / Intel timing

AD0-AD7 Bus DATA / ADDRESS yang termultipleks

CS Chip Select

AS Address Strobe

R/W Write Strobe

DS Data Strobe

RESET Inputan Reset

IRQ Interrupt Request Output

SQW Output Sinyal Kotak

VCC Catu tegangan +5 volt

Gnd Ground

RCLR Hapus RAM

Penjelasan dari masing-masing pin RTC DS12C887 dijelaskan berikut :

1. GND, VCC

Merupakan pin untuk power supply RTC. VCC diberikan input +5volt. Ketika tegangan 5 volt diberikan dalam batas yang normal, RTC bebas diakses dan data dapat ditulis atau dibaca. Sedangkan ketika Vcc dibawah 4.25 volt, maka proses baca dan tulis tidak dapat dilakukan. Akan tetapi, proses pewaktu (timekeeping) tetap dilakukan oleh RTC tanpa dipengaruhi oleh tegangan input yang rendah. Saat VCC turun dibawah 3 volt, catu daya untuk RAM dan pewaktu dipindahkan ke internal lithium batery yang terdapat pada RTC. Fungsi pewaktu dari RTC memiliki akurasi ± 1 menit per bulan pada suhu 250 C walaupun tanpa adanya catu pada VCC.

2. MOT (Mode Select)

Pin MOT memberikan kebebasan untuk memilih dua tipe bus. Ketika pin ini dihubungkan dengan VCC, maka motorolla bus timing yang dipilih, sedangkan ketika dihubungkan ke ground atau dibiarkan (tak dihubungkan) maka intel bus timing yang dipilih.

Pin ini memiliki pull down internal sebesar sekitar 20 kΩ.

3. SQW (Square Wave Output)

Pin SQW dapat mengeluarkan sinyal kotak, dari satu sampai 13 pembagian yang disediakan oleh 15 buah tingkat pembagi (divider) internal dari RTC. Frekuensi dari SQW dapat dipilih dengan memprogram register A seperti pada tabel. Sinyal SQW dapat dihidupkan dan dimatikan dengan mengatur bit SQWE pada register B. Sinyal SQW tidak hidup ketika VCC dibawah 4,25 volt.

4. AD0 – AD7 (Adrress/Data bus yang ter-multipleks dan bidirect)

Bus yang ter-multiplex menghemat penggunaan pin karena informasi address dan data waktu menggunakan jalur sinyal yang sama. Alamat muncul pada bagian pertama dari bus

Page 136: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 136

cycle dan dengan pin yang sama pula digunakan untuk data pada bagian kedua dari bus cycle. Multipleksing antara data dan address tidak memperlambat waktu akses dari RTC karena perubahan dari address menuju data dilakukan pada saat akses RAM internal pada RTC. Address harus valid saat terjadi falling edge pada AS/ALE, yang kemudian RTC akan me-latch

address dari AD0 sampai AD6. Data valid yang akan dituliskan ke RTC harus valid dan dijaga stabil pada saat pin DS dan WR diberi pulsa. Pada proses pembacaan, RTC menghasilkan output 8 bit data pada saat pin DS dan RD diberi pulsa. Bus akan menjadi high impedance saat pulsa low diberikan pada pin DS (motorola) atau pulsa high diberikan pada pin RD (intel).

5. AS (Address Strobe Input)

Perubahan pulsa positif pada address strobe berguna untuk melakukan multipleks pada bus. Perubahan pulsa negatif pada AS akan menyebabkan address ter-latch. Perubahan positif selanjutnya akan menghapus address walaupun CS tidak diaktifkan. Perintah access

seharusnya dikirimkan secara bersamaan.

6. DS (Data Strobe or Read Input)

Pin DS/RD mempunyai 2 mode operasi tergantung pada tingkat yang diberikan kepada MOT. Ketika MOT dihubungkan ke VCC, motorola bus timing dipilih dan pada mode ini DS merupakan pulsa positif saat bagian lanjut dari bus cycle dan disebut sebagai data strobe. Saat proses pembacaan, DS menunjukkan bahwa RTC memiliki bus yang bidirectional. Pada proses penulisan, pulsa positif pada DS akan me-latch data yang ditulis. Ketika MOT dihubungkan ke ground, maka intel bus timing yang dipilih dan pin DS disebut sebagai read (RD). RD menjelaskan periode ketika RTC memperlakukan bus sebagai pembaca data. Sinyal RD mempunyai pengertian yang sama seperti sinyal Output Enable (OE) pada memori yang umum.

7. R/W (Read/Write Input)

Pin R/W juga memiliki 2 mode operasi. Ketika pin MOT dihubungkan ke VCC untuk motorola timing, R/W berada pada level yang menunjukkan apakah berada pada proses baca atau tulis. Proses baca ditunjukkan dengan level high pada R/W sementara DS juga high. Proses tulis ditunjukkan saat R/W low dan DS high. Ketika pin MOT dihubungkan ke ground untuk intel timing, sinyal R/W adalah sinyal active low dinamakan WR. Pada mode ini pin R/W mempunyai makna yang sama dengan sinyal Write Enable (WE) seperti pada RAM umum.

8. CS (Chip Select Input)

Sinyal chip select harus di hubungkan low untuk dapat mengakses bus cycle. CS harus dijaga pada posisi aktif saat DS dan AS pada motorola timing atau RD dan WR untuk intel timing. Bus cycle yang terjadi tanpa mengaktifkan CS akan me-latch address tapi tidak ada akses yang bisa dilakukan. Saat VCC dibawah 4,25 volt, RTC secara internal menghalangi akses dengan cara secara internal tidak mengaktifkan input CS. Proses ini akan melindungi baik data RTC maupun data pada RAM saat tidak ada catu daya.

9. IRQ (Interrupt Request Output)

Pin IRQ adalah keluaran active low dari RTC 12C887 yang digunakan sebagai masukan interupsi pada prosessor. Keluaran IRQ tetap low selama selama bit status menyebabkan interupsi terjadi dan bit yang berhubungan yaitu interrupt-enable di-set. Untuk menghapus interupsi biasanya dilakukan dengan membaca register C. Pin RESET juga menghapus interupsi yang dilakukan atau yang belum terjadi (pending). Ketika tidak terjadi interupt maka level IRQ berada pada kondisi high impedance. Beberapa peralatan interupsi dapat

Page 137: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 137

dihubungkan dengan IRQ bus. Bus IRQ adalah keluaran open drain dan memerlukan tambahan resistor pull-up.

10. RESET (Reset Input)

Pin RESET tidak berpengaruh terhadap jam, kalender atau RAM. Pada saat penyalaan RTC, pin RESET dapat dijaga LOW untuk beberapa saat untuk menstabilkan catu daya. Lamanya waktu pin RESET diberikan low tergantung dari aplikasi yang digunakan. Akan tetapi jika reset digunakan saat power up (penyalaan), waktu RESET dijaga low harus melebihi 200 ms untuk meyakinkan bahwa timer internal dari RTC untuk penyalaan telah cukup. Ketika RESET low dan VCC diatas 4,25 volt, maka hal-hal yang terjadi adalah sebagai berikut :

a. Periodic Interrupt Enable (PEI) dihapus menjadi nol.

b. Alarm Interrupt Enable (AIE) dihapus menjadi nol.

c. Update Ended Interrupt Flag (UF) dihapus menjadi nol.

d. Interrupt Request Status Flag (IRQF) dihapus menjadi nol.

e. Periodic Interrupt Flag (PF) dihapus menjadi nol.

f. RTC tidak dapat diakses sampai RESET menjadi high.

g. Alarm Interrupt Flag (AF) dihapus menjadi nol.

h. Pin IRQ dalam kondisi high impedance.

i. Square Wave Output Enable (SQWE) dihapus menjadi nol.

j. Update Ended Interrupt Enable (UIE) dihapus menjadi nol.

Pada aplikasi umum, RESET dapat dihubungkan langsung VCC. Koneksi ini akan menjadikan RTC 12C887 dapat berfungsi saat terjadi kerusakan catu daya tanpa mempengaruhi register kontrol RTC.

Address Map dari RTC RTC mempunyai RAM internal didalamnya, dalam memori tersebut terbagi menjadi

beberapa register-register yang mempunyai fungsi dalam pengontrolan maupun pengambilan data RTC. Agar tidak terjadi kesalahan dalam pengontrolan maupun pengambilan data, peta alamat dari masing-masing register harus jelas.

Address map dari RTC terdiri dari 113 byte RAM yg dapat digunakan oleh pengguna RTC, 11 byte RAM yang berisikan data RTC berupa waktu, kalender dan alarm, dan 4 byte yang digunakan untuk kontrol dan status. Keseluruhan 128 byte ini dapat ditulis atau dibaca secara langsung kecuali pada keadaan berikut:

1. Register C dan D adalah read-only.

2. Bit ke-7 dari register A adalah read-only.

3. Bit atas dari byte detik adalah read-only.

Page 138: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 138

0 00 SECONDS

SECONDS ALARM

MINUTES

MINUTES ALARM

HOURS

HOURS ALARM

DAY OF THE WEEK

DAY OF THE MONTH

MONTH

YEAR

REGISTER A

REGISTER B

REGISTER C

REGISTER D

CENTURY

DEC HEX

13 0D

14 0E

49

50

51

127 7F

31

32

33

0

1

2

3

4

5

6

7

8

9

10

11

12

13

50

Gambar 14.2. Peta Alamat RTC 12C887

Waktu, Kalender dan Alarm

Informasi waktu dan kalender diperoleh dengan membaca byte memori yang sesuai. Waktu, kalender dan alarm di-set atau diinisialisasi dengan menulis ke byte RAM yang sesuai. Isi dari kesepuluh data kalender, waktu dan alarm dapat digunakan dalam mode biner atau BCD (Binary-Coded Decimal). Sebelum mengakses register kalender, waktu dan alarm, SET bit pada register B harus ditulis dengan level logika yang sesuai agar tidak mengganggu proses update yang dilakukan oleh RTC. Kesemua data kalender, waktu dan alarm harus menggunakan mode data yang sma (biner atau BCD), yaitu dengan cara menulis pada register B pada bit DM(Data Mode). Sekali di inisialisasi maka RTC akan terus menggunakan mode data yang dipilih sebelumnya. Tabel berikut menunjukkan mode data dari kalender, waktu dan alarm baik dalam mode biner atau BCD.

Tabel 14.2. Tabel data mode waktu, kalender dan alarm

Page 139: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 139

Register Kontrol RTC RTC 12C887A mempunyai 4 buah register kontrol yang dapat diakses setiap saat,

walaupun pada saat RTC melakukan update cycle.

Register A

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0

UIP – Update in progress adalah status bit yang dapat dimonitor, merupakan bit read only dan tidak dipengaruhi oleh reset. Ketika bit UIP 1, proses update akan segera berlangsung. Ketika

UIP 0, proses update tidak akan terjadi sekurangnya 244µs. Informasi kalender, waktu dan alarm yang ada pada RAM akan dapat diakses secara penuh ketika bit UIP nol.

DV2, DV1, DV0 – Ketiga bit ini digunakan untuk menghidupkan atau mematikan osilator dan me-reset rantai perhitungan. Pola 010 adalah satu-satunya kombinasi yang akan menghidupkan osilator dan menyebabkan RTC dapat menyimpan waktu. Pola 11x akan menghidupkan osilator tapi menahan rantai perhitungan dalam kondisi reset.

RS2, RS2, RS1, RS0 – Keempat bit ini akan memilih frekuensi atau mematikan pulsa kotak pada pin SQW. Pin SQW dapat berfungsi juga sebagai periodic interrupt. Keempat bit ini dapat dibaca/tulis dan tidak dipengaruhi oleh RESET. Untuk mengaktifkannya, dapat dilakukan sebagai berikut :

1. Mengaktifkan interupt dengan bit PIE.

2. Mengaktifkan keluaran SQW dengan bit SQWE.

3. Mengaktifkan keduanya dengan waktu dan frekuensi yang sama.

4. Tidak mengaktifkan keduanya.

Register B

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

SET PIE AIE UIE SQWE DM 24/12 DSE

SET – Ketika bit SET adalah 0, proses update berfungsi normal dengan menambahkan perhitungan sekali dalam satu detik. Ketika SET ditulis menjadi 1, semua proses update dihentikan sehingga program dapat menginisialisasi byte waktu dan kalender tanpa adanya proses update yang terjadi ditengah proses inisialisasi.

PIE – Periodic Interrupt Enable merupakan bit yang dapat dibaca/tulis yang akan menyebabkan bit Periodic Interrupt Flag (PF) pada register C mengatur pin IRQ menjadi low. Ketika bit PIE diset 1, interupt secara periodik dihasilkan dengan mengatur pin IRQ menjadi low dengan periode tertentu sesuai dengan bit RS3-RS0 (register A). Apabila PIE 0, ini akan menghalangi pengaturan pin IRQ oleh interupt periodik, tetapi bit PF masih di-set dengan periode tertentu. PIE tidak dapat dirubah secara internal oleh RTC, tetapi akan dihapus menjadi 0 pada saat RESET.

Page 140: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 140

UIE – Update Ended Interrupt merupakan bit yang dapat dibaca/tulis yang akan meng-enable Update ended Flag (UF) pada register C untuk memasukkan IRQ. Pin RESET yang di “low” atau bit SET yang di “high” akan menghapus bit UIE.

SQWE – Ketika bit Square Wave Enable di-set menjadi 1, gelombang kotak dengan periode yang sudah ditentukan oleh bit RS3-RS0 akan dikeluarkan pada pin SQW. Ketika SQWE di-set menjadi 0, maka pin SQW tetap low. Bit SQWE dapat dibaca/tulis dan dapat dihapus oleh RESET. SQWE di-set menjadi 1 ketika Vcc dihidupkan.

DM – Bit Data Mode (DM) mengindikasikan apakah informasi waktu dan kalender mempunyai format biner atau BCD. Bit DM di-set oleh program dengan memberikan format yang sesuai dan dapat dibaca sesuai keperluan. Bit ini tidak dapat dirubah secara internal atau oleh RESET. ‘1’ pada DM menyatakan data biner sedangkan ‘0’ menyatakan DM mempunyai format BCD (Binary Coded Decimal).

24/12 – Bit ini digunakan untuk memilih mode jam, 24 atau 12. ‘1’ menunjukkan mode 24-jam dan ‘0’ menunjukkan mode 12-jam. Bit ini dapat dibaca/tulis dan tidak dipengaruhi secara internal atau RESET.

DSE – Merupakan bit khusus yang digunakan untuk merubah waktu ketika terjadi perubahan musim (biasanya terjadi pada negara dengan 4 musim). Ketika di-set 1, pada hari minggu pertama pada bulan april terjadi perubahan jam dari 1:59:59 AM menjadi 3:00:00 AM. Pada hari minggu terakhir bulan oktober saat waktu menunjukkan 1:59:59 AM berubah menjadi 1:00:00 AM. Hal ini tidak terjadi ketika DSE di-set 0. Bit ini tidak dipengaruhi secara internal atau RESET.

Register C

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

IRQF PF AF UF 0 0 0 0

IRQF – Interrupt Request Flag (IRQF) bit diset menjadi 1 ketika hal berikut terjadi :

PF = PIE = 1

AF = AIE = 1

UF = UIE = 1

Contoh: IRQF = (PF*PIE) + (AF*AIE) + (UF*UIE)

Saat ketika bit IRQF adalah 1, pin IRQ menjadi “low”. Bit flag PF, AF, dan UF di hapus detelah register C dibaca oleh program atau ketika pin RESET “low”.

PF – Periodic Interrupt Flag adalah bit read-only yang diset menjadi 1 ketika edge dideteksi pada tap yang dipilih pada rantai pembagian. Bit RS3 – RS0 menghasilkan frekuensi periodik. PF diset menjadi 1 tanpa dipengaruhi oleh bit PIE. Ketika PF dan PIE ‘1’ , sinyal IRQ aktif dan akan mengeset bit IRQF. Bit PF akan dihapus secara pembacaan software pada register C atau RESET.

AF – ‘1’ pada bit Alarm Interrupt Flag (AF) mengindikasikan waktu yang dicapai sesuai dengan waktu alarm. Jika bit AIE juga 1, pin IRQ akan menjadi low dan ‘1’ akan terjadi pada bit IRQF. RESET atau pembacaan register C akan menghapus AF.

Page 141: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 141

UF – Bit Update Ended Interrupt Flag akan diset setelah tiap proses update. Ketika bit UIE diset menjadi 1, ‘1’ pada UF akan menyebabkan bit IRQF menjadi 1 dan akan mengaktifkan pin IRQ. UF dihapus dengan membaca register C atau RESET.

BIT 3 sampai BIT 0 – Bit ini tidak dipakai dan selalu bernilai 0.

Register D

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

VRT 0 0 0 0 0 0 0

VRT – Valid RAM Time mengindikasikan kondisi dari baterai yang dihubungkan ke pin VBAT. Bit ini tidak dapat ditulis dan selalu menjadi 1 ketika dibaca. ‘0’ akan terjadi ketika baterai internal telah rusak. Bit ini tidak dipengaruhi oleh RESET.

BIT 6 sampai BIT 0 - Bit ini tidak dipakai dan selalu bernilai 0.

Proses Update RTC 12C887 melaksanakan proses update sekali dalam satu detik walau tanpa

memperhatikan bit SET pada register B. Ketika bit SET pada register B di-set menjadi 1, maka informasi waktu, kalender, dan alarm akan berhenti dan tidak akan berubah pada saat terjadi penambahan waktu, tetapi rantai perhitungan waktu akan tetap terjadi dan disimpan pada buffer internal. Hal ini akan menjaga akurasi watu dari RTC saat terjadi proses pembacaan dan penulisan. Proses update ini juga akan membandingkan byte alarm dengan waktu yang terjadi sat itu.

Ada tiga metode untuk mengakses data pada RTC yang akan menghindari akses informasi waktu yang tidak konsisten. Metode pertama adalah menggunakan update ended

interrupt. Jika di enable, interupt akan terjadi tiap proses update selesai, dimana terdapat waktu 999 ms untuk membaca data waktu yang valid. Jika interupsi ini digunakan, bit IRQF pada register C harus dihapus sebelum meninggalkan proses interupsi.

Metode yang kedua adalah dengan menggunakan bit update in progress (UIP) yang terdapat pada register A yang menyatakan apakah proses update sedang berlangsung. Bit UIP akan mengeluarkan pulsa tiap satu detik. Setelah bit UIP menjadi high, maka proses update

akan terjadi 244 µs kemudian dan jika low terbaca pada bit UIP, maka pengguna mempunyai

waktu 244 µs sebelum data waktu/kalender akan berubah. Sehingga, pengguna harus

menghindari proses interupsi yang menyebabkan waktu pembacaan data melebihi 244 µs.

Gambar 14.3 Hubungan antara Update-Ended dan Periodic Interrupt

Page 142: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 142

Metode yang ketiga adalah mengunakan periodic interrupt untuk menunjukkan apakah proses update sedang berlangsung. Bit UIP pada register A akan di-set high diantara pengaktifan dari bit PF pada register C. Periode interupt yang melebihi waktu tBUC akan menyebabkan data yang valid dapat dicapai pada setiap terjadinya interupsi. Pembacaan harus telah selesai dalam waktu (tPI/2 + tBUC) untuk memastikan data tidak dibaca saat proses update.

Timing Diagram Gambar-gambar berikut ini menjelaskan timing diagram untuk proses tulis dan baca yang dilakukan oleh RTC

Gambar 2.15 Timing diagram untuk proses baca

Gambar 14.5 Timing diagram untuk proses baca

Gambar 14.4 Timing diagram untuk proses tulis

Gambar 14.5 Timing diagram untuk proses tulis

Page 143: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 143

Gambar 14.6 Rangkaian interface RTC12c887

Percobaan 14.1. Pengambilan data detik pada RTC DS12887 dengan display LED Pada percobaan ini, data detik RTC diambil dan dikeluarkan ke LED.

D1

P0.0..P0.7

D8

VCC

J3

EN LED12

Gambar 14.7

1. Hubungkan jumper LED_EN 2. Hubungkan kabel data dan kontrol pada board RTC 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

R9R

C5C

18

24

VCC

1

12

AD2

AD1

AD0

AD4

AD3

AD6

AD5

DS

AD7

CS

WR

AS

RTC12C887

P2 IC2

P3.0 IC2

P3.2 IC2

P3.1 IC2

P3.3 IC2

Page 144: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 144

Gambar 14.8. Diagram alir (a) rutin utama akses RTC (b) subrutin inisialisasi RTC 6. Ketik program berikut ini: CS bit P3.3 AS bit P3.2 Write bit P3.1 Read bit P3.0 PortData equ P0 RegisterA equ 10 RegisterB equ 11 ; org 0h clr CS ; Aktivkan RTC call INIT_RTC start: mov PortData,#00h ; 00h = alamat detik pada RTC clr AS ; Penguncian alamat 0-1-0 setb AS clr AS ;

Page 145: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 145

setb Write ; sinyal write = 1; ? ; setb Read clr Read ; sinyal read = 0 mov A,PortData ; Baca data dari alamat 00h = detik setb Read ; mov P0,A ; simulasi data ke LED = P0 sjmp start ; INIT_RTC: setb Read mov PortData,#RegisterA ; clr AS setb AS clr AS ; setb WRite clr Write mov PortData,#20h setb WRite ; mov PortData,#RegisterB clr AS setb AS clr AS ; setb WRite clr WRite mov PortData,#02h setb WRite ; RET ; end 7. Simpanlah program yang anda ketik dan beri nama : prog141a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Percobaan 14.2. Pengambilan data detik dan menit pada RTC12887 dengan display LCD Karakter 2x 16. Pada percobaan ini, data detik dan menit diambil dan ditampilkan pada LCD Karakter 2x16.

Page 146: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 146

VSS

2

1116

7VCC

D2

EN

LCD Character

3

14

D5

8

1

GND

10k

Potensio Multiturn

D1

P3.7

D74

13

12

9BPL

6

P0.7..P0.0

2 X 16

VCC

D4

J3

EN LCD 1 2

10

D1

RSP3.6

D3

D6

D0

15

Gambar 14.9 Interface LCD Carácter 2x16

Gambar 14.10. Diagram alir rutin utama percobaan 14.2 1. Hubungkan jumper LCD_EN 2. Hubungkan kabel data dan kontrol pada board RTC ke rangkaian mikrokontroller

Page 147: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 147

3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 6. Ketik program berikut ini: CS bit P3.3 ALE bit P3.2 Write bit P3.1 Read bit P3.0 PortRTC equ P2 RegisterA equ 10 RegisterB equ 11 Puluhan equ 30h Satuan equ 31h Detik equ 32h Menit equ 33h

org 0h call init_LCD call init_RTC ; call setDetik ; call setMenit call write_char start: call readDetik call bin2Dec call write2LCDDetik ; call readMenit call bin2Dec call write2LCDMenit ; sjmp start ; write_char: mov dptr,#word1 ;DPTR = [ address word1 ] mov r3,#16 ;R3=16,number character to be display mov r1,#80h ;R1=80h,address DDRAM start position acall write_inst ; write1:clr a ; A = 0 movc a,@a+dptr ; A = [A+ DPTR] mov r1,A ; R1 = A inc dptr ; DPTR = DPTR +1 acall 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 ;

Page 148: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 148

mov r1,#00001100b ;Display on, ;cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 ; P3.6 = RS =0 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.6 ; P3.6 = RS =1 mov P0,R1 ; P0 = D7 s/d D0 = R1 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret ; delay: mov R0,#0 delay1: mov R7,#0fh djnz R7,$ djnz R0,delay1 ret ; ReadDetik: mov PortRTC,#00h ;00h = alamat detik pada RTC clr ALE ;Penguncian alamat 0-1-0 setb ALE clr ALE ; setb Write ; sinyal write = 1 ; setb Read clr Read ; sinyal read = 0 mov A,PortRTC ; Baca data dari alamat 00h = detik setb Read ret ; ReadMenit: mov PortRTC,#02h ; 00h = alamat detik pada RTC clr ALE ; Penguncian alamat 0-1-0 setb ALE clr ALE ; setb Write ; sinyal write = 1 ; setb Read

Page 149: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 149

clr Read ; sinyal read = 0 mov A,PortRTC ; Baca data dari alamat 00h = detik setb Read ret ; init_RTC: clr CS setb Read mov PortRTC,#RegisterA ; clr ALE setb ALE clr ALE ; setb WRite clr Write mov PortRTC,#20h setb WRite ; mov PortRTC,#RegisterB clr ALE setb ALE clr ALE ; setb WRite clr WRite mov PortRTC,#06h setb WRite RET ; Bin2Dec: mov b,#10d div ab mov puluhan,a mov satuan,b ret ; Write2LCDDetik: mov r1,#0c4h call write_inst mov a,Puluhan add a,#30h mov r1,a call write_data ; mov r1,#0c5h call write_inst mov a,Satuan add a,#30h mov r1,a call write_data ret ;

Page 150: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 150

Write2LCDMenit: mov r1,#0c2h call write_inst mov a,Puluhan add a,#30h mov r1,a call write_data ; mov r1,#0c3h call write_inst mov a,Satuan add a,#30h mov r1,a call write_data ret ; setMenit: setb Read mov PortRTC,#02h; clr ALE setb ALE clr ALE ; setb WRite clr Write mov PortRTC,#21d setb WRite ret ; setDetik: setb Read mov PortRTC,#00h; clr ALE setb ALE clr ALE ; setb WRite clr Write mov PortRTC,#00h setb WRite ret word1: DB ' My RTC Test '; here is the data to be look up end 7. Simpanlah program yang anda ketik dan beri nama : prog142a.asm

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

9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Page 151: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 151

10. Lakukan modifikasi pada program tersebut untuk memunculkan data jam, hari, bulan dan tahun pada LCD Karakter

11. Lakukan modifikasi pada program tersebut untuk menampilkan data detik dan menit pada rangkaian 7 segmen.

Page 152: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 152

BAB 15 PULSE WIDHT MODULATION

TUJUAN: 1. Mahasiswa memahami prinsip dasar PWM 2. Mahasiswa memahami rangkaian Driver Motor DC 3. Mahasiswa memahami pemrograman assembly untuk pengaturan PWM

Konsep Dasar PWM

Salah satu cara yang paling mudah untuk membangkitkan sebuah tegangnan analog dari sebuah nilai digital adalah dengan menggunakan pulse-width modulation (PWM). Dalam PWM gelombang kotak, frekuensi tinggi dibangkitkan sebagai output digital. Untuk contoh, sebuah port bit secara kontinyu melakukan kegiatan saklar on dan off pada frekuensi yang relatif tinggi. Selanjutnya, bila sinyal diumpankan pada LPF low pass filter, tegangan pada output filter akan sama dengan Root Mean Squere ( RMS ) dari sinyal gelombang kotak. Selanjutnya tegangan RMS dapat divariasi dengan mengubah duty cycle dari sinyal.

DUTY CYCLE menyatakan fraksi waktu sinyal pada keadaan logika high dalam satu siklus. Satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dikatakan sinyal mempunyai DUTY CYCLE 50 %. DUTY CYCLE 20 % menyatakan sinyal berada pada logika 1 selama 1/5 dari waktu total

Gambar 15.1. Duty cycle 30 %

VCC R115k

+ C2

1000uFA

-

+

MG1MOTOR DC

12

+ C11uF

Q1TIP1201

23

R210k

D1

1N4001U1

ULN2003

1234567 10

161514131211

I1I2I3I4I5I6I7 O7

O1O2O3O4O5O6

VCC

Gambar 15.2. Aplikasi PWM pada setting kecepatan motor

Page 153: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 153

PWM dengan Mikrokontroler

Pada rangkaian tersebut menunjukkan sebuah DAC yang dibangun dengan metode PWM, yang digunakan untuk mengendalikan kecepatan motor DC dengan modulasi lebar pulsa. Bit 0 dari P0 mengemudikan sebut saklar transistor sebagaimana yang ditunjukkan pada gambar. Motor dihidupkan dan dimatikan untuk suatu periode tertentu

Bagian pada saat motor hidup disebut DUTY CYCLE. Pada program ini menggunakan sebuah byte untuk menyimpan lama waktu motor on, dari sejumlah 256 siklus. Bila duty cycle yang diberikan adalah 10 % maka program ini menyimpan data waktu ON selama 10 siklus dan OFF selama 246 siklus dari 256 siklus.

Berikutnya nilai duty cycle disimpan pada RAM internal yang diberi label dCycle. Komplemen dari duty cycle disimpan pada RAM internal dengan nama dCycleC. Pada perancangan software ini, Timer 0 diaplikasikan dalam mode 2, yaitu 8 bit timer auto reload, yang akan melakukan increment nilai register counter setiap siklus, dan bila terjadi overflow maka data yang berada pada TH0 akan diloadkan ke TL0 yang berfungsi sebagai counter 8 bit.

Bila frekuensi kristal yang digunakan adalah 12 Mhz, sehingga jika nilai reload adalah 0 maka timer 0 akan over flow setiap 256 udetik; dan jika nilai reload adalah FFh maka timer akan over flow setiap 1 udetik. Pertama kali program menghidupkan motor dan menempatkan nilai dCycle ke TH0 sebagai nilai reload. Setelah timer overflow, komplemen dari duty cycle dCycleC akan ditempatkan ke TH0 sebagai nilai reload dan motor berhenti berputar. Pada pemrograman ini keadaan motor dapat dilihat pada register yang dapat dialamati bit, yang ditandai sebagai motorFlag.

Percobaan 15.1. Setting kecepatan putaran motor DC dengan PWM Pada percobaan ini, putaran kecepatan motor kemudikan dengan menggunakan transistor TIP120 melalui metode PWM. PWM dikemudikan dengan menggunakan satu bit dari P0, seperti yang ditunjukkan pada gambar dibawah.

Start

Inisialisasi Duty Cycle

Inisialisasi Timer

Inisialisasi dCycle

dCycle #45

Complement dCycle

dCycleC NOT dCycle

Start

End

Timer 0 Mode 2

TMOD 11110010

Load nilai counter TL0

TL0 dCycle

Enable Interupsi Timer 0

ET0 1

Enable semua Interupsi

EA 1

Enable Timer 0

TR0 1

Start

End

(a) (b) (c)

Page 154: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 154

Gambar 15.3. Diagram alir (a) rutin utama (b) inisialisasi duty cycle dan (c) inisialisasi timer pada percobaan 15.1

Gambar 15.4. Diagram alir interupsi timer 0 pada percobaan 15.1 1. Hubungkan kabel data dan ke inputan rangkaian driver motor DC 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini: dCycle equ 30h dCycleC equ 31h PWM bit P0.0 MotorF bit 20h org 0h sjmp start org 0bh ljmp Interupsi_Timer0 ; start: call Init_Dcycle call init_Timer loop: sjmp loop ; Init_Dcycle:

mov dCycle,#45 ;inisialisasi data dCycle T_ON(256-45)ud dan ;T_OFF(256-211)ud

mov A,dCycle ;copy data ke A cpl A ;komplemen A mov dCycleC,A ;copy A ke dCycleC ret ; Init_Timer: anl TMOD,#0F0h ; orl TMOD,#2 ;Timer0 mode2 auto reload

Page 155: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 155

mov TH0,dCycle ;Load data counter 8 bit setb ET0 ;enable interupsi timer0 setb EA ;enable all interupsi setb TR0 ;timer0 run ret ; Interupsi_Timer0: jb motorF,motorOff ;deteksi bit motorF setb PWM ;Hidupkan motor setb P0.7 ;TP pulsa PWM di osiloskop mov TH0,dCycle ;load data dCycle ke TH0 setb motorF ;beri tanda motorF=1-> motor ON reti motorOff: clr PWM ;matikan motor clr P0.7 ;TP pulsa PWM di osiloskop mov TH0,dCycleC ;load data cCycleC ke TH0 clr motorF ;beri tanda motorF=0-> motor OFF reti end 6. Simpanlah program yang anda ketik dan beri nama : prog151a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Percobaan 15.2. Pengaturan kecepatan putaran motor DC dengan metode PWM melalui ADC Pada percobaan ini, ADC digunakan untuk membaca tegangan dari input pembagi tegangan 0-5 Volt, selanjutnya tegangan yang telah diuabah menjadi data digital, digunakan untuk mengatur PWM pada Motor DC. 1. Hubungkan kabel data dan ke inputan rangkaian driver motor DC 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program 5. Ketik program berikut ini: dCycle equ 30h dCycleC equ 31h PWM bit P0.0 MotorF bit 20h org 0h sjmp start org 0bh ljmp Interupsi_Timer0 ; start: call init_Timer

Page 156: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 156

loop: call ADC mov dCycle,A cpl A mov dCycleC,A sjmp loop ; ADC: clr P3.3 nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 setb P3.4 ret ; Init_Timer: mov dCycle,#40 mov A,dCycle cpl A mov dCycleC,A anl TMOD,#0F0h orl TMOD,#2 mov TH0,dCycle setb ET0 setb EA setb TR0 ret ; Interupsi_Timer0: jb motorF,motorOff setb PWM setb P0.7 mov TH0,dCycle setb motorF reti motorOff: clr PWM clr P0.7 mov TH0,dCycleC clr motorF reti end 6. Simpanlah program yang anda ketik dan beri nama : prog151a.asm

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

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Page 157: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 157

Lampiran 1 Petunjuk Instalasi Komponen TComPort pada Delphi 6

1. Untuk melakukan antarmuka PC dengan perangkat ekternal dengan memanfaatkan port com atau port serial pada pemrograman delphi, diperlukan sebuah komponen untuk mengakses port serial communicatin RS232, untuk itu diperlukan komponen yang disebut cport.

2. Lakukan copy file Cport dari download di Internet atau Lab Microcontroller dan Paste ke folder Program Files – Borland – Delphi6.

3. Bukalah file DsgnCport6 dengan menggunakan Program Delphi

4. Click pada button Compile pada gambar berikut, untuk menghasilkan file dcu pada folder CPort.

Page 158: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 158

5. Copy file-file dcu tersebut ke Folder Delphi6 – Lib

6. Kembali pada tampilan Package-DsgnCport6.dpk, dan pilih button Instal untuk melakukan proses instalasi komponen.

7. Setelah proses instalasi komponen maka akan didapatkan tampilan sebagai berikut.

Page 159: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 159

8. Setelah proses instalasi maka akan didapatkan komponen Cport pada Tabulasi Komponen

9. Langkah terakhir adalah pengaturan pada Environment pada Tool

10. Pilih pada tabulasi Library

11. Lakukan pemilihan Path folder Cport dengan menekan button browse pada Library Path

Page 160: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 160

12. Contoh lokasi folder Cport

Page 161: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 161

Lampiran 2. Perangkat Lunak

1. Compiler MIDE Studio

M-IDE Studio adalah salah satu cara yang digunakan untuk menjalankan kompilasi untuk divais MCS-51. M-IDE Studio mempunyai beberapa fitur yang dapat digunakan untuk edit, compil, dan debug file.

The M-IDE Studio juga dapat digunakan untuk menulis program dalam bahasa C. Dengan menggunakan software ini, maka kita dapat melihat error pada report file LST.

Gambar 1.19. M-IDE Studio

Bila anda perhatikan pada menu toolbar dan menu pilihan, tampak terlihat disable. Hal ini karena file belum dibuat. Untuk membuat sebuah file, lakukan langkah-langkah berikut:

1. Membuat File Baru

Untuk membuat file baru, klik pada menu File atau short cut seperti yang ditunjukkan pada gambar, sehingga akan tampak halaman kosong.

Figure 1.20. File baru dengan halaman kosong

Page 162: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 162

2. Menulis sebuah program Tulis program assembly pada halaman kosong, dan lakukan penyimpanan file. Bila file telah tersimpan maka akan tampak teks instruksi yang berwarna-warni. Sebagaimana yang ditunjukan pada gambar 3.

Gambar 1.21 Menu penyimpanan file 3. Kompilasi Agar file dengan ekstensi ASM tersebut dapat diloadkan ke mikrokontroller, maka perlu dilakukan kompilasi dari file ASM ke HEX.

Gambar 1.22 Kompilasi file

Page 163: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 163

2. ATMEL Microcontroller ISP Software

1. Untuk melakukan pemrograman file *.hex ke mikrokontroller, buka ISP Software seperti yang ditunjukkan pada gambar 1.3.

Gambar 1.23. Atmel Microcontroller ISP Software

2. Pilih port LPT yang digunakan oleh komputer anda, cek melalui control panel pada pilihan sistem.

Gambar 1.24 Dialog pemilihan port

3. Pilih tipe device mikrokontroller yang anda gunakan

Gambar 1.25. Dialog pemilihan seri Device

Page 164: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 164

4. Tampilan buffer kosong, yang menandakan mikrokontroller sudah terkoneksi dengan

rangkaian programmer.

Gambar 1.26. Tampilan Buffer Kosong

5. Load buffer digunakan untuk mengambil file HEX yang akan diprogramkan ke mikrokontroller

1.27. Tampilan program Load file HEX

6. Pilih file HEX yang sudah anda buat, sesuai letak folder.

Gambar 1.28. Dialog pemilihan file HEX

Page 165: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 165

Gambar 1.29. Tampilan buffer yang sudah terisi data

7. Lakukan inisialisasi mikrokontroller sebelum melakukan pemrograman dengan memilih

shortcut dan pilih auto program untuk mulai melakukan pemrogramman ke mikrokontroller, seperti yang ditunjukkan pada gambar 1.11

.

Gambar 1.30. Tampilan inisialisasi mikrokontroller

Gambar 1.31 Tampilan Auto Program.

8.Untuk melakukan mode run pada mikrokontroller, pilih menu Run Target

Page 166: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 166

Gambar 1.32 Tampilan Menu Run Target.

Page 167: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 167

LAMPIRAN 3

MAIN BOARD LAYOUT MIKROKONTROLLER 89S51 DEVELOPMENT BOARD

CATATAN: EN : Enable/ Aktif, bila dihubungkan singkat EN_ADC: SW Togle pada posisi RUN Target PEMROGRAMAN ISP: SW Togle pada posisi Programming VREF ADC: Pengaturan tegangan referensi ADC IREF DAC: Pengaturan arus referensi DAC TP IREF DAC: Pengukuran arus referensi DAC, hubungkan ke amperemeter untuk pengaturan arus referensi DAC, dan pasang jumper setelah proses pengukuran TP VREF ADC: Pengukuran tegangan referensi ADC Pada saat penggunaan tombol pushbutton atau keypad 4x4, buka jumper pada DAC_EN

Page 168: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 168

ADVANCE BOARD LAYOUT MIKROKONTROLLER 89S51 DEVELOPMENT BOARD

Page 169: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 169

Lampiran 4

MIKROKONTROLLER AT89SXXX Mikrokontroller 8 bit dengan 4K byte ISP

( In System Programmable )

FITUR: 1. Kompatibel dengan produk MCS-51 2. 4K byte In System Programmable Flas Memory

Dapat dilakukan pemrograman 1000 tulis dan hapus 3. Range catu daya 4,0V s/d 5,0V 4. Operasi statis: 0 Hz s/d 33 MHz 5. Tiga Tingkat Program memory lock 6. 128 x 8 bit RAM internal 7. 32 Programmable Jalur I/O 8. Dua 16 bit Timer/ Counter 9. Enam Sumber Interupsi 10. Full Duplex Serial Channel 11. Low Power Idle dan Mode Power Down 12. Watcht Dog Timer 13. Data Pointer 14. Power Off Flag 15. Fast Programming Time 16. Fleksibel ISP programming

DISKRIPSI AT89S51 mempunyai konsumsi daya rendah, mikrokontroller 8-bit CMOS dengan 4K byte momori Flash ISP ( in system programmable/ dapat diprogram didalam sistem).Divais ini dibuat dengan teknologi memori nonvolatile kerapatan tinggi dan kompatibel dengan standart industri 8051, set instruksi dan pin keluaran. Flash yang berada didalam chip memungkinkan memori program untuk diprogram ulang pada saat chip didalam sistem atau dengan menggunakan Programmer memori nonvolatile konvensional. Dengan mengkombinasikan CPU 8 bit yang serbaguna dengan flash ISP pada chip, ATMEL 89S51 merupakan mikrokontroller yang luarbiasa yang memberikan fleksibelitas yang tinggi dan penyelesaian biaya yang efektif untuk beberapa aplikasi kontrol. AT89S51 memberikan fitur-fitur standar sebagai berikut: 4K byte Flash, 128 byte RAM, 32 jalur I/O, Timer Wachtdog, dua data pointer, dua 16 bit timer/ counter, lima vektor interupsi dua level, sebuah port serial full dupleks, oscilator internal, dan rangkaian clock. Selain itu AT89S51 didisain dengan logika statis untuk operasi dengan frekuensi sampai 0 Hz dan didukung dengan mode penghematan daya. Pada mode idle akan menghentikan CPU sementara RAM, timer/ counter, serial port dan sistem interupsi tetap berfungsi. Mode Power Down akan tetap menyimpan isi dari RAM tetapi akan membekukan osilator, menggagalkan semua fungsi chip sampai interupsi eksternal atau reset hardware ditemui.

Page 170: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 170

PIN DISKRIPSI

VCC Tegangan Supply GND Ground Port 0 Port 0, merupakan port I/O 8 bit open drain dua arah. Sebagai sebuah port,

setiap pin dapat mengendalikan 8 input TTL. Ketika logika “1” dituliskan ke port 0, maka port dapat digunakan sebagai input dengan high impedansi. Port 0 dapat juga dikonfigurasikan untuk multipleksing dengan address/ data bus selama mengakses memori program atau data eksternal. Pada mode ini P0 harus mempunyai pull up

Port 1 Port 1 merupakan port I/0 8 bit dua arah dengan internal pull up. Buffer output port 1 dapat mengendalikan empat TTL input. Ketika logika “1” dituliskan ke port 1, maka port ini akan mendapatkan internal pull up dan dapat digunakan sebagai input. Port 1 juga menerima alamat byte rendah selama pemrograman dan verifikasi Flash

Port Pin Fungsi Alternatif

P1.5 MOSI ( digunakan untu In System Programming )

P1.6 MISO ( digunakan untu In System Programming )

P1.7 SCK ( digunakan untu In System Programming ) Port 2 Port 2 merupakan port I/O 8 bit dua arah dengan internal pull up. Buffer

output port 2 dapat mengendalikan empat TTL input. Ketika logika “1” dituliskan ke port 2, maka port ini akan mendapatkan internal pull up dan dapat digunakan sebagai input.

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

Port Pin Fungsi Alternatif

P3.0 RXD ( port serial input )

P3.1 TXD ( port serial output )

P3.2 INT0 ( interupsi eksternal 0 )

P3.3 INT1 ( interupsi eksternal 1 )

P3.4 T0 ( input eksternal timer 0 )

P3.5 T1 ( input eksternal timer 1 )

P3.6 WR ( write strobe memori data eksternal)

P3.7 WR ( read strobe memori program eksternal) RST Input Reset. Logika high “1” pada pin ini untuk dua siklus mesin

sementara oscilator bekerja maka akan mereset devais. ALE/ PROG Address Latch Enale ( ALE ) merupakan suatu pulsa output untuk

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

PSEN Program Store Enable merupakan strobe read untu memori program

Page 171: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 171

eksternal. EA/ VPP Eksternal Access Enable. EA harus di hubungkan ke GND untuk enable

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

XTAL1 Input untuk penguat oscilator inverting dan input untuk rangkaian internal clock

XTAL2 Output dari penguat oscilator inverting.

Arsitektur Microcontroller MCS-51

1.1. Organisasi Memori

Semua divais 8051 mempunyai ruang alamat yang terpisah untuk memori program dan memori data, seperti yang ditunjukkan pada gambar1.1. dan gambar 1.2. Pemisahan secara logika dari memori program dan data, mengijinkan memori data untuk diakses dengan pengalamatan 8 bit, yang dengan cepat dapat disimpan dan dimanipulasi dengan CPU 8 bit. Selain itu, pengalamatan memori data 16 bit dapat juga dibangkitkan melalui register DPTR. Memori program ( ROM, EPROM dan FLASH ) hanya dapat dibaca, tidak ditulis. Memori program dapat mencapai sampai 64K byte. Pada 89S51, 4K byte memori program terdapat didalam chip. Untuk membaca memori program eksternal mikrokontroller mengirim sinyal PSEN ( program store enable )

Gambar 1.1. Diagram blok mikrokontroller 8051

Memori data ( RAM ) menempati ruang alamat yang terpisah dari memori program. Pada keluarga 8051, 128 byte terendah dari memori data, berada didalam chip. RAM eksternal (maksimal 64K byte). Dalam pengaksesan RAM Eksternal, mikrokontroller mingirimkan sinyal RD ( baca ) dan WR ( tulis ).

Page 172: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 172

Gambar 1.2. Arsitektur Memori Mikrokontroller 8051

1.1.1. Program Memory

Gambar 1.2. menunjukkan suatu peta bagian bawah dari memori program. Setelah reset CPU mulai melakukan eksekusi dari lokasi 0000H. Sebagaimana yang ditunjukkan pada gambar 1.3, setiap interupsi ditempatkan pada suatu lokasi tertentu pada memori program. Interupsi menyebabkan CPU untuk melompat ke lokasi dimana harus dilakukan suatu layanan tertentu.

Interupsi Eksternal 0, sebagi contoh, 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.3. Peta Interupsi mikrokontroller 8051

1.1.2 Memory Data

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

Page 173: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 173

Alamat memori data internal selalu mempunyai lebar data satu byte. Pengalamatan langsung diatas 7Fh akan mengakses satu alamat memori, dan pengalamatan tak langsung diatas 7Fh akan mengakses satu alamat yang berbeda. Demikianlah pada gambar 1.4 menunjukkan 128 byte bagian atas dan ruang SFR menempati blok alamat yang sama, yaitu 80h sampai dengan FFh, yang sebenarnya mereka terpisah secara fisik

128 byte RAM bagian bawah dikelompokkan lagi menjadi beberapa blok, seperti yang ditunjukkan pada gambar 1.5. 32 byte RAM paling bawah, dikelompokkan menjadi 4 bank yang masing-masing terdiri dari 8 register. Instruksi program untuk memanggil register-register ini dinamai sebagai R0 sampai dengan R7. Dua bit pada Program Status Word (PSW) dapat memilih register bank mana yang akan digunakan. Penggunaan register R0 sampai dengan R7 ini akan membuat pemrograman lebih efisien dan singkat, bila dibandingkan pengalamatan secara langsung.

Gambar 1.4. Memori data internal

Gambar 1.5. RAM internal 128 byte paling bawah

Page 174: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 174

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

Gambar 1.6. RAM internal 128 byte paling atas 1.1.3. Special Function Register 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. Akses baca untuk alamat ini akan menghasilkan data random, dan akses tulis akan menghasilkan efek yang tak jelas.

Accumulator

ACC adalah register akumulator. Mnemonik untuk instruksi spesifik akumulator ini secara sederhana dapat disingkat sebagai A.

Register B

Register B digunakan pada saat opersi perkalian dan pembagian. Selain untuk keperluan tersebut diatas, register ini dapat digunakan untuk register bebas.

Program Status Word

Register PSW terdiri dari informasi status dari program yang secara detail ditunjukkan pada Tabel 1.1.

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

Page 175: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 175

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.

Gambar 1.7. Peta SFR 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.

Page 176: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 176

Register Control

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

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 ( perhatikan pada gambar 1.9, dengan lokasi alamat D0h ). Pada PSW ini kita dapat memantau beberapa status yang meliputi: carry bit, auxiliary carry ( untuk operasi BCD ), dua bit pemilih bank register, flag overflow, sebuah bit paritas dan dua flag status yang bisa didifinisikan sendiri. Bit carry dapat juga anda guakan pada keperluan operasi aritmatika, juga bisa digunakan sebagai universal akumulator untuk beberapa operasi boolean.

Table 1.1. Program Status Word

MSB LSB

CY AC F0 RS1 RS0 OV - P

BIT SYMBOL FUNCTION

PSW.7 CY Carry flag.

PSW.6 AC Auxilliary Carry flag. (For BCD operations.)

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

PSW.4 RS1 Register bank select control bit 1. Set/cleared by software to determine working register bank. (See Note.)

PSW.3 RS0 Register bank select control bit 0. Set/cleared by software todetermine working register bank. (See Note.)

PSW.2 OV Overflow flag.

PSW.1 - User-definable flag.

PSW.0 P

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

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

Page 177: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 177

Tabel 1. 2. Alamat rekening bank

RS1 RS0 Bank Address RAM

0 0 0 00 h - 07 h

0 1 1 08 h - 0F h

1 0 2 10 h - 17 h

1 1 3 18 h - 1F h

1.2. Pengalamatan

Mode pengalamatan, mengacu bagaimana anda mengalamati suatu lokasi memori tertentu Mode pengalamatan pada set instruksi 8051 adalah ditunjukkan sebagai berikut

Immediate Addressing MOV A,#20h Direct Addressing MOV A,30h Indirect Addressing MOV A,@R0 External Direct MOVX A,@DPTR Code Indirect MOVC A,@A+DPTR

1.2.1 Immediate Addressing

Immediate addressing dinamakan seperti ini, karena nilai yang akan disimpan didalam memori, secara langsung berada dalam kode.

org 0h start:MOV A,#20h; put constant 20 into Acc end Org 0h Start:MOV 70h,#0h; put constant 0 into RAM 70h MOV 71h,#1h; MOV 72h,#2h; end ; Org 0h Start:MOV DPTR,#1234h;put constant 1234 into DPTR end Org 0h Start:MOV PSW,#0; Select register bank 0 MOV R0,#0; put 0 into register 0 MOV R1,#1; put 1 into register 1 MOV R2,#2; put 2 into register 2 MOV R3,#3; put 3 into register 3 MOV R4,#4; put 4 into register 4 MOV R5,#5; put 5 into register 5 MOV R6,#6; put 6 into register 6 MOV R7,#7; put 7 into register 7 end ;

org 0h Start:MOV PSW,#8; Select register bank 1 MOV R0,#0; put 0 into register 0 MOV R1,#1; put 1 into register 1 MOV R2,#2; put 2 into register 2

Page 178: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 178

MOV R3,#3; put 3 into register 3 MOV R4,#4; put 4 into register 4 MOV R5,#5; put 5 into register 5 MOV R6,#6; put 6 into register 6 MOV R7,#7; put 7 into register 7 end

Immediate addressing adalah pengalamatan yang sangat cepat karena nilai yang akan diloadkan berada didalam instruksi tersebut.

1.2.2. Direct Addressing

Disebut direct addressing karena nilai yang akan disimpan didalam memori, diperoleh secara langsung dari memori yang lain.

;

org 0h Start:MOV A,30h; end ; Org 0h Start:Mov 70h,#1;put constant 1 into RAM 70h Mov A, 70h;copy RAM 70 content into Acc Mov A,#0 ;put constant 0 into Acc Mov 90h,A ;copy Acc content into RAM 90h end ; Inbyte equ 70h Port1 equ 90h Org 0h Start: Mov Inbyte,#3;put constant 3 into RAM 70h Mov A,Inbyte ;copy RAM 70h content into Acc Mov A,#0 ;Clear accumulator Mov Port1,A ;copy Acc content into RAM 90h end ; Percobaan 2.5.3: Org 0h Mov DPTR,#Character Start:Mov A, #0 Inc DPTR Movc A, @A+DPTR Mov R0,A Sjmp Start Character: DB 0,1,2,3,4,5,6,7,8,9

Page 179: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 179

1.2.3 Indirect Addressing

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

MOV A,@R0

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

MOV R0,#99h ;

MOV @R0,#01h;

Instruksi tersebut adalah tidak valid. Karena indirect addressing selalu mengacu ke RAM internal, dua instruksi ini akan menulis nilai 01 ke RAM internal alamat 99h pada 8052. Pada 8051 instruksi tersebut akan menghasilkan hasil yang tak terdifinisi, karena 8051 hanya mempunyai internal RAM 128 byte

Org 0h Start: Mov PSW, #0 ; choose register bank 0 Mov R0, #78h; put constant 78h into R0 Mov @R0, #1 ; put contanta 1 into 78h end ; Org 0h Start: Mov PSW,#0; pilih register bank 1 Mov R0,90h; copy RAM 90h content into R0 Mov @R0,#1; put constant 1 into 90h End ;

1.3. Set Instruksi

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

Page 180: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 180

Intruksi MOV A,$7F merupakan contoh sebuah intruksi dasar yang sangat spesifik, MOV merupakan ‘kata kerja’ yang memerintahkan peng-copy-an data, merupakan predikat dalam kalimat perintah ini. Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini adalah

data yang ada di dalam memori nomor $7F di-copy-kan ke Akumulator A.

Penyebutan data dalam MCS51

Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara untuk menyebut data (dalam bahasa Inggris sering disebut sebagai ‘Addressing Mode’), antara lain sebagai berikut. 1. Penyebutan data konstan (immediate addressing mode): MOV A,#$20. Data konstan

merupakan data yang berada di dalam instruksi. Contoh instruksi ini mempunyai makna data konstan $20 (sebagai data konstan ditandai dengan ‘#’) di-copy-kan ke Akumulator A. Yang perlu benar-benar diperhatikan dalam perintah ini adalah bilangan $20 merupakan bagian dari instruksi.

2. Pnyebutan data secara langsung (direct addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori dengan cara menyebut nomor memori tempat data

tersebut berada : MOV A,$30. Contoh instruksi ini mempunyai makna data yang berada di

dalam memori nomor $30 di-copy-kan ke Akumulator. Sekilas intruksi ini sama dengan instruksi data konstan di atas, perbedaannya instruksi di atas memakai tanda ‘#’ yang menandai $20 adalah data konstan, sedangkan dalam instruksi ini karena tidak ada tanda ‘#’ maka $30 adalah nomor dari memori.

3. Penyebutan data secara tidak langsung (indirect addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori, kalau memori penyimpan data ini letaknya berubah-rubah sehingga nomor memori tidak disebut secara langsung tapi di-‘titip’-kan ke

register lain : MOV A,@R0. 4. Dalam instruksi ini register serba guna R0 dipakai untuk mencatat nomor memori, sehingga

instruksi ini mempunyai makna memori yang nomornya tercatat dalam R0 isinya di-copy-kan ke Akumulator A.

5. Tanda ‘@’ dipakai untuk menandai nomor memori disimpan di dalam R0. 6. Bandingkan dengan instruksi penyebutan nomor memori secara langsung di atas, dalam

instruksi ini nomor memori terlebih dulu disimpan di R0 dan R0 berperan menunjuk memori mana yang dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga akan berubah pula.

7. Dalam instruksi ini register serba guna R0 berfungsi dengan register penampung alamat (indirect address register), selain R0 register serba guna R1 juga bisa dipakai sebagai register penampung alamat.

8. Penyebutan data dalam register (register addressing mode): MOV A,R5. Instruksi ini mempunyai makna data dalam register serba guna R5 di-copy-kan ke Akumulator A. Instruksi ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.

9. Data yang dimaksud dalam bahasan di atas semuanya berada di dalam memori data (termasuk register serba guna letaknya juga di dalam memori data). Dalam penulisan program, sering-sering diperlukan tabel baku yang disimpan bersama dengan program tersebut. Tabel semacam ini sesungguhnya merupakan data yang berada di dalam memori program!

10. Untuk keperluan ini, MCS51 mempunyai cara penyebutan data dalam memori program

yang dilakukan secara indirect (code indirect addressing mode) : MOVC A,@A+DPTR. Perhatikan dalam instruksi ini MOV digantikan dengan MOVC, tambahan huruf C tersebut

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

Page 181: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 181

Tanda ‘@’ dipakai untuk menandai A+DPTR dipakai untuk menyatakan nomor memori yang

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

Secara keseluruhan AT8951 mempunyai sebanyak 255 macam instruksi, yang dibentuk dengan mengkombinasikan ‘kata kerja’ dan objek. “Kata kerja’ tersebut secara kelompok dibahas sebagai berikut : 1.3.1 Instruksi copy data Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang artinya memindahkan, meskipun demikian lebih tepat dikatakan perintah ini mempunyai makna peng-copy-an data.

Hal ini bisa dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan, Akumulator A dan register serba guna R7 berisikan data yang sama, yang asalnya tersimpan di dalam R7.

Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah ini pada memori data dituliskan menjadi MOV, misalkan :

MOV A,$20

MOV A,@R1

MOV A,P1

MOV P3,A

Untuk pemakaian pada memori program, perintah ini dituliskan menjadi MOVC, hanya ada 2 jenis instruksi yang memakai MOVC, yakni:

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

Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang dipakai untuk memori data

eksternal (X singkatakan dari External). Perintah ini hanya dimiliki oleh anggota keluarga MCS51 yang mempunyai memori data eksternal, misalnya AT89C51 dan lain sebagainya, dan jelas tidak dikenal oleh kelompok AT89Cx051 yang tidam punya memori data eksternal.

Hanya ada 6 macam instruksi yang memakai MOVX, instruksi-instruksi tersebut adalah: MOVX A,@DPTR

MOVX A,@R0

MOVX A,@R1

MOVX @DPTR,A

MOVX @R0,A

MOVX @R1,A

1.3.2 Instruksi Aritmatika

Perintah ADD dan ADDC Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry (C flag dalam PSW – Program Status Word) berfungsi sebagai penampung limpahan hasil penjumlahan. Jika hasil penjumlahan tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan bernilai ‘1’, kalau tidak bit Carry

bernilai ‘0’. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut dijumlahkan bersama. Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari bilangan konstan, dari register serba guna, dari memori data yang nomor memorinya disebut secara langsung maupun tidak langsung, seperti terlihat dalam contoh berikut :

ADD A,R0 ; register serba guna

ADD A,#$23 ; bilangan konstan

ADD A,@R0 ; no memori tak langsung

ADD A,P1 ; no memori langsung (port 1)

Page 182: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 182

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

‘0’. SUBB A,R0 ; A = A - R0 - C

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

SUBB A,@R1

SUBB A,P0

Perintah DA Perintah DA (Decimal Adjust) dipakai setelah perintah ADD; ADDC atau SUBB, dipakai untuk merubah nilai biner 8 bit yang tersimpan dalam Akumulator menjadi 2 buah bilangan desimal yang masing-masing terdiri dari nilai biner 4 bit. Perintah MUL AB Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang bobotnya lebih besar ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih kecil ditampung di

Akumulator A. Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai hasil perkalian yang

ada dalam register B. Bit OV akan bernilai ‘0’ jika register B bernilai $00, kalau tidak bit OV bernilai ‘1’. MOV A,#10

MOV B,#20

MUL AB

Perintah DIV AB Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator, sedangkan sisa

pembagian berupa bilangan biner 8 bit ditampung di register B. Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai sebelum pembagian

yang ada dalam register B. Bit OV akan bernilai ‘1’ jika register B asalnya bernilai $00.

Table 1.3. Instruksi Aritmatika

Addressing Mode Exect. Mnemonic Operation

Dir Ind Reg Imm Timer uS

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

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

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

Inc A A=A+1 Accumulator Only 1

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

Inc DPTR DPTR=DPTR+1 Data Pointer Only 2

Dec A A=A-1 Accumulator Only 1

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

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

Page 183: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 183

Div AB A=Int[A/B] B=Mod[A/B]

Accumulator and B only 4

DA A Dec Adjust Accumulator Only 1

1.3.3 Instruksi Logika

Kelompok perintah ini dipakai untuk melakukan operasi logika mikrokontroler MCS51, operasi logika yang bisa dilakukan adalah operasi AND (kode operasi ANL), operasi OR (kode operasi ORL) dan operasi Exclusive-OR (kode operasi XRL). Data yang dipakai dalam operasi ini bisa berupa data yang berada dalam Akumulator atau data yang berada dalam memori-data, hal ini sedikit berlainan dengan operasi aritmatik yang harus melihatkan Akumulator secara aktip. Hasil operasi ditampung di sumber data yang pertama.

1. Operasi logika AND banyak dipakai untuk me-‘0’-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data

konstan yang di-ANL-kan bilangan asal. Bit yang ingin di-‘0’-kan diwakili dengan ‘0’ pada data konstan, sedangkan bit lainnya diberi nilai ‘1’, misalnya. Instruksi ANL P1,#

01111110b akan mengakibatkan bit 0 dan bit 7 dari Port 1 (P1) bernilai ‘0’ sedangkan bit-bit lainnya tetap tidak berubah nilai.

2. Operasi logika OR banyak dipakai untuk me-‘1’-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data

konstan yang di-ORL-kan bilangan asal. Bit yang ingin di-‘1’-kan diwakili dengan ‘1’ pada data konstan, sedangkan bit lainnya diberi nilai ‘0’, misalnya :Instruksi ORL A,#

01111110b akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator bernilai ‘1’ sedangkan bit-bit lainnya tetap tidak berubah nilai.

3. Operasi logika Exclusive-OR banyak dipakai untuk membalik nilai (complement) beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai diwakili dengan ‘1’ pada data konstan, sedangkan bit lainnya diberi nilai ‘0’, misalnya: Instruksi XRL A,#01111110b akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.

Table 1.4. Instruksi Logika

Addressing Mode Exect. Mnemonic Operation

Dir Ind Reg Imm Timer uS

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

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

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

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

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

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

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

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

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

Page 184: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 184

CLR A A=00h Accumulator only 1

CPL A A= not A Accumulator only 1

RL A Rotate A left 1 bit Accumulator only 1

RLC A Rotate A left trough Carry

Accumulator only 1

RR A Rotate A right 1 bit Accumulator only 1

RRC Rotate A right trough carry

Accumulator only 1

SWAP A Swap nibbles in A Accumulator only 1

Operasi logika pada umumnya mencakup empat hal, yaitu operasi AND, operasi OR, operasi EX-OR dan operasi NOT. MCS51 hanya bisa melaksanakan tiga jenis operasi logika yang ada, yakni

intruksi ANL (AND Logical) untuk operasi AND instruksi ORL (OR Logical) untuk operasi OR, CPL (Complement bit) untuk operasi NOT. Bit Carry pada PSW diperlakukan sebagai ‘akumulator bit’, dengan demikian operasi AND dan operasi OR dilakukan antara bit yang tersimpan pada bit Carry dengan salah satu dari 256 bit data yang dibahas di atas. Contoh dari instruksi-instruksi ini adalah : ANL C,P1.1

ANL C,/P1.2

Instruksi ANL C,P1.1 meng-AND-kan nilai pada bit Carry dengan nilai Port 1 bit 1 (P1.1), dan hasil operasi tersebut ditampung pada bit Carry. Instruksi ANL C,/P1.1 persis sama dengan

instruksi sebelumnya, hanya saja sebelum di-AND-kan, nilai P1.1 dibalik (complemented) lebih dulu, jika nilai P1.1=‘0’ maka yang di-AND-kan dengan bit Carry adalah ‘1’, demikian pula

sebaliknya. Hal serupa berlaku pada instruksi ORL. Instruksi CPL dipakai untuk membalik (complement) nilai semua 256 bit data yang dibahas di atas. Misalnya :

CPL C

CPL P1.0

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

1.3.4 Instruksi Lompatan

Pada dasarnya program dijalankan intruksi demi instruksi, artinya selesai menjalankan satu instruksi mikrokontroler langsung menjalankan instruksi berikutnya, untuk keperluan ini mikrokontroler dilengkapi dengan Program Counter yang mengatur pengambilan intruksi secara berurutan. Meskipun demikian, program yang kerjanya hanya berurutan saja tidaklah banyak artinya, untuk keperluan ini mikrokontroler dilengkapi dengan instruksi-instruksi untuk mengatur alur program. Secara umum kelompok instruksi yang dipakai untuk mengatur alur program terdiri atas

instruksi-instruksi JUMP (setara dengan statemen GOTO dalam Pascal), instruksi-instruksi untuk membuat dan memakai sub-rutin/modul (setara dengan PROCEDURE dalam Pascal), instruksi-

instruksi JUMP bersyarat (conditional Jump, setara dengan statemen IF .. THEN dalam Pascal). Di samping itu ada pula instruksi PUSH dan POP yang bisa memengaruhi alur program.

Page 185: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 185

Karena Program Counter adalah satu-satunya register dalam mikrokontroler yang mengatur alur program, maka kelompok instruksi pengatur program yang dibicarakan di atas, semuanya merubah nilai Program Counter, sehingga pada saat kelompok instruksi ini dijalankan, nilai Program Counter akan tidak akan runtun dari nilai instruksi sebelumnya. Selain karena instruksi-instruksi di atas, nilai Program Counter bisa pula berubah karena pengaruh perangkat keras, yaitu saat mikrokontroler di-reset atau menerima sinyal interupsi dari perangkat input/output. Hal ini akan dibicarakan secara detail dibagian lagi. Mikrokontroler menjalankan intruksi demi instruksi, selesai menjalankan satu instruksi mikrokontroler langsung menjalankan instruksi berikutnya, hal ini dilakukan dengan cara nilai Program Counter bertambah sebanyak jumlah byte yang membentuk instruksi yang sedang dijalankan, dengan demikian pada saat instruksi bersangkutan dijalankan Program Counter selalu menyimpan nomor memori-program yang menyimpan instruksi berikutnya.

Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai Program Counter yang runtun sesuai dengan alur program diganti dengan nomor memori-program baru yang dikehendaki programer.

Mikrokontroler MCS51 mempunyai 3 macam intruksi JUMP, yakni instruksi LJMP (Long Jump),

instruksi AJMP (Absolute Jump) dan instruksi SJMP (Short Jump). Kerja dari ketiga instruksi ini persis sama, yakni memberi nilai baru pada Program Counter, kecepatan melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan waktu 2 periode instruksi (jika MCS51 bekerja pada frekuensi 12 MHz, maka instruksi ini dijalankan dalam waktu 2 mikro-detik),

yang berbeda dalam jumlah byte pembentuk instruksinya, instruksi LJMP dibentuk dengan 3 byte, sedangkan instuksi AJMP dan SJMP cukup 2 byte. Instruksi LJMP Kode untuk instruksi LJMP adalah $02, nomor memori-program baru yang dituju dinyatakan dengan bilangan biner 16 bit, dengan demikian instruksi ini bisa menjangkau semua memori-

program MCS51 yang jumlahnya 64 KiloByte. Instruksi LJMP terdiri atas 3 byte, yang bisa dinyatakan dengan bentuk umum 02 aa aa, aa yang pertama adalah nomor memori-program

bit 8 sampai dengan bit 15, sedangkan aa yang kedua adalah nomor memori-program bit 0 sampai dengan bit 7.

Pemakaian instruksi LJMP bisa dipelajari dari potongan program berikut :

LJMP TugasBaru

ORG $2000

TugasBaru:

MOV A,P3.1

Dalam potongan program di atas, ORG adalah perintah pada assembler agar berikutnya assembler bekerja pada memori-program nomor yang disebut di belakang ORG (dalam hal ini

minta assembler berikutnya bekerja pada memori-program nomor $2000). TugasBaru disebut sebagai LABEL, yakni sarana assembler untuk menandai/ menamai nomor memori-program.

Dengan demikian, dalam potongan program di atas, memori-program nomor $2000 diberi nama TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai $2000. (Catatan : LABEL ditulis minimal satu huruf lebih kiri dari instruksi, artinya LABEL ditulis setelah menekan

tombol Enter, tapi instruksi ditulis setelah menekan tombol Enter, kemudian diikuti dengan 1 tombol spasi atau tombol TAB).

Dengan demikian intruksi LJMP TugasBaru di atas, sama artinya dengan LJMP $2000 yang oleh

assembler akan diterjemahkan menjadi 02 20 00 (heksadesimal).

Page 186: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 186

Instruksi AJMP Nomor memori-program baru yang dituju dinyatakan dengan bilangan biner 11 bit, dengan demikian instruksi ini hanya bisa menjangkau satu daerah memori-program MCS51 sejauh 2

KiloByte. Instruksi AJMP terdiri atas 2 byte, byte pertama merupakan kode untuk instruksi AJMP (00001b) yang digabung dengan nomor memori-program bit nomor 8 sampai dengan bit nomor 10, byte kedua dipakai untuk menyatakan nomor memori-program bit nomor 0 sampai dengan bit nomor 7.

Berikut ini adalah potongan program untuk menjelaskan pemakaian instruksi AJMP:

ORG $800

AJMP DaerahIni

AJMP DaerahLain

ORG $900

DaerahIni:

. . .

ORG $1000

DaerahLain:

. . .

Potongan program di atas dimulai di memori-program nomor $800, dengan demikian instruksi

AJMP DaerahIni bisa dipakai, karena nomor-memori $800 (tempat instruksi AJMP DaerahIni)

dan LABEL DaerahIni yang terletak di dalam satu daerah memori-progam 2 KiloByte yang sama dengan. (Dikatakan terletak di dalam satu daerah memori-program 2 KiloByte yang sama, karena bit nomor 11 sampai dengan bit nomor 15 dari nomor memorinya sama).

Tapi AJMP DaerahLain akan di-salah-kan oleh Assembler, karena DaerahLain yang terletak di memori-program nomor $1000 terletak di daerah memori-program 2 KiloByte yang lain.

Karena instruksi AJMP hanya terdiri dari 2 byte, sedangkan instruksi LJMP 3 byte, maka memakai instruksi AJMP lebih hemat memori-program dibanding dengan LJMP. Hanya saja karena jangkauan instrusksi AJMP hanya 2 KiloByte, pemakaiannya harus hati-hati. Memori-program IC mikrokontroler AT89C1051 dan AT89C2051 masing-masing hanya 1 KiloByte dan 2 KiloByte, dengan demikian program untuk kedua mikrokontroler di atas tidak

perlu memakai instruksi LJMP, karena program yang ditulis tidak mungkin menjangkau lebih dari 2 KiloByte memori-program. Instruksi SJMP Nomor memori-program dalam instruksi ini tidak dinyatakan dengan nomor memori-program yang sesungguhnya, tapi dinyatakan dengan ‘pergeseran relatip’ terhadap nilai Program Counter saat instruksi ini dilaksanakan. Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2’s complement, yang bisa dipakai untuk menyakatakan nilai antara –128 sampai dengan +127. Nilai minus dipakai untuk menyatakan bergeser ke instruksi-instruksi sebelumnya, sedangkan nilai positip untuk menyatakan bergeser ke instruksi-instruksi sesudahnya.

Meskipun jangkauan instruksi SJMP hanya –128 sampai +127, tapi instruksi ini tidak dibatasi dengan pengertian daerah memori-program 2 KiloByte yang membatasi instruksi AJMP.

ORG $0F80

SJMP DaerahLain

. . .

ORG $1000

DaerahLain:

Dalam potongan program di atas, memori-program $0F80 tidak terletak dalam daerah memori-program 2 KiloByte yang sama dengan $1000, tapi instruksi SJMP DaerahLain tetap bisa

dipakai, asalkan jarak antara instruksi itu dengan LABEL DaerahLain tidak lebih dari 127 byte.

Page 187: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 187

Instruksi sub-rutin

Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul program, selain melibatkan Program Counter, melibatkan pula Stack yang diatur oleh Register Stack Pointer. Sub-rutin merupakan suatu potong program yang karena berbagai pertimbangan dipisahkan dari program utama. Bagian-bagian di program utama akan ‘memanggil’ (CALL) sub-rutin, artinya mikrokontroler sementara meninggalkan alur program utama untuk mengerjakan instruksi-instruksi dalam sub-rutin, selesai mengerjakan sub-rutin mikrokontroler kembali ke alur program utama.

Satu-satunya cara membentuk sub-rutin adalah memberi instruksi RET pada akhir potongan

program sub-rutin. Program sub-rutin di-’panggil’ dengan instruksi ACALL atau LCALL. Agar nantinya mikrokontroler bisa meneruskan alur program utama, pada saat menerima

instruksi ACALL atau LCALL, sebelum mikrokontroler pergi mengerjakan sub-rutin, nilai Program Counter saat itu disimpan dulu ke dalam Stack (Stack adalah sebagian kecil dari memori-data yang dipakai untuk menyimpan nilai Program Counter secara otomatis, kerja dari Stack dikendalikan oleh Register Stack Poiner). Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam sub-rutin sampai

menjumpai instruksi RET yang berfungsi sebagai penutup dari sub-rutin. Saat menerima

instruksi RET, nilai asal Program Counter sebelum mengerjakan sub-rutin yang disimpan di dalam Stack, dikembalikan ke Program Counter sehingga mikrokontroler bisa meneruskan pekerjaan di alur program utama.

Instruksi ACALL dipakai untuk me-‘manggil’ program sub-rutin dalam daerah memori-program 2 KiloByte yang sama, setara dengan instruksi AJMP yang sudah dibahas di atas. Sedangkan instruksi LCALL setara dengan instruksi LCALL, yang bisa menjangkau seluruh memori-program

mikrokontroler MCS51 sebanyak 64 KiloByte. (Tapi tidak ada instrusk SCALL yang setara dengan instruksi SJMP). Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai instruksi LCALL.

Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping itu masih ada pula instruksi RETI, yakni instruksi yang dipakai untuk mengakhiri Program Layanan Interupsi (Interrupt Service Routine), yaitu semacam program sub-rutin yang dijalankan mikrokontroler pada saat mikrokontroler menerima sinyal permintaan interupsi. Catatan : Saat mikrokontroler menerima sinyal permintaaan interupsi, mikrokontroler akan

melakukan satu hal yang setara dengan intruksi LCALL untuk menjalankan Program

Layanan Interupsi dari sinyal interupsi bersangkutan. Di samping itu, mikrokontroler juga me-‘mati’-kan sementara mekanisme layanan interupsi, sehingga permintaan interupsi berikutnya tidak dilayani. Saat menerima instruksi

RETI, makanisme layanan interusi kembali diaktipkan dan mikrokontroler melaksanakan hal yang setara dengan instruksi RET.

Instruksi Lompatan Bersyarat

Instruksi Jump bersyarat merupakan instruksi inti bagi mikrokontroler, tanpa kelompok instruksi ini program yang ditulis tidak banyak berarti. Instruksi-instruksi ini selain melibatkan Program Counter, melibatkan pula kondisi-kondisi tertentu yang biasanya dicatat dalam bit-bit tertentu yang dihimpun dalam Register tertentu. Khusus untuk keluarga mikrokontroler MCS51 yang mempunyai kemampuan menangani operasi dalam level bit, instruksi jump bersyarat dalam MCS51 dikaitkan pula dengan kemampuan operasi bit MCS51. Nomor memori-program baru yang harus dituju tidak dinyatakan dengan nomor memori-

program yang sesungguhnya, tapi dinyatakan dengan ‘pergeseran relatip’ terhadap nilai

Program Counter saat instruksi ini dilaksanakan. Cara ini dipakai pula untuk instruksi SJMP.

Page 188: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 188

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

MOV A,#0

JNZ BukanNol

JZ Nol

. . .

BukanNol:

. . .

Nol :

. . .

Dalam contoh program di atas, MOV A,#0 membuat A bernilai nol, hal ini mengakibatkan

instruksi JNZ BukanNol tidak akan pernah dikerjakan (JNZ artinya Jump kalau nilai A<>0,

syarat ini tidak pernah dipenuhi karena saat instruksi ini dijalankan nilai A=0), sedangankan

instruksi JZ Nol selalu dikerjakan karena syaratnya selalu dipenuhi. Instruksi JC / JNC Instruksi JC (Jump on Carry) dan instruksi JNC (Jump on no Carry) adalah instruksi jump bersyarat yang memantau nilai bit Carry di dalam Program Status Word (PSW).

Bit Carry merupakan bit yang banyak sekali dipakai untuk keperluan operasi bit, untuk menghemat pemakaian memori-program disediakan 2 instruksi yang khusus untuk memeriksa

keadaan bit Carry, yakni JC dan JNC. Karena bit akan diperiksa sudah pasti, yakni bit Carry, maka instruksi ini cukup dibentuk dengan 2 byte saja, dengan demikian bisa lebih menghemat memori program.

JC Periksa

JB PSW.7,Periksa

Hasil kerja kedua instruksi di atas sama, yakni MCS51 akan JUMP ke Periksa jika ternyata bit Carry bernilai ‘1’ (ingat bit Carry sama dengan PSW bit 7). Meskipun sama tapi instruksi JC Periksa lebih pendek dari instruksi JB PSW.7,Periksa, instruksi pertama dibentuk dengan 2 byte dan instruksi yang kedua 3 byte.

Instruksi JBC sama dengan instruksi JB, hanya saja jika ternyata bit yang diperiksa

memang benar bernilai ‘1’, selain MCS51 akan JUMP ke instruksi lain yang dikehendaki MCS51 akan me-nol-kan bit yang baru saja diperiksa Instruksi JB / JNB / JBC Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan instruksi JBC (Jump on

Bit Set Then Clear Bit) merupakan instruksi Jump bersyarat yang memantau nilai-nilai bit tertentu. Bit-bit tertentu bisa merupakan bit-bit dalam register status maupun kaki input mikrokontroler MCS51. Pengujian Nilai Boolean dilakukan dengan instruksi JUMP bersyarat, ada 5 instruksi yang

dipakai untuk keperluan ini, yakni instruksi JB (JUMP if bit set), JNB (JUMP if bit Not Set), JC

(JUMP if Carry Bit set), JNC (JUMP if Carry Bit Not Set) dan JBC (JUMP if Bit Set and Clear

Bit).

Dalam instruksi JB dan JNB, salah satu dari 256 bit yang ada akan diperiksa, jika keadaannya (false atau true) memenuhi syarat, maka MCS51 akan menjalankan instruksi yang tersimpan di memori-program yang dimaksud. Alamat memori-program dinyatakan dengan bilangan relatip terhadap nilai Program Counter saat itu, dan cukup dinyatakan dengan angka 1 byte. Dengan

Page 189: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 189

demikian instruksi ini terdisi dari 3 byte, byte pertama adalah kode operasinya ($29 untuk JB dan $30 untuk JNB), byte kedua untuk menyatakan nomor bit yang harus diuji, dan byte ketiga adalah bilangan relatip untuk instruksi tujuan.

Contoh pemakaian instruksi JB dan JNB sebagai berikut : JB P1.1,$

JNB P1.1,$

Instruksi-instruksi di atas memantau kedaan kaki IC MCS51 Port 1 bit 1. Instruksi pertama

memantau P1.1, jika P1.1 bernilai ‘1’ maka MCS51 akan mengulang instruksi ini, (tanda $ mempunyai arti jika syarat terpenuhi kerjakan lagi instruksi bersangkutan). Instruksi

berikutnya melakukan hal sebaliknya, yakni selama P1.1 bernilai ‘0’ maka MCS51 akan tertahan pada instruksi ini.

Instruksi proses dan test

Instruksi-instruksi Jump bersyarat yang dibahas di atas, memantau kondisi yang sudah terjadi yang dicatat MCS51. Ada dua instruksi yang melakukan dulu suatu proses baru kemudian memantau hasil proses untuk menentukan apakah harus Jump. Kedua instruksi yang dimaksud

adalah instruksi DJNZ dan instruksi CJNE. Instruksi DJNZ Instruksi DJNZ (Decrement and Jump if not Zero), merupakan instruksi yang akan mengurangi

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

MOV R0,#$23

DJNZ R0,$

Instruksi MOV R0,#$23 memberi nilai $23 pada R0, selanjutnya setiap kali instruksi DJNZ R0,$ dikerjakan, MCS51 akan mengurangi nilai R0 dengan ‘1’, jika R0 belum menjadi nol maka

MCS51 akan mengulang instruksi tersebut (tanda $ dalam instruksi ini maksudnya adalah kerjakan kembali instruksi ini). Selama mengerjakan 2 instruksi di atas, semua pekerjaan lain

akan tertunda, waktu tundanya ditentukan oleh besarnya nilai yang diisikan ke R0. Instruksi CJNE Instruksi CJNE (Compare and Jump if Not Equal) membandingkan dua nilai yang disebut dan MCS akan Jump kalau kedua nilai tersebut tidak sama!

MOV A,P1

CJNE A,#$0A,TidakSama

...

SJMP EXIT

;

TidakSama:

...

Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE A,#$0A,Tidaksama

memeriksa apakah nilai Port 1 yang sudah disimpan di A sama dengan $0A, jika tidak maka Jump ke TidakSama

Page 190: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 190

1.4. Interupsi

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

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

Page 191: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 191

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.

1.4.1. Sumber interupsi MCS51

Seperti terlihat dalam Gambar 2, AT89C51 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 AT89C52 mempunyai 2 sumber interupsi lain, yakni Interupsi Timer 2 bersumber dari Timer 2 yang memang tidak ada pada AT89C51. Bit IE0 (atau bit IE1) dalam TCON merupakan 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’.

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.

Page 192: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 192

1.4.2 Mengaktifkan Interupsi

Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-aktip-kan

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 sekali gus.

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 semua interrupsi. Jika EA=0, tidak ada interupsi yang akan dilayani. Jika EA=1, setiap interupsi akan akan dilayani satu per satu sesuai dengan bit yang disetting.

IE.6 - -

IE.5 - -

IE.4 ES Enables or disables the Serial Port interrupt. If ES=0, the Serial Port interrupt is disabled.

IE.3 ET1 Enables or disables the Timer 1 Overflow interrupt. If ET1=0, the Timer 1 interrupt is disabled.

IE.2 EX1 Enables or disables External Interrupt 1. If EX1=0, External interrupt 1 is disabled.

IE.1 ET0 Enables or disables the Timer 0 Overflow interrupt. If ET0=0, the Timer 0 interrupt is disabled.

IE.0 EX0 Enables or disables External interrupt 0. If EX0=0, External interrupt 0 is disabled.

1.4.3 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 $0003, untuk interupsi timer 0 adalah $000B, untuk interupsi ekternal INT1 adalah $0013, untuk interupsi timer 1 adalah $001B dan untuk interupsi port seri adalah $0023. 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.

Page 193: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 193

Source Vector Address

IE0 0003H

TF0 000BH

IE1 0013H

TF1 001BH

RI + TI 0023H

1.4.4 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 2.

Setelah reset, semua bit dalam register IP bernilai ‘0’, artinya semua sumber interupsi ditempatkan pada tingkatan tanpa perioritas. Masing-masing sumber interupsi bisa ditempatkan pada tingkatan 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 meng-interupsi. 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.

Page 194: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 194

1.5 Timer Counter

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

MCS-51 mempunyai dua buah register timer/ counter 16 bit, yaitu Timer 0 dan Timer 1. Keduanya dapat dikonfigurasikan untuk beroperasi sebagai timer atau counter, seperti yang terlihat pada gambar di bawah.

Dapat

Diset

Pembacan Isi

Pencacah

Gambar 1.9. Konsep dasar Timer/Counter sebagai sarana input

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

1.5.1 Fasilitas Timer/Counter

Keluarga mikrokontroler MCS51, misalnya AT89C51 dan AT89Cx051, dilengkapi dengan dua perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer 1. Sedangkan untuk jenis yang lebih besar, misalnya AT89C52, mempunyai tambahan satu perangkat Timer/Counter lagi yang dinamakan sebagai Timer 2.

Page 195: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 195

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 $6A) dan register TH0 (Timer 0 High Byte, memori-data internal nomor $6C). Pencacah biner untuk Timer 1 dibentuk dengan register TL1 (Timer 1 Low Byte, memori-data

internal nomor $6B) dan register TH1 (Timer 1 High Byte, memori-data internal nomor $6D). Pencacah biner pembentuk Timer/Counter MCS51 merupakan pencacah biner menaik (count

up binary counter) yang mencacah dari $0000 sampai $FFFF, saat kedudukan pencacah berubah dari $FFFF kembali ke $0000 akan timbul sinyal limpahan. Untuk mengatur kerja Timer/Counter dipakai 2 register tambahan yang dipakai bersama oleh

Timer 0 dan Timer 1. Register tambahan tersebut adalah register TCON (Timer Control Register, memori-data internal nomor $88, bisa dialamat secara bit) dan register TMOD (Timer Mode

Register, memori-data internal nomor $89).

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 2a sampai Gambar 2d. 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 1.10 Mode 0 - Pencacah Biner 13 Bit

Pencacah biner dibentuk dengan TLx (maksudnya bisa TL0 atau TL1) sebagai pencacah biner 5 bit (meskipun kapasitas sesungguhnya 8 bit), limpahan dari pencacah biner 5 bit ini

dihubungkan ke THx (maksudnya bisa TH0 atau TH1) membentuk sebuah untaian pencacah biner 13 bit, limpahan dari pencacah 13 bit ini ditampung di flip-flop TFx (maksudnya bisa TF0 atau TF1) yang berada di dalam register TCON. Mode ini meneruskan sarana Timer yang ada pada mikrokontroler 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 1.11 Mode 1 - Pencacah Biner 16 Bit

Page 196: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 196

Mode ini sama dengan Mode 0, hanya saja register TLx dipakai sepenuhnya sebagai pencacah biner 8 bit, sehingga kapasitas pencacah biner yang tersbentuk adalah 16 bit. Seiring dengan sinyal denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari $0000 (biner 0000 0000 0000 0000), $0001, $0002 … sampai $FFFF (biner 1111 1111 1111 1111), kemudian melimpah kembali menjadi $0000. Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang

Gambar 1.12 Mode 2 - Pencacah Biner 8 Bit dengan Isi Ulang

TLx dipakai sebagai pencacah biner 8 bit, sedangkan THx dipakai untuk menyimpan nilai yang diisikan ulang ke TLx, setiap kali kedudukan TLx melimpah (berubah dari $FF menjadi $00). 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

Gambar 1.13 Mode 3 – Gabungan Pencacah Biner 16 Bit dan 8 Bit

Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah, yang pertama adalah untaian pencacah biner 16 bit tanpa fasiltas pemantau sinyal limpahan yang

dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner 8 bit dengan TF0 sebagai sarana pemantau limpahan. Pencacah biner 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.

Gambar 1.14 Denah susunan bit dalam register TMOD

Page 197: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 197

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 3a. 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 4).

Gambar 1.15 Denah susunan bit dalam register TCON

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

Gambar 3b) dipakai untuk keperluan mengatur kaki INT0 dan INT1, ke-empat bit ini dibahas dibagian lain.

BIT SYMBOL FUNCTION

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

TCON.6 TR1 Timer 1 Run control bit . Set/ cleared by software to turn Timer/ Counter on/off

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

TCON.4 TR0 Timer 1 Run control bit . Set/ cleared by software to turn Timer/ Counter on/off

TCON.3 IE1 Interrupt 1 Edge flag. Set by hardware when external interrupt edge detected. Cleared when interrupt processed.

TCON.2 IT1 Interrupt 1 type control bit. Set/ cleared by software to specefy falling edge/ low level trigerred external interupts

TCON.1 IE0 Interrupt 0 Edge flag. Set by hardware when external interrupt edge detected. Cleared when interrupt processed.

TCON.0 IT0 Interrupt 0 type control bit. Set/ cleared by software to specefy falling edge/ low level trigerred external interupts

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

Page 198: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 198

1. Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit penampung limpahan (lihat Gambar 2), TFx akan menjadi ‘1’ setiap kali pencacah biner yang terhubung padanya

melimpah (kedudukan pencacah berubah dari $FFFF kembali menjadi $0000). Bit TFx di-nol-kan dengan istruksi CLR TF0 atau CLR TF1. Jika sarana interupsi dari Timer 0/Timer 1

dipakai, TRx di-nol-kan saat MCS51 menjalankan rutin layanan interupsi (ISR – Interupt

Service Routine).

2. Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit pengatur saluran sinyal denyut, bila bit ini =0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti

mencacah. Bila bit GATE pada register TMOD =1, maka saluran sinyal denyut ini diatur bersama oleh TRx dan sinyal pada kaki INT0/INT1 (lihat Gambar 4).

1.5.2 Mengatur Timer

Gambar 4 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 1.16. Diagram blok timer/ counter

Setelah MCS51 di-reset register TMOD bernilai $00, hal ini berarti : 1. bit C/T* =’0’, menurut Gambar 4 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. 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’.

2. bit GATE=’0’, hal ini membuat output gerbang OR selalu ‘1’ tidak dipengaruhi keadaan ‘0’ atau ‘1’ pada kaki INT1 (P3.3). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan

Page 199: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 199

lewat bit TR1 dalam register TCON. Jika TR1=’1’ saklar S2 tertutup sehingga sinyal denyut dari S1 disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika

TR=’0’. Sebaliknya jika bit GATE=’1’, output gerbang OR akan mengikuti keadaan kaki INT1, saat

INT1=’0’ apa pun keadaan bit TR1 output gerbang AND selalu =’0’ dan saklar S1 selalu terbuka, agar saklar S1 bisa tertutup kaki INT1 dan bit TR1 harus =’1’ secara bersamaan.Jika sistem yang dirancang menghendaki kerja dari timer/counter dikendalikan

dari sinyal yang berasal dari luar chip, maka bit GATE harus dibuat menjadi ‘1’

3. bit M1 dan M0=’0’, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode 0), jika dikehendaki Timer 1 bekerja pada mode 1 seperti terlihat dalam Gambar 4, 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 $00, berarti Timer 1 bekerja sebagai pencacah biner 13 bit, sumber sinyal denyut dari osilator kristal atau Timer 1 bekerja sebagai ‘timer’, bit GATE =’0’ berarti

kaki INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya dikendalikan dari bit TR1. Dalam pemakaian biasanya dipakai pencacah biner 16 bit, untuk keperluan itu instruksi yang

diperlukan untuk mengatur TMOD adalah :

MOV TMOD,# 00010000b

Catatan:dalam instruksi di atas tanda ‘#’ menyatakan bagian di belakangnya adalah bilangan konstan yang akan diisikan ke TMOD, ‘b’ merupakan 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

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

Page 200: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 200

Timer dipakai, pengisian bit-bit dalam register TMOD harus dipikirkan sekali gus 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 $88) 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 1.11 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 TCON0 dan INT1.

1.6. Port Serial

Umumnya orang selalu menganggap port seri pada MCS51 adalah UART yang bekerja secara asinkron, jarang yang menyadari port seri tersebut bisa pula bekerja secara sinkron, pada hal sebagai port seri yang bekerja secara sinkron merupakan sarana yang baik sekali untuk menambah input/output bagi mikrokontroler.

Gambar 1.17. Komunikasi serial dengan komputer

Dikenal 2 macam cara transmisi data secara seri. Kedua cara tersebut dibedakan oleh sinyal denyut (clock) yang dipakai untuk men-‘dorong’ data seri, kalau clock dikirim bersama dengan data seri, cara tersebut dikatakan sebagai transmisi data seri secara sinkron. Sedangkan dalam transmisi data seri secara asinkron, clock tidak dikirim bersama data seri, rangkaian penerima data harus membangkitkan sendiri clock pendorong data seri. Port seri 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:

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.

Page 201: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 201

Data dikirim/diterima 8 bit sekali gus, 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.

1.6.1 Register-register Port Seri MCS51

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

Gambar 1.5.1. Register SBUF

SBUF merupakan SFR (Special Function Register) yang terletak pada memori-data internal dengan nomor $99. 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 $99), sesungguhnya SBUF terdiri dari 2 register yang berbeda.

Page 202: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 202

Gambar 1.5.2 Register SCON

SM2

Enables the multiprocessor communication feature in Modes 2 and 3. In Mode 2 or 3, if SM2 is set to 1, then Rl will not be activated if the received 9th data bit (RB8) is 0. In Mode 1, if SM2=1 then RI will not be activated if a valid stop bit was not received. In Mode 0, SM2 should be 0.

REN Enables serial reception. Set by software to enable reception. Clear by software to disable reception.

TB8 The 9th data bit that will be transmitted in Modes 2 and 3. Set or clear by software as desired.

RB8 In Modes 2 and 3, is the 9th data bit that was received. In Mode 1, it SM2=0, RB8 is the stop bit that was received. In Mode 0, RB8 is not used.

TI Transmit interrupt flag. Set by hardware at the end of the 8th bit time in Mode 0, or at the beginning of the stop bit in the other modes, in any serial transmission. Must be cleared by software.

RI Receive interrupt flag. Set by hardware at the end of the 8th bit time in Mode 0, or halfway through the stop bit time in the other modes, in any serial reception (except see SM2). Must be cleared by software.

SCON merupakan SFR (Special Function Register) yang terletak pada memori-data internal dengan nomor $98, 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 mengaktipkan kemampuan port seri menerima data. Pada

mode 0 kaki RxD (kaki P3.0) dipakai untuk mengirim data seri (REN=’0’) dan juga untuk menerima data seri (REN=’1’). Sifat ini terbawa pula pada saat port seri bekerja pada mode 1, 2 dan 3, meskipun pada mode-mode tersebut kaki RxD hanya dipakai untuk mengirim data, agar kaki RxD bisa 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.

Page 203: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 203

Bit ke 9 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti yang dikirim harus

ditentukan sendiri dengan program dan diletakkan pada TB8, dan bit pariti yang diterima pada RB8 dipakai untuk menentukan integritas data secara program pula. Tidak seperti dalam UART standard, semuanya itu dikerjakan oleh perangkat keras dalam IC UART.

5. Bit TI (bit 1) merupakan petanda yang setara dengan petanda TDRE (Transmitter Data Register Empty) yang umum dijumpai pada UART standard. Setelah port seri selesai

mengirim data yang disimpan ke-dalam SBUF, bit TI akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan dengan program agar bisa 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

Gambar 1.18 Bit SMOD dalam Register PCON

Mode 0 port serial

UART merupakan standard yang dipakai untuk komunikasi data seri dengan komputer, komunikasi data seri dengan modem dan lain sebagainya. Komunikasi data seri secara sinkron seperti mode 0, merupakan komunikasi data seri yang banyak dipakai untuk menghubungkan IC-IC digital dalam sebuah sistem, misalnya pada IC

Page 204: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 204

Serial EEPROM, cara ini belakangan menjadi makin populer karena rangkaiannya sederhana dan tidak makan tempat.

Dalam dunia digital, dikenal 3 macam teknik transmisi data seri secara sinkron untuk keperluan di atas, yang paling terkenal adalah teknik ciptaan Philips yang dinamakan sebagai I2C (Inter IC Communication), Motorola mengenalkan teknik yang dinamakan sebagai SPI (Serial Peripheral Interface) dan National Semiconductor menciptakan 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:

,

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:

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:

1.7. Bahasa Asembly

Secara fisik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai siklus pembacaan instruksi yang tersimpan di dalam memori. Mikrokontroler menentukan alamat dari memori program yang akan dibaca, dan melakukan proses baca data di memori. Data yang dibaca diinterprestasikan sebagai instruksi. Alamat instruksi disimpan oleh mikrokontroler di register, yang dikenal sebagai program counter. Instruksi ini misalnya program aritmatika yang melibatkan 2 register. Sarana yang ada dalam program assembly sangat minim, tidak seperti dalam bahasa pemrograman tingkat atas (high level language

Page 205: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 205

programming) semuanya sudah siap pakai. Penulis program assembly harus menentukan segalanya, menentukan letak program yang ditulisnya dalam memori-program, membuat data konstan dan tablel konstan dalam memori-program, membuat variabel yang dipakai kerja dalam memori-data dan lain sebagainya.

1.7.1 Program sumber assembly

Program-sumber assembly (assembly source program) merupakan kumpulan dari baris-baris perintah yang ditulis dengan program penyunting-teks (text editor) sederhana, misalnya

program EDIT.COM dalam DOS, atau program NOTEPAD dalam Windows atau MIDE-51. Kumpulan baris-printah tersebut biasanya disimpan ke dalam file dengan nama ekstensi *.ASM dan lain sebagainya, tergantung pada program Assembler yang akan dipakai untuk mengolah program-sumber assembly tersebut. Setiap baris-perintah merupakan sebuah perintah yang utuh, artinya sebuah perintah tidak mungkin dipecah menjadi lebih dari satu baris. Satu baris perintah bisa terdiri atas 4 bagian, bagian pertama dikenali sebagai label atau sering juga disebut sebagai symbol, bagian kedua dikenali sebagai kode operasi, bagian ketiga adalah operand dan bagian terakhir adalah komentar. Antara bagian-bagian tersebut dipisahkan dengan sebuah spasi atau tabulator. Bagian label

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

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

Sering sebuah baris-perintah hanya terdiri dari bagian label saja, baris demikian itu memang tidak bisa dikatakan sebagai baris-perintah yang sesungguhnya, tapi hanya sekedar memberi nama pada baris bersangkutan.

Bagian label sering disebut juga sebagai bagian symbol, hal ini terjadi kalau label tersebut tidak dipakai untuk menandai bagian program, melainkan dipakai untuk menandai bagian data.

Bagian kode operasi

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

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

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

Kode-operasi berbentuk mnemonic tidak dikenal mikroprosesor/mikrokontroler, agar program yang ditulis dengan kode mnemonic bisa dipakai untuk mengendalikan prosesor, program semacam itu diterjemahkan menjadi program yang dibentuk dari kode-operasi kode-biner,

yang dikenali oleh mikroprosesor/mikrokontroler.

Page 206: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 206

Tugas penerjemahan tersebut dilakukan oleh program yang dinamakan sebagai Program

Assembler.

Di luar kode-operasi yang ditentukan pabrik pembuat mikroprosesor/mikrokontroler, ada pula kode-operasi untuk mengatur kerja dari program assembler, misalnya dipakai untuk

menentukan letak program dalam memori (ORG), dipakai untuk membentuk variabel (DS), membentuk tabel dan data konstan (DB, DW) dan lain sebagainya. Bagian operand

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

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

Untuk membedakan operand yang berupa nomor-memori atau operand yang berupa data yang

siap di-operasi-kan, dipakai tanda-tanda khusus atau cara penulisan yang berlainan.

Di samping itu operand bisa berupa persamaan matematis sederhana atau persamaan Boolean, dalam hal semacam ini program Assembler akan menghitung nilai dari persamaan-persamaan dalam operand, selanjutnya merubah hasil perhitungan tersebut ke kode biner yang dimengerti oleh prosesor. Jadi perhitungan di dalam operand dilakukan oleh program assembler bukan oleh prosesor!

Bagian komentar

Bagian komentar merupakan catatan-catatan penulis program, bagian ini meskipun tidak mutlak diperlukan tapi sangat membantu masalah dokumentasi. Membaca komentar-komentar pada setiap baris-perintah, dengan mudah bisa dimengerti maksud tujuan baris bersangkutan, hal ini sangat membantu orang lain yang membaca program.

Pemisah bagian komentar dengan bagian sebelumnya adalah tanda spasi atau tabulator, meskipun demikian huruf pertama dari komentar sering-sering berupa tanda titik-koma, merupakan tanda pemisah khusus untuk komentar.

Untuk keperluan dokumentasi yang intensip, sering-sering sebuah baris yang merupakan komentar saja, dalam hal ini huruf pertama dari baris bersangkutan adalah tanda titik-koma. AT89S51 memiliki sekumpulan instruksi yang sangat lengkap. Instruksi MOV untuk byte dikelompokkan sesuai dengan mode pengalamatan (addressing modes). Mode pengalamatan menjelaskan bagaimana operand dioperasikan. Berikut penjelasan dari berbagai mode pengalamatan. Bentuk program assembly yang umum ialah sebagai berikut :

Page 207: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 207

Opcode Operand Komentar

Org 0H Start: Mov A, #11111110b; Isi Akumulator Mov R0, #7 ; Isi R0 dengan 7 Kiri: Mov P0, A ; Copy A ke P0 Call Delay ; Panggil subrutine Delay RL A DEC R0 CJNE R0, #0, Kiri Sjmp Start Delay: mov R1, #255 Del1: mov R2, #255 Del2: djnz R2, del2 djnz R1, del1 ret end

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

CJNE R5,#22H, aksi ;dibutuhkan 3 buah operand MOVX @DPTR, A ;dibutuhkan 2 buah operand RL A ;1 buah operand NOP ; tidak memerlukan operand

Program yang telah selesai kita buat dapat disimpan dengan ekstension .asm. Lalu kita dapat membuat program objek dengan ekstension HEX dengan menggunakan compiler MIDE-51, yang dijelaskan sebagai berikut:

1.7.2 Assembly Listing

Program-sumber assembly di atas, setelah selesai ditulis diserahkan ke program Assembler untuk diterjemahkan. Setiap prosesor mempunyai program assembler tersendiri, bahkan satu macam prosesor bisa memiliki beberapa macam program Assembler buatan pabrik perangkat lunak yang berlainan. Hasil utama pengolahan program Assembler adalah program-obyek. Program-obyek ini bisa berupa sebuah file tersendiri, berisikan kode-kode yang siap dikirimkan ke memori-program mikroprosesor/mikrokontroler, tapi ada juga program-obyek yang disisipkan pada program-

sumber assembly seperti terlihat dalam Assembly Listing di Gambar 2. Bagian kanan Gambar 2 merupakan program-sumber Assembly karya asli penulis program, setelah diterjemahkan oleh program Assembler kode-kode yang dihasilkan berikut dengan nomor-nomor memori tempat penyimpanan kode-kode tadi, disisipkan pada bagian kiri setiap baris perintah, sehingga bentuk program ini tidak lagi dikatakan sebagai program-sumber

assembly tapi dikatakan sebagai Assembly Listing.

Label/Symb

Page 208: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 208

Membaca Assembly Listing bisa memberikan gambaran yang lebih jelas bagi program yang ditulis, bagi pemula Assembly Listing memberi pengertian yang lebih mendalam tentang isi memori-program, sehingga bisa lebih dibayangkan bagaimana kerja dari sebuah program. Line Addr Code Source 1: Org 0H 2: 0000 74 FE Start: Mov A,#11111110b 3: 0002 78 07 Mov R0,#7 4: 0004 F5 80 Kiri: Mov P0,A 5: 0006 12 00 1C Call Delay 6: 0009 23 RL A 7: 000A 18 DEC R0 8: 000B B8 00 F6 CJNE R0,#0,Kiri 9: 000E 78 07 Mov R0,#7 10: 0010 F5 80 Kanan: Mov P0,A 11: 0012 12 00 1C Call Delay 12: 0015 03 RR A 13: 0016 18 DEC R0 14: 0017 B8 00 F6 CJNE R0,#0,Kanan 15: 001A 80 E4 Sjmp Start 16: ; 17: 001C 79 FF Delay: mov R1,#255 18: 001E 7A FF Del1: mov R2,#255 19: 0020 DA FE Del2: djnz R2,del2 20: 0022 D9 FA djnz R1,del1 21: 0024 22 ret 22: end

Page 209: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 209

APLIKASI MIKROKONTROLLER 1. Penyelesaian Persamaan Beer Lamberts dengan aplikasi Look Up Table untuk

pengukuran beberapa parameter kimia dengan metode spektroskopi.

Gambar 1.1. Diagram blok akuisisi data

Transmitansi cahaya yang melewati larutan, 0

100%I

IT T=

Absorbansi cahaya oleh larutan, )(%2 TLogA −=

Pada pembuatan program ini, pemrosesan persamaan tersebut tidak dilakukan melalui proses matematika, melainkan dengan menggunakan metode look up table. Sebelum penentuan look up table maka harus dilakukan beberapa langkah sebagai berikut:

1. Ukur berapa besar tegangan yang terukur pada input ADC pada saat tanpa pemberian tabung/ gelas ukur, yang selanjutnya dianggap sebagai Io.

2. Tegangan pada saat kondisi pertama ini, selanjutnya dianggap sebagai tegangan input ADC maksimal.

3. Dengan mengetahui tegangan input ADC maksimal maka dapat ditentukan tegangan referensi ADC dan tegangan resolusi ADC.

4. Buatlah tabel dengan Microsoft Excell untuk beberapa persamaan tersebut diatas.

Asumsi yang digunakan pada pemrograman ini adalah: VI ∞ , sehingga didapatkan persamaan sebagai berikut:

0

100%V

VT T=

Page 210: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 210

Misal : Vo yang terukur adalah 2,3 volt yang dianggap sebagai Vmaks. Vo = 2,3 volt Vref = Vmaks/2 = 2,3/2 = 1,15 volt Vresolusi = 0,009019608 volt

Sehingga,

T

T VV

T 47826,433,2

100% == dan )(%2 TLogA −=

Misal Larutan X, nilai Konsentrasi standar (C standart) yang terukur adalah 2,56 mg/dl dengan nilai A standart yang terukur 0,01970, maka dapat ditentukan nilai C Sample yang terukur:

darts

darts

sample

sample CA

AC tan

tan

=

Step

Input ADC (volt)

%T

100Vt/Vo

A sample Ukur

2-Log(%T)

A standart Ukur

2-Log(%T) C standart Konstanta

C Sample Ukur

Aspl*Cst/Ast

0 0,00000 - - - - -

1 0,00902 0,39215687 2,407 0,01970 2,56 312,7281

2 0,01804 0,784313391 2,106 0,01970 2,56 273,6095

3 0,02706 1,176469913 1,929 0,01970 2,56 250,7266

4 0,03608 1,568626435 1,804 0,01970 2,56 234,4909

5 0,04510 1,960782957 1,708 0,01970 2,56 221,8975

6 0,05412 2,352939478 1,628 0,01970 2,56 211,6079

7 0,06314 2,745096 1,561 0,01970 2,56 202,9083

8 0,07216 3,137252522 1,503 0,01970 2,56 195,3723

9 0,08118 3,529409044 1,452 0,01970 2,56 188,7250

10 0,09020 3,921565565 1,407 0,01970 2,56 182,7789

: : : : : : :

247 2,22784 96,86266122 0,014 0,01970 2,56 1,7990

248 2,23686 97,25481774 0,012 0,01970 2,56 1,5709

249 2,24588 97,64697426 0,010 0,01970 2,56 1,3438

250 2,25490 98,03913078 0,009 0,01970 2,56 1,1176

251 2,26392 98,43128731 0,007 0,01970 2,56 0,8923

252 2,27294 98,82344383 0,005 0,01970 2,56 0,6679

253 2,28196 99,21560035 0,003 0,01970 2,56 0,4444

254 2,29098 99,60775687 0,002 0,01970 2,56 0,2218

255 2,30000 99,99991339 0,000 0,01970 2,56 0,0000

Look Up Table A

Look Up Table C

Page 211: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 211

Pembuatan Look up table Absorbance: ASatuan: 2,2,1,1,1,……… APer10: 4,1,9,8,………. APer100: 0,0,2,8…….. APer1000: 7,6,9,4…….. Pembuatan Look up table Consentrate Cratusan: 3,2,2,2…… Cpuluhan: 1,7,5,3…… Csatuan: 2,3,0,4……. Cper1: 7,6,7,4…….. Sehingga pada saat ADC menerima tegangan dari sensor, sebesar 0,02706 volt ( desimal 3 )

maka: Abs = 1929 atau 1,929 (lihat look up table dan tabel konversi diatas) C = 2507 atau 250,7 (lihat look up table dan tabel konversi diatas)

VCC

D1

3V

G 74LS244

P3.2

10k

P3.3

P3.4

VCC

10

10k

VCC

VCC

150p

13

2

13

2

10k

8

R6

220

ADC0804

67

9

1112131415161718

194

5

123

+IN-IN

VREF/2

DB7DB6DB5DB4DB3DB2DB1DB0

CLKRCLKIN

INTR

CSRDWR

20P1.7..P1.0

PROG

RUN/ EN ADC

65

4

32

1

Gambar 1. Rangkaian simulasi pengukuran konsentrasi.

Page 212: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 212

dataADC equ 30h org 0h ; org 0h call init_LCD call write_char call write_char2 start: call ADC call WriteAbsorbance call WriteConsentrate sjmp start ; ;======================================= ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 ; nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 mov DataADC,A setb P3.4 ret ; ;====================================================== ;Subrutin untuk menampilkan data Absorbance ke LCD character 2 x16 ;====================================================== WriteAbsorbance: mov r1,#086h call write_inst mov a,DataADC mov DPTR,#Asatuan;Copy alamat look up table Absorbance x,00 movc a,@A+DPTR ; Konversi data satuan ADC ke satuan Absorbance add a,#30h mov r1,a call write_data ; mov r1,#087h call write_inst mov r1,'.' Call write_data ; mov r1,#088h call write_inst mov a,DataADC mov DPTR,#APer10 ;Copy alamat look up table Absorbance 0,x movc a,@A+DPTR ; Konversi data satuan ADC ke satuan Absorbance add a,#30h mov r1,a

Page 213: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 213

call write_data ; mov r1,#089h call write_inst mov a,DataADC mov DPTR,#Aper100 ;Copy alamat look up table Absorbance 0,0x movc a,@A+DPTR ; Konversi data satuan ADC ke 0,0x Absorbance add a,#30h mov r1,a call write_data ret ; ;====================================================== ;Subrutin untuk menampilkan data Consentrate ke LCD character 2 x16 ;====================================================== WriteConsentrate: mov r1,#086h call write_inst mov a,DataADC mov DPTR,#Cratusan;Copy alamat look up table Absorbance x00,0 movc a,@A+DPTR ; Konversi data satuan ADC ke ratusan add a,#30h mov r1,a call write_data ; mov r1,#087h call write_inst mov a,DataADC mov DPTR,#CPuluhan;Copy alamat look up table Absorbance 0x0,0 movc a,@A+DPTR ; Konversi data satuan ADC ke puluhan add a,#30h mov r1,a call write_data ; mov r1,#088h call write_inst mov a,DataADC mov DPTR,#CSatuan;Copy alamat look up table Absorbance 00x,0 movc a,@A+DPTR ; Konversi data satuan ADC ke satuan add a,#30h mov r1,a call write_data ; mov r1,#089h call write_inst mov r1,'.' Call write_data ; mov r1,#08Ah call write_inst mov a,DataADC mov DPTR,#Cper1 ;Copy alamat look up table Absorbance 000,x

Page 214: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 214

movc a,@A+DPTR ; Konversi data satuan ADC ke 1/10 konsentrasi add a,#30h mov r1,a call write_data ret ;=============================================== ;Subrutin untuk menampilkan tulisan 'Abs =' ; pada baris 1 ;=============================================== write_char: mov dptr,#word1 ;DPTR = [ address word1 ] mov r3,#16 ;R3=16,number character to be display mov r1,#80h ;R1=80h,address DDRAM start position acall write_inst ; write1:clr a ; A = 0 movc a,@a+dptr ; A = [A+ DPTR] mov r1,A ; R1 = A inc dptr ; DPTR = DPTR +1 acall write_data ; djnz r3,write1 ; R3 = R3-1, ret ; ;=============================================== ;Subrutin untuk menampilkan tulisan 'C =' ; pada baris 2 ;=============================================== write_char2: ;Bla ;Bla ;Bla ;Bla ; ret ; Init_lcd: mov r1,#00000001b ;Display clear call write_inst mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7 call write_inst mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; write_inst: clr P3.6 ; RS = P2.0 = 0, write mode instruction mov P0,R1 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay ; call delay time clr P3.7 ; EN = 0 = P2.1

Page 215: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 215

ret ; Write_data: setb P3.6 ; RS = P2.0 = 1, write mode data mov P0,R1 ; D7 s/d D0 = P0 = R1 setb P3.7 ; EN = 1 = P2.1 call delay ; call delay time clr p3.7 ; EN = 0 = P2.1 ret ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; word1: DB ' Abs = ' word2: DB ' C =' ; ASatuan: db 2,2,1,1,1; tulis semua data hasil perhitungan di tabel xls (total 255 data) APer10: db 4,1,9,8; tulis semua data hasil perhitungan di tabel xls (total 255 data) APer100: db 0,0,2,8; tulis semua data hasil perhitungan di tabel xls (total 255 data) APer1000: db 7,6,9,4; tulis semua data hasil perhitungan di tabel xls (total 255 data) ; Cratusan: db 3,2,2,2; tulis semua data hasil perhitungan di tabel xls (total 255 data) Cpuluhan: db 1,7,5,3; tulis semua data hasil perhitungan di tabel xls (total 255 data) Csatuan: db 2,3,0,4; tulis semua data hasil perhitungan di tabel xls (total 255 data) Cper1: db 7,6,7,4; tulis semua data hasil perhitungan di tabel xls (total 255 data) end

2. Pengaturan Kecepatan Putaran Motor dengan PWM

Motor merupakan salah satu komponen pendukung yang sering digunakan dalam beberapa aplikasi peralatan kedokteran, sebagai contoh: Centrifuge, Rotator Shaker, Tread Mill dll. Kecepatan merupakan satu variabel yang harus dikondisikan agar dapat diperoleh kecepatan yang diinginkan.

Metode pengaturan kecepatan motor dapat dilakukan dengan berbagai macam gaya, berikut kelebihan dan kekurangan. Salah satu pengaturan kecepatan putaran motor yang paling sederhana adalah dengan metode pulse widht modulation.

Page 216: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 216

Gambar 4.1. Rangkaian pengaturan putaran motor dengan PWM

;======================================================= ; FEED BACK CONTROL DENGAN PULSE WIDTH MODULATION ( PWM ) ; Oleh : Triwiyanto, S.Si.,MT ; Jurusan Teknik Elektromedik Poltekkes Surabaya ;*************BACA INTRODUCTION PWM di BAB 3.10 ***** ;======================================================= ;Aplikasi berikut digunakan untuk pengendalian kecepatan putaran ( RPM ) motor DC ;1. Setting RPM diatur melalui potensio yang selanjutnya tegangan ini disebut ; analog0 yang merupakan tegangan setting ;2. RPM motor dapat dideteksi dengan menggunakan tachometer yang selanjutnya ; disebut sebagai analog1 ;3. Agar dapat diolah oleh mikrokontroler maka diperlukan ADC dan multiplexer ;4. Dengan menggunakan instruksi JC dan JZ maka dilakukan proses perbandingan ; tegangan analog0 dan analog1 ;5. Disinilah akan diambil keputusan untuk mempercepat atau memperlambat RPM ; dengan mengatur PWM yang dikeluarkan oleh port P3.0 agar sesuai dengan setting ; dCycle equ 30h dCycleC equ 31h count equ 32h Analog0 equ 33h Analog1 equ 34h PWM bit P3.1 Channel bit P3.0 PortADC equ P1 ; DCLB equ 40d DCUB equ 255d ; KondisiMotor bit 20h ;

Page 217: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 217

org 0h ljmp start org 0bh ljmp Timer_Interrupt0 start: call Init_Interupsi_Timer0 clr PWM ; mematikan motor ;============================================ ; RUTINE UTAMA ;============================================= Forever: call ADC call Update sjmp Forever ; ;================================================= ;Subrutine Timer_Interupsi0 ;================================================= ;Subrutine berikut digunakan untuk memberikan layanan interupsi timer overflow ; bila hal ini terjadi maka nilai reload TH0 akan diloadkan ke TL0 ;Pada saat awal KondisiMotor = '1' sehingga bila interupsi ini ditemui maka ; akan menuju pada label motoroff dan ditandai kondisimotor = '0' ;=================================================== Timer_Interrupt0: JB KondisiMotor,MotoroFF Setb PWM Mov TH0,dCycle Setb KondisiMotor reti Motoroff: clr PWM mov TH0,dcycleC clr KondisiMotor reti ;

;=============================================== ;Subrutine Init_interupsi_timer0 ;Inisialisasi mode timer: timer 0 difungsikan sebagai timer 8 bit mode 2 ;=============================================== Init_interupsi_Timer0: mov TH0,#dCycle Mov TMOD,#00000010b ; timer0 = sbg timer 8 bit, mode 2 setb ET0 ; Enable timer 0 interupsi Setb EA ; Master Enable All Interupsi setb TR0 ; start rock and roll timer 0 Setb KondisiMotor mov count,#50 mov dCycle,#0 mov dCycleC,#0FFh ret ;=============================================== ;Subrutine Update - Update duty cycle ;Internal register/ RAM yang diberi label count didecrement, ketika count = 0 ; maka duty cycle diupdate, shg software counter ini berfungsi agar duty cycle

Page 218: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 218

; tidak berubah terlalu cepat ;================================================= Update: djnz count,upDone mov A,analog1; dari referensi mov b,analog0; dari sensor tachometer clr c subb a,b jnz update1 ret Update1: jc decrease call higherDC ret Decrease: call lowerDC UpDone:

ret ; ;============================================= ;Subrutine lowerDC - Menurunkan duty cycle ;Subrutine ini akan dikerjakan bila kecepatan motor melebihi setting ;============================================= LowerDC:mov a,dCycle cjne a,#DCLB,DecDC ret DecDC: dec dCycle inc dCycleC ret ; ;============================================= ;Subrutine HigherDC - Menaikkan duty cycle ;Subrutine ini akan dikerjakan bila kecepatan motor dibawah setting ;============================================== HigherDC: mov a,dCycle cjne a,#DCUB,IncDC ret IncDC: Inc dCycle dec dCycleC ret ; ;============================================= ;Subrutine ADC - Membaca tegangan Setting dan tegangan dari tachometer ;masing-masing disimpan ke register Internal Analog0 dan Analog1 ;untuk dibandingkan pada subrutine update ;============================================= ADC: Clr channel ; Pilih channel X0 dari multiplexer 4051 mov Analog0,PortADC Setb channel ; Pilih channel X1 dari multiplexer 4051 mov Analog1,PortADC ret

Page 219: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 219

; end

3. Pengaturan Suhu dan waktu ( Display 7 Segmen dan Setting dengan Pushbutton)

Pengaturan suhu merupakan salah satu pengaturan yang sering diterapkan pada beberapa peralatan Alat Laboratorium. Sistem pengaturan ini masih sangat sederhana sekali, karana hanya memanfaatkan sistem kontrol ON – OFF. Pada aplikasi pengaturan suhu I ini, display dapat dilihat pada 4 x 7 segmen dan setting dapat dilakukan dengan menggunakan push button.

Page 220: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 220

Gambar 4.7. Rangkaian setting waktu dan dan suhu untuk simulasi kontrol ON-OFF dengan display ke Seven Segmen.

Simulasi sistem yang akan dibangun adalah suatu rangkaian yang mempunyai fasilitas setting UP dan Down untuk setting suhu dan waktu, setiap selesai melakukan setting baik suhu dan waktu maka harus diikuti dengan tombol enter. Sesuai dengan persyaratan pada sistem kontrol pada incubator maupun sterilisator maka timer akan mulai bekerja bila suhu telah tercapai sesuai dengan setting. Relay yang terpasang akan ON-OFF sesuai dengan perbandingan setting dan suhu yang terbaca.

;=====================================================

;DRAFT LISTING PROGRAM SETTING SUHU DAN WAKTU SISTEM CONTROL SUHU ;Pada program ini suhu dan waktu pada sistem dapat disetting dg ;menggunakan tombol up/ down dan bila tombol enter ditekan maka ;data akan diterima oleh sistem uC. ;Untuk melihat hasil pembacaan suhu atau waktu dapat digunakan ;tombol up/ down.Pada program ini akan ditampilkan waktu ;detik dan menit dengan Format MM:DD Program ini bekerja dengan ;sistem interupsi yang dibangkitkan dari Timer 0 oleh TF0 ;*******************Copyright***************************** ; Forever:Mov @Labcomp,Tri_wiyanto ; sjmp Forever ;J u r u s a n T e k n i k E l e k t r o m e d i k ;P o l i t e k n i k K e s e h a t a n S u r a b a ya

Page 221: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 221

;===================================================== ADC_WR bit P1.5 ADC_INT bit P1.6 ControlBit bit 20h.0 DataADC equ 60h DataSetting equ 61h SettingSatuan equ 65h SettingPuluhan equ 66h SettingRatusan equ 67h SuhuSatuan equ 68h SuhuPuluhan equ 69h SuhuRatusan equ 6ah ; pencacah20 equ 70h pencacah60 equ 71h menit equ 72h jam equ 73h menit1 equ 74h menit10 equ 75h jam1 equ 76h jam10 equ 77h detik equ 78h detik1 equ 79h detik10 equ 7ah org 0h ljmp start ;================================== ;Lokasi vektor interupsi TF0 ->0Bh ;==================================

org 3h reti org 0bh ajmp timerinterrupt org 13h reti org 23h reti ;

;============================================ ;Subrutine untuk membaca data dari ADC dan ;disimpan di memori dataADC ;============================================ ADC: clr ADC_WR ; start of conversion setb ADC_WR not_EOC: jb ADC_INT,not_EOC lcall delay mov a,p2 mov dataADC,a

Page 222: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 222

ret ; ;========================================= ;PROCEDURE CONTROL ;BEKERJA DENGAN CARA MEMBANDINGKAN DATA ADC ;DAN DATA SETTING, HASIL DIOUTPUTKAN PADA ;BIT P1.4 ;========================================= ControlSuhu: mov a,Datasetting mov b,dataADC clr c subb a,b jnz OnHeater ret OnHeater: jc OffHeater Clr p1.4 ;hidupkan heater Setb ControlBit ret OffHeater: Setb p1.4 ;matikan heater Clr ControlBit ret ; ;================================================= ;Subrutine untuk menampilkan waktu ke Seven Segmen ;================================================= DisplayWaktu: Setb P1.3 Setb P1.2 Setb P1.1 Setb P1.0 Mov DPTR,#Decoder7Segmen mov A,detik1 Movc A,@A+DPTR Mov P0,A Clr P1.0 Acall delay ; Mov DPTR,#Decoder7Segmen Mov A,detik10 Movc A,@A+DPTR Setb P1.0 Mov P0,A Clr P1.1 Acall delay ; Mov DPTR,#Decoder7Segmen Mov A,Menit1 Movc A,@A+DPTR Setb P1.1

Page 223: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 223

Mov P0,A Clr P1.2 Acall delay ; Mov DPTR,#Decoder7Segmen Mov A,Menit10 Movc A,@A+DPTR Setb P1.2 Mov P0,A Clr P1.3 Acall delay ret ; DisplaySuhu: Setb P1.3 Setb P1.2 Setb P1.1 Setb P1.0 ; mov DPTR,#Pecahan MOv A,DataADC Movc A,@A+DPTR Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Mov P0,A Clr P1.0 Acall delay ; mov DPTR,#Satuan MOv A,DataADC Movc A,@A+DPTR Mov SuhuSatuan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Setb P1.0 Mov P0,A Clr P1.1 Acall delay ; mov DPTR,#Puluhan MOv A,DataADC Movc A,@A+DPTR Mov SuhuPuluhan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Setb P1.1 Mov P0,A Clr P1.2 Acall delay ; mov DPTR,#Ratusan MOv A,DataADC

Page 224: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 224

Movc A,@A+DPTR Mov SuhuRatusan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Setb P1.2 Mov P0,A Clr P1.3 Acall delay ; ;========================================================== ;Menyatukan hasil Pembacaaan Suhu dari Look Up Table dalam bentuk satu variabel ;DataADC = SuhuRatusan*100 + SuhuPuluhan*10 + SuhuSatuan ;========================================================== mov a,SuhuPuluhan mov b,#10d mul ab mov DataADC,a mov a,SuhuRatusan mov b,#100d mul ab add a,DataADC add a,Suhusatuan mov DataADC,a ret ; ;========================================================= ;Untuk keperluan perbandingan pada saat forever waktu ;Dengan display suhu OFF ;======================================================== DisplaySuhuOff: mov DPTR,#Pecahan MOv A,DataADC Movc A,@A+DPTR Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR ; mov DPTR,#Satuan MOv A,DataADC Movc A,@A+DPTR Mov SuhuSatuan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR ; mov DPTR,#Puluhan MOv A,DataADC Movc A,@A+DPTR Mov SuhuPuluhan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR ; mov DPTR,#Ratusan MOv A,DataADC

Page 225: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 225

Movc A,@A+DPTR Mov SuhuRatusan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR ; ;========================================================= ;Menyatukan hasil Pembacaaan Suhu dari Look Up Table dalam bentuk satu variabel ;DataADC = SuhuRatusan*100 + SuhuPuluhan*10 + SuhuSatuan ;======================================================== mov a,SuhuPuluhan mov b,#10d mul ab mov DataADC,a mov a,SuhuRatusan mov b,#100d mul ab add a,DataADC add a,Suhusatuan mov DataADC,a ret ; ;============================================= ;Subrutine untuk display Setting to 7 Segmen ;============================================= DisplaySetting: Setb P1.3 Setb P1.2 Setb P1.1 Setb P1.0 Mov P0,#11000000b Clr P1.0 Acall delay ;

Mov DPTR,#Satuan Mov A,DataSetting Movc A,@A+DPTR Mov SettingSatuan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Setb P1.0 Mov P0,A Clr P1.1 Acall delay ; Mov DPTR,#Puluhan Mov A,DataSetting Movc A,@A+DPTR Mov SettingPuluhan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Setb P1.1

Page 226: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 226

Mov P0,A Clr P1.2 Acall delay ; Mov DPTR,#Ratusan Mov A,DataSetting Movc A,@A+DPTR Mov SettingRatusan,A Mov DPTR,#Decoder7Segmen Movc A,@A+DPTR Setb P1.2 Mov P0,A Clr P1.3 Acall delay ;======================================================== ;Menyatukan hasil data setting dari Look Up Table dalam bentuk satu variabel ;DataSetting = SettingRatusan*100 + SettingPuluhan*10 + SettingSatuan ;======================================================= mov a,SettingPuluhan mov b,#10d mul ab mov DataSetting,a mov a,SettingRatusan mov b,#100d mul ab add a,DataSetting add a,SettingSatuan mov DataSetting,a ret ; delay: mov R0,#0 delay1: mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; ;=============================================== ;Subrutine untuk menampilkan kode inisial nama masing2 ;anggota kelompok pada 7 segmen ;=============================================== ; KodeDisplay: Setb P1.3 Setb P1.2 Setb P1.1 Setb P1.0 Clr A Movc A,@A+DPTR Mov P0,A Clr P1.0 Acall delay inc DPTR

Page 227: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 227

; Clr A Movc A,@A+DPTR Setb P1.0 Mov P0,A Clr P1.1 Acall delay inc DPTR ; Clr A Movc A,@A+DPTR Setb P1.1 Mov P0,A Clr P1.2 Acall delay inc DPTR ; Clr A Movc A,@A+DPTR Setb P1.2 Mov P0,A Clr P1.3 Acall delay ret ; MovingDisplay: mov R7,#50 Lagi1: Mov DPTR,#KodeKlp1 Acall KodeDisplay Djnz R7,Lagi1 jnb p3.3,wait11 ; mov R7,#50 Lagi2: Mov DPTR,#KodeKlp2 Acall KodeDisplay Djnz R7,Lagi2 jnb p3.3,wait11 ; mov R7,#50 Lagi3: Mov DPTR,#KodeKlp3 Acall KodeDisplay Djnz R7,Lagi3 jnb p3.3,wait11 ; mov R7,#50 Lagi4: Mov DPTR,#KodeKlp4 Acall KodeDisplay Djnz R7,Lagi4 jnb p3.3,wait11 ret ; wait11: ljmp wait1

Page 228: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 228

; ;============================================== ;Subrutine untuk inisialisasi kerja dari timer ;dengan menggunakan mode 1 timer 0 16 bit ;dan pengaktivan interupsi TF0 ;============================================== InitTimer: clr ControlBit mov pencacah20,#20 acall UpdateDisplay mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 setb EA setb TR0 ret ; ;==================================================== ;This is the most importan subrutine, to serve interuption when ;TF0 Timer 0 Call ;Instruksi berikut digunakan untuk memberikan layanan ;interupsi, dan akan terjadi setiap 0.05 detik. atau 50.000 udetik ;maka data yang harus diloadkan 65536- 50000 = 15536 d = 3CB0 h

B0h ke TL1 dan 3C ke TH1 ;Pada subrutine ini pencacah20 akan didecrement sampai ;menghasilkan nilai Pencacah20=0, yang terjadi setiap ;20 X 50000 uS = 20 X 0,05s = 1 s,apabila ini terjadi maka ;akan dipanggil subrutine jamdigital, untuk melakukan increment ;data detik, menit, atau jam ;================================================

timerinterrupt:

mov tl0,#0b0h mov th0,#03ch djnz pencacah20,Endinterupsi mov pencacah20,#20 acall jamdigital Endinterupsi: reti ; ;================================================= ;Subrutine untuk menambah jumlah cacahan dari jam digital ;Detik dan menit, bila detik sudah menunjukan 60 maka ;counter menit akan bekerja untuk menambah jumlah hitungannnya ;Subritine ini akan dipanggil setiap detik sesuai dg interupsi ;================================================== JamSetting: dec detik mov a,#0 cjne a,detik,UpdateDisplaySetting mov detik,#60 ;

Page 229: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 229

satumenitSetting: dec menit mov A,#0 cjne A,menit,UpdateDisplaySetting mov menit,#60 ; setb P3.3; Mematikan beban ; ljmp endProses ; UpdateDisplaySetting: mov a,detik mov b,#10 div ab mov detik1,b mov detik10,a ; mov a,menit mov b,#10 div ab mov menit1,b mov menit10,a ret ; ;========================================================== ;Subrutine yang digunakan untuk menyesuaikan dengan waktu ;yang sedang berlaku. Yaitu dengan menekan tombol P3.6 ;dan P3.7 untuk setting waktu detik dan menit ;========================================================== ScanSettingJam: JNB P3.7,JamSetting JNB P3.6,SatuMenitSetting JNB P3.3,wait2 ret ; ;========================================================= ;Subrutine yang digunakan untuk setting suhu yang diinginkan ;dengan menggunakan tombol up/ down dengan display pada seven segmen. ;pada saat setting juga dideteksi tombol enter, untuk memulai proses ;control suhu ;========================================================= ScanSettingSuhu: mov R7,#1 Down: mov DataSetting,R7 acall DisplaySetting jnb p3.3,wait3 jb P3.7,up inc R7 acall delay sjmp down ; Up: Mov DataSetting,R7 acall DisplaySetting jnb P3.3,wait3

Page 230: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 230

jb p3.6,down dec R7 acall delay sjmp down ret ; ;======================================================== ;Subrutine untuk menambah jumlah cacahan dari jam digital ;Detik dan menit, bila detik sudah menunjukan 60 maka ;counter menit akan bekerja untuk menambah jumlah hitungannnya ;Subritine ini akan dipanggil setiap detik sesuai dg interupsi ;======================================================== jamdigital: dec detik mov a,#0 cjne a,detik,UpdateDisplay ; cjne a,menit,next Setb p1.4 ljmp endProses ; next: mov detik,#59 ; satumenit: dec menit mov A,#0 cjne A,menit,UpdateDisplay mov menit,#0 ; UpdateDisplay: mov a,detik mov b,#10 div ab mov detik1,b mov detik10,a ; mov a,menit mov b,#10 div ab mov menit1,b mov menit10,a ret ; ;========================================================= ;Rutine untuk display kode dan deteksi tombol enter ;1. Display kode masing-masing kelompok dengan memunculkan inisial ; huruf nama masing-masing anggota kelompok pada 7 segmen. ; Pada contoh ini dimunculkan kode 4 3 2 1 ;2. Deteksi tombol enter dari port P3.3, apabila tidak ditekan maka ; akan memunculkan display 4 3 2 1 terus menerus, bila tombol ditekan ; maka akan melanjutkan instruksi dibawahnya.

Page 231: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 231

;3. Scan Setting waktu yang diperlukan untuk pengoperasian alat dan ; setting akan disimpan bila tombol enter ditekan ;4. Scan Setting suhu yang diinginkan, dan disimpan bila tombol enter ; ditekan ;5. Label Start Operating akan mulai bekerja dengan melakukan control suhu ; sampai suhu tercapai bila suhu tercapai maka timer akan segera ; diinisialisasi dan beban mulai dihidupkan ;========================================================= Start: acall MovingDisplay jb p3.3,start ; Wait1: jnb p3.3, wait1 mov detik,#60 mov menit,#60 ; SettingWaktu: acall ScansettingJam acall DisplayWaktu sjmp SettingWaktu ; wait2: jnb p3.3, wait2 ; SettingSuhu: acall ScanSettingSuhu sjmp SettingSuhu ; wait3: jnb p3.3,wait3 ; StartOperating: acall ADC acall DisplaySuhu acall ControlSuhu jb ControlBit,StartOperating ; acall InitTimer ; Clr P1.4;Menghidupkan Beban ; ;======================================================= ;Main rutine ;1. Memanggil subrutine Control Suhu untuk tetap mempertahankan suhu ; Setting ;2. Memanggil Subrutine Display Waktu Untuk mengetahui waktu sisa ; dari waktu pengoperasian beban ;3. Scan tombol P3.3 untuk kembali ke awal, Scan tombol P3.6 untuk ; menampilkan display suhu, scan tombol P3.7 untuk menampilkan ; display Waktu ;4. Looping Forever akan terjadi untuk dua pilihan tersebut diatas

Page 232: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 232

;======================================================= ForeverWaktu: Acall adc Acall displaySuhuOff Acall ControlSuhu Acall DisplayWaktu jnb P3.3,startAgain jnb P3.6,ForeverSuhu sjmp ForeverWaktu ForeverSuhu: acall adc Acall DisplaySuhu Acall ControlSuhu jnb p3.3, startAgain jnb P3.7,ForeverWaktu sjmp ForeverSuhu ; StartAgain: jnb p3.3,startAgain clr TR0 clr ET0 clr EA sjmp start ; ;======================================================= ;What do you think, I am use for? ;Pada saat label endProses dipanggil maka program akan terus menerus ;bersarang dan terkunci selamanya pada label ini ;====================================================== endProses: mov P0,#11000000b Clr P1.3 Clr P1.2 Clr P1.1 Clr P1.0 jnb p3.3,startAgain sjmp endProses ; ;======================================================== ; L O O K U P T A B L E ; Decoder to Seven Segmen -> g f e d c b a ;========================================================= Decoder7Segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; ;======================================================= ; L O O K U P T A B L E ; Suhu = DataADC*100/255 ;====================================================== ; Pecahan:

Page 233: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 233

db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6 db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2 db 6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8 db 2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4 db 8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0 ; Satuan: db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9 db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9 db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8 db 9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8 db 8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,0 ; Puluhan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 db 3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 db 5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 db 7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0 ; Ratusan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ;

KodeKlp1: DB 10100011b,10000111b,10101011b,10001000b KodeKlp2: DB 10001000b,10100011b,10000111b,10101011b KodeKlp3: DB 10101011b,10001000b,10100011b,10000111b KodeKlp4: DB 10000111b,10101011b,10001000b,10100011b end

Page 234: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 234

4. Pengaturan suhu dan waktu ( Display LCD Karakter dan Setting dengan Keypad )

Seperti halnya pada aplikasi pengaturan suhu I, pada aplikasi pengaturan suhu II, dibuat dengan tampilan yang mungkin lebih menarik. Display suhu dan waktu yang sedang berjalan dapat dilihat secara langsung pada layar LCD Character. Setting data suhu dan waktu dapat diinputkan pada Keypad 4 x 4.

Gambar 4. Rangkaian setting waktu dan dan suhu untuk simulasi kontrol ON-OFF dengan display ke LCD Character 2 x 16.

Pada gambar tersebut, mempunyai kemampuan yang sama seperti halnya yang telah kita bahas pada gambar 8.1, yaitu suatu sistem yang mensimulasikan kontrol suhu secara ON-OFF dengan setting melalui tombol-tombola KEYPAD 4 x 4, dan tampilan LCD Character 1 x 16

;=================== ======================== ;DRAFT LISTING PROGRAM SETTING SUHU DAN WAKTU SISTEM CONTROL SUHU ;Pada program ini suhu dan waktu pada sistem dapat disetting dg ;menggunakan tombol keypad dan bila tombol enter ditekan maka ;data akan diterima oleh sistem uC dan tombol Esc ditekan maka ;akan kembali ke awal dari setting. ;Untuk melihat hasil pembacaan suhu atau waktu dapat dilihat

Page 235: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 235

;pada layar LCD.Pada program ini akan ditampilkan waktu ;detik dan menit dengan Format MM:DD dan display suhu dengan format ;000.0 oC Program ini bekerja dengan sistem interupsi yang ;dibangkitkan dari Timer 0 oleh TF0 ;*******************Copyright************************************** ; Forever:Mov @Labcomp,Tri_wiyanto ; sjmp Forever ;J u r u s a n T e k n i k E l e k t r o m e d i k ;P o l i t e k n i k K e s e h a t a n S u r a b a y a ;=================================================== dispclr equ 00000001b funcset equ 00111000b entrmod equ 00000110b dispon equ 00001100b cursor equ 00001110b blink equ 00001101b geserL equ 00011011b geserR equ 00011111b ; kolom1 bit p2.0 kolom2 bit p2.1 kolom3 bit p2.2 kolom4 bit p2.3 baris1 bit p2.4 baris2 bit p2.5 baris3 bit p2.6 baris4 bit p2.7 keyport equ P2 keydata equ 7bh keybounc equ 7ch ; ADC_WR bit P1.5 ADC_INT bit P1.6 ControlBit bit 20h.0 DataADC equ 60h DataSetting equ 61h SettingSatuan equ 65h SettingPuluhan equ 66h SettingRatusan equ 67h detikPuluhan equ 68h detikSatuan equ 69h MenitPuluhan equ 6ah MenitSatuan equ 6bh SuhuSatuan equ 6ch SuhuPuluhan equ 6dh SuhuRatusan equ 6eh DataSetting equ 6fh ; pencacah20 equ 70h pencacah60 equ 71h menit equ 72h jam equ 73h

Page 236: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 236

menit1 equ 74h menit10 equ 75h jam1 equ 76h jam10 equ 77h detik equ 78h detik1 equ 79h detik10 equ 7ah org 0h ljmp start ;================================== ;Lokasi vektor interupsi TF0 ->0Bh ;================================== org 3h reti org 0bh ajmp timerinterrupt org 13h reti org 23h reti ; org 30h ; write_inst: mov P1,#0h ;untuk memuliskan mov P0,R1 ;intruksi ke LCD setb P1.1 ;module acall delay clr P1.1 ret ; write_data: mov P1,#01 ;untuk menuliskan mov P0,R1 ;data ke LCD setb P1.1 ;module acall delay clr p1.1 ret ; delay: mov R0,#0 delay1: mov R5,#50h djnz R5,$ djnz R0,delay1 ret ; ;============== ====================================== ;Display clear = 00000001b=>semua tampilan akan direset ;Fungtion set = 00111000b=>data lenght 8 bit, dan dua baris LCD karakter ; ukuran karakter font 5 x7 ;Display on = 00001100b=>Display on, kursor off,kursor blink off ;Entry mode = 00000110b=>Set increment ;============ =========================================

Page 237: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 237

init_lcd: acall delay acall delay acall delay mov r1,#dispclr acall write_inst mov r1,#funcset acall write_inst mov r1,#dispon acall write_inst mov r1,#entrmod acall write_inst ret ; wr_Password: mov dptr,#kalPassword mov r3,#16 mov r1,#80h acall write_inst wrPassword: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrPasword ret ; wr_Settime: mov dptr,#kalSettime mov r3,#16 mov r1,#80h acall write_inst wrSettime: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrSettime ret ; ; wr_Setsuhu: mov dptr,#kalSetsuhu mov r3,#16 mov r1,#80h acall write_inst wrSetsuhu: clr a movc a,@a+dptr mov r1,A

Page 238: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 238

inc dptr acall write_data djnz r3,wrSetsuhu ret ; wr_Suhu: mov dptr,#kalSuhu mov r3,#16 mov r1,#80h acall write_inst wrSuhu: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrsuhu ret ; wr_Waktu: mov dptr,#kalWaktu mov r3,#16 mov r1,#0c0h acall write_inst wrWaktu: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrWaktu ret ; wr_Ok: mov dptr,#kalOk mov r3,#16 mov r1,#0c0h acall write_inst wrOk: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrOk ret ; wr_On: mov dptr,#kalOn mov r3,#5 mov r1,#08bh acall write_inst

Page 239: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 239

wrOn: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrOn ret ; wr_Off: mov dptr,#kalOff mov r3,#5 mov r1,#08bh acall write_inst wrOff: clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,wrOff ret ;

;==================================== ; routine u/ baca keypad 4x4 ;==================================== Keypad4x4: mov keybounc,#255 mov keyport,#0FFh clr kolom1 ul1: jb baris1,key1 djnz keybounc,ul1 mov keydata,#0ch ret key1: jb baris2,key2 djnz keybounc,key1 mov keydata,#0dh ret key2: jb baris3,key3 djnz keybounc,key2 mov keydata,#0eh ret key3: jb baris4,key4 djnz keybounc,key3 mov keydata,#0fh ret ; key4: setb kolom1 clr kolom2 jb baris1,key5

Page 240: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 240

djnz keybounc,key4 mov keydata,#0bh ret key5: jb baris2,key6 djnz keybounc,key5 mov keydata,#9 ret key6: jb baris3,key7 djnz keybounc,key6 mov keydata,#6 ret key7: jb baris4,key8 djnz keybounc,key7 mov keydata,#3h ret ; key8: setb kolom2 clr kolom3 jb baris1,key9 djnz keybounc,key8 mov keydata,#0 ret key9: jb baris2,key10 djnz keybounc,key9 mov keydata,#8 ret key10: jb baris3,key11 djnz keybounc,key10 mov keydata,#5 ret key11: jb baris4,key12 djnz keybounc,key11 mov keydata,#02 ret ; key12: setb kolom3 clr kolom4 jb baris1,key13 djnz keybounc,key12 mov keydata,#09 ret key13: jb baris2,key14 djnz keybounc,key13 mov keydata,#07 ret key14: jb baris3,key15 djnz keybounc,key14 mov keydata,#04 ret key15: jb baris4,key16 djnz keybounc,key15 mov keydata,#01

Page 241: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 241

ret key16: mov keydata,#0FFh ret ; TipePassword: acall init_LCD acall wr_Password Pass1: acall keypad4x4 mov A,keydata cjne A,#0FFh,PassChar1 sjmp Pass1 PassChar1: cjne A,#1,Pass1 mov r1,#08bh acall write_inst add A,#30h mov r1,A acall write_data acall delay acall delay ; Pass2: acall keypad4x4 mov a,keydata cjne a,#0ffh,PassChar2 sjmp Pass2 PassChar2: cjne a,#2,Pass2 mov r1,#08ch acall write_inst add a,#30h mov r1,a acall write_data acall delay acall delay ; Pass3: acall keypad4x4 mov a,keydata cjne a,#0ffh,PassChar3 sjmp Pass3 PassChar3: cjne a,#3,Pass3 mov r1,#08dh acall write_inst add a,#30h mov r1,a acall write_data acall delay acall delay ;

Page 242: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 242

acall kalOk YourChoose: acall keypad4x4 mov a,keydata cjne a,#0ffh,Choose1 sjmp YourChoose Choose1: cjne a,#0bh,choose2 sjmp QuitPassword Check2: cjne a,#0fh,Yourchoose sjmp TipePassword QuitPassword: ret

;============================================= ;Subrutine Setting Waktu ;============================================= SettingWaktu: Acall Init_LCD Acall Wr_Settime TypeDetikPuluhan: acall keypad4x4 mov A,keydata cjne A,#0FFh,WrDetikPuluhan sjmp TypeDetikPuluhan WrDetikPuluhan: mov r1,#08dh acall write_inst mov detikPuluhan,a add a,#30h mov r1,a acall write_data acall delay acall delay acall delay ; TypeDetikSatuan: acall keypad4x4 mov A,keydata cjne A,#0FFh,WrDetikSatuan sjmp TypeDetikSatuan WrDetikSatuan: mov r1,#08eh acall write_inst mov detikSatuan,a add a,#30h mov r1,a acall write_data acall delay acall delay

Page 243: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 243

acall delay ; TypeMenitPuluhan: acall keypad4x4 mov A,keydata cjne A,#0FFh,WrMenitPuluhan sjmp TypeMenitPuluhan WrMenitPuluhan: mov r1,#089h acall write_inst mov MenitPuluhan,a add a,#30h mov r1,a acall write_data acall delay acall delay acall delay ; TypeMenitSatuan: acall keypad4x4 mov A,keydata cjne A,#0FFh,WrMenitSatuan sjmp TypeMenitSatuan WrMenitSatuan: mov r1,#08ah acall write_inst mov MenitSatuan,a add a,#30h mov r1,a acall write_data acall delay acall delay acall delay ; acall kalOK ; Your_Choose: acall keypad4x4 mov a,keydata cjne a,#0ffh,Choose_1 sjmp Your_Choose Choose_1: cjne a,#0bh,choose_2 sjmp QuitSettingWaktu Choose_2: cjne a,#0fh,Your_choose sjmp SettingWaktu QuitSettingWaktu: mov a,MenitPuluhan mov b,#10 mul ab mov menit,a

Page 244: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 244

mov a,MenitSatuan add a,menit mov menit,a ; mov a,detikPuluhan mov b,#10 mul ab mov detik,a mov a,detikSatuan add a,detik mov detik,a ret ; ;============================================= ;Subrutine Setting Suhu ;============================================= SettingSuhu: Acall Init_LCD Acall Wr_SetSuhu TypeSuhuRatusan: acall keypad4x4 mov A,keydata cjne A,#0FFh,WrSuhuRatusan sjmp TypeSuhuRatusan WrSuhuRatusan: mov r1,#089h acall write_inst mov SuhuRatusan,a add a,#30h mov r1,a acall write_data acall delay acall delay acall delay ; TypeSuhuPuluhan: acall keypad4x4 mov A,keydata cjne A,#0FFh,WrSuhuPuluhan sjmp TypeSuhuPuluhan WrSuhuPuluhan: mov r1,#08ah acall write_inst mov SuhuPuluhan,a add a,#30h mov r1,a acall write_data acall delay acall delay acall delay ; TypeSuhuSatuan:

Page 245: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 245

acall keypad4x4 mov A,keydata cjne A,#0FFh,WrSuhuSatuan sjmp TypeSuhuSatuan WrSuhuSatuan: mov r1,#08bh acall write_inst mov SuhuSatuan,a add a,#30h mov r1,a acall write_data acall delay acall delay acall delay ; acall kalOK ; Y_ourChoose: acall keypad4x4 mov a,keydata cjne a,#0ffh,C_hoose1 sjmp Y_ourChoose C_hoose1: cjne a,#0bh,c_hoose2 sjmp QuitSettingSuhu C_hoose2: cjne a,#0fh,Y_ourchoose sjmp SettingSuhu QuitSettingSuhu: mov a,Suhupuluhan mov b,#10d mul ab mov Datasetting,a mov a,Suhuratusan mov b,#100d mul ab add a,Datasetting add a,Suhusatuan mov Datasetting,a ret ; ;============================================ ;Subrutine untuk membaca data dari ADC dan ;disimpan di memori dataADC ;============================================ ADC: clr ADC_WR ; start of conversion setb ADC_WR not_EOC: jb ADC_INT,not_EOC lcall delay mov a,p3

Page 246: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 246

mov dataADC,a ret ;============================================= ;Subrutine untuk display data ADC ke LCD ;============================================= DisplaySuhu: mov r1,#087h Acall write_inst mov a,DataADC mov DPTR,#Pecahan movc A,@A+DPTR mov LTPecahanSuhu,A add a,#30h mov R1,A Acall write_data ; mov r1,#085h Acall write_inst mov a,DataADC mov DPTR,#Satuan movc A,@A+DPTR mov LTSatuanSuhu,A add a,#30h mov R1,A Acall write_data ; mov r1,#084h Acall write_inst mov a,DataADC mov DPTR,#Puluhan movc A,@A+DPTR mov LTPuluhanSuhu,A add a,#30h mov R1,A Acall write_data ; mov r1,#083h Acall write_inst mov a,DataADC mov DPTR,#Ratusan movc A,@A+DPTR mov LTRatusanSuhu,A add a,#30h mov R1,A Acall write_data ; ;======= ===================================================== ;Menyatukan hasil Pembacaaan Suhu dari Look Up Table dalam bentuk satu variabel ;DataADC = SuhuRatusan*100 + SuhuPuluhan*10 + SuhuSatuan ;============================================================ mov a,LTPuluhanSuhu mov b,#10d

Page 247: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 247

mul ab mov DataADC,a mov a,LTRatusanSuhu mov b,#100d mul ab add a,DataADC add a,LTsatuanSuhu mov DataADC,a ret ; ;========================================= ;PROCEDURE CONTROL ;BEKERJA DENGAN CARA MEMBANDINGKAN DATA ADC ;DAN DATA SETTING, HASIL DIOUTPUTKAN PADA ;BIT P1.4 ;========================================= ControlSuhu: mov a,Datasetting mov b,dataADC clr c subb a,b jnz OnHeater ret OnHeater: jc OffHeater Clr p1.4 ;hidupkan heater Setb ControlBit acall wr_On ret OffHeater: Setb p1.4 ;matikan heater Clr ControlBit acall wr_Off ret ; ;================================================= ;Subrutine untuk menampilkan waktu ke Seven Segmen ;================================================= DisplayWaktu: mnt1: mov r1,#0c4h lcall write_inst mov a,menit1 add a,#30h mov r1,a lcall write_data ; mnt2: mov r1,#0c3h lcall write_inst mov a,menit2 add a,#30h mov r1,a lcall write_data

Page 248: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 248

; dtk1: mov r1,#0c7h lcall write_inst mov a,detik1 add a,#30h mov r1,a lcall write_data ; dt2: mov r1,#0c6h lcall write_inst mov a,detik2 add a,#30h mov r1,a lcall write_data ret ; delay: mov R0,#0 delay1: mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ;

;============================================== ;Subrutine untuk inisialisasi kerja dari timer ;dengan menggunakan mode 1 timer 0 16 bit ;dan pengaktivan interupsi TF0 ;============================================== InitTimer: clr ControlBit mov pencacah20,#20 mov pencacah60,#60 mov detik,#0 mov menit,#0 acall UpdateDisplay mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 setb EA setb TR0 ret ; ;==================================================== ;This is the most importan subrutine, to serve interuption when ;TF0 Timer 0 Call ;Instruksi berikut digunakan untuk memberikan layanan ;interupsi, dan akan terjadi setiap 0.05 detik. atau 50.000 udetik ;maka data yang harus diloadkan 65536- 50000 = 15536 d = 3CB0 h

Page 249: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 249

B0h ke TL1 dan 3C ke TH1 ;Pada subrutine ini pencacah20 akan didecrement sampai ;menghasilkan nilai Pencacah20=0, yang terjadi setiap ;20 X 50000 uS = 20 X 0,05s = 1 s,apabila ini terjadi maka ;akan dipanggil subrutine jamdigital, untuk melakukan increment ;data detik, menit, atau jam ;====================================================

timerinterrupt: mov tl0,#0b0h mov th0,#03ch djnz pencacah20,Endinterupsi mov pencacah20,#20 ; acall ScanSettingJam acall Jamdigital djnz pencacah60,Endinterupsi mov pencacah60,#60 ; acall jamdigital Endinterupsi: reti ; ;============= ====================================== ;Subrutine untuk menambah jumlah cacahan dari jam digital ;Detik dan menit, bila detik sudah menunjukan 60 maka ;counter menit akan bekerja untuk menambah jumlah hitungannnya ;Subritine ini akan dipanggil setiap detik sesuai dg interupsi ;============== ================================= jamdigital: dec detik mov a,#0 cjne a,detik,UpdateDisplay mov detik,#60 ; satumenit: dec menit mov A,#0 cjne A,menit,UpdateDisplay setb P3.3; Mematikan beban ljmp endProses ; UpdateDisplay: mov a,detik mov b,#10 div ab mov detik1,b mov detik10,a ; mov a,menit mov b,#10

Page 250: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 250

div ab mov menit1,b mov menit10,a ret ; ;============ ========================================== ;Rutine untuk display kode dan deteksi tombol enter ;1. Display kode masing-masing kelompok dengan memunculkan inisial ; huruf nama masing-masing anggota kelompok pada 7 segmen. ; Pada contoh ini dimunculkan kode 4 3 2 1 ;2. Deteksi tombol enter dari port P3.3, apabila tidak ditekan maka ; akan memunculkan display 4 3 2 1 terus menerus, bila tombol ditekan ; maka akan melanjutkan instruksi dibawahnya. ;3. Scan Setting waktu yang diperlukan untuk pengoperasian alat dan ; setting akan disimpan bila tombol enter ditekan ;4. Scan Setting suhu yang diinginkan, dan disimpan bila tombol enter ; ditekan ;5. Label Start Operating akan mulai bekerja dengan melakukan control suhu ; sampai suhu tercapai bila suhu tercapai maka timer akan segera ; diinisialisasi dan beban mulai dihidupkan ;====== ================================================ Start: acall Password acall SettingWaktu acall SettingSuhu ; acall Init_LCD acall KalSuhu StartOperating: acall DisplaySuhu acall ControlSuhu jb ControlBit,StartOperating ; acall InitTimer ; Clr P1.4 ;Menghidupkan Beban ; ;======= ================================================= ;Main rutine ;1. Memanggil subrutine Control Suhu untuk tetap mempertahankan suhu ; Setting ;2. Memanggil Subrutine Display Waktu Untuk mengetahui waktu sisa ; dari waktu pengoperasian beban ;3. Scan tombol P3.3 untuk kembali ke awal, Scan tombol P3.6 untuk ; menampilkan display suhu, scan tombol P3.7 untuk menampilkan ; display Waktu ;4. Looping Forever akan terjadi untuk dua pilihan tersebut diatas ;==== ================================================== Forever: Acall DisplaySuhu Acall ControlSuhu Acall DisplayWaktu

Page 251: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 251

; acall keypad4x4 mov a,keydata cjne a,#0ffh,Cancel sjmp Forever Cancel: cjne a,#0fh,Forever ljmp Start ; ;===== ================================================== ; L O O K U P T A B L E ; Suhu = DataADC*100/255 ;===== ================================================== ; Pecahan: db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6 db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2 db 6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8 db 2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4 db 8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0 ; Satuan: db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9 db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9 db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8 db 9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8 db 8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,0 ; Puluhan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 db 3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 db 5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 db 7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0 ; Ratusan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ;

KalPassword: db 'Password: ' KalSetTime: db 'Set.Time:00m:00d' KalSetSuhu: db 'Set.Suhu:000.0oC' KalSuhu: db 'S=000.0 oC OnOff' KalWaktu: db 'W=00:00 Esc->Out' KalOk: db 'Ent>Ok Esc>Cncel' KalOn: db 'On ' KalOff: db ' Off' endProses: end

Page 252: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 252

DAFTAR PUSTAKA Philips Semiconductor, 80C51 Family Architecture, 1995 Philips Semiconductor, 80C51 Family Hardware Description, 1995

Page 253: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 253

Philips Semiconductor, 80C51 Family Programmer’s Guide and Instruction Set, 1995 ATMEL Semiconductor, 8 Bit Microcontroller with 4 K Bytes Flash, AT89S51

DAFTAR ISI Hal. Pengantar Fitur dan Pin Diskripsi Mikrokontroller 89s51 1

Page 254: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 254

1. Arsitektur Microcontroller MCS-51 4 1.1. Organisasi Memori 4 1.2. Pengalamatan 11 1.3. Set Instruksi 13

1. Instruksi copy data 14 2. Instruksi Aritmatika 15 3. Instruksi Logika 17 4. Instruksi Lompatan 19

1.4. Interupsi 25 1. Sumber Interupsi 26 2. Mengaktifkan Interupsi 27 3. Vektor Interupsi 28 4. Tingkatan Perioritas 29

1.5. Timer Counter 29 1. Fasilitas Timer/Counter 30 2. Mengatur Timer 34

1.6. Port Serial 36 1. Register-register Port Seri MCS51 38

1.7. Bahasa Asembly 41

1. Program sumber assembly 42

2. Assembly Listing 44

1.8. Perangkat Lunak 45

1 Compiler MIDE Studio 45

2. ATMEL Microcontroller ISP Software 47

PERCOBAAN 1. Display LED 51

PERCOBAAN 2. Saklar Push Button 57

PERCOBAAN 3. Display 7 Segmen 63

PERCOBAAN 4. LCD Karakter 2 x 16 73

PERCOBAAN 5. Analog to Digital Converter 83

PERCOBAAN 6. Digital to Analog Converter 104

PERCOBAAN 7. Keypad 4x4 109

PERCOBAAN 8. Motor Stepper Unipolar 118

PERCOBAAN 9. Timer Counter 125

PERCOBAAN 10. Komunikasi Serial RS232 133

PERCOBAAN 11. Interupsi 156

PERCOBAAN 12. Interface ke Keyboard PC 167

PERCOBAAN 13. Interface ke Printer Dot Matriks 179

Page 255: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 255

PERCOBAAN 14. Real Time Clock ( RTC ) 12C887 185

PERCOBAAN 15. Pulse Widht Modulation ( PWM ) 204

LAMPIRAN APLIKASI MIKROKONTROLLER

1. Penyelesaian Persamaan Beer Lamberts dengan aplikasi Look Up Table untuk pengukuran beberapa parameter kimia dengan metode spektroskopi.

2. Pengaturan Kecepatan Putaran Motor dengan PWM

3. Pengaturan Suhu dan waktu ( Display 7 Segmen dan Setting dengan Pushbutton)

4. Pengaturan suhu dan waktu ( Display LCD Karakter dan Setting dengan Keypad )

LAMPIRAN MANUAL

1. Main board 2. Advance board

LAMPIRAN DIAGRAM SKEMATIK

DAFTAR PUSTAKA

Page 256: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 256

LAMPIRAN Diagram Skematik Rangkaian L2.1. Rangkaian Kabel Buffer Programmer

Gnd

P1.7

P1.5P1.6

Reset

Male DB 25

13251224112310229218207196185174163152141

10

Gnd

HEADER 6

123456

Vcc

Vcc

74LS244

2468

11131517

119

181614129753

1A11A21A31A42A12A22A32A4

1G2G

1Y11Y21Y31Y42Y12Y22Y32Y4

20

L2.2. Rangkaian Target Programmer

30p

AT89S51

91819 29

30

31

40

12345678

2122232425262728

1011121314151617

3938373635343332

RSTXTAL2XTAL1 PSEN

ALE/PROG

EA/VPP

VCC

P1.0/T2P1.1/T2-EXP1.2P1.3P1.4/SSP1.5/MOSIP1.6/MISOP1.7/SCK

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXD

P3.2/INTOP3.3/INT1

P3.4/TOP3.5/T1

P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

12345678

1N4148

12

HEADER 8

12345678

XTALL1

VCC

XTALL2

XTALL2

10uF

VCC

1k1k

PROGRAMMER

123456

12 MHzCRYSTAL

12345678

XTALL1

HEADER 8

12345678

VCC

RESET

VCC

30p

Page 257: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 257

L2.3. Rangkaian interface ke LED

P0.0..P0.7

D1

J3

EN LED12

D8

VCC

L2.4 Rangkaian interface ke Pushbutton

SW8

SW1

P2.7..P2.0

Page 258: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 258

L2.5. Rangkaian interface ke 7 Segmen

U8

74LS138

123

645

15141312111097

ABC

G1G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

g

FCS 9013

Y7..Y0

Y7..Y0

f

VCC

PNP

VCCVCCVCC

FCS 9013FCS 9013

R28

10K

a

FCS 9013

PNP

d

PNP

e

VCC

VCC

f

VCC

FCS 9013

a

P3.5

c

Common Anoda

P3.6

FCS 9013 FCS 9013

PNP

8 x 1k ohm

P3.7

PNPPNP

VCC

VCC

g

P0.6..P0.0

cd

PNP

b

FCS 9013

PNP

VCC

J2

EN 7 SEGMEN12

7 x 220 ohm

e

b

L2.6. Rangkaian interface ke LCD Karakter 2x16

14

13

12

3

RS

1

D4

16

VSS

J3

EN LCD 1 2

11

D0

VCC

D3

10k

Potensio Multiturn

D6

D210

GND

D1

4

D115

P3.7

BPL

P3.6

8

EN

P0.7..P0.0

9

D7

72VCC

D5

6

Page 259: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 259

L2.7. Rangkaian interface ke ADC0804

150p

PROG

RUN/ EN ADC

65

4

32

1

P3.3

VCC

13

2

P3.2

8

ADC0804

67

9

1112131415161718

194

5

123

+IN-IN

VREF/2

DB7DB6DB5DB4DB3DB2DB1DB0

CLKRCLKIN

INTR

CSRDWR

13

2

20

G 74LS244

D1

3V

P3.4

VCC

10k

P1.7..P1.0

10k

10k

VCC10

VCC R6

220

L2.8. Rangkaian interface ke DAC0808

R3

5K

5

9

R14 10K

1 3

2

3

NC

4

1

A8

-12V

-12V

8

A2

R22K5

7

GND2

VCC

15

A3

COMP

+

-

U3

3

26

74

C1

15pF

12V

A5

13

DAC0808

J3

IREF

1 2

VCC

A1

VEE

VCC

6

A7

A6Vr-

J3

EN DAC12

P2.0..P2.7

12

Voutput

10

14

16

IOUT

Vr+

11

A4

Page 260: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 260

L2.9. Rangkaian interface ke Keypad 4x4

7

2

6

8

KEYPAD 4 X 4

0

4

3

5

1

P2.7..P2.0

9

L2.10. Rangkaian interface ke Motor Stepper

O2

I6

VCC8

O5 MOTOR STEPPER

VCC

I1

I7

I3

VCC

1

O6

O3

16

GND

I2

O1

I4

9

O7

O4

I5

ULN2003P0.3..P0.0

Page 261: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 261

L2.11. Rangkaian interface ke Serial RS232

P1

PC DB9 Male

594837261

+

10u

VCC

16

VCC

+ 10u

P3.1 ( Tx )

15

+

10u

P3.0 ( Rx )

MAX232

138

1110

134526

129147

R1INR2INT1INT2IN

C+C1-C2+C2-V+V-

R1OUTR2OUTT1OUTT2OUT

+

10u

L2.12. Rangkaian interface ke Keyboard PC PS/2

.

IN4148

4

6

.

.

2

P3.2

.

10

K

VCC

.

5

VCC

P3.3

3

.

10

K

Konektor Keyboard PS2/ Female

IN4148

VCC

1

Page 262: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 262

L2.13. Rangkaian interface ke Printer

Reset

Connector DB25 Female PCB

1325122411231022

921

820

719

618

517

416

315

214

1

StrobeBusy

D0-D7

12345678

123

L2.14. Rangkaian interface ke Printer

R9R

C5C

18

24

VCC

1

12

AD2

AD1

AD0

AD4

AD3

AD6

AD5

DS

AD7

CS

WR

AS

RTC12C887

P2 IC2

P3.0 IC2

P3.2 IC2

P3.1 IC2

P3.3 IC2

Page 263: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 263

Step

Input ADC (volt)

%T

A sample Ukur

A standart Ukur

C standart Konstanta

C Sample Ukur

0 0,00000 - - - - -

1 0,00902 0,39215687 2,407 0,01970 2,56 312,7281

2 0,01804 0,784313391 2,106 0,01970 2,56 273,6095

3 0,02706 1,176469913 1,929 0,01970 2,56 250,7266

4 0,03608 1,568626435 1,804 0,01970 2,56 234,4909

5 0,04510 1,960782957 1,708 0,01970 2,56 221,8975

6 0,05412 2,352939478 1,628 0,01970 2,56 211,6079

7 0,06314 2,745096 1,561 0,01970 2,56 202,9083

8 0,07216 3,137252522 1,503 0,01970 2,56 195,3723

9 0,08118 3,529409044 1,452 0,01970 2,56 188,7250

10 0,09020 3,921565565 1,407 0,01970 2,56 182,7789

11 0,09922 4,313722087 1,365 0,01970 2,56 177,3999

12 0,10824 4,705878609 1,327 0,01970 2,56 172,4893

13 0,11725 5,09803513 1,293 0,01970 2,56 167,9720

14 0,12627 5,490191652 1,260 0,01970 2,56 163,7896

15 0,13529 5,882348174 1,230 0,01970 2,56 159,8959

16 0,14431 6,274504696 1,202 0,01970 2,56 156,2536

17 0,15333 6,666661217 1,176 0,01970 2,56 152,8322

18 0,16235 7,058817739 1,151 0,01970 2,56 149,6064

19 0,17137 7,450974261 1,128 0,01970 2,56 146,5551

20 0,18039 7,843130783 1,106 0,01970 2,56 143,6603

21 0,18941 8,235287304 1,084 0,01970 2,56 140,9067

22 0,19843 8,627443826 1,064 0,01970 2,56 138,2813

23 0,20745 9,019600348 1,045 0,01970 2,56 135,7726

24 0,21647 9,41175687 1,026 0,01970 2,56 133,3707

25 0,22549 9,803913391 1,009 0,01970 2,56 131,0669

26 0,23451 10,19606991 0,992 0,01970 2,56 128,8534

27 0,24353 10,58822643 0,975 0,01970 2,56 126,7235

28 0,25255 10,98038296 0,959 0,01970 2,56 124,6710

29 0,26157 11,37253948 0,944 0,01970 2,56 122,6906

30 0,27059 11,764696 0,929 0,01970 2,56 120,7773

31 0,27961 12,15685252 0,915 0,01970 2,56 118,9268

32 0,28863 12,54900904 0,901 0,01970 2,56 117,1350

33 0,29765 12,94116557 0,888 0,01970 2,56 115,3984

34 0,30667 13,33332209 0,875 0,01970 2,56 113,7136

35 0,31569 13,72547861 0,862 0,01970 2,56 112,0776

36 0,32471 14,11763513 0,850 0,01970 2,56 110,4878

37 0,33373 14,50979165 0,838 0,01970 2,56 108,9415

38 0,34274 14,90194817 0,827 0,01970 2,56 107,4364

39 0,35176 15,2941047 0,815 0,01970 2,56 105,9705

40 0,36078 15,68626122 0,804 0,01970 2,56 104,5416

41 0,36980 16,07841774 0,794 0,01970 2,56 103,1481

42 0,37882 16,47057426 0,783 0,01970 2,56 101,7881

43 0,38784 16,86273078 0,773 0,01970 2,56 100,4601

44 0,39686 17,2548873 0,763 0,01970 2,56 99,1627

45 0,40588 17,64704383 0,753 0,01970 2,56 97,8944

46 0,41490 18,03920035 0,744 0,01970 2,56 96,6540

47 0,42392 18,43135687 0,734 0,01970 2,56 95,4403

48 0,43294 18,82351339 0,725 0,01970 2,56 94,2521

49 0,44196 19,21566991 0,716 0,01970 2,56 93,0884

50 0,45098 19,60782643 0,708 0,01970 2,56 91,9483

51 0,46000 19,99998296 0,699 0,01970 2,56 90,8307

Page 264: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 264

52 0,46902 20,39213948 0,691 0,01970 2,56 89,7348

53 0,47804 20,784296 0,682 0,01970 2,56 88,6598

54 0,48706 21,17645252 0,674 0,01970 2,56 87,6049

55 0,49608 21,56860904 0,666 0,01970 2,56 86,5693

56 0,50510 21,96076557 0,658 0,01970 2,56 85,5524

57 0,51412 22,35292209 0,651 0,01970 2,56 84,5535

58 0,52314 22,74507861 0,643 0,01970 2,56 83,5720

59 0,53216 23,13723513 0,636 0,01970 2,56 82,6072

60 0,54118 23,52939165 0,628 0,01970 2,56 81,6587

61 0,55020 23,92154817 0,621 0,01970 2,56 80,7259

62 0,55922 24,3137047 0,614 0,01970 2,56 79,8082

63 0,56823 24,70586122 0,607 0,01970 2,56 78,9052

64 0,57725 25,09801774 0,600 0,01970 2,56 78,0164

65 0,58627 25,49017426 0,594 0,01970 2,56 77,1414

66 0,59529 25,88233078 0,587 0,01970 2,56 76,2798

67 0,60431 26,2744873 0,580 0,01970 2,56 75,4311

68 0,61333 26,66664383 0,574 0,01970 2,56 74,5950

69 0,62235 27,05880035 0,568 0,01970 2,56 73,7711

70 0,63137 27,45095687 0,561 0,01970 2,56 72,9590

71 0,64039 27,84311339 0,555 0,01970 2,56 72,1585

72 0,64941 28,23526991 0,549 0,01970 2,56 71,3692

73 0,65843 28,62742644 0,543 0,01970 2,56 70,5907

74 0,66745 29,01958296 0,537 0,01970 2,56 69,8229

75 0,67647 29,41173948 0,531 0,01970 2,56 69,0653

76 0,68549 29,803896 0,526 0,01970 2,56 68,3178

77 0,69451 30,19605252 0,520 0,01970 2,56 67,5801

78 0,70353 30,58820904 0,514 0,01970 2,56 66,8519

79 0,71255 30,98036557 0,509 0,01970 2,56 66,1329

80 0,72157 31,37252209 0,503 0,01970 2,56 65,4230

81 0,73059 31,76467861 0,498 0,01970 2,56 64,7219

82 0,73961 32,15683513 0,493 0,01970 2,56 64,0295

83 0,74863 32,54899165 0,487 0,01970 2,56 63,3454

84 0,75765 32,94114817 0,482 0,01970 2,56 62,6695

85 0,76667 33,3333047 0,477 0,01970 2,56 62,0016

86 0,77569 33,72546122 0,472 0,01970 2,56 61,3415

87 0,78471 34,11761774 0,467 0,01970 2,56 60,6891

88 0,79372 34,50977426 0,462 0,01970 2,56 60,0441

89 0,80274 34,90193078 0,457 0,01970 2,56 59,4064

90 0,81176 35,2940873 0,452 0,01970 2,56 58,7758

91 0,82078 35,68624383 0,447 0,01970 2,56 58,1522

92 0,82980 36,07840035 0,443 0,01970 2,56 57,5354

93 0,83882 36,47055687 0,438 0,01970 2,56 56,9253

94 0,84784 36,86271339 0,433 0,01970 2,56 56,3217

95 0,85686 37,25486991 0,429 0,01970 2,56 55,7244

96 0,86588 37,64702644 0,424 0,01970 2,56 55,1335

97 0,87490 38,03918296 0,420 0,01970 2,56 54,5486

98 0,88392 38,43133948 0,415 0,01970 2,56 53,9698

99 0,89294 38,823496 0,411 0,01970 2,56 53,3968

100 0,90196 39,21565252 0,407 0,01970 2,56 52,8296

101 0,91098 39,60780904 0,402 0,01970 2,56 52,2681

102 0,92000 39,99996557 0,398 0,01970 2,56 51,7120

103 0,92902 40,39212209 0,394 0,01970 2,56 51,1614

104 0,93804 40,78427861 0,390 0,01970 2,56 50,6162

105 0,94706 41,17643513 0,385 0,01970 2,56 50,0761

Page 265: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 265

106 0,95608 41,56859165 0,381 0,01970 2,56 49,5412

107 0,96510 41,96074817 0,377 0,01970 2,56 49,0112

108 0,97412 42,3529047 0,373 0,01970 2,56 48,4862

109 0,98314 42,74506122 0,369 0,01970 2,56 47,9661

110 0,99216 43,13721774 0,365 0,01970 2,56 47,4507

111 1,00118 43,52937426 0,361 0,01970 2,56 46,9399

112 1,01020 43,92153078 0,357 0,01970 2,56 46,4338

113 1,01921 44,3136873 0,353 0,01970 2,56 45,9321

114 1,02823 44,70584383 0,350 0,01970 2,56 45,4349

115 1,03725 45,09800035 0,346 0,01970 2,56 44,9420

116 1,04627 45,49015687 0,342 0,01970 2,56 44,4534

117 1,05529 45,88231339 0,338 0,01970 2,56 43,9689

118 1,06431 46,27446991 0,335 0,01970 2,56 43,4886

119 1,07333 46,66662644 0,331 0,01970 2,56 43,0124

120 1,08235 47,05878296 0,327 0,01970 2,56 42,5401

121 1,09137 47,45093948 0,324 0,01970 2,56 42,0717

122 1,10039 47,843096 0,320 0,01970 2,56 41,6072

123 1,10941 48,23525252 0,317 0,01970 2,56 41,1465

124 1,11843 48,62740904 0,313 0,01970 2,56 40,6896

125 1,12745 49,01956557 0,310 0,01970 2,56 40,2363

126 1,13647 49,41172209 0,306 0,01970 2,56 39,7866

127 1,14549 49,80387861 0,303 0,01970 2,56 39,3404

128 1,15451 50,19603513 0,299 0,01970 2,56 38,8978

129 1,16353 50,58819165 0,296 0,01970 2,56 38,4586

130 1,17255 50,98034817 0,293 0,01970 2,56 38,0228

131 1,18157 51,3725047 0,289 0,01970 2,56 37,5903

132 1,19059 51,76466122 0,286 0,01970 2,56 37,1611

133 1,19961 52,15681774 0,283 0,01970 2,56 36,7352

134 1,20863 52,54897426 0,279 0,01970 2,56 36,3125

135 1,21765 52,94113078 0,276 0,01970 2,56 35,8929

136 1,22667 53,3332873 0,273 0,01970 2,56 35,4764

137 1,23569 53,72544383 0,270 0,01970 2,56 35,0629

138 1,24470 54,11760035 0,267 0,01970 2,56 34,6525

139 1,25372 54,50975687 0,264 0,01970 2,56 34,2450

140 1,26274 54,90191339 0,260 0,01970 2,56 33,8404

141 1,27176 55,29406991 0,257 0,01970 2,56 33,4387

142 1,28078 55,68622644 0,254 0,01970 2,56 33,0399

143 1,28980 56,07838296 0,251 0,01970 2,56 32,6438

144 1,29882 56,47053948 0,248 0,01970 2,56 32,2506

145 1,30784 56,862696 0,245 0,01970 2,56 31,8600

146 1,31686 57,25485252 0,242 0,01970 2,56 31,4721

147 1,32588 57,64700904 0,239 0,01970 2,56 31,0869

148 1,33490 58,03916557 0,236 0,01970 2,56 30,7043

149 1,34392 58,43132209 0,233 0,01970 2,56 30,3242

150 1,35294 58,82347861 0,230 0,01970 2,56 29,9467

151 1,36196 59,21563513 0,228 0,01970 2,56 29,5717

152 1,37098 59,60779165 0,225 0,01970 2,56 29,1992

153 1,38000 59,99994817 0,222 0,01970 2,56 28,8291

154 1,38902 60,3921047 0,219 0,01970 2,56 28,4615

155 1,39804 60,78426122 0,216 0,01970 2,56 28,0962

156 1,40706 61,17641774 0,213 0,01970 2,56 27,7332

157 1,41608 61,56857426 0,211 0,01970 2,56 27,3726

158 1,42510 61,96073078 0,208 0,01970 2,56 27,0143

159 1,43412 62,3528873 0,205 0,01970 2,56 26,6582

Page 266: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 266

160 1,44314 62,74504383 0,202 0,01970 2,56 26,3044

161 1,45216 63,13720035 0,200 0,01970 2,56 25,9528

162 1,46118 63,52935687 0,197 0,01970 2,56 25,6033

163 1,47019 63,92151339 0,194 0,01970 2,56 25,2560

164 1,47921 64,31366991 0,192 0,01970 2,56 24,9108

165 1,48823 64,70582644 0,189 0,01970 2,56 24,5678

166 1,49725 65,09798296 0,186 0,01970 2,56 24,2268

167 1,50627 65,49013948 0,184 0,01970 2,56 23,8878

168 1,51529 65,882296 0,181 0,01970 2,56 23,5509

169 1,52431 66,27445252 0,179 0,01970 2,56 23,2159

170 1,53333 66,66660904 0,176 0,01970 2,56 22,8830

171 1,54235 67,05876557 0,174 0,01970 2,56 22,5520

172 1,55137 67,45092209 0,171 0,01970 2,56 22,2229

173 1,56039 67,84307861 0,168 0,01970 2,56 21,8957

174 1,56941 68,23523513 0,166 0,01970 2,56 21,5704

175 1,57843 68,62739165 0,164 0,01970 2,56 21,2470

176 1,58745 69,01954817 0,161 0,01970 2,56 20,9255

177 1,59647 69,4117047 0,159 0,01970 2,56 20,6057

178 1,60549 69,80386122 0,156 0,01970 2,56 20,2877

179 1,61451 70,19601774 0,154 0,01970 2,56 19,9716

180 1,62353 70,58817426 0,151 0,01970 2,56 19,6572

181 1,63255 70,98033078 0,149 0,01970 2,56 19,3445

182 1,64157 71,37248731 0,146 0,01970 2,56 19,0336

183 1,65059 71,76464383 0,144 0,01970 2,56 18,7243

184 1,65961 72,15680035 0,142 0,01970 2,56 18,4168

185 1,66863 72,54895687 0,139 0,01970 2,56 18,1109

186 1,67765 72,94111339 0,137 0,01970 2,56 17,8066

187 1,68667 73,33326991 0,135 0,01970 2,56 17,5040

188 1,69568 73,72542644 0,132 0,01970 2,56 17,2030

189 1,70470 74,11758296 0,130 0,01970 2,56 16,9036

190 1,71372 74,50973948 0,128 0,01970 2,56 16,6058

191 1,72274 74,901896 0,126 0,01970 2,56 16,3096

192 1,73176 75,29405252 0,123 0,01970 2,56 16,0149

193 1,74078 75,68620904 0,121 0,01970 2,56 15,7217

194 1,74980 76,07836557 0,119 0,01970 2,56 15,4300

195 1,75882 76,47052209 0,117 0,01970 2,56 15,1399

196 1,76784 76,86267861 0,114 0,01970 2,56 14,8512

197 1,77686 77,25483513 0,112 0,01970 2,56 14,5640

198 1,78588 77,64699165 0,110 0,01970 2,56 14,2782

199 1,79490 78,03914817 0,108 0,01970 2,56 13,9939

200 1,80392 78,4313047 0,106 0,01970 2,56 13,7110

201 1,81294 78,82346122 0,103 0,01970 2,56 13,4295

202 1,82196 79,21561774 0,101 0,01970 2,56 13,1495

203 1,83098 79,60777426 0,099 0,01970 2,56 12,8708

204 1,84000 79,99993078 0,097 0,01970 2,56 12,5934

205 1,84902 80,39208731 0,095 0,01970 2,56 12,3175

206 1,85804 80,78424383 0,093 0,01970 2,56 12,0428

207 1,86706 81,17640035 0,091 0,01970 2,56 11,7695

208 1,87608 81,56855687 0,088 0,01970 2,56 11,4975

209 1,88510 81,96071339 0,086 0,01970 2,56 11,2269

210 1,89412 82,35286991 0,084 0,01970 2,56 10,9575

211 1,90314 82,74502644 0,082 0,01970 2,56 10,6894

212 1,91216 83,13718296 0,080 0,01970 2,56 10,4225

213 1,92117 83,52933948 0,078 0,01970 2,56 10,1570

Page 267: Petunjuk Praktikum-Mikrokontroller AT89Sxx Trainer Kit

Web:www.mytutorialcafe.com Email: [email protected] – Triwiyanto 267

214 1,93019 83,921496 0,076 0,01970 2,56 9,8926

215 1,93921 84,31365252 0,074 0,01970 2,56 9,6295

216 1,94823 84,70580904 0,072 0,01970 2,56 9,3676

217 1,95725 85,09796557 0,070 0,01970 2,56 9,1069

218 1,96627 85,49012209 0,068 0,01970 2,56 8,8475

219 1,97529 85,88227861 0,066 0,01970 2,56 8,5892

220 1,98431 86,27443513 0,064 0,01970 2,56 8,3321

221 1,99333 86,66659165 0,062 0,01970 2,56 8,0761

222 2,00235 87,05874817 0,060 0,01970 2,56 7,8213

223 2,01137 87,4509047 0,058 0,01970 2,56 7,5677

224 2,02039 87,84306122 0,056 0,01970 2,56 7,3152

225 2,02941 88,23521774 0,054 0,01970 2,56 7,0638

226 2,03843 88,62737426 0,052 0,01970 2,56 6,8135

227 2,04745 89,01953078 0,051 0,01970 2,56 6,5643

228 2,05647 89,41168731 0,049 0,01970 2,56 6,3163

229 2,06549 89,80384383 0,047 0,01970 2,56 6,0693

230 2,07451 90,19600035 0,045 0,01970 2,56 5,8234

231 2,08353 90,58815687 0,043 0,01970 2,56 5,5785

232 2,09255 90,98031339 0,041 0,01970 2,56 5,3348

233 2,10157 91,37246991 0,039 0,01970 2,56 5,0920

234 2,11059 91,76462644 0,037 0,01970 2,56 4,8503

235 2,11961 92,15678296 0,035 0,01970 2,56 4,6096

236 2,12863 92,54893948 0,034 0,01970 2,56 4,3700

237 2,13765 92,941096 0,032 0,01970 2,56 4,1314

238 2,14666 93,33325252 0,030 0,01970 2,56 3,8937

239 2,15568 93,72540904 0,028 0,01970 2,56 3,6571

240 2,16470 94,11756557 0,026 0,01970 2,56 3,4215

241 2,17372 94,50972209 0,025 0,01970 2,56 3,1868

242 2,18274 94,90187861 0,023 0,01970 2,56 2,9531

243 2,19176 95,29403513 0,021 0,01970 2,56 2,7204

244 2,20078 95,68619165 0,019 0,01970 2,56 2,4886

245 2,20980 96,07834817 0,017 0,01970 2,56 2,2578

246 2,21882 96,4705047 0,016 0,01970 2,56 2,0279

247 2,22784 96,86266122 0,014 0,01970 2,56 1,7990

248 2,23686 97,25481774 0,012 0,01970 2,56 1,5709

249 2,24588 97,64697426 0,010 0,01970 2,56 1,3438

250 2,25490 98,03913078 0,009 0,01970 2,56 1,1176

251 2,26392 98,43128731 0,007 0,01970 2,56 0,8923

252 2,27294 98,82344383 0,005 0,01970 2,56 0,6679

253 2,28196 99,21560035 0,003 0,01970 2,56 0,4444

254 2,29098 99,60775687 0,002 0,01970 2,56 0,2218

255 2,30000 99,99991339 0,000 0,01970 2,56 0,0000


Recommended