Rabu, 27 Februari 2008

Wednesday, March 7, 2007
BLUETOOTH ( BlueSoleil )

Cara penggunaan :

1. Masukkan Bluetooth pada USB
Icon Bluetooth berubah menjadi warna biru berarti sudah terbaca oleh PC dan siap digunakan

2. Aktifkan Bluetooth pada HP, usahakan dalam kondisi no hidden

3. Klik icon BlueSoleil

4. Klik gambar matahari untuk mencari koneksi dengan HP sampai muncul gambar HP.

5. Klik dua kali gambar HP

6. Masukkan password pada HP bila diminta, begitu juga pada komputer dengan password yang sama.

7. Klik Bluetooth File Transfer Service

8. File yang akan didownload tinggal copy paste

Selasa, 26 Februari 2008

Alarm clock/timer kit
Overview | Ordering | Troubleshooting | Programming

Image 1
Image 2
Image 3
Image 4
Image 5
Image 6
Image 7
Image 8
Image 9
Image 10
Image 11

A kit to build the countdown timer is available. Now featuring a fully functional alarm clock and stopwatch, these kits are not only fun to build but also provide a practical device for everyday use.

Features:

* 12/24 hour clock
* 24 hour 1 event alarm clock
* 10 minute snooze function - a full minute longer than other alarm clocks!
* Stopwatch to 99 hours 99 minutes 99 seconds
* Countdown from 99 hours 99 minutes 99 seconds
* Lap counter/clock freeze
* Counts below 1 hour display minutes, seconds and 1/100th seconds (MM:SS:hh)
* Countdown/stopwatch can run concurrently with clock and alarm
* Time/alarm/countdown is easily set through the numeric keypad
* 3 levels of display brightness
* Low power mode (display off) for extended battery operation
* 2.1mm centre positive barrel socket for external 6v power supply (not supplied)
* PCB connection for in-circuit programming (external programmer required)
* PCB conenction for additional hardware
* Doesn't do what you want it to? Then why not reprogram it?

The clock is designed to be mounted on a PJ996 6v lantern battery (not supplied).

Senin, 11 Februari 2008

Perancangan Jam Alarm

PERANCANGAN SISTEM ALARM JAM KULIAH PADA POLITEKNIK MANDIRI BINA PRESTASI MEDAN
BERBASIS
MIKROKONTROLLER AT89S51

LAPORAN TUGAS AKHIR
Disusun Sebagai Salah Satu Syarat Kelulusan Diploma III Jurusan Elektro Program Studi Elektronika Komunikasi Komputer (EKK) Politeknik Mandiri Bina Prestas
i

Oleh
Melki Guslow
Nim : 035305046

JURUSAN ELEKTRO
PROGRAM STUDI ELEKTRONIKA KOMUNIKASI KOMPUTER
POLITEKNIK MANDIRI BINA PRESTASI
MEDAN

LEMBAR PENGESAHAN I

Yang bertanda tangan dibawah ini, pembim-bing jurusan dan ketua jurusan elektronika Politeknik Mandiri Bina Prestasi Medan menyatakan bahwa laporan tugas akhir dari :
Nama : Melki Guslow
NIM : 035305546
JURUSAN : TEKNIK ELEKTRO
PROGRAM STUDI : ELEKTRONIKA KOMUNIKASI KO MPUTER
Dengan judul :
PERANCANGAN SISTEM ALARM JAM KULIAH PADA POLITEKNIK MANDIRI BINA PRESTASI MEDAN BERBASIS MIKROKONTROLLER AT89S51.

Telah diperiksa dan dinyatakan selesai, serta dapat diajukan dalam Sidang Ujian.
Disetujui Oleh :
Medan, September 2007


Morlan pardede, MT
Pembimbing jurusan

Diketahui Oleh :
Medan, Septembert 2007


Mardaus purba, ST
Ketua Jurusan Teknik Elektro

LEMBAR PENGESAHAN II


Judul : Perancangan Sistem Alarm Jam Kuliah Pada
Politeknik Mandiri Bina Prestasi Medan
Berbasis Mikrokontroller At89s51

Nama : Melki Guslow
Nim : 035305046
Progra.Studi : Elektronika Komunikasi Komputer

Disetujui Oleh :
Medan, September 2007


Pembimbing Ketua Jurusan


Morlan Pardede, MT Mardaus Purba, ST

KATA PENGANTAR

Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas segala Rahmat dan Karunia-Nya yang telah memberikan kesehatan, pengetahuan, keterampilan, pengalaman yang senantiasa diberikan kepada penulis, sehingga penulis dapat menyelesaikan laporan tugas akhir ini dengan cukup baik.
Laporan tugas akhir ini berjudul ” PERANCANGAN SISTEM ALARM JAM KULIAH POLITEKNIK MANDIRI BINA PRESTASI MEDAN BERBASIS MIKROKONTROLLER AT89S51” dimana penulisannya secara informative dan analisa agar dapat menggambarkan proses dan cara kerja rangkaian serta system pengontrolan yang merupakan suatu syarat untuk menyelesaikan program Diploma-III Jurusan Teknik Elektonika Progran Studi Elektronika Komunikasi Komputer, Politeknik Mandiri Bina Prestasi Medan.

Selama proses perancangan, pembuatan dan pengujian system hingga dalam tahap penyusunan laporan ini penulis banyak menerima bantuan, bimbingan dan pengarahan dari berbagai pihak baik material, spiritual, informasi dan masukan saran. Pada kesempatan ini penulis mengucapkan terimakasih kepada :
1. Kedua Orang Tua A.SIagian dan D. Pangaribuan atas doa restu, cinta, kasih sayang serta pengorbanannya yang penulis terima.
2. Bapak Anggiat P. Simbolon, SE, Direktur Politeknik Mandiri Bina Prestasi Medan.
3. Bapak Mardaus Purba, ST, Ketua Jurusan Teknik Elektronika Politeknik Mandiri Bina Prestasi Medan.
4. Bapak Morlan Pardede, MT, Dosen pembimbing dan penulis di Politeknik Mandiri Bina Prestasi Medan.
5. Bapak Kurnia Sitepu, Ssi, Dosen pemograman Pascal Politeknik Mandiri Bina Prestasi Medan.
6. Bapak Ahmadi, A.Md, Staff dan Dosen Politeknik Mandiri Bina Prestasi Medan.
7. Seluruh Staf Pengajar Jurusan Elektronika Komunikasi Komputer dan staf serta pegawai di lingkungan Politeknik Mandiri Bina Prestasi Medan.
8. Abang Alex Reston, S terima kasih atas kesabaran, nasehat, bantuannya dan dukungannya selama ini.
9. Adik adikku, Nelly, Dina, Dahlia, Srywanjetika
10. Seluruh rekan - rekan di Politeknik Mandiri Bina Prestasi Medan.

Dalam penulisan laporan tugas akhir ini penulis menyadari sepenuhnya, walaupun penulis telah berupaya memberikan yang terbaik, penulisan ini masih jauh dari kesempurnaan baik isi, sistematika maupun redaksinya, maka penulis mengharapkan saran dan kritik yang bersifat membangun untuk kesempurnaan pengembangan laporan dalam perancangan Jam Kuliah ini nantinya.

Akhir kata penulis berharap semoga penulisan ini bermanfaat dan selanjutnya dapat dikembangkan, berguna bagi pihak yang membacanya dan tak lupa pula saya ucapkan Syukur kepada Tuhan Yang Maha Esa dimana akhirnya penulis dapat menyelesaikan Program Diploma III Politeknik Mandiri Bina Prestasi Medan.

Medan, September 2007
Penulis


Melki Guslow

DAFTAR ISI

HAL
LEMBAR PENGESAHAN I
LEMBAR PENGESAHAN II
KATA PENGANTAR i
DAFTAR ISI iv
DAFTAR GAMBAR vii
DAFTAR TABEL x
BAB 1 PENDAHULUAN 1
1.1. Latar Belakang 1
1.2. Batasan Dan Perumusan Masalah 2
1.2.1. Batasan Masalah 2
1.2.2. Perumusan Masalah 3
1.3. Tujuan Dan Manfaat 3
1.3.1. Tujuan 3
1.3.2. Manfaat 4
1.4. Metode Penelitian 4
1.5. Sistematika Penulisan 5
BAB 2 DASAR TEORI 9
2.1. Mikrokontroler At89s51 9
2.1.1. Pena-Pena Mikrokontroler At89s51 11
2.1.2. On – Chip Osilator Pada Versi Cmos 16
2.1.3. Diagram Blok Mikrokontroler At89s51 17
2.1.4. Organsisasi Memori 18
2.1.5. Struktur Pengoperasian Port 21
2.1.5.1. Port Input Output 21
2.1.5.2. Timer Counter 23
2.1.6. Sistem Interupsi 28
2.1.6.1. Perangkat Lunak Mikrokontroler At89s51 31
2.1.6.2. Instruksi Transfer Data 31
2.1.6.3. Instruksi I Aritmatika (Interupsi Perhitungan) 32
2.1.6.4. Instruksi I Logika 33
2.1.6.5. Instruksi Transfer Kendali 34
2.2. Ic Buffer Oktal Inverter 74ls204 36
2.3. Transistor 37
2.3.1. Transistor Sebagai Saklar 37
BAB 3 PERANCANGAN SISTEM 41
3.1. Blok Diagram Rangkaian 41
3.2. Perancangan Perangkat Keras (Hardware) 41
3.2.1. Unit Display 42
3.2.2. Unit Driver 43
3.2.3. Unit Pengaturan/Pengesetan Waktu 46
3.2.4. Unit Alarm 48
3.2.5. Unit Pengendali 49
3.3. Perancangan Perangkat Lunak (Software) 50
3.3.1. Program Tampil Waktu 50
3.3.2. Program Set Waktu 52
3.3.3. Program Naik Waktu 53
3.3.4. Sub-Program Periksa Alarm 55
BAB 4 PENGUJIAN DAN ANALISA 58
4.1. Pengujian Unit Display 58
4.2. Pengujian Unit Driver 59
4.2.1. Pengujian Ic Buffer 60
4.2.2. Pengujian Transistor Sebagai Saklar 66
4.3. Pengujian Unit Pengatur/Pengesetan Waktul 67
4.4. Pengujian Unit Alarm 68
4.5. Pengujian Unit Pengendali 69
BAB 5 PENUTUP 71
5.1. Kesimpulan 71
5.2. Saran 71
Daftar Pustaka 72
Lampiran-Lampiran

DAFTAR GAMBAR

Hal
1. Gambar 2.1. Konfigurasi Mikrokontroller At89s51 11
2. Gambar 2.2. On-Chip Osilator Pada Versi Cmos 17
3. Gambar 2.3. Blok Diagram At89s51 17
4. Gambar 2.4. Pemisahan Memori Program Dengan Memori Data 18
5. Gambar 2.5. Memori Mikrokontroller At89s51 19
6. Gambar 2.6. Memori Data Internal 19
7. Gambar 2.7. Bagian Bawah Internal Ram 256 Byte 19
8. Gambar 2.8. Bagian Atas Internal Ram 256 20
9. Gambar 2.9. Ruang Special Function Register 20
10. Gambar 2.10. Konfigurasi Bit Register Tcon 23
11. Gambar 2.12. Timer/Counter 1 Modus 0 26
12. Gambar 2.13. Timer/Counter Mode 2 27
13. Gambar 2.14. Timer/Counter Mode 3 27
14. Gambar 2.15. Konfigurasi Bit Register Ie 28
15. Gambar 2.17. Konfigurasi Bit Register Ip 29
16. Gambar 2.18. Konfigurasi Bit Register Smod 30
17. Gambar 2.19. Konfigurasi Bit Register Pcon 30
18. Gambar 2.20. Diagram Pin74ls240 36
19. Gambar 2.21. Karakteristik Transistor 38
20. Gambar 2.22. Transistor Sebagai Saklar 39
21. Gambar 2.23. Transistor Sebagai Saklar Off 40
22. Gambar 3.1. Diagram Blok Jam Digital 41
23. Gambar 3.2. Rangkaian Display Menggunakan Seven Segment 42
24. Gambar 3.3. Pengukuran Jatuh Tegangan Pada Led 42
25. Gambar 3.5. Rangkaian Driver Jam Digital 44
26. Gambar 3.6. Ekivalen Rangkaian Driver 44
27. Gambar 3.7. Rangkaian Driver Dengan Unit Display 46
28. Gambar 3.8. Rangkaian Pengatur/Pengesetan Waktu 47
29. Gambar 3.9. Rangkaian Clock Alarm 48
30. Gambar 3.10. Rangkaian Pengendali At89s51 49
31. Gambar 3.11. Proses Peragaan Waktu 50
32. Gambar 3.12. Diagram Alir Tampil Waktu 52
33. Gambar 3.13. Diagram Alir Set Waktu 53
34. Gambar 3.14. Naik Waktu 55
35. Gambar 3.15. Periksa Alarm 57
36. Gambar 4.1. Pengukuran Rangkaian Display 58
37. Gambar 4.2. Seven Segmen 59
38. Gambar 4.3. Pengujian Rangkaian Driver 60
39. Gambar 4.4. Pengujian Rangkaian Buffer 62
40. Gambar 4.5. Pengukuran Vol Ic 74ls240 64
41. Gambar 4.6. Pengujian Transistor Sebagai Saklar 66
42. Gambar 4.7. Pengujian Rangkaian Pengatur Jam Dengan Voltmeter 67
43. Gambar 4.8. Pengujian Rangkaian Clock Alarm Dengan Voltmeter 68
44. Gambar 4.9. Pengujian Rangkaian Pengendali Dengan Logic Probe 69

DAFTAR TABEL

Hal
1. Tabel 2.1. Keluarga Mikrokontroller Mcs- 51 10
2. Tabel 2.2. Fungsi Pengganti Dari Port 3 13
3. Tabel 2.3. Nilai Register Setelah Di-Reset/ 16
4. Tabel 2.4. Tabel Port 3 22
5. Tabel 2.5. Fungsi Bit Register Tcon 24
6. Tabel 2.6. Alamat Rutin Interupsi 29
7. Tabel 2.7. Tabel Kebenaran 74ls240 37
8. Tabel 3.1. Konversi Nilai Segmen 51
9. Tabel 4.1. Data Unit Display 59
10. Tabel 4.2. Hasil Pengujian Rangkaian Driver 61
11. Tabel 4.3. Pengujian Rangkaian Buffer 63
12. Tabel 4.4. Hasil Pengukuran Vol 74ls240 65
13. Tabel 4.5. Hasil Pengujian Transistor 67
14. Tabel 4.6. Hasil Pengukuran Pada Rangkaian Pengatur Jam 68
15. Tabel 4.7. Hasil Pengukuran Pada Rangkaian Pengatur Jam 69
16. Tabel 4.2. Hasil Pengujian Port 1 70
17. Tabel 4.2. Hasil Pengujian Port 1 70

BAB 1
PENDAHULUAN

1.1 Latar Belakang
Penandaan waktu dalam kehidupan modern saat ini sangatlah penting, dimana penandaan waktu ini bisa menandakan awal dan berakhirnya suatu kegiatan. Dengan perkembangan teknologi mikroprosesor/mikrokontroler penanda waktu ini dapat kita rancang sendiri biasanya awal dan berakhirnya suatu kegiatan ini ditandai dengan suatu bunyi alarm.
Berdasarkan pengamatan kami awal akhirnya suatu kegiatan masih berdasarkan jam umum yang di buat dikampus Politeknik MBP dan jam pribadi yang dikenakan dosen dan tidak menghasilkan indikasi pergantian (alarm pergantian perkuliahan) .
Melihat hal diatas penulis ingin merancang dan membuat suatu alat jam digital berikut alarm pergantian waktu belajar, dengan judul Tugas Akhir “ PERANCANGAN SISTEM ALARM JAM KULIAH PADA POLITEKNIK MANDIRI BINA PRESTASI MEDAN BERBASIS MIKROKONTROLLER AT89S51”
Mikrokontroller AT89S51 digunakan sebagai pusat pengaturan dari pada sistem jam digital. Peragaan waktu di aplikasikan pada sevent segment, sedangkan referensi waktu dihasilkan oleh timer 0 (nol) dari mikrokontroller dimana sumber Cloknya berasal dari Crystal mikrokontroler yang berkapasitas 12MHz,

pengesetan waktu dilakukan melalui toggle switch dan penambahan menit, jam pada saat pengesetan dilakukan dengan penekanan tombol.
Alat ini juga dirancang dalam dua pilihan waktu jam perkuliahan diantaranya : Waktu perkuliahan saat kuliah dalam keadaan normal, dan saat waktu kuliah dalam keadaan puasa.
Diharapkan alat ini dapat mengingatkan mulai dan berakhirnya suatu kegiatan atau waktu masuk dan berakhirnya suatu kegiatan terutama pada Kampus Politeknik Mandiri Bina Prestasi Medan.

1.2 Batasan dan Perumusan Masalah
1.2.1 Batasan Masalah
Dalam perancangan pembuatan Tugas Akhir ini penulis membuat batasan masalah yaitu : jam alarm hanya menampilkan menit dan jam sedangkan indikasi detik dilakukan dengan di indikasikan pada dot 7- segment . (segment H), alat yang dirancang tidak mengindikasikan hari tanggal, bulan dan tahun. Alarm pergantian jam kuliah berdasarkan jam perkuliahan normal Politeknik MBP dan jam perkuliahan saat bulan puasa pengaturan jam alarm digital diset melalui program yang menggunakan Mikrokontroller AT89S51, pada intinya Mikrokontroller AT89S51 yang merupakan inti (otak) dari Jam Alarm Digital tersebut.


1.2.2. Perumusan Masalah
Dari permasalahan yang diuraikan diatas dapat diambil beberapa rumusan masalah yaitu :
1. Bagaimana mengindikasikan waktu 1 (satu) detik dengan timer mikrokontroller.
2. Bagaimana menampilkan waktu jam menit yang dihasilkan timer pada peraga 7- segment.
3. Bagaimana mengaktifkan alarm pada saat waktu sesuai dengan jam mulai dan berakhirnya suatu perkuliahan.
Sesuai dengan permasalahan yang dihadapi dalam perancangan jam alarm tersebut maka penulis memberikan pemecahan masalah tersebut, yakni : Agar alarm dapat berfungsi secara otomatis maka rangkaian jam alarm digital ini dilengakapai dengan suatu alat yang dapat menyimpan data (program untuk menjalankan rangkaian jam alarm digital tersebut).

1.3 Tujuan dan Manfaat
1.3.1 Tujuan
Tujuan pembuatan proyek ini adalah :
1. Untuk memenuhi salah satu persyaratan guna menyelesaikan program Dipoloma III Jurusan Elektro Program Studi Elektronika Komunikasi Komputer pada Politeknik Mandiri Bina Prestasi Medan.
2. Untuk menerapkan ilmu yang didapat penulis selama dalam bangku perkuliahan.
3. Untuk membuat suatu alat jam alarm digital.

1.3.2 Manfaat
Adapun manfaat yang diberikan alat ini adalah :
1. Tersedianya alat untuk referensi pada teknisi sebagai cara membuat jam digital
2. Memberikan kepada pembaca bagaimana membuat suatu alarm jam digital Alat ini bisa mengatur suatu alarm berbunyi menjadi otomatis sesuai dengan program yang telah di isikan pada alat ini, selain dari situ juga diharapkan, proyek Tugas Akhir ini menambah sarana bagi Kampus, terutama untuk Laboratorium Politeknik Mandiri Bina Prestasi Medan.

1.4 Metode Penelitian
Dalam penulisan karya yang bersifat ilmiah, harus ada suatu metode studi yang siap dipakai untuk membantu penelitian dalam memperoleh data-data yang diperlukan untuk mengidentifikasi dan menguji kebenaran suatu ilmu pengetahuan. Metode studi yang digunakan yaitu :
1. Kepustakaan ( library research ), yakni :
Pencarian yang berdasarkan perpustakaan meliputi hal-hal sebagai berikut:
a. Membaca buku-buku literatur, majalah-majalah, artikel - artikel, materi perkuliahan dan lain sebagainya yang ada hubunganya dengan masalah analisa system Komunikasi.
b. Ulasan-ulasan yang memperkuat makalah, maka diadakan pula pengutipan terhadap beberapa pendapat dari para ahli atau sarjana untuk dijadikan dasar didalam melakukan penelitian.
2. Pengamatan Lapangan ( filed research ), yakni :
Pengamatan yang langsung dilakukan pada obyek yang dipilih. Data dan informasi yang dibutuhkan diperoleh dengan mengadakan wawancara terhadap pihak-pihak yang dapat memberikan informasi yang diperlukan dalam obyek pengamatan.

1.5 Sistematika penulisan
Adapun sitematika penulisan Tugas Akhir ini adalah sebgai berikut :

BAB 1 PENDAHULUAN
1.1. Latar Belakang
1.2. Batasan dan Perumusan Masalah
1.2.1. Batasan Masalah
1.2.2. Perumusan Masalah
1.3. Tujuan dan Manfaat
1.3.1 Tujuan
1.3.2 Manfaat
1.4 Metode Penelitian
1.5 Sistematika Penulisan

BAB 2 DASAR TEORI
2.1. Mikrokontroler AT89S51
2.1.1 Pena-pena Mikrokontroler AT89S51
2.1.2 On – Chip Osilator pada Versi CMOS
2.1.3 Diagram Blok Mikrokontroler AT89S51
2.1.4 Organsisasi Memori
2.1.5 Struktur Pengoperasian Port
2.1.5.1 Port input output
2.1.5.2 Timer counter
2.1.6 Sistem Interupsi
2.1.6.1 Perangkat Lunak Mikrokontroler AT89S51
2.1.6.2 Instruksi transfer data
2.1.6.3 Instruksi i aritmatika (Interupsi perhitungan)
2.1.6.4 Instruksi i logika
2.1.6.5 Instruksi transfer kendali
2.2. IC Buffer Oktal Inverter 74LS204
2.3. Transistor
2.3.1 Transistor sebagai saklar

BAB 3 PERANCANGAN SISTEM
3.1. Blok Diagram Rangkaian
3.2. Perancangan Perangkat Keras (Hardware)
3.2.1 Unit Display
3.2.2 Unit Driver
3.2.3 Unit Pengaturan/Pengesetan Waktu
3.2.4 Unit Alarm
3.2.5 Unit Pengendali
3.3 Perancangan Perangkat Lunak (Software)
3.3.1 Program Tampil Waktu
3.3.2 Program Set Waktu
3.3.3 Program Naik Waktu
3.3.4 Sub-Program Periksa Alarm

BAB 4 PENGUJIAN DAN ANALISA
4.1 Pengujian Unit Display
4.2 Pengujian Unit Driver
4.2.1 Pengujian Ic Buffer
4.2.2 Pengujian Transistor Sebagai Saklar
4.3 Pengujian Unit Pengatur/Pengesetan Waktu
4.4 Pengujian Unit Alarm
4.5 Pengujian Unit Pengendali

BAB 5 PENUTUP
5.1 Kesimpulan
5.2 Saran
Daftar pustaka
Lampiran-lampiran


BAB 2
DASAR TEORI

2.1 Mikrokontroller AT89S51
Dengan memadukan arsitektur perangkat keras keluarga mikrokontroller MCS-51 dan teknologi flash memory, dihasilkan AT89S51 sebagai sebuah mikrokontroller dengan fasilitas timer, port serial, 32 Programmable I/O lines, RAM dan Flash Memory untuk keperluan penyimpanan program.
AT89S51 merupakan versi yang dilengkapi dengan ROM (internal) yaitu berupa EEPROM. Mikrokontroller AT89S51 adalah low power high performance CMOS 8 bit, 8 Kbyte Flash Programable and Erasable Read Only Memory (PEROM). IC mikrokontroller kompatibel dengan standart MCS-51 baik dari instruksi maupun pena-penanya yang dapat diaplikasikan sebagai Embedded Controller.
Disamping itu terdapat RAM Internal dengan kapasitas 128 x 8 bit. Dan frekuensi pengoperasian hingga 24 MHz. Mikrokontroler ini juga memiliki 32 port I/O yang terbagi menjadi 4 buah port dengan 8 jalur I/O, kemudian terdapat pula Sebuah port serial dengan kontrol serial full duplex, tiga timer/counter 16 bit dan sebuah osilator internal dan rangkaian pewaktu(timer). Keluarga mikrokontroller MCS-51 dapat dilihat pada table berikut :


Tabel 2.1 Keluarga Mikrokontroller MCS- 51
Type Type tanpa
EPROM Type dengan EROM ROM RAM
(byte) I/O


8051 8031 - 4K 128 4
8051 AH 8031 AH 8751 H 1K 128 4
- - 8751 BH - - -
8052 AH 8032 AH 8752 BH 8K 256 4
80C51 BH 8032 BH 87C51 2K 128 4
83C51 FA 80C51 FA 87C51 FA 8K 256 4
83C51 FB 80C51 FB 8751 FB 16K 256 5

Berikut ini adalah kemampuan yang dimiliki oleh mikrokontroller AT89S51:
1. Kompatibel dengan keluarga MCS-51
2. 8 Kbyte ReProgrammable Flash Memory (PEROM) didalam chip yang dapat ditulis dan dihapus sampai 1000 kali.
3. Dapat beroperasi pada frekuensi 0 Hz sampai 24 MHz.
4. 3 level program kunci memory.
5. 128 x 8-bit RAM internal.
6. 32 jalur I/O.
7. 4 port I/O 8-bit
8. 3 buah timer/counter 16 bit.
9. 8 buah jalur interupsi
10. Hemat catu daya dan memiliki power down modes.
11. Kemampuan pengalamatan memory
- 128 K – ROM
12. Pelaksanaan instruksi dalam 0,3 μS.
13. Tersedia dengan kemasan :
- 40-pin DIP
- 44-pin PLCC
- 44-pin PQFP

2.1.1. Pena-pena Mikrokontroller AT89S51
Susunan pena-pena Mikrokontroller AT89S51 diperlihatkan pada gambar 2.1

Gambar 2.1 Konfigurasi Mikrokontroller AT89S51
Mikrokontroler ini memiliki 40 konfigurasi pin seperti digambarkan pada gambar 2.1 Fungsi dari tiap – tiap pin dapat dikelompokkan menjadi sumber tegangan, kristal, kontrol, dan input - output.
Disamping itu mikrokontroller ini dapat ditambahkan sebuah minimum memori eksternal atau komponen eksternal lain. Dari kedelapan line dapat digunakan sebagai suatu unit yang berhubungan ke perangkat paralel seperti printer, pengubah digital ke analog, dan sebagainya, atau tiap line dapat mengoperasikan sendiri ke perangkat single bit seperti saklar, LED, transistor, selenoid, motor, dan speaker. Sedangkan fungsi pin dari mikrokontroler seperti berikut ini :
1. Pin 1 sampai 8
Ini adalah port 1 yang merupakan saluran/bus I/O 8 bit dua arah. Dengan internal pull-up yang dapat digunakan untuk berbagai keperluan. Pada port ini juga digunakan sebagai saluran alamat pada saat pemograman dan verifikasi.
2. Pin 9
Merupakan masukan reset (aktif tinggi), pulsa transisi dari rendah ke tinggi akan me-reset mikrokontrokller ini.
3. Pin 10 sampai 17
Ini adalah port 3 merupakan saluran/bus I/O 8 bit dua arah dengan internal pull up yang memiliki fungsi pengganti. Fungsi pengganti meliputi TxD, RxD, INT0, INT1, T0, T1, WR, RD,. Bila fungsi pengganti tidak dipakai pin-pin ini dapat dipakai sebagai port parallel serbaguna.


4. Pin 18 dan 19
Ini merupakan masukan ke penguat osilator berpenguat tinggi. Pada mikrokontroler ini memiliki seluruh rangkaian osilator yang diperlukan pada serpih yang sama (on chip) kecuali rangkaian kristal yang mengendalikan frekuensi osilator. Karenanya 18 dan 19 sangat diperlukan untuk dihubungkan dengan kristal. Selain itu XTAL 1 dapat juga sebagai input untuk inverting oscilator amplifier dan input ke rangkaian internal clock sedangkan XTAL 2 merupakan output dari inverting oscilator amplifier.
Tabel 2.2 Fungsi pengganti dari port 3
Bit Nama Alamat Bit Fungsi Alternatif
P3.0 RXD B0H Untuk menerima data port serial
P3.1 TXD B1H Untuk mengirim data port serial
P3.2 INT0 B2H Interupsi eksternal 0
P3.3 INT1 B3H Interupsi eksternal 1
P3.4 T0 B4H Input Eksternal waktu/pencacah 0
P3.5 T1 B5H Input Eksternal waktu/pencacah 1
P3.6 WR B6H Jalur menulis memori data eksternal
P3.7 RD B7H Jalur membaca memori data eksternal

5. Pin 20
Merupakan ground sumber tegangan yang diberi simbol GND.
6. Pin 21 sampai 28
Ini adalah port 2 yang merupakan saluran/bus I/O 8 bit dua arah dengan internal pull up. Saat pengambilan data dari program memori eksternal atau selama mengakses data memori eksternal yang menggunakan alamat 16 bit (MOVX @ DPTR), port 2 berfungsi sebagai saluran/bus alamat tinggi (A8 – A15). Sedangkan pada saat mengakses ke data memori eksternal yang menggunakan alamat 8 bit (MOVX @ R1), port 2 mengeluarkan isi dari P2 pada Special Function Register.
7. Pin 29
Program Strore Enable (PSEN) merupakan sinyal pengontrol untuk mengakses program memori eksternal masuk ke dalam bus selama proses pemberian/pengambilan instruksi (fetching).
8. Pin 30
Address Latch Enable (ALE)/PROG merupakan penahan alamat memori eksternal (pada port 1) selama mengakses ke memori eksternal. Pena ini juga sebagai pulsa/sinyal input pemograman (PROG) selama proses pemograman.
9. Pin 31
Eksternal Access Enable (EA) merupakan sinyal control untuk pembacaan memori program. Apabila diset rendah (L) maka mikrokontroller akan melaksanakan seluruh instruksi dari memori program eksternal, Sedangkan apabila diset tinggi (H) maka mikrokontroller akan melaksanakan instruksi dari memori program internal ketika isi program counter kurang dari 4096. Ini juga berfungsi sebagai tegangan pemograman (Vpp = +12V) selama proses pemograman.
10. Pin 32 sampai 39
Ini adalah port 0 yang merupakan saluran/bus I/O 8 bit open collector, dapat juga digunakan sebagai multipleks bus alamat rendah dan bus data selama adanya akses ke memori program eksternal. Pada saat proses pemograman dan verifikasi port 0 digunakan sebagai saluran/bus data. Eksternal pull up diperlukan selama proses verifikasi.
11. Pin 40
Pin 40 merupakan Vcc yang dihubungkan ke tegangan + 5 V.
PSEN (Program Store Enable)
PSEN adalah sinyal control yang mengizinkan untuk mengakses program (code) memri eksternal. Pin ini dihubungkan ke pin OE (Output Enable) dari EPROM. Sinyal PSEN akan “0” (LOW) pada tahap fetch (penjemputan) instruksi. PSEN akan selalu bernilai “1” (HIGH) pada pembacaan program memori internal. PSEN terdapat pada pin 29.
ALE (Address Latch Enable)
ALE digunakan untuk men-demultiplex address (alamat) dan data bus. Ketika menggunakan program memori eksternal, port 0 akan berfungsi sebagai address (alamat) dan data bus. Pada setengah paruh pertama memori cycle ALE akan bernilai “1” (HIGH) sehingga mengizinkan penulisan address (alamat) pada register eksternal. Dan pada setengah paruh berikutnya akan bernilai “1” (HIGH) sehingga port 0 dapat digunakan sebagai data bus. ALE terdapat pada pin 30.
EA (External Access)
Jika EA diberi input “1” (HIGH), maka mikrokontroller menjalankan program memori internal saja. Jika EA diberi input “0” (LOW), maka AT89C51 menjalankan program memori eksternal (PSEN akan bernilai “0”). EA terdapat pada pin 31.
RST (Reset)
RST terdapat pada pin 9. Jika pada pin ini diberi input “1” (HIGH) selama minimal 2 machine cycle, maka system akan di-reset dan register-register internal AT89C51 akan berisi nilai default tertentu. Nilai default setelah sistem reset tersebut terlihat pada table 2.3.
Tabel 2.3 Nilai register setelah di-reset
REGISTER ISI
Program Counter 0000H
Accumulator 00H
B Register 00H
PSW 00H
SP 07H
DPTR 0000H
Port 0 - 3 FFH
IP XXX00000B
IE 0XX00000B
Timer Register 00H
SCON 00H
SBUF 00H
PCON (HMOS) 0XXXXXXXB
PCON (CMOS) 0XXX0000B

2.1.2. On - Chip Osilator pada versi CMOS
Rangkaian osilator pada chip untuk AT89S51 terdiri dari inverter satu tingkat yang digunakan untuk mengontrol kristal, clock yang digunakan adalah internal clock. Gambar 2.5 menunjukkan penggunaan on-chip osilator dengan menghubungkan pin XTAL1 dan XTAL2 dengan kristal atau kapasitor keramik. Untuk kristalnya dapat digunakan frekuensi dari 6 sampai 12 MHz. Sedangkan untuk kapasitor dapat bernilai antara 27 pF sampai 33 pF. Bila digunakan eksternal clock, pin ATAL1 dihubungkan dengan output eksternal clock tersebut.

Gambar 2.2. On-Chip Osilator pada Versi CMOS
2.1.2. Diagram Blok Mikrokontroller AT89S51
Diagram blok Mikrokontroller AT89S51 diperlihatkan pada gambar2.3.

Gambar 2.3 Blok Diagram AT89S51
Dengan keistimewaan gambar di atas, pembuatan alat menggunakan AT89S51 menjadi lebih sederhana dan tidak memerlukan IC pendukung yang banyak. Jadi mikrokontroler ini juga mempunyai keistemewaan dari segi perangkat keras.

2.1.4. Organisasi Memori
Seluruh anggota MCS-51 mempunyai alamat program dan memori data terpisah seperti ditunjukkan pada gambar 2.6. data. Lebar memori data adalah 8 bit dan 16 bit (register DPTR).

Gambar 2.4 Pemisahan Memori Program dengan Memori data
Memory program hanya dapat dibaca, tidak dapat dituliskan. Pada mikrokontroler AT89C51, 8K Byte memori program terendah terdapat dalam chip (internal). Sinyal untuk membaca memori program internal PSEN. CPU membangkitkan sinyal baca, RI dan sinyal tulis WR yang diperlukan pada saat akses data memori data eksternal dengan instruksi MOVX.

Gambar 2.5 Memori Mikrokontroller AT89S51
Ruang memori terlihat dalam blok, yang disebut sebagai lower 256, upper 256 dan ruang SFR. Internal memori data dialamati dengan lebar 1 byte. Lower 256 (alamat 00H-7Fh) terdapat pada semua anggota keluarga MCS-51.

Gambar 2.6 Memori data internal


Gambar 2.7. Bagian bawah internal RAM 256 Byte
Gambar 2.7 merupakan bagian atas dari internal RAM. Sebanyak 32 byte terendah terbagi atas 4 bank dari 8 register disebut sebagai R0-R7. Dua bit dari register PSW memilih bank mana yang digunakan. Kemudian 16 byte diatas bank register membentuk blok memori yang dapat dialamati per-bit. Upper 256 tidak tersedia di 8031. Special Function Register atau SFRs adalah register yang befungsi khusus misalnya lacth port, timer, control pheripheral dsb.

Gambar 2.8. Bagian atas internal RAM 256

Gambar 2.9. Ruang special function register

2.1.5. Struktur Pengoperasian Port
2.1.5.1. Port Input/Output
One chip mikrokontroler memiliki 32 jalur port yang dibagi menjadi 8 port bit. Masing – masing port ini bersifat bidirectional sehingga dapat digunakan sebagai input port atau output port. Pada blok diagram AT89C51 dapat dilihat lacth tiap bit pada keempat port : port 0, port 1, port 2, port 3. Masing – masing jalur port terdiri dari lacth , output driver dan input buffer port 0 dan port 2 dapat digunakan sebagai saluran data alamat sekaligus yang dimultipleks. Untuk mengakses memori eksternal, port 0 akan mengeluarkan alamat bawah memori eksternal yang dimultipleks dengan data yang dapat dibaca dan ditulis, sedangkan port 2 mengeluarkan bagian atas memori eksternal sehingga total alamat semuanya 16 bit.
Khususnya untuk port 3 mempunyai fungsi yang lain diluar sebagai port. Port 3 adalah input/ output 8-bit dua arah. Port 3 juga berfungsi melayani fungsi-fungsi dari berbagai fitur-fitur spesial dari AT89C51, seperti yang ditunjukkan oleh tabel di bawah. Port 3 juga menerima beberapa signal kontrol untuk pemrograman flash dan verifikasi.

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

Latch yang digunakan dapat dipresentasikan dengan flip-flop D. Data dari bus internal di latch saat CPU memberi sinyal tulis ke latch dan output latch diberikan ke bus internal sebagai respon dari sinyal baca pin dari CPU.
Beberapa intruksi yang berfungsi membaca port mengaktifkan sinyal baca latch dan yang lain mengaktifkan sinyal baca pin. Port 1, port 0, port 3 mempunyai pull-up internal sedangkan port 0 dengan output open drain. Masing-masing jalur I / O dapat digunakan sebagai input ataupun output. Bila digunakan sebagai input, port latch harus 1. Untuk port 1, 2 dan 3 pin-pin akan di pull-up tinggi oleh pull-up internal, dan bias juga di pull-up rendah dengan sumber external.
Port 0 tidak mempunyai pull-up internal, pull-up fet hanya akan digunakan saat akses external memori. Jika isi latch diatur pada keadaaan 1, maka port ini akan berfungsi sebagai impedansi tinggi dan jika sebagai output akan versifat open drain. Demikian halnya dengan port 2 yang digunakan untuk multiplex data dan alamat 16 bit sebesar 16 Kbyte mempunyai konfigurasi yang sama dengan yang dimiliki oleh port 0 sedangkan pada port 3 yang biasa dimanfaatkan untuk kaki control mempunyai pengaturan fungsi output saja. Pada port ini juga dilengkapi dengan rangkaian pull-up internal. Penggunaan port 3 dapat dialamati langsung sebagai control langsung pada suatu tugas yang dilakukan oleh fungsi yang dimiliki oleh port ini.

2.1.5.2. Timer/Counter
Timer/Counter 0 dan Timer/Counter 1 merupakan timer 16-bit yang mempunyai pasangan register 16-bit yaitu THx, TLx. Setiap pasangan register dapat diprogram secara terpisah melalui software. Penggunaan dari Timer/counter ditentukan melalui dua register 8-bit yaitu TMOD (Timer Mode) dan TCON (Timer Control). Register TMOD dan TCON diset dengan program. Konfigurasi bit dari Register TCON ditunjukkan pada gambar 2.7. dan konfigurasi register TMOD ditunjukkan pada gambar 2.8.
MSB LSB
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Gambar 2.10. Konfigurasi bit Register TCON

Tabel 2. 5 Fungsi bit Register TCON
Simbol Posisi Fungsi
TF1 TCON.7 Timer 1 overflow flag. diset oleh perangkat saat Timer/Counter menghasilkan overflow
TR1 TCON.6 Bit untuk menjalankn Timer1.Diset/clear melalui
software
TF0 TCON.5 Timer 0 ovefrflow flag. Diset oelh perangkat keras
TR0 TCON.4 Bit untuk menjalankan Timer 0. diset/clear oleh software untuk membuat timer on atau off.
IE1 TCON.3 External interupt 1 (edge flag). Diset oleh hardware apabila tepi sinyal interupsi eksternal telah terdeteksi, dan direset kembali oleh hardware apabila interupsi telah diproses.
IT1 TCON.2 Interrupt 1 type control bit. Diset/direset oleh software untuk menetapkan jenis trigger tepi negatif/level rendah dari interupsi eksternal 1.
IE0 TCON.1 Eksternal Interupt 0 (edge flag).
IT0 TCON.0 Interupt 0 type control bit


MSB LSB
GATE C/T
M1 M0 GATE C/T
M1 M0


Gambar 2.11. Konfigurasi bit Register TMOD
Gate : Apabila TRx pada register TCON diset dan GATE =1, maka Timer/Counter akan bekerja ketika pin INT x memperoleh keadaan high (Hardware control), dan apabila GATE=0, Timer/Counter x akan berjalan hanya apabila Trx=1 (software control).
C/T : Pemilih Timer atau Counter, bila diset logika 1 maka Timer/Counter x berfungsi sebagai counter dan jika logika 0 Timer/conter x berfungsi sebagai timer.
M0,M1 : Pemilih modus 0, 1 atau 2.
Timer/counter pada 8031 dapat diprogram sesuai dengan kebutuhan. Perhitungan waktu oleh timer ditentukan frekuensi osilator yang digunakan, dimana frekuensi kerja timer adalah besar frekuensi kristal dibagi 12. Sebagai contoh, jika frekuensi kristal sebesar 12MHz maka timer akan bertambah setiap satu mikro detik (1s). Apabila periode waktu tertentu telah dilalui, timer/counter segera menginterupsi CPU untuk memberitahu bahwa perhitungan periode waktu telah selesai dilaksanakan. Periode waktu timer/counter secara umum ditentukan persamaan berikut:

a. Sebagai timer 8-bit:
T= (255-TLx) x 1 s ...............................................1)
dimana Tlx adalah isi register TL0 atau TL1
b. Sebagai timer 16-bit :
T=(65.535 x-THxTLx) x 1s .................................2)
dimana THx adalah isi register TH0 atau TH1, TLx adalah isi register TL0 atau TL1.
Timer/counter dari 8031 dapat diset pada 3(tiga) modus yaitu modus 0, modus 1, modus 2 dan modus 3.
Mode 0: Pada mode 0 register timer disusun sebagai register 13-bit. Setelah semua perhitungan selesai, mikrokontroler akan men-set Timer interupt Flag (TF1). Dengan membuat Gate=1, timer dapat dikontrol oleh masukan eksternal INT 1.



Gambar 2.12. Timer/Counter 1 Modus 0

Mode 1: Mode 1 sama dengan mode 0 kecuali register timer bekerja dalam 16-bit.
Mode 2: Mode 2 menyusun timer sebagai 8-bit counter. Limpahan (overflow) dari TL1 selain men-set TF1 juga mengisi TL1 dengan isi TH1 yang diatur secara software. Pengisian ini tidak mengubah TH1.

Gambar 2.13. Timer/Counter Mode 2

Mode 3: Timer 1 dalam mode 3 hanya untuk memegang hitungan. Efeknya sama seperti men-set TR1=0. Timer 0 dalam mode 3 menetapkan TL0 dan TH0 sebagai dua counter terpisah. TL0 menggunakan kontrol bit timer 0 yaitu C/T, Gate, TR0, INT0, dan TF0. TH0 ditetapkan sebagai fungsi timer.




Gambar 2.14. Timer/Counter Mode 3
2.1.6.2. Sistem Interupsi
Mikrokontroler AT89C51 mempunyai lima sumber interupsi. Dua sumber merupakan sumber external INT0 dan INT1. Kedua interupsi external dapat aktif level atau aktif transisi tergantung isi IT 0 dan IT 1 pada register TCON. Interupsi timer 0 dan timer 1 aktif pada saat timer yang sesuai mengalami rollover. Interupsi serial dibangkitkan dengan melakukan operasi OR pada R1. Tiap-tiap sumber interupsi dapat enable atau disable secara software melalui register IE. Untuk mengenabelkan interupsi EA diberi logika 1, dan memberikan logika 1 pada bit yang sesuai.
Register Interupsi Enable (IE)

MSB LSB
EA - - ES ET1 EX1 ET0 EX0

Gambar 2.15. Konfigurasi bit Register IE

EX0= Untuk mengenabelkan INT0
EX1= Untuk mengenabelkan INT1
ET0=Untuk mengenabelkan interupsi Timer 0
ET1=Untuk mengenabelkan interupsi Timer 1
ES=Untuk mengenabelkan interupsi Serial Komunikasi


Tabel 2.6 Alamat Rutin Interupsi
Nama Lokasi Alat Interupsi
Reset 00H Power On
Int 0 03H INT 0
Timer 0 0BH Timer 0
Int 1 13H INT 1
Timer 1 1BH Timer 1
Sint 23H Port I/O serial

Tingkat prioritas semua sumber interupsi dapat diprogram dengan set atau clear bit pada IP( Interupt Priority). Interupsi tingkat rendah dapat diinterupsi oleh interupsi yang mempunyai tingkat lebih tinggi tidak bisa menginterupsi sumber interupsi yang lain.
Perioritas Interupsi
MSB LSB
- - - PS PT1 PX1 PT0 PX0
Gambar 2.17 Konfigurasi bit Register IP

Perioritas bit=1 menandakan perioritas tertinggi
Perioritas bit=0 menandakan perioritas rendah

Port Serial
Sebelum menggunakan port serial terlebih dahulu diset modus dan fungsinya melalui register SMOD. Susunan bit dari register SMOD ditunjukkan pada gambar …berikut.
MSB LSB
SM0 SM1 SM2 REN TB8 RB8 T1 RI
Gambar 2.18 Konfigurasi bit Register SMOD

SM0 SM1 Mode Keterangan Baud Rate
0 0 0 Shift Register Fre.osc/12
0 1 1 8 bit UART Variable
1 0 2 9 bit UART Frek.Osc/64 atau Frek.osc/32

MSB LSB
SMOD - - - GF1 GF0 PD IDL
Gambar 2.19 Konfigurasi bit Register PCON

Pengaturan kecepatan transmisi diset melalui timer 1 dan bit SMOD dari PCON sebagai berikut:

Baud rate atau
Baud rate mode x timer 1 overflow rate atau
TH1

2.1.6.3. Perangkat Lunak Mikrokontroller AT89S51
Sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program kepadanya. Program tersebut memberitahu mikrokontroler apa yang dilakukan sebuah mikrokontroler yang telah bekerja baik dengan suatu program, tidak akan bekerja lagi bila programnya diganti.
Instruksi-intruksi perangkat lunak berbeda untuk masing-masing jenis mikrokontroler. Instruksi-intruksi ini hanya bisa dipahami oleh jenis mikrokontroler yang bersangkutan. Sebuah mikrokontroler tidak dapat memahami instruksi-instruksi yang berlaku pada mikrokontroler lain. Sebagai contoh, mikrokontroler buatan intel dengan mikrokontroler buatan motorolla memiliki perangkat instruksi yang berbeda. Instruksi-instruksi inilah yang dikenal sebagai bahasa pemrograman system mikrokontroler.

2.1.6.4. Instruksi Transfer Data
Perangkat lunak adalah seperangkat instruksi yang disusun menjadi sebuah program untuk memerintahkan computer melakukan sesuatu pekerjaan. Sebuah instruksi selalu berisi kode pengoperasian (op-code), kode pengoperasian inilah yang disebut dengan bahasa mesin yang dapat dimengerti oleh computer. Instruksi-instruksi yang digunakan dalam memprogram suatu program yang diisikan pada IC AT89C51 adalah instruksi bahasa pemrograman assembler atau sama dengan instruksi pemrograman pada IC mikrokontroller 8031 dan MCS-51.
Instruksi transfer data terbagi menjadi dua kelas sebagai berikut :
• Transfer data utama (general purpuse transfer) yaitu : MOV, PUSH, dan POP
• Transfer spesifik akumulator (accumulator specific transfer) yaitu : XCH, ACHD, dan MOVC
Instruksi transfer data adalah instruksi pemindahan / pertukaran data berupa antara operand sumber dengan operand tujuan, operandnya dapat berupa register, memori atau lokasi suatu memori.
Deskripsi instruksi transfer data tersebut dijelaskan dibawah ini :
MOV : transfer bit atau byte dari operand sumber ke operand tujuan.
PUSH : transfer bit atau byte dari operand sumber ke suatu lokasi dalam stack yang alamat ditunjukan oleh register penunjuk (stack pointer)
POP : transfer byte dari dalam stack ke operand tujuan.
XCH : pertukaran data antara operand akumulator dengan operand sumber
XCHD: pertukaran nibble orde rendah, antara RAM internal (lokasinya ditunjukkan ( lokasinya ditunjukkan oleh R0 dan R1 ).

2.1.6.5. Instruksi Aritmatika (Instruksi perhitungan)
Operasi dasar aritmatika seperti penjumlahan, pengurangan, perkalian, dan pembagian dimiliki oleh mikrokontroler AT89C51 dengan mnemonic : INC, ADD, ADDC, DA, SUBB, DEC, MUL dan DIV. Deskripsi operasi mnemonic tersebut dijelaskan sebagai berikut :
INC : menambahkan satu isi sumber operand dan menyimpan hasilnya ke operand tersebut.
ADD : penjumlahan antara akumulator dengan sumber operand dan hasilnya disimpan di akumulator..
ADDC : hasil dari instruksi ADD ditambah satu bila cy diset.
SUBB : pengurangan akumulator dengan sumber operand, lalu dikurangi satu bila cy diset dan hasilnya disimpan dalam operand tersebut.
DEC : mengurangi sumber operand dengan satu dan hasilnya disimpan dalam operand tersebut.
MUL : perkalian antara akumulator dengan register B.
DIV : pembagian antara akumulator dengan register B dan hasilnya disimpan dalam akumulator, sisanya diregister B.

2.1.6.6. Instruksi Logika
Mikrokontroler AT89C51 dapat melalukan operasi logika bit maupun operasi logika byte. Operasi logika tersebut dibagi atas dua bahagian yaitu : operasi logika tunggal yang terdiri dari CLR, SETB, CPL, RL, RLC, RR, RRC dan SWAB. Operasi logika dua operand seperti ANL, ORL, dan XRL.
Operasi yang dilakukan oleh AT89C51 dengan pembacaan instruksi logika tersebut dapat dijelaskan sebagai berikut :
CLR : menghapus bit atau byte menjadi satu.
SETB : mengeset bit atau byte menjadi satu.
CPL : mengkomplemenkan akumulator.
RL : rotasi akumulator 1 bit kekanan dan bit 1 digeser melalui flag carry.
SWAB : pertukaran nibble orde tinggi.
ANL : operasi logika AND dan hasilnya disimpan dalam operand pertama.
ORL : operasi logika OR dan hasilnya disimpan dalam operand pertama.
XRL : operasi logika XOR dan hasilnya disimpan dalam operand pertama.

2.1.6.7. Instruksi Transfer Kendali
Instruksi transfer data kendali (control tranfer) terdiri dari 3 kelas operasi yaitu :
1. Lompatan tidak bersyarat (unconditional jump) seperti ACALL, AJMP, LJMP, dan SJMP.
2. Lompatan bersyarat (conditional jump) seperti JZ, JNZ, JB, CJNE dan DJNZ.
3. Interupsi seperti RET 1 dan RET.
Deskripsi instruksi transfer kendali dijelaskan sebagai berikut. Lompatan untuk percabangan maksimum 2 Kbyte untuk :
ACALL : instruksi pemanggilan subroutine bila alamat subroutine tidak lebih dari 2 Kbyte.
LCALL : pemanggilan subroutine yang mempunyai alamat antara 2 Kbyte sampai 64 Kbyte.
AJMP : lompatan untuk percabangan maksimum 2 Kbyte.
LJMP : lompatan untuk percabangan maksimum 64 Kbyte.
JMP@+DPTR : instruksi percabangan ke suatu lokasi yang ditunjukkan oleh DPTR + isi akumulator.
JNB : percabangan bila bit tidak diset
JZ : percabangan akan dilakukan jika acumulator adalah 0
JNZ : percabangan akan dilakukan jika akumulator tidak 0
JC : percabangan terjadi jika cy diset 1.
CJNE : operasi perbandingan operand pertama dengan operand ke dua, jika sama akan dilakukan percabangan.
DJNZ : mengurangi isi operand sumber dan percabangan akan dilakukan apabila isi operand tersebut tidak 0.
RET : kembali ke subroutine.
RET 1 : instruksi kembali ke program interupsi utama.
Sebagai operand dari perlengkapan insteruksi tersebut dapat dijelaskan sebagai berikut :
Rn : register R0-R7 yang dipilih dari tumpukan register.
Data : lokasi alamat data internal 8 bit, yang dilokasikan pada data RAM internal (0-127) SFR pada 128-255 (I/O port, register pengontrol, register status)
@Ri : data RAM internal lokasi 0 – 255 8 bit, yang dialamati secara tidak langsung melalui R0 dan register R1.
#data 8 : yang diisikan ke dalam instruksi adalah 8 bit.
#data16 : yang diisikan ke dalam instruksi adalah 16 bit.
Addr 16 : untuk tujuan alamat 16 bit.digunakan pada operasi LCALL dan LJMP yang dilakukan dimana saja dalam 64 Kbyte daerah alamat program memori.
Addr 11 : 11 bit alamat tujuan dipakai oleh operasi ACALL dan AJMP percabangan dapat dilakukan dimana saja dalam 2 Kbyte daerah program.

2.2 IC Buffer Oktal Inverter 74LS240
IC 74LS240 merupakan sebuah IC buffer saluran yang terdiri dari delapan inverter dengan output tri-state yang dirancang untuk digunakan sebagai pendorong(driver) saluran alamat, data, clock dari sistem mikioprosesor. Gambar diagram pin IC 74LS240 ditunjukkan pada gambar 2.20 dan tabel kebenarannya ditunjukkan pada tabel 2.7

Gambar 2.20 Diagram pin 74 LS 240.
Tabel 2.7 Tabel Kebenaran 74LS240

Pemberian logika tinggi pada masukan enable ( ) akan mengakibatkan output pada keadaan impedansi tinggi atau tri-state (Z). Jika masukan enable ( ) mendapat logika 0, keluaran setiap output(Y) merupakan kebalikan logika dari masukannya (A).

2.1 Transistor
2.2.1 Transistor sebagai saklar
Transistor merupakan salah satu komponen aktif yang dapat digunakan pada rangkaian untuk memperkuat sinyal, sebagai saklar, alarm dll.
Didalam pemakaiannya, transistor dipakai sebagai komponen saklar (switching), dengan memanfaatkan daerah penjenuhan (saturasi) dan daerah penyumbatan (Cut off) yang ada pada karakteristik transistor. Bila transistor dalam keadaan jenuh (saturasi) transistor identik dengan saklar dalam keadaan tertutup (On) dan Cut off sama dengan terbuka (Off).
Untuk mendapatkan keadaan tersebut kita dapat memperhatikan suatu karakteristik transistor, hal ini dapat dilihat pada gambar karakteristik transistor pada gambar 2.15.


Gambar 2.21. Karakteristik Transistor

Pada daerah penjenuhan ( saturasi ), nilai resistansi persambungan kolektor an emiter secara ideal sama dengan nol, atau kolektor dan emiter terhubung langsung (short). Keadaan ini meyebabkan tegangan kolektor emiter ( Vce = 0 Volt ) pada keadaan ideal, tetapi kenyataannya Vce bernilai 0,3 V. Dengan menganalogikan transistor sebagai saklar, transistor tersebut dalam keadaan On seperti gambar dibawah ini. Saturasi pada transistor terjadi apabila arus basis menyebabkan arus pada kolektor menjadi maksimum. Untuk mencari besar arus basis agar transistor saturasi dengan menggunakan rumus berikut :
(2.1)
(2.2)
(2.3)

Gambar 2.22 Transistor sebagai saklar

Hubungan antara tegangan basis ( Vb ) dan arus basis ( IB ) adalah: (2.4)
(2.5)
(2.6)
Jadi bila tegangan VBB telah mencapai , transistor akan saturasi dengan Ic mencapai maksimum. Pada daerah penyumbatan ( Cut off ), nilai resistansi persambungan kolektor emitor secara ideal dengan tidak terhingga atau terminal kolektor dan emitor terbuka ( open ).
Keadaan ini menyebabkan tegangan kolektor – emiter ( VCE ) sama dengan tegangan sumber ( Vcc ), tetapi pada kenyataannya VCE pada saat ini kurang dari Vcc karena terdapat arus bocor dari kolektor dan emitor. Dengan demikian transistor tersebut dalam keadaan Off, seperti pada gambar 2.17.

Gambar 2.23 Transistor sebagai saklar Off

BAB 3
PERANCANGAN SISTEM

3.1. Blok Diagram Rangkaian
Diagram blok merupakan gambaran dasar dari rangkaian yang akan di rancang . Adapun diagram blok rangkaian adalah seperti diperlihatkan pada gambar 3.1 .

Gambar 3.1 Diagram blok Jam Digital

3.2 Perangcangan Perangkat Keras (Hardware)
Perancangan perangkat keras adalah bagian dari perancangan sistem Jam Digital yang terdiri dari :
1. Unit Display
2. Unit Driver
3. Unit Pengatur/Pengesetan Waktu
4. Unit Alarm
5. Unit Pengendali

3.2.1 Unit Display
Unit Display dirancang menggunakan seven segment common anoda . Unit ini berfungsi sebagai tampilan daripada Jam Digital yang dirancang memakai seven segment dan dihubungkan secara parallel seperti ditunjuk pada gambar 3.2.

Gambar 3.2 Rangkaian display menggunakan seven segment

Sebelum unit display dihubungkan ke-unit driver, terlebih dahulu diukur jatuh tegangan pada seven segment menggunakan “LED” untuk hidup dan matinya seven segment ini. Untuk itu perlu diukur jatuh tegangan pada seven segment seperti diperlihatkan pada gambar 3.3.

Gambar 3.3 Pengukuran jatuh tegangan pada led
Adapun langkah untuk mengukur jatuh tegangan pada LED adalah sebagai berikut :
1. Hubungkan tahanan sebesar 68 pada LED
2. Hubungkan Ampmeter seperti gambar 3.3
3. Siapkan Catu Daya
Setelah dihubungkan sesuai dengan gambar 3.3 maka akan terbaca pada Ampmeter arus yang mengalir pada rangkaian sebesar 19mA. Berdasarkan hukum tegangan Kirchhoff pada loop tertutup dari gambar 3.3 maka di nyatakan sebagai berikut :





3.2.2 Unit Driver
Pada unit driver ini penulis menggunakan Ic 74LS240, resistor dan transistor. Untuk pemilihan Ic dan transistor ditentukan dari seven segment yang digunakan unit display. Disebabkan karena seven segment common anoda maka dipilih Ic 74LS240 sebagai buffer dan transistor Bc327 (PNP) seperti diperlihatkan pada gambar 3.4.


Gambar 3.5 Rangkaian driver Jam Digital

Dari gambar 3.5 bila diekivalenkan akan membentuk rangkaian seperti diperlihatkan pada gambar 3.6.


Gambar 3.6 Ekivalen rangkaian driver
Sesuai dengan Gambar 3.6, maka dapat dirumuskan dengan hukum tegangan Kirchhoff pada loop tertutup.


Diketahui dari masing – masing datasheet bahwa jatuh tegangan pada masing-masing komponen adalah:
Vcesat : 0,4V , Vd : 3.7V , Vol : 0,5V
Arus yang dibutuhkan 160 mA
Vcc : 5 V
Maka tahanan dapat dicari , melalui rumus diatas sebagai berikut :


Besar tahanan yang dipakai pada Unit Driver adalah 68 , sehingga dapat dirancang kembali rangkaian lengkap Unit Driver dan Unit Display seperti diperlihatkan pada gambar 3.7.

Gambar 3.7 Rangkaian driver dengan unit display

Unit driver ini dikontrol melalui Port 1 dan Port 0. Bila salah satu Port 1 aktif high dan salah satu Port 0 aktif low , maka unit display akan menyala pada led tertentu yang diaktifkan.

3.2.3 Unit Pengatur/Pengesetan Waktu
Pada unit ini penulis menggunakan 2 switch dan 2 tombol push yang berfungsi untuk set jam, set jadwal , atur jam dan menit.

Gambar 3.8 Rangkaian pengatur/pengesetan waktu

Unit pengatur/pengesetan ini berfungsi untuk set jam, set jam kuliah di bulan puasa, atur jam dan atur menit . Ketika switch set jam di tekan maka data berlogika low akan masuk ke port 2.7 sehingga jam digital dapat mengatur jam dan menit. Setelah diatur jam dan menit maka bila switch dikembalikan seperti posisi semula atau berlogika high maka jam digital sudah bekerja dan tidak dapat diatur kembali baik jam maupun menit. Switch untuk mengatur jadwal bulan puasa dihubungkan pada port 2.4. Prinsip kerjanya sama dengan switch set jam.
Kedua tombol push dihubungkan ke port 2.6 dan port2.5 . Kedua tombol bila ditekan akan menghasilkan data logika low yang berfungsi untuk mengatur jam dan menit.
Unit pengatur set jam ini menggunakan tahanan sebesar 4K7 . Resistor ini berfungsi sebagai penahan arus agar tidak berlebih ketika masuk ke unit pengendali (AT89S51). Berdasarkan datasheet karakteristik AT89S51 pada port 2 diketahui bahwasanya Vol = 0.45V dengan benaman arus maksimum 1,6mA ketika output low. Dari keterangan ini maka dapat dihitung tahanan yang digunakan sebagai pull-up.

Pemasangan tahanan sesuai dengan perhitungan diatas adalah 3 KΩ . Tetapi ini adalah nilai minimum pemasangan tahanan untuk arus maksimum 1,6mA, sehingga dipilih tahanan senilai 4K7 agar arus benaman pada port 2 AT89S51 lebih kecil.

3.2.4 Unit Alarm
Unit alarm seperti gambar 3.9 berfungsi untuk mengaktifkan alarm apabila waktu yang ditentukan telah sampai.


Gambar 3.9 Rangkaian clock alarm
Unit ini menggunakan tahanan sebesar 4k7 yang berfungsi sebagai pembatas arus, ketika port 3.7 berlogika data high, maka alarm akan berbunyi.

3.2.5 Unit Pengendali
Pada unit pengendali penulis menggunakan AT89S51 sebagai pengendali atau pengontrol semua sistem unit rancangan agar dapat menerima akses. Penulis menggunakan Port 0, Port 1, Port 2, Port 3 untuk semua unit rancangan. Sesuai dengan gambar 3.9, Port 0.0 s/d Port 0.3 dipakai untuk data trace. Port 1.0 s/d Port 1.7 dipakai untuk memegang data seven segmen. Port 2.4 s/d Port 2.7 dipakai untuk data tombol dan switch. Port 3.7 dipakai untuk data clock alarm.

Gambar 3.10 Rangkaian Pengendali AT89S51
3.3 Perancangan Perangkat Lunak (Software)
Untuk mempermudah membuat program jam digital, terlebih dahulu dibuat program bagian per bagian yaitu program menampilkan waktu, program set waktu, program alarm.

3.3.1 Program Tampil Waktu
Program ini berfungsi menampilkan isi memori 41H dan 42H ke peraga 7-segment dimana isi memori RAM alamat 41H adalah nilai Menit dan isi memori RAM alamat 42H adalah nilai Jam. Adapun algoritma dari untuk menampilkan waktu ini dijelaskan sebagai seperti gambar 3.11

Gambar 3.11 Proses Peragaan Waktu

Nilai Menit (isi memori 41H) diubah ke nilai segment dan nilai segment tersebut disimpan pada memori display. Konversi nilai segment ini sesuai dengan tabel 3.1 Dimana angka 8 nilai segmentnya adalah 3FH angka 2 mempunyai nilai segment 5BH, angka 4 mempunyai nilai segment 66H, dan angka 1 mempunyai nilai segment 06H. Pengkonversian ini dilakukan dengan look up table dimana nilai angka ditambahkan ke alamat awal tabel dan kemudian membaca isi tabel tersebut sebagai nilai segmentnya.
Tabel 3.1 konversi nilai segmen
Masukan Basis Masukan 74LS240
Tampilan 7-segment
TR3 TR2 TR1 TR0 2A4 2A3 2A2 1A4 1A3 1A2 1A1

0
1
1
1
0
0
0
0
1
1
0


1
0
1
1
0
1
1
0
1
1
0


1
1
0
1
0
1
0
1
0
1
1


1
1
1
0
1
1
1
1
1
1
1


Diagram alir dari penampilan waktu ini ditunjukkan pada gambar 3.12

Gambar 3.12 Diagram alir tampil waktu

3.3.2 Program Set Waktu
Program ini berfungsi untuk mengubah isi memori 41H (Menit) dan 42H(Jam) dengan cara menaikkan isi memori tersebut. Program akan menjalankan Setwaktu jika tombol Set waktu (port P2.7) diberi logika 1, dan menit akan bertambah setiap 0,5 kira-kira detik jika tombol set menit ditekan atau P2.6 diberi logia 1, dan Jam akan bertambah 1 jika tombol set jam ditekan atau P2.5 diberi logika 1. Program akan keluar dari set waktu jika P2.7 diberi logika 0. Diagram alir dari set waktu ditunjukkan pada gambar 3.12.


Gambar 3.13 Diagram alir set waktu

3.3.3 Program Naik Waktu
Penghasilan 1 detik dilaksanakan dengan menggunakan Timer 0, dimana Timer 0 diset menghasilkan interupsi setiap 0,05 detik sebanyak 20 kali. Untuk itu Timer 0 diset sebagai berikut: Modus kerja modus 1, bekerja sebagai timer. Frekuensi kristal yang digunakan sebagai sumber clock adalah 11,059200 MHz dengan demikian frekuensi kerja mikrokontroler adalah sebesar 0,921600MHz dengan demikian periode kerja adalah 1.085069µS. Untuk menghasilkan interupsi setiap 0,05 detik maka Timer 0 diset pada 65.535-(50000µS / 1.085069µS)= 65.535-46.080= 19455 atau 4BFFH dengan demikian TL0 diisi FFH dan TH0 diisi 4BH. Dengan demikian sub-program inisialisasi ditunjukkan pada berikut ini.
Sub-Program Inisialisasi:

INISIAL: MOV IE,#82H ;Set interupsi Timer 0
MOV TMOD,#01H ;set T0=16-bit
MOV TH0,#4BH ;PEMBAGI
MOV TL0,#0FFH ;Set Timer T0= 0,05dtk
MOV TCON,#10H ;Enable timer 1 dan T0
MOV 24H,#00 ;clear indiksi 1 dtk
MOV 20H,#00 ;counter indikasi 0,05 dtk
RET

Agar waktu bertambah setiap 0,05 detik maka alamat vektor interupsi diisikan dengan perintah melompat ke program penambahan 0,05 detik, dengan demikian alamat 0BH diisi dengan SJMP NAIKTIMER. Diagram alir untuk menaikkan waktu setiap 0,05 detik dan menaikkan waktu detik setelah 1 detik ditunjukkan gambar 3.14 dan programnya ditunjukkan pada program Naik-Waktu


Gambar 3.14 naik waktu

3.3.4 Sub-Program Periksa Alarm
Program Periksa alaram ini berfungsi untuk memeriksa apakah waktu masuk, pergantian dan berakhirnya perkuliahan telah dicapai yang diindikasikan dengan bunyi alaram. Data waktu alaram dibagi atas dua yaitu waktu perkuliahan normal dan waktu perkuliahan saat bulan Puasa. Pemilihan waktu perkuliahan normal dan saat bulan puasa dilaksanakan dengan melalui port P2.4 dimana waktu saat normal diset dengan P2.4 diberi logika 1 dan waktu perkuliahan saat puasa P2.4 logika 0. Alaram diaktivkan dengan memberikan logika 0 pada port P3.7. Waktu perkuliahan Pokiteknik MBP normal adalah sebagi berikut:
07.30-09.00,
09.00-10.30,
10.30-12.00,
12.30-14.00,
14.00-15.30,
15.30-17.00,
17.00-18.30,
19.00-20.30
Waktu perkuliahan Pokiteknik MBP saat bulan Puasa adalah sebagai berikut:
07.30-08.40,
08.40-10.10,
10.10-11.30,
13.00-14.20,
14.20-15.40,
15.40-17.00,
17.00-18.20,
19.00-20.20
Diagram alir periksa alaram ini ditunjukkan pada gambar 3.15 dan programnya ditunjukkan pada program Periksa alarm.

Gambar 3.15 Periksa alarm


BAB 4
PENGUJIAN DAN ANALISA

4.1 Pengujian Unit Display
Pengujian unit display dilakukan memakai catu daya 5 V dan sebuah tahanan sebesar 50 Ω

Gambar 4.1 Pengukuran rangkaian display

Pengujian dilakukan satu persatu mulai dari LSB s/d MSB dan dari Tr1 s/d Tr4. Dari pengujian unit ini, maka akan didapat data logika untuk menampilkan angka 0 s/d 9 dan perpindahan dari segmen berikutnya.
Setelah pengujian ini penulis melakukan pengujian memakai bit switch. Bit switch merupakan komponen pengujian yang dirangkai dari switch dan tahanan yang dihubungkan secara pull-up sehingga dapat menghasilkan logika high dan low. Dengan cara ini penulis dapat mencatat logika untuk unit display.


Gambar 4.2 Seven segmen

Tabel 4.1 Data unit display
Seven Segmen Common Anoda Tampilan
Data
Trace h g f e d c b a Angka
h h h l l l l l l 0
h h h h h h l l h 1
h h l h l l h l l 2
h h l h h l l l l 3
h h l l h h l l h 4
h h l l h l l h l 5
h h l l l l l h h 6
h h h h h h l l l 7
h h l l l l l l l 8
h h l l h h l l l 9


4.2 Pengujian Unit Driver
Pengujian unit driver dilakukan memakai bit switch. Hal ini dilakukan agar unit driver yang terpasang nantinya akan berfungsi dengan baik sehingga arus yang mengalir pada rangkaian tidak berlebih dan juga tidak kurang dari yang di harapkan.


4.2.1 Pengujian Ic Buffer


Gambar 4.3 Pengujian rangkaian driver

Sebelum dilakukan pengujian sebaiknya datasheet yang berhubungan dengan komponen unit driver di lampirkan. Ic 74LS240 merupakan Ic buffer yang mampu mengeluarkan maksimum 24 mA dalam keadaan low dan maksimum jatuh tegangan 0,5 Volt. Ic ini juga mempunyai karakteristik sebagai invers yang mana input dan output selalu bertolak belakang. Bila input adalah logika low maka output akan high dan begitu juga sebaliknya.
Hasil dari pengujian Ic 74LS240 diperlihatkan pada tabel 4.2. Pengujian dilakukan dengan memakai alat bantu bit switch sebagai pemberi logika (High =5Vdan logika low =0V).

Tabel 4.2 Hasil pengujian rangkaian driver
Bit Switch (Trace) Output Tcare Bit Switch (seven segmen) Output Seven Segmen
Bit 3 Bit 2 Bit 1 Bit 0 Tr 4 Tr 3 Tr 2 Tr 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 h g f e d c b a
H H H L OFF OFF OFF ON L L L L L L L H OFF OFF OFF OFF OFF OFF OFF ON
H H H L OFF OFF OFF ON L L L L L L H L OFF OFF OFF OFF OFF OFF ON OFF
H H H L OFF OFF OFF ON L L L L L H L L OFF OFF OFF OFF OFF ON OFF OFF
H H H L OFF OFF OFF ON L L L L H L L L OFF OFF OFF OFF ON OFF OFF OFF
H H H L OFF OFF OFF ON L L L H L L L L OFF OFF OFF ON OFF OFF OFF OFF
H H H L OFF OFF OFF ON L L H L L L L L OFF OFF ON OFF OFF OFF OFF OFF
H H H L OFF OFF OFF ON L H L L L L L L OFF ON OFF OFF OFF OFF OFF OFF
H H H L OFF OFF OFF ON H L L L L L L L ON OFF OFF OFF OFF OFF OFF OFF

Sementara transistor yang digunakan sebagai switch adalah komponen yang bekerja apabila di beri low. Dari data yang ada maka dapat dilakukan pengujian melalui pengukuran pada jalur output dari unit driver.

Gambar 4.4 Pengujian rangkaian buffer

Dari gambar 4.4 penulis dapat menguji unit driver tersebut. Pemberian tahanan pada unit ini berfungsi sebagai penahan arus sehingga jatuh tegangan pada Ic tidak berlebih sesuai dengan datasheet Ic 74LS240 sebesar 0,5 Volt ketika keadaan low. Hasil dari pengujian rangkaian buffer diperlihatkan pada tabel 4.3.
Pengujian dilakukan dengan memakai alat bantu bit switch sebagai pemberi logika (High =5Vdan logika low =0V).

Tabel 4.3 Pengujian rangkaian buffer
Bit Switch (Trace) Output Tcare Bit Switch (74LS240)
Bit 3 Bit 2 Bit 1 Bit 0 Tr 4 Tr 3 Tr 2 Tr 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
H H H L OFF OFF OFF ON L L L L L L L H
H H H L OFF OFF OFF ON L L L L L L H L
H H H L OFF OFF OFF ON L L L L L H L L
H H H L OFF OFF OFF ON L L L L H L L L
H H H L OFF OFF OFF ON L L L H L L L L
H H H L OFF OFF OFF ON L L H L L L L L
H H H L OFF OFF OFF ON L H L L L L L L
H H H L OFF OFF OFF ON H L L L L L L L

Catatan :
Logika high pada Ic 74LS240 mengakibatkan led menyala

Untuk kebenaran dari unit ini dalam pemakaian tahanan maka dilakukan sekali pengujian pengukuran pada output Ic sebelum tahanan.

Gambar 4.5 Pengukuran Vol Ic 74LS240

Dari gambar 4.5 maka penulis dapat mengukur Vol Ic 74LS240 yaitu sebesar 0,47 V. Sehingga angka tersebut dibawah nilai maksimum dari Vol Ic sesuai dengan datasheetnya. Untuk itu pemakaian tahanan pada unit ini sudah benar. Hasil pengukuran diperlihatkan pada table 4.4.


Tabel 4.4 Hasil pengukuran Vol 74LS240
Bit Switch (Trace) Bit Switch (seven segmen) Vol 74LS240 (volt)
Bit 3 Bit 2 Bit 1 Bit 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Pin 3 Pin 5 Pin 7 Pin 9 Pin 12 Pin 14 Pin 16 Pin 18
H H H L L L L L L L L H 4.9 4.9 4.9 4.9 4.9 4.9 4.9 0.28
H H H L L L L L L L H L 4.9 4.9 4.9 4.9 4.9 4.9 0.28 4.9
H H H L L L L L L H L L 4.9 4.9 4.9 4.9 4.9 0.28 4.9 4.9
H H H L L L L L H L L L 4.9 4.9 4.9 4.9 0.28 4.9 4.9 4.9
H H H L L L L H L L L L 4.9 4.9 4.9 0.28 4.9 4.9 4.9 4.9
H H H L L L H L L L L L 4.9 4.9 0.28 4.9 4.9 4.9 4.9 4.9
H H H L L H L L L L L L 4.9 0.28 4.9 4.9 4.9 4.9 4.9 4.9
H H H L H L L L L L L L 0.28 4.9 4.9 4.9 4.9 4.9 4.9 4.9


4.2.2 Pengujian Transistor sebagai saklar
Transistor sebagai saklar dalam pengujian ini adalah BC 327. Transistor jenis ini mempunyai penguatan hampir 300 kali menurut datasheet BC327.


Gambar 4.6 Pengujian transistor sebagai saklar

Bila logika low diberikan pada basis maka transistor bekeja sebagai switch. Pengukuran dapat dilakukan dengan voltmeter dengan melihat adanya tegangan pada kolektor. Ini membuktikan bahwa arus mengalir dari emitter ke kolektor. Logika high pada basis membuat transistor tidak bekerja dan pada pengukuran tidak terdapat adanya tegangan atau arus tidak mengalir pada kolektor.
Hasil dari pengujian transistor sebagai saklar diperlihatkan pada tabel 4.5.
Pengujian dilakukan dengan memakai alat bantu bit switch sebagai pemberi logika (High =5Vdan logika low =0V).

Tabel 4.5 Hasil pengujian transistor
VBB IB(Sat) IC(Sat) VCE Status Led
5 0 0mA 2.3V OFF
0 2mA 16mA 0.049V ON


4.3 Pengujian Unit Pengatur/Pengesetan Waktu
Pengujian unit dilakukan dengan pengukuran memakai voltmeter. Hal ini dilakukan agar unit tombol yang terpasang nantinya akan berfungsi dengan baik sehingga arus yang mengalir pada rangkaian tidak berlebih atau kurang dari yang di harapkan.


Gambar 4.7 Pengujian rangkaian pengatur jam dengan voltmeter

Bila tombol ditekan maka arus mengalir ke ground dan voltmeter akan mengukur tegangan yang sangat rendah sehingga dapat dikatakan dalam keadaan low. Dalam keadaan tombol tidak ditekan arus mengalir ke unit pengendali. Hasil dari rangkaian pengatur jam diperlihatkan pada tabel 4.6.
Pengujian dilakukan dengan memakai alat bantu bit switch sebagai pemberi logika (High =5Vdan logika low =0V).
Tabel 4.6 Hasil pengukuran pada rangkaian pengatur jam
Status tombol V.Out
Ditekan 0
Tidak Ditekan 5


4.4 Pengujian Unit Alarm


Gambar 4.8 Pengujian rangkaian clock alarm dengan voltmeter

Logika high akan mengakibatkan arus mengalir pada clock alarm dan dapat di ukur melalui voltmeter. Hasil dari rangkaian pengatur jam diperlihatkan pada tabel 4.7. Pengujian dilakukan dengan memakai alat bantu bit switch sebagai pemberi logika (High =5Vdan logika low =0V).


Tabel 4.7 Hasil pengukuran pada rangkaian pengatur jam
Data logika Vout Status Alarm
High (5V) 5 Mengeluarkan Sinyal Suara
Low (0V) 0 Tidak Mengeluarkan Sinyal Suara


4.5 Pengujian Unit Pengendali
Pengujian dilakukan dengan memasukkan program untuk mengeluarkan data 55H pada port 1 .
MOV P1,#55 H
Selanjutnya dilakukan pengujian dengan menggunakan logic probe pada port 1.

Gambar 4.9 Pengujian rangkaian pengendali dengan logic probe
Pengujian dilakukan dari P1.1 sampai P1.7. hasil dari pengujian dapat dilihat pada table 4.2.
Tabel 4.2 Hasil Pengujian Port 1
Port P1.7 P1.6 P0.5 P1.4 P1.3 P1.2 P1.1 P1.0
Logic Probe L H L H L H L H


Tabel 4.2 Hasil Pengujian Port 1
Port P1.7 P1.6 P0.5 P1.4 P1.3 P1.2 P1.1 P1.0
Voltmeter 0.2 3.7 0.2 3.7 0.2 3.7 0.2 3.7

Dari hasil pengujian tabel 4.2 dapat disimpulkan bahwa unit pengendali telah bekerja dengan benar, dimana perintah yang diberikan adalah menghasilkan logika 010101012 pada port P1.


BAB V
PENUTUP
5.1 Kesimpulan
Setelah melalui tahap perancangan dan pengujian system maka dapat diambil kesimpulan sebagai berikut :
1. Perancangan ini sangat bagus untuk aplikasi pengaturan jadwal pada kantor, kampus dan sekolah.
2. Dengan fungsi Jam Alarm Digital ini memungkinkan keakuratan waktu yang lebih tepat dalam penjadwalan kegiatan perkuliahan.
3. Dengan menggunakan interupsi timer, perhitungan waktu sangat tepat sebab sumber clock adalah sebuah crystal yang stabil.
4. Dengan mengggunakan mikrokontroller AT89S51 penandaan waktu pergantian jam kuliah dapat lebih sederhana dan pengubahan waktu alarm dapat dilakukan dengan mengubah data waktu pada program dan pengesetan waktu dapat dilakukan dengan pengesetan tombol.

5.2 Saran
Dalam penyelesaian laporan tugas akhir ini diharapkan kepada pembaca untuk lebih mengembangkan lagi bagi pengguna system penambahan rangkaian penunjang maupun pengembangan program dan penambahan rangkaian yang lebih efisien. Untuk pengembangan jam digital ini disarankan untuk menggunakan alarm yang lebih besar dan tampilan display seven segmen yang lebih besar juga, dan alat ini dapat dihubungkan dengan computer.
DAFTAR PUSTAKA

1. Malvino Barmawi (1996) Prinsip-prinsip Elektronika. Edisi 2 Jilid 1,2. Jakarta, Penerbit Erlangga.
2. Malvino Barmawi (1996) Prinsip-prinsip Elektronika. Edisi 3 Jilid 1,2. Jakarta, Penerbit Erlangga.
3. Albert paul Malvino (1983) Elektronika Komputer Digital, Pengantar Mikrokomputer Edisi 2, Itb, Penerbit Erlangga.
4. Wasito Suyono (1992) Data sheet Book 1, data IC Linier, TTL dan CMOS : (kumpulan data penting komponen elektronika) Cet. 2. Jakarta, Penerbit PT. Elex Media komputindo,
5. Richard Blocher, Dipl. Phys (2004) Dasar Elektronika, Penerbit Andi Yogyakarta.
6. Milman dan Halkias (1993) Elektronika Terpadu, Jilid 1. Penerbit Erlangga.
7. www.atmel.com
8. www.maxim-ic.com
9. www.DatasheetCatalog.com
10. www.Design-NET.com


Proram untuk menjalankan Jam alarm perkuliahan
ORG 00
SJMP START;

ORG 30H
START: CALL CLEAR_DISP
MOV 25H,#80H
MOV 41H,#00
MOV 42H,#00
ULANG:
JB P2.7,TERUS ;Jika logik 0 set waktu
CALL SET_WAKTU
TERUS: MOV A,41H
MOV R0,#30h
CALL SEGMENT
MOV A,42H
MOV R0,#32h
CALL SEGMENT
MOV R7,#05H
DEL2: MOV R6,#0FFH
DEL1: CALL TAMPIL ;Tampilkan
DJNZ R6,DEL1
DJNZ R7,DEL2
SJMP ULANG

SET_WAKTU: MOV A,P2 ;Periksa port P2
ANL A,#0E0H
CJNE A,#20H,T_NMNT
MOV A,42H ;Naik Jam
ADD A,#01
DA A
MOV 42H,A
CJNE A,#24H,T_SET
MOV 42H,#00
SJMP T_SET
T_NMNT: CJNE A,#40H,T_SET
MOV A,41H ;Naik Menit
ADD A,#01
DA A
MOV 41H,A
CJNE A,#60H,T_SET
MOV 41H,#00
T_SET: MOV R0,#30h
MOV A,41H ;Ubah ke Segment
CALL SEGMENT
MOV A,42H
MOV R0,#32h
CALL SEGMENT
MOV R7,#10H
DEL_SET2: MOV R6,#0FFH
DEL_SET1: CALL TAMPIL ;Tampilkan
DJNZ R6,DEL_SET1
DJNZ R7,DEL_SET2
JNB P2.7,SET_WAKTU
RET


CLEAR_DISP: MOV R0,#30H
UL_kOSONG: MOV A,#00
MOV @R0,A
INC R0
CJNE R0,#34H,UL_kOSONG
RET

SEGMENT: MOV DPTR,#100H
MOV R1,A
ANL A,#0FH ;Ambil Low-Niblle
MOVC A,@A+DPTR
MOV @R0,A ;Simpan ke buffer
MOV A,R1
RR A
RR A
RR A
RR A
ANL A,#0FH
MOVC A,@A+DPTR
INC R0
MOV @R0,A
RET

TAMPIL: MOV R0,#30H ;set alamat awal buffer
MOV DPTR,#110H ;Set alaat awal data Trace
UL_DISP: MOV P1,#00 ;Clear display
MOV R5,#03 ;Delay
DJNZ R5,$
CLR A ;Ambil data trace
MOVC A,@A+DPTR
MOV P0,A ;Berkan ke Tr
MOV A,@R0 ;Ambil data
ORL A,25H ;Aktifkan dot
MOV P1,A ;Tampilkan
MOV R5,#03 ;Delay
DJNZ R5,$
INC DPTR
INC R0
CJNE R0,#34H,UL_DISP
MOV P1,#00
RET


ORG 100H

DB 3FH,06H,5BH,4FH ; 0;1;2;3
DB 66H,6DH,7DH,07H ; 4;5;6;7
DB 7FH,67H,77H,7CH ; 8;9;A;B
DB 39H,5EH,79H,75H ; C;D;E;F


ORG 110H
DB 07H,0BH,0DH,0EH ;Data Trace

ORG 00
SJMP START;
ORG 0BH
AJMP NAIKTIMER

ORG 30H
START: CALL INISIAL
CALL CLEAR_DISP
CLR P3.7 ;Alaram off
MOV 40H,#50H ;set waktu 07.30.30
MOV 41H,#30H
MOV 42H,#07
ULANG: JB P2.7,TERUS
CALL SET_WAKTU
TERUS: MOV A,24H
CJNE A,#01,TERUS2
CALL NAIK_WAKTU
TERUS2: MOV A,41H ;Ambil nilai menit
MOV R0,#30H ;Set digit 0,1
CALL SEGMENT
MOV A,42H ;Ambil nilai jam
MOV R0,#32H ;Set digit 2,3
CALL SEGMENT
CALL TAMPIL ;Tampilkan
CALL CHEK_ALARAM
SJMP ULANG

SET_WAKTU:MOV A,P2 ;Periksa port P2
ANL A,#0E0H
CJNE A,#20H,T_NMNT
MOV A,42H ;Naik Jam
ADD A,#01
DA A
MOV 42H,A
CJNE A,#24H,T_SET
MOV 42H,#00
SJMP T_SET
T_NMNT: CJNE A,#40H,T_SET
MOV A,41H ;Naik Menit
ADD A,#01
DA A
MOV 41H,A
CJNE A,#60H,T_SET
MOV 41H,#00
T_SET: MOV R0,#30h
MOV A,41H ;Ubah ke Segment
CALL SEGMENT
MOV A,42H
MOV R0,#32h
CALL SEGMENT
MOV R7,#10H
DEL_SET2: MOV R6,#0FFH
DEL_SET1: CALL TAMPIL ;Tampilkan
DJNZ R6,DEL_SET1
DJNZ R7,DEL_SET2
JNB P2.7,SET_WAKTU
RET

NAIK_WAKTU: MOV A,40H ;Ambil nilai dtk
CLR C
SUBB A,#60H ;Periksa apakah >=60
JC KEL_NAIK ;Keluar jika tdk
CJNE A,#60H,KEL_NAIK;
MOV 40H,#00 ;Jika >atau =60, Set dtk =lebihnya
MOV 40H,A
MOV A,41H ;Naikkan menit
ADD A,#01
DA A ;Desimalkan
MOV 41H,A
CJNE A,#60H,KEL_NAIK ;Periksa apakah telah 60
MOV 41H,#00 ;Jika ya set 00
MOV A,42H ;Naikkan jam
ADD A,#01
DA A ;Desimalkan
MOV 42H,A
CJNE A,#24H,KEL_NAIK ;Periksa apakah sdh 24
MOV 42H,#00
KEL_NAIK: MOV 24H,#00 ;Clear indikasi 1 dtk
RET

NAIKTIMER: INC 20H ;Naikkan indikasi 0,05dtk
MOV R5,20H
CJNE R5,#0AH,LMPT ;Periksa apakah sdh 0,5dtk?
MOV 20H,#00
MOV A,25H
CJNE A,#80H,SET ;Periksa indikasi kedip
MOV 25H,#00 ; jika 01 set jadi 00
SJMP LMPT_NAIK
SET: MOV 25H,#80H ;Jika 00 set 01
LMPT_NAIK: INC R2
CJNE R2,#02,LMPT
MOV R2,#00 ;Clear count 0,5dtk
MOV A,40H ;Naikkan detik
ADD A,#01H
DA A ;Desimalkan
MOV 40H,A
MOV 24H,#01H ;Set indikasi 1dtk
LMPT: MOV TH0,#3CH ; Menghasilkan interupt setiap
MOV TL0,#0AFH ; 0,05 detik
MOV IE,#82H ; Interupsi T0 dan serial enable
RETI


;
INISIAL: MOV IE,#82H ;Set interupsi Timer 0
MOV TMOD,#01H ;set T0=16-bit
MOV TH0,#3CH ;Baud rate 9600bps dgn 11.0592MHz
MOV TL0,#0AFH ;Set Timer T0= 0,05dtk
MOV TCON,#10H ;Enable timer 1 dan T0
MOV 24H,#00 ;clear indiksi 1 dtk
MOV 20H,#00 ;counter indikasi 0,05 dtk
MOV 25H,#00 ;indikasi dot detik
MOV R2,#00 ;counter indikasi 0,5 dtk
RET

CLEAR_DISP: MOV R0,#30H
UL_kOSONG: MOV A,#00
MOV @R0,A
INC R0
CJNE R0,#34H,UL_kOSONG
RET

SEGMENT: MOV DPTR,#200H
MOV R1,A
ANL A,#0FH ;Ambil Low-Niblle
MOVC A,@A+DPTR
MOV @R0,A ;Simpan ke buffer
MOV A,R1
RR A
RR A
RR A
RR A
ANL A,#0FH
MOVC A,@A+DPTR
INC R0
MOV @R0,A
RET

TAMPIL: MOV R0,#30H ;set alamat awal buffer
MOV DPTR,#210H ;Set alamat awal data Trace
UL_DISP: MOV P1,#00 ;Clear display
CLR A ;Ambil data trace
NOP
MOVC A,@A+DPTR
MOV P0,A ;Berkan ke Tr
MOV A,@R0 ;Ambil data
ORL A,25H ;Aktifkan dot
MOV P1,A ;Tampilkan
MOV 27H,#05 ;Delay
DJNZ 27H,$
INC DPTR
INC R0
CJNE R0,#34H,UL_DISP
MOV P1,#00
RET

CHEK_ALARAM: MOV DPH,#02H ;Set alamat awal tabel alaram
MOV R3,#20H ;Alamat alaram menit
MOV R4,#30H ;Alamat alaram jam
CHEK_ALRM: MOV DPL,R3
CLR A
MOVC A,@A+DPTR
CJNE A,41H,LAIN ;Bandingkan menit
MOV DPL,R4
CLR A
MOVC A,@A+DPTR
CJNE A,42H,LAIN ;Bandingkan menit
SETB P3.7 ;Jika sama menit dan jam alaram ON
MOV R7,#01H
DELAY_ALARAM2: MOV R6,#01H
DELAY_ALARAM1: NOP
DJNZ R6,DELAY_ALARAM1
DJNZ R7,DELAY_ALARAM2
SJMP KEL_ALARAM
LAIN: INC R3
INC R4
CJNE R3,#2BH,CHEK_ALRM
KEL_ALARAM: CLR P3.7
RET

ORG 200H

DB 3FH,06H,5BH,4FH ; 0;1;2;3
DB 66H,6DH,7DH,07H ; 4;5;6;7
DB 7FH,67H,77H,7CH ; 8;9;A;B
DB 39H,5EH,79H,75H ; C;D;E;F


DB 0C0H,0F9H,0A4H,0B0H ; 0;1;2;3
DB 99H,92H,82H,0F8H ; 4;5;6;7
DB 80H,90H,88H,43H ; 8;9;A;B
DB 0C6H,0A1H,86H,8EH ; C;D;E;F

ORG 210H
DB 07H,0BH,0DH,0EH ;Data Trace

ORG 220H
DB 30H,00H,30H,00H,30H,00H,30H,00H,30H,00H,30H ;Data menit alaram

ORG 230H
DB 07H,09H,10H,12H,12H,14H,15H,17H,18H,19H,20H ;Data jam alaram


ORG 00
SJMP START;

START: CALL CLEAR_DISP
MOV 41H,#23H
MOV 42H,#15H
MOV A,41H ;Ambil nilai menit
MOV R0,#30H ;Set digit 0,1
CALL GET_SEGMENT
MOV A,42H ;Ambil nilai jam
MOV R0,#32H ;Set digit 2,3
CALL GET_SEGMENT
TERUS2: CALL TAMPIL ;Tampilkan
SJMP START


CLEAR_DISP: MOV R0,#30H
UL_kOSONG: MOV A,#00
MOV @R0,A
INC R0
CJNE R0,#34H,UL_kOSONG
RET

GET_SEGMENT: MOV DPTR,#100H
MOV R1,A
ANL A,#0FH ;Ambil Low-Niblle
MOVC A,@A+DPTR
MOV @R0,A ;Simpan ke buffer
MOV A,R1
RR A
RR A
RR A
RR A
ANL A,#0FH
MOVC A,@A+DPTR
INC R0
MOV @R0,A
RET

TAMPIL: MOV R0,#30H ;set alamat awal buffer
MOV DPTR,#110H ;Set alamat awal data Trace
UL_DISP: MOV P1,#00 ;Clear display
MOV R5,#01 ;Delay
DJNZ R5,$
CLR A ;Ambil data trace
MOVC A,@A+DPTR
MOV P0,A ;Berikan ke Tr
MOV A,@R0 ;Ambil data
MOV P1,A ;Tampilkan
MOV R5,#05H ;Delay
DJNZ R5,$
INC DPTR
INC R0
CJNE R0,#34H,UL_DISP
MOV P1,#00
RET

ORG 100H

DB 3FH,06H,5BH,4FH ; 0;1;2;3
DB 66H,6DH,7DH,07H ; 4;5;6;7
DB 7FH,67H,77H,7CH ; 8;9;A;B
DB 39H,5EH,79H,75H ; C;D;E;F


ORG 110H
DB 07H,0BH,0DH,0EH ;Data Trace
Objek operasi Bit

Seperti sudah dibahas dibagian depan, memori-data nomor $20 sampai $2F bisa dipakai menampung informasi dalam level bit. Setiap byte memori di daerah ini bisa menampung 8 bit informasi yang masing-masing dinomori tersendiri, misalkan bit 0 dari memori-data nomor $20 bisa disebut sebagai bit nomor 0, bit 1 memori-data nomor $20 disebut sebagai bit nomor 1… seterusnya bit 0 dari memori-data nomor $21 disebut sebagai bit nomor 8, bit 7 memori-data nomor $21 disebut sebagai bit nomor 15 dan seterusnyanya.

Dengan demikian memori-data nomor $20 sampai dengan nomor $2F sebanyak 16 byte memori bisa dipakai untuk menyimpan 128 bit (16 x 8 bit) data Boolean yang dinomori dengan bit nomor $00 sampai $7F.

Di samping itu, operasi bit bisa pula belaku di memori-data nomor $80 sampai dengan $FF yang biasa disebut sebagai Special Function Register (SFR). Hanya SFR dengan nomor memori-data yang diakhiri dengan angka heksa-desimal 0 atau 8 yang bisa dipakai untuk operasi bit, bit pada memori-data daerah ini sebanyak 128 bit, mendapat nomor dari $80 sampai dengan $FF.

Secara keseluruhan operasi bit bisa diberlakukan pada 256 lokasi bit seperti terlihat dalam Gambar 6.


Gambar 6
Denah memori-bit

Operasi bit yang bisa ditangani oleh MCS51 antara lain mencakup : pemberian nilai pada data biner 1 bit, perpindahan data 1 bit, operasi logika 1 bit meliputi operasi AND, OR dan NOT, pengujian nilai data biner 1 bit.
Pemberian nilai data biner

Untuk keperluan ini disediakan 2 instruksi, yakni SETB (Set Bit) dipakai memberi nilai ‘1’ pada data biner 1 bit, dan CLR (Clear Bit) dipakai memberi nilai ‘0’ pada data biner 1 bit.

Contoh pemakaian instruksi ini sebagai berikut :

SETB ACC.0

SETB $E0

CLR P1.1

CLR $90

Instruksi SETB ACC.0 di atas membuat bit 0 dari akumulator (ACC.0) bernilai ‘1’, tapi mengingat nomor bit dari bit 0 akumulator adalah $E0 (lihat Gambar 6), maka hasil kerja kedua instruksi SETB di atas adalah sama.

Demikian pula dengan kedua instruksi CLR berikutnya, instruksi-instruksi ini akan mengakibatkan P1.1 bernilai ‘0’. Di samping itu perlu pula diingat, P1.1 terhubung ke kaki IC MCS51, jadi hasil kerja operasi SETB maupun CLR pada P0, P1, P2 dan P3 bisa langsung terukur dengan volt meter, atau operasi-operasi ini bisa langsung dipakai men-on/off-kan rangkaian di luar IC MCS51.
Perpindahan data biner

Dalam operasi bit, bit Carry di dalam Program Status Word (PSW, nomor $D0) diperlakukan sebagai akumulator.

256 data dalam level bit dalam MCS51, bisa dipindahkan dari satu posisi ke posisi yang lain, permindahan ini dilakukan dengan bantuan bit Carry yang mempunyai sifat sebagai ‘akumulator bit’.

Contoh permindahan data level bit ini bisa dilakukan sebagai berikut :

MOV C,P1.1

MOV P1.0,C

2 instruksi di atas akan meng-copy-kan tegangan pada kaki Port 1 bit 1 ke kaki Port 1 bit 0, dengan demikian tegangan pada kedua kaki IC MCS51 itu akan sama. Seluruh 256 bit data yang dibahas di atas, bisa dipindah-pindahkan dengan instruksi ini.
Operasi logika

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).
Pengujian nilai Boolean

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

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.
Pemakaian Instruksi operasi bit

Dengan ingtruksi-instruksi operasi bit yang ada, MCS51 bisa dipakai untuk mengimplementasi fungsi Boolean secara langsung, sebagai contoh persamaan Boolean berikut diimplementasikan dengan instruksi-instruksi MCS51.

Q = ( U· ( V + W )) + ( X·/Y ) + /Z

(Catatan : /Y artinya not Y dan /Z artinya not Z).

Misalkan U V W X Y dan Z masing-masing adalah besaran Boolean yang dimasukkan ke kaki Port 1 bit 0 sampai dengan 5, sedangkan Q merupakan besaran Boolean yang ditampilkan di Port 3 bit 0, seperti terlihat dalam Gambar 7 berikut.


Gambar 7
Rangkaian Q = ( U·( V + W )) + ( X·/Y ) + /Z

Dalam Potongan Program baris 1 sampai dengan 7, P1.0 P1.1 dan lainnya dinyatakan sebagai data bit dengan nama U, V dan selanjutnya, penamaan ini menggunakan perintah khusus untuk assembeler (Assembler Directive) BIT, hanya nama-nama yang dibentuk dengan assembler-directive BIT yang bisa dipakai untuk operasi bit.
















Oleh Agus Haryadi
Microcontroller Atmel








MCS51 Flow Control
27 September 2007 20:45
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 Visual Basic), instruksi-instruksi untuk membuat dan memakai sub-rutin/modul (setara dengan PROCEDURE dalam Visual Basic), instruksi-instruksi JUMP bersyarat (conditional Jump, setara dengan statemen IF .. THEN dalam Visual Basic). Di samping itu ada pula instruksi PUSH dan POP yang bisa memengaruhi alur program.


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.

Kelompok Instruksi JUMP


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


TugasBaru:


MOV A,P3





Dalam potongan program di atas, ORG adalah perintah pada assembler agar berikutnya assembler bekerja pada memori-program nomor yang disebut di belakang ORG (dalam hal ini minta assembler berikutnya bekerja pada memori-program nomor 2000H). TugasBaru disebut sebagai LABEL, yakni sarana assembler untuk menandai/ menamai nomor memori-program. Dengan demikian, dalam potongan program di atas, memori-program nomor 2000H diberi nama TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai 2000H. (Catatan : LABEL ditulis minimal satu huruf 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 2000H yang oleh assembler akan diterjemahkan menjadi 02 20 00 (heksadesimal).

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


AJMP DaerahIni


AJMP DaerahLain


ORG 900H


DaerahIni:


. . .


ORG 1000H


DaerahLain:


. . .





Potongan program di atas dimulai di memori-program nomor 800H, dengan demikian instruksi AJMP DaerahIni bisa dipakai, karena nomor-memori 800H (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 1000H 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 0F80H


SJMP DaerahLain


. . .


ORG 1000H


DaerahLain:





Dalam potongan program di atas, memori-program 0F80H tidak terletak dalam daerah memori-program 2 KiloByte yang sama dengan 1000H, tapi instruksi SJMP DaerahLain tetap bisa dipakai, asalkan jarak antara instruksi itu dengan LABEL DaerahLain tidak lebih dari 127 byte.

Kelompok Instruksi untuk 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 LJUMP, yang bisa menjangkau seluruh memori-program mikrokontroler MCS51 sebanyak 64 KiloByte. (Tapi tidak ada instruksi 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.

Kelompok Instruksi Jump 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 dilaksana­kan. Cara ini dipakai pula untuk instruksi SJMP.

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

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.

Kelompok 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,#0AH,TidakSama


...


SJMP EXIT


;


TidakSama:


...





Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE A,#0AH,Tidaksama memeriksa apakah nilai Port 1 yang sudah disimpan di A sama dengan 0AH, jika tidak maka Jump ke TidakSama.
MCS51 BASIC PROGRAMMING
27 September 2007 20:42
Program pengendali mikrokontroler (assembly language) disusun dari sekumpulan instruksi yang setara dengan kalimat perintah dalam bahasa manusia (yang hanya terdiri atas predikat dan objek). Dengan demikian tahap pertama pembuatan program assembly 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’ secara umum dikelompokkan menjadi perintah untuk perpindahan data, arithmatik, operasi logika, pengaturan alur program dan beberapa hal khusus. Kombinasi dari ‘kata kerja’ dan ‘objek’ itulah yang membentuk perintah pengatur kerja mikrokontroler.

Misalkan, Instruksi MOV A,7FH. MOV merupakan ‘kata kerja’ yang berarti memerintahkan peng-copy-an data, sedangkan 7FH merupakan ‘objeknya’ yang berarti nomor memori (alamat) 7FH. Jadi kesimpulannya, Instruksi MOV A,7FH mempunyai arti data yang berada di alamat 7FH di-copy-kan ke Akumulator A. Untuk lebih jelasnya lihat contoh dibawah ini :

ORG 00H
; Isi alamat 7FH dengan data 45H
MOV 7FH,#45H
; Copy-kan data dari alamat 7FH (yaitu data 45H) ke Akumulator A. Jadi, Akumulator A sekarang isinya sama dengan isi register 7FH yaitu 45H
MOV A,7FH
END


A. ADDRESSING MODE

Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara untuk menyebut mode pengalamatan data (‘Addressing Mode’), antara lain sebagai berikut :

* Penyebutan data konstan (immediate addressing mode)
Data konstan merupakan data yang berada di dalam instruksi (bagian dari instruksi).

Contoh instruksi : MOV A,#2FH.

Instruksi ini mempunyai makna data konstan 2FH (sebagai data konstan ditandai dengan ‘#’) di-copy-kan ke Akumulator A.

* Penyebutan data secara langsung (direct addressing mode)
Cara ini dipakai untuk menunjuk data yang berada di dalam memori dengan cara menyebut nomor memori tempat data tersebut berada

Contoh instruksi : MOV A,2FH.

Instruksi ini mempunyai makna data yang berada di dalam nomor memori 2FH di-copy-kan ke Akumulator A. Sekilas intruksi ini sama dengan instruksi data konstan di atas, perbedaannya instruksi di atas memakai tanda ‘#’ yang menandai 2FH adalah data konstan, sedangkan dalam instruksi ini karena tidak ada tanda ‘#’ maka 2FH adalah nomor memori (alamat).

* Penyebutan data secara tidak langsung (indirect addressing mode)
Cara ini dipakai untuk menunjuk data yang berada di dalam alamat memori yang mana letaknya selalu berubah-ubah, sehingga nomor memori tidak disebut secara langsung tapi di-‘titip’-kan ke register lain.

Contoh instruksi :
MOV R0,#7FH
MOV A,@R0

Dalam instruksi ini register serba guna R0 dipakai untuk mencatat nomor memori, sehingga instruksi ini mempunyai makna memori yang nomornya tercatat dalam R0 (yaitu memori alamat 7FH) isinya di-copy-kan ke Akumulator A.

Tanda ‘@’ dipakai untuk menandai nomor memori yang disimpan di dalam R0. 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 (R0 sebagai pointer = penunjuk alamat memori), sehingga kalau nilai R0 berubah memori yang ditunjuk juga akan berubah pula (data ikut berubah).

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.

* Penyebutan data dalam register (register addressing mode)
Instruksi ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.

Contoh instruksi : MOV A,R0

Instruksi ini mempunyai arti data dalam register R0 di-copy-kan ke Akumulator A.
Data yang dimaksud dalam bahasan di atas termasuk register, semuanya berada di dalam memori data (RAM = Random Access Memory). Itu berarti data tersebut nilainya dapat diubah-ubah selama program berjalan (data variable).

Dalam penulisan program, sering diperlukan tabel baku (Define Byte = DB) yang disimpan bersama dengan program tersebut. Tabel semacam ini sesungguhnya merupakan data yang berada di dalam memori program (ROM = Read Only Memory), yaitu data yang nilainya tidak bisa diubah sewaktu program berjalan (data constant).

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

Tanda ‘@’ pada A+DPTR dipakai untuk menyatakan nomor memori yang ditunjuk pointer (berupa nilai yang tersimpan dalam DPTR (Data Pointer Register - 2 byte) ditambah dengan nilai yang tersimpan dalam Akumulator A sebesar 1 byte), datanya di-copy-kan ke Akumulator A.


B. INSTRUCTION

Secara keseluruhan AT89Cx051 mempunyai sebanyak 255 macam instruksi, yang dibentuk dengan mengkombinasikan ‘kata kerja’ dan ‘objek’. ‘Kata kerja’ tersebut secara kelompok dibahas sebagai berikut :

1. KELOMPOK PENG-COPY-AN 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,R1 dikerjakan, Akumulator A dan register serba guna R1 berisikan data yang sama, yang awalnya tersimpan di dalam R1.

Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah ini pada memori data dituliskan menjadi MOV, misalkan :
MOV A,#20H
MOV A,@R1
MOV A,P1
MOV P2,A

Untuk pemakaian pada memori program, perintah ini dituliskan menjadi MOVC, hanya ada 2 jenis instruksi yang memakai MOVC, yakni:
MOVC A,@A+DPTR ; DPTR sebagai register indirect
MOVC A,@A+PC ; PC sebagai register indirect

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

2. KELOMPOK ARITMATIK (ADD, ADDC, SUBB, DA, MUL dan DIV)

-> 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 A, 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,#0FFH ; bilangan konstan
ADD A,@R0 ; no memori tak langsung
ADD A,P1 ; no memori langsung (port 1)

-> Perintah SUBB

Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan nilai bit Carry, hasil pengurangan akan ditampung kembali dalam Akumulator A. 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,#24H ; A = A – 24 - C
SUBB A,@R1
SUBB A,P1

-> 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 ‘0’, kalau tidak bit OV bernilai ‘1’.
MOV A,#30H
MOV B,#0DH
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 ‘0’.


3. KELOMPOK LOGIKA (ANL, ORL dan XRL)

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 aktif. Hasil operasi ditampung di sumber data yang pertama.

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

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

-> Operasi logika Exclusive OR (XOR)

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.