BELAJAR MIKROKONTROLER PIC16 F84

dokumen-dokumen yang mirip
Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

MIKROKONTROLER Arsitektur Mikrokontroler AT89S51

Instruktur : Ferry Wahyu Wibowo, S.Si., M.Cs.

MIKROKONTROLER AT89S52

ARSITEKTUR MIKROKONTROLER AT89C51/52/55

Blok sistem mikrokontroler MCS-51 adalah sebagai berikut.

Mikrokontroler 89C51 Bagian II :

Lab Elektronika Industri Mikrokontroler - 1 AT89C1051

BAB II. PENJELASAN MENGENAI System-on-a-Chip (SoC) C8051F Pengenalan Mikrokontroler

BAB I TUGAS MATA KULIAH SISTEM MIKROPROSESOR DOSEN PEMBERI TUGAS : FATAH YASIN, ST, MT.

Mikrokontroler AVR. Hendawan Soebhakti 2009

DAFTAR ISI HALAMAN JUDUL... HALAMAN PENGESAHAN P EMBIMBING... HALAMAN PENGESAHAN P ENGUJI... HALAMAN PERSEMBAHAN... HALAMAN MOTTO... KATA PENGANTAR...

Pendahuluan BAB I PENDAHULUAN

BAB II TINJAUAN PUSTAKA

Sistem Mikroprosessor

BAB II LANDASAN TEORI. Dalam merancang sebuah peralatan yang cerdas, diperlukan suatu

Sistem Minimum Mikrokontroler. TTH2D3 Mikroprosesor

Gambar 3.1 Blok Diagram Port Serial RXD (P3.0) D SHIFT REGISTER. Clk. SBUF Receive Buffer Register (read only)

PERTEMUAN PERANGKAT KERAS MIKROKONTROLER

BAB III PERANCANGAN SISTEM

BAB II LANDASAN TEORI

Gambar 1.1. Diagram blok mikrokontroller 8051

Tabel 1. Karakteristik IC TTL dan CMOS

BAB III PERANCANGAN SISTEM

TAKARIR. Akumulator Register yang digunakan untuk menyimpan semua proses aritmatika

MICROCONTROLER AVR AT MEGA 8535

MIKROPENGENDALI C TEMU 2b AVR ARCHITECTURE. Oleh : Danny Kurnianto,S.T.,M.Eng Sekolah Tinggi Teknologi Telematika Telkom

MICROCONTROLER AVR AT MEGA 8535

PERTEMUAN PENGANTAR MIKROKONTROLER

PENGANTAR MIKROKOMPUTER PAPAN TUNGGAL (SINGLE CHIP) Oleh : Sumarna, Jurdik Fisika, FMIPA UNY

BAB III RANCANGAN DAN CARA KERJA ALAT

BAB II TEORI DASAR 2.1 Pendahuluan 2.2 Sensor Clamp Putaran Mesin

Pendahuluan Mikrokontroler 8051

ALAT MATA-MATA PENDETEKSI PENCURI BERBASIS MIKROKONTROLER PIC16F84

BAB III PERANCANGAN SISTEM

4. Port Input/Output Mikrokontroler MCS-51

BAB III PERANCANGAN SISTEM

BAB II DASAR TEORI. Gambar 2.1 Sensor MLX 90614[5]

BAB 3 PERANCANGAN SISTEM. pada sistem pengendali lampu telah dijelaskan pada bab 2. Pada bab ini akan dijelaskan

BAB 2 LANDASAN TEORI

Arsitektur Komputer, Mikroprosesor dan Mikrokontroller. TTH2D3 Mikroprosesor

BAB 2 LANDASAN TEORI. Mikrokontroler AT89S52 termasuk kedalam keluarga MCS-51 merupakan suatu. dua macam memori yang sifatnya berbeda yaitu:

II. TINJAUAN PUSTAKA. Mikrokontroler ATmega8535 merupakan salah satu jenis mikrokontroler keluarga AVR

Pertemuan 2 Organisasi Komputer II. Struktur & Fungsi CPU (I)

BAB III PERANCANGAN DAN PEMBUATAN PERANGKAT KERAS

BAB III DESAIN DAN PENGEMBANGAN SISTEM

BAB III TEORI PENUNJANG. Microcontroller adalah sebuah sistem fungsional dalam sebuah chip. Di

I/O dan Struktur Memori

BAB II KONSEP DASAR PERANCANGAN

Sistem Mikrokontroler FE UDINUS

BAB III PERANCANGAN DAN PEMBUATAN ALAT

BAB II LANDASAN TEORI. Definisi PLC menurut National Electrical Manufacturing Association (NEMA)

BAB III RANCANG BANGUN SISTEM KARAKTERISASI LED. Rancangan sistem karakterisasi LED diperlihatkan pada blok diagram Gambar

MIKROKONTROLER Yoyo Somantri dan Egi Jul Kurnia

BAB II DASAR TEORI. 2.1 Ethanol

TAKARIR. Akumulator Register yang digunakan untuk menyimpan semua proses aritmatika. Assembler Bahasa pemrograman mikrokontroler MCS-51

BAB 2 TINJAUAN TEORITIS. Sensor TGS 2610 merupakan sensor yang umum digunakan untuk mendeteksi adanya

BAB II LANDASAN TEORI

PERTEMUAN MEMORY DAN REGISTER MIKROKONTROLER

KOMPONEN INTERFACING. Yoyo somantri Dosen Jurusan Pendidikan Teknik Elektro FPTK Universitas Pendidikan Indonesia

Organisasi Komputer & Organisiasi Prosesor

Sistem Tertanam. Pengantar Atmega328 dan Arduino Uno. Dennis Christie - Universitas Gunadarma

PETA MEMORI MIKROPROSESOR 8088

III. METODE PENELITIAN

BAB III PERANCANGAN ALAT

STRUKTUR CPU. Arsitektur Komputer

BAB II DASAR TEORI 2.1. Mikrokontroler AVR ATmega32

SISTEM KOMPUTER.

BAB III DESKRIPSI DAN PERANCANGAN SISTEM

BAB III PERANCANGAN DAN REALISASI ALAT

Microcontroller: Bahasa Pemrograman Assembly 8051

TKC210 - Teknik Interface dan Peripheral. Eko Didik Widianto

BAB 2 TINJAUAN PUSTAKA

BAB II DASAR TEORI. ATmega8535 merupakan IC CMOS 8-bit berdaya rendah yang berdasar pada

BAB 2 TINJAUAN TEORITIS

BAB III MIKROKONTROLER

BAB III PERANCANGAN SISTEM. 3.1 Pengantar Perancangan Sistem Pengendalian Lampu Pada Lapangan Bulu

: Ahmad Sadili : Teknik Komputer (Reg) Tugas Mata Kuliah Mikroprosesor. Mikroprosesor Zilog Z80

BAB III METODE PENELITIAN. Penelitian ini dilakukan pada bulan Maret 2015 sampai dengan Agustus

III. METODOLOGI PENELITIAN. Penelitian dan perancangan tugas akhir ini telah dimulai sejak bulan Juli 2009

OPERATION SYSTEM. Jenis - Jenis Register Berdasarkan Mikroprosesor 8086/8088

BAB III PERANCANGAN DAN REALISASI PERANGKAT KERAS DAN PERANGKAT LUNAK SISTEM. Dari diagram sistem dapat diuraikan metode kerja sistem secara global.

BAB III PERENCANAAN DAN REALISASI

Hanif Fakhrurroja, MT

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

BAB III KEGIATAN PENELITIAN TERAPAN

Tahun Akademik 2015/2016 Semester I DIG1B3 Konfigurasi Perangkat Keras Komputer

MAKALAH. Mikroprosesor Zilog Z80 DI SUSUN OLEH: M.RIZAL PAHLEPI SAIFANNUR FIZATUL VUZA HERU RINALDI KEMENTERIAN PENDIDIKAN NASIONAL

DAFTAR ISI ABSTRAKSI KATA PENGANTAR DAFTAR TABEL DAFTAR GAMBAR DAFTAR LAMPIRAN DAFTAR ISTILAH DAN SINGKATAN. 1.1 Latar Belakang Masalah 1

BAB II LANDASAN TEORI. merealisasikan suatu alat pengawas kecepatan pada forklift berbasis mikrokontroler.

BAB 3 PERANCANGAN SISTEM. Bab ini akan membahas tentang perancangan sistem yang digunakan dari alat

BAB 1 PERSYARATAN PRODUK

Percobaan 2 I. Judul Percobaan Sistem Kendali Digital Berbasis Mikrokontroler

BAB IV ANALISIS RANGKAIAN ELEKTRONIK

BAB IV HASIL PENGUKURAN DAN PENGUJIAN ALAT SISTEM PENGONTROL BEBAN DAYA LISTRIK

BAB III DESKRIPSI MASALAH

7.1 Pendahuluan. 7.2 Central Processing Unit (CPU)

BAB III PERANCANGAN UIMEGA 8535

BAB II LANDASAN TEORI

BAB III LANDASAN TEORI. digunakan seperti MCS51 adalah pada AVR tidak perlu menggunakan oscillator

Transkripsi:

E-BOOK BELAJAR MIKROKONTROLER PIC16 F84 Oleh : Moh.Ibnu Malik,ST Email : moh_ibnumalik @ yahoo.com / Telp : 081 293 29512 2003

DAFTAR ISI Pendahuluan BAB I MIKROKONTROLER Apakah Mikrokontroler itu? Komponen penyusun Mikrokontroler Bagaimana cara kerja Mikrokontroler? Mikrokontroler PIC16F84 Basic Stamp Computer Basic Compiler C Compiler Micro-1 Computer BAB II PERANGKAT KERAS PIC16F84 Keluarga mikrokontroler PICmicro Fitur Mikrokontroler PIC16F84 Arsitektur Mikrokontroler PIC16F84 ALU ( Arithmetic and Logic Unit ) Reset Osilator ( OSC ) Timer / Counter Watchdog Timer ( WDT ) Memori pada PIC16F84 Stack Organisasi Register File Mode Pengalamatan Register Kegunaan Khusus Data Memori EEPROM Sela ( Interupsi ) Port Mikrokontroler PIC16F84

Port A Port B BAB III PERANGKAT LUNAK PIC16F84 Pendahuluan Perangkat lunak PIC16F84 Set Instruksi PIC16F84 BAB IV PEMROGRAMAN PIC16F84 Editor Teks MPASM Pengarah Assembler Belajar Mikrokontroler PIC16F84 melalui Micro-1 Computer BAB V BERPRAKTEK MENGGUNAKAN PIC16F84 DAFTAR BACAAN LAMPIRAN 1 LAMPIRAN 2

PENDAHULUAN Mikrokontroler. Suatu kata yang tentunya saat ini ada dibenak anda. Tidak peduli apakah anda hanya sekedar tertarik, ingin mencoba, atau betul-betul ingin memanfaatkan untuk keperluan dirumah, dikampus atau ditempat kerja anda. Apapun keinginan anda, sedikit banyak akan anda dapatkan melalui buku ini. Berbeda dengan saudara -nya ( mikroprosesor ) yang berkembang sangat pesat, mikrokontroler tidaklah terlalu banyak berkembang. Jika mikroprosesor saat ini telah tersedia dalam frekuensi kerja hingga orde GigaHerzt, maka mikrokontroler berkembang dengan mengurangi ukuran fisiknya. Sebagai contoh dahulu mikrokontroler banyak dikemas dengan ukuran IC mencapai 40 pena, namun saat ini telah banyak tersedia mikrokontroler dengan ukuran fisik hanya 18 ~ 20 pena. Buku ini menjelaskan cara pemakaian salah satu jenis mikrokontroler buatan Microchip Inc. Apabila anda telah dapat menguasai salah satu jenis mikrokontroler, maka anda akan dengan mudah untuk menguasai jenis mikrokontroler lainnya. Penulis berharap anda akan mendapat manfaat dengan membaca buku ini. Tak ada gading yang tak retak, kritik dan saran sangat penulis harapkan untuk kemajuan buku ini. Jakarta, Desember 2002 Penulis

Persembahan Buku ini saya persembahkan untuk almamater yang saya hormati, Teknik Elektro Universitas Diponegoro Semarang

BAB I MIKROKONTROLER Apakah Mikrokontroler itu? Secara sederhana mikrokontroler merupakan suatu IC yang didalamnya berisi CPU, ROM,RAM dan I/O. Dengan adanya CPU tersebut maka mikrokontroler dapat melakukan proses berfikir berdasarkan program yang telah diberikan kepadanya. Mikrokontroler banyak ditemukan pada peralatan elektronik yang serba otomatis. Misalnya mesin cuci otomatis, microwave oven, mesin fax sampai ke mesin fotocopy. Mikrokontroler digunakan sebagai pusat pengontrol peralatan-peralatan elektronik tersebut. Mikrokontroler dapat dianggap sebagai komputer yang berukuran kecil. Bayangkan jika suatu mesin cuci otomatis harus dikontrol menggunakan komputer biasa ( Personal Computer ). Untuk dapat membuat suatu peralatan elektronik canggih berukuran cukup kompak, maka dibutuhkan suatu alat kontrol yang akan mengontrol seluruh kegiatan peralatan tersebut. Karena itu sangat dibutuhkan suatu mikrokontroler yang berukuran cukup kecil dan berdaya rendah sehingga memungkinkan didayai dengan menggunakan baterai.

Komponen penyusun Mikrokontroler ini. Mikrokontroler terdiri dari beberapa bagian / part seperti yang terlihat dibawah CPU ROM RAM I/O Komponen lain (opsional) Gambar 1 Komponen penyusun mikrokontroler Pada gambar 1 dapat dilihat suatu mikrokontroler standard yang disusun oleh komponen-komponen sebagai berikut: a. CPU ( Central Processing Unit ) CPU ini merupakan pengontrol utama dalam suatu mikrokontroler. Jangan salah mengartikan CPU ini sebagai CPU komputer anda dirumah! CPU pada mikrokontroler ada yang berukuran 8-bit ada pula yang berukuran 16-bit. CPU ini akan membaca program yang tersimpan didalam ROM dan melaksanakannya.

b. ROM ( Read Only Memory ) ROM merupakan suatu memori ( alat untuk mengingat ) yang memiliki sifat hanya bisa dibaca saja. Dengan demikian ROM tidak dapat ditulisi. Dalam dunia mikrokontroler, ROM digunakan untuk menyimpan program bagi mikrokontroler tersebut. Program tersimpan dalam format biner ( 0 atau 1 ). Susunan bilangan biner tersebut bila telah dibaca oleh mikrokontroler akan memiliki arti tersendiri. c. RAM ( Random Access Memory ) Berbeda dengan ROM yang hanya bersifat hanya baca, maka RAM adalah jenis memori yang selain dapat dibaca juga dapat ditulisi berulang-kali. Tentunya dalam pemakaian mikrokontroler ada semacam data yang bisa berubah pada saat mikrokontroler tersebut bekerja. Perubahan data tersebut tentunya juga harus disimpan kedalam memori. Nah untuk itulah dipakai memori jenis RAM. Namun RAM tersebut memiliki sifat tidak dapat mempertahankan isinya bila catu daya listrik kepadanya dihilangkan. d. I/O ( Input/Output ) Untuk berkomunikasi dengan dunia luar, maka mikrokontroler menggunakan terminal I/O ( port I/O ). Port tersebut disebut sebagai Input/Output karena pada umumnya port tersebut dapat dipakai sebagai masukan atau sebagai keluaran. Sebagai masukan contohnya adalah pada saat mikrokontroler harus mengawasi sebuah saklar ( switch ) untuk mendeteksi apakah saklar tersebut ditekan atau tidak. Sebagai keluaran contohnya adalah pada saat mikrokontroler harus menyalakan sebuah LED.

Mikrokontroler Port Port Gambar 2 Port masukan dan keluaran pada suatu mikrokontroler e. Komponen lainnya Beberapa mikrokontroler memiliki timer/counter, lainnya memiliki ADC ( Analog to Digital Converter ), dan komponen-komponen lainnya. Pemilihan komponen tambahan yang sesuai dengan tugas kerja mikrokontroler akan sangat membantu perancangan sehingga dapat mempertahankan ukuran yang kecil. Apabila komponen-komponen diatas belum ada pada suatu mikrokontroler, umumnya komponen tersebut masih dapat ditambahkan pada sistim mikrokontroler dengan melalui port-portnya. Bagaimana cara kerja Mikrokontroler? Pernahkah anda berfikir bahwa mikrokontroler itu sangat cerdas? Jika anda pernah berfikir seperti itu maka itu adalah salah. Mikrokontroler adalah suatu alat yang tidak dapat berfikir sama sekali. Dalam hal ini yang cerdas/pandai adalah pemrogram mikrokontroler itu sendiri, jadi anda sendiri yang cerdas!

Untuk dapat membuat mikrokontroler bekerja, ada banyak hal yang harus dikerjakan. Pertama adalah membuat program. Program yang dibuat harus sesuai dengan jenis mikrokontroler yang digunakan, hal ini karena tiap mikrokontroler memiliki bahasa pemrograman tersendiri yang mungkin tidak kompatibel. Setelah anda membuat program dengan menggunakan editor teks, maka anda harus mengkompilasi program tersebut sesuai dengan tipe mikrokontroler yang dipakai. Secara sederhana tujuan mengkompilasi adalah untuk merubah dari bahasa manusia ( op-code ) menjadi bahasa mikrokontroler. Setelah itu program yang telah dikompilasi ( biasanya dalam format.hex ) dimasukkan kedalam ROM dari mikrokontroler tersebut. Ada jenis mikrokontroler yang tidak memiliki ROM internal. Untuk itu anda harus memasukkan kedalam ROM ( dalam hal ini dipakai EPROM ) menggunakan EPROM programmer. Jika mikrokontroler yang anda gunakan memiliki ROM internal,maka dengan menggunakan programmer mikrokontroler, program akan dimasukkan kedalam ROM internalnya. Pada tahap ini anda sudah memiliki mikrokontroler yang dapat berfikir. Setelah memasang kristal / resonator dan catu daya, maka mikrokontroler tersebut akan bekerja sesuai dengan program yang anda berikan.

Tulis program pada editor teks Kompilasi program tersebut Masukkan program kedalam mikrokontroler Mikrokontroler ready in action Gambar 3 Tahap-tahap persiapan suatu mikrokontroler Mikrokontroler PIC16F84 Mikrokontroler PIC16F84 merupakan mikrokontroler dari keluarga PICmicro buatan Microchip Inc. Ia adalah salah satu jenis mikrokontroler dari puluhan jenis yang dikeluarkan oleh perusahaan Amerika tersebut. Keluarga mikrokontroler PICmicro tergolong lengkap, mulai dari mikrokontroler berpena 8 sampai 40 telah dibuat dengan kelengkapan ( feature ) yang berbeda-beda. Microchip selalu mengeluarkan Product Line Card yang dapat membantu kita tentang produk-produk terbaru yang telah dihasilkan oleh Microchip. Produk mikrokontroler dari Microchip tersebut memiliki beberapa tipe ROM internal yang dipakai. Ada yang menggunakan EEPROM, OTP ( One Time Programmable ) ataupun Flash memori. Mikrokontroler PIC16F84 memakai jenis memori Flash.

Basic Stamp Computer Basic Stamp computer / microcontroler adalah suatu mikrokontroler yang berukuran seperti ukuran perangko yang memiliki interpreter BASIC. Basic Stamp ini dibuat oleh Parallax Inc yang menggunakan komponen utama mikrokontroler dari keluarga PICmicro. Basic Stamp ini diprogram menggunakan bahasa BASIC bukannya bahasa assembly. Setelah program BASIC dibuat, program tersebut didownload ke Basic Stamp menggunakan serial port atau paralel port. Program tersebut akan disimpan didalam suatu chip EEPROM tersendiri, hal ini karena ROM pada mikrokontrolernya telah berisi BASIC interpreter. Program yang disimpan dalam chip EEPROM berupa token-token yang nantinya akan diintepretasikan oleh BASIC Intrepreter. Produk ini dimaksudkan agar kita tidak perlu mempelajari bahasa assembly tetapi hanya menggunakan bahasa aras tinggi yaitu BASIC ( lebih tepatnya adalah PBASIC ). BASIC Compiler Salah satu kelemahan dari Basic Stamp adalah harganya mahal. Itulah harga yang harus ditebus untuk kemudahan pemrograman. Namun bagi anda yang alergi dengan bahasa assembly dan ingin menggunakan bahasa BASIC, anda dapat memakai BASIC Compiler. Berbeda dengan Basic Stamp, Basic Compiler tidak memerlukan alat khusus / hardware tertentu, karena Basic Compiler merupakan suatu perangkat lunak. Jadi mikrokontroler itu sendiri dapat diprogram dengan memakai compiler Basic tersebut. Program kita tulis menggunakan bahasa BASIC, setelah itu program tersebut dikompilasi

menggunkan BASIC Compiler. Program yang dihasilkan dapat langsung diisikan kedalam mikrokontroler menggunakan programmer mikrokontroler yang sesuai. Berikut ini adalah salah satu contoh program mikrokontroler dengan menggunakan BASIC Compiler. Test Serial LCD Pause 1000 Serout 1, N2400, ( 254,1 ) Pause 2 Serout 1, N2400, ( Test serial LCD ) Serout 1, N2400, (254,192) Pause 2 Serout 1, N2400, ( pakai BASIC ) End Tampak bahwa program menjadi relatif sederhana karena BASIC Compiler telah membuat beberapa rutin-rutin khusus seperti Serout sebagai rutin Serial Out untuk pengiriman data secara serial. Untuk dapat menggunakan BASIC Compiler ini, maka anda harus membeli perangkat lunaknya. C Compiler Selain menggunakan BASIC Compiler, pemrograman mikrokontroler PIC16F84 dapat juga menggunakan compiler C. Bagi anda yang sudah terbiasa memprogram dengan bahasa C tentunya hal ini akan memudahkan. Namun sebagaimana BASIC Compiler, C Compiler juga harus dibeli tersendiri. Hal ini dikarenakan Microchip tidak memberikan compiler C sebagai bagian dari software gratisnya. Microchip memberikan

software compiler assembler ( MPASM ) untuk mikrokontroler PICmicro secara cumacuma. Micro-1 Computer Micro-1 Computer adalah suatu papan pengembangan untuk belajar mikrokontroler PIC16F84. Micro-1 Computer dihubungkan dengan PC melalui paralel port untuk mendownload program kepadanya. Pada board ini telah tersedia built in programmer dan sebuah sumber detak 4 MHz.

BAB II PERANGKAT KERAS PIC16F84 Keluarga mikrokontroler PICmicro Microchip telah membuat puluhan jenis mikrokontroler yang tergabung dalam keluarga mikrokontroler PICmicro. Masing-masing mikrokontroler memiliki kekhasan masing-masing yang berbeda dalam hal jenis memori yang digunakan, ukuran memori, kegunaan dan lain-lain. Ada yang menggunakan EEPROM ada pula yang menggunakan Flash memori bahkan ada yang menggunakan OTP ( memori sekali program ). Pemilihan jenis mikrokontroler sangat diperlukan berdasar desain yang akan dibuat. Namun buku ini hanya menjelaskan penggunaan salah satu jenis mikrokontroler dari keluarga PICmicro yaitu PIC16F84. Berikut ini diberikan beberapa contoh mikrokontroler dari keluarga PICmicro beserta fitur atau kelengkapannya. Tabel 1 Contoh anggota keluarga mikrokontroler PICmicro Nama Program Memori Fitur ( kelengkapan ) PIC12C508A 512 x 12 OTP, 8 pin, WDT, Internal Osc PIC1400 4096 x 14 ADC, Internal Osc, I2C PIC16C54C 512 x 12 WDT, 12 I/0, 40 MHz max PIC16F84 1024 x 14 Flash, 18 pin, Timer/Counter, WDT Tabel diatas berisi beberapa contoh mikrokontroler dari puluhan lainnya. Selain membuat mikrokontroler, Microchip juga membuat Serial EEPROM, Keelog, Linear OP AMP dan lain-lain.

Fitur Mikrokontroler PIC16F84 Dalam keluarga PICmicro, mikrokontroler PIC16F84 tidaklah terlalu istimewa. Ia bahkan tidak memiliki ADC internal ataupun interface untuk komunikasi serial atau I2C ( I square C ). Namun banyak orang yang memakai mikrokontroler PIC16F84 untuk memulai menggunakan mikrokontroler buatan Microchip. Walaupun tidak terlalu istimewa, namun mikrokontroler PIC16F84 memiliki fitur-fitur tertentu yang mungkin tidak terdapat pada mikrokontroler dari vendor lain. Diantara fitur-fitur tersebut adalah: a. Hanya memerlukan 35 set instruksi b. Semua instruksi berukuran 14-bit c. Data berukuran 8-bit d. Memori program berukuran 1024 x 14 pada Flash memori ( 1000 kali baca-tulis ) e. 68 x 8 Register kegunaan umum ( SRAM ) f. 15 Register kegunaan khusus g. Data memori berukuran 64 x 8 pada EEPROM h. Delapan tingkat stack perangkat keras i. Empat sumber sela ( interrupt ) - Pena sela luar ( INT ) - Limpahan ( overflow ) pada Timer ( TMR0 ) - Port B ( bit 4 ~ bit 7 ) bila berubah kondisi logika-nya. - Penulisan data pada EEPROM telah selesai j. Memiliki 13 buah I/O ( 5 port A, dan 8 port B )

k. Dapat langsung men-drive LED l. Terdapat Timer 8-bit dengan pembagi 8-bit m. Watchdog Timer ( WDT ) dengan internal osilator n. Fuse untuk kode pengaman o. Mode pengurangan daya ( SLEEP ) p. Dapat memakai beberapa jenis Osilator - osilator RC ( RC ) - Kristal/Resonator ( XT ) - Kristal kecepatan tinggi ( HS ) - Kristal frekuensi rendah ( LP ) q. Pemrograman didalam sistem ( In Circuit Serial Programming ). r. Berukuran fisik hanya 18 pena. Mikrokontroler PIC16F84 terbuat dengan teknologi CMOS ( Complementary Metal Oxide Semiconductor ) sehingga dapat didayai dengan baterai. Mikrokontroler ini dapat didayai dengan menggunakan catu daya sebesar 2V sampai 6V sehingga cukup fleksibel dalam pemakaiannya. Untuk memprogram mikrokontroler ini dapat dipakai berbagai macam programmer yang tersedia dipasar terutama adalah Universal Programmer. Namun Microchip sendiri telah membuat programmer untuk mikrokontroler ini yaitu PICStart. Susunan pena pada mikrokontroler PIC16F84 ditunjukkan pada gambar berikut ini.

Pin 1 RA2 RA1 Pin 18 RA3 RA0 RA4/TOCKI MCLR# VSS RB0/INT RB1 RB2 OSC1/CLKIN OSC2/CLKOUT VDD RB7 RB6 RB5 RB3 RB4 Pin 9 Pin 10 Gambar 1 Susunan pena mikrokontroler PIC16F84 Berikut adalah penjelasan dari pena-pena pada mikrokontroler PIC16F84. Nama Pena Pena Keterangan VDD 14 Sumber daya + ( positif ) VSS 5 Ground OSC1/CLKIN 16 Masukan untuk detak ( pin untuk kristal/resonator ) OSC2/CLKOUT 15 Output detak ( pin untuk kristal/resonator ) MCLR# 4 Master Clear / Reset aktif rendah ( Vpp untuk program ) RA4/TOCKI 3 Port A bit 4 / Masukan untuk timer RA0 17 Port A bit 0 RA1 18 Port A bit 1 RA2 1 Port A bit 2 RA3 2 Port A bit 3

RB0/INT 6 Port B bit 0 / Masukan sela ( interrupt ) RB1 7 Port B bit 1 RB2 8 Port B bit 2 RB3 9 Port B bit 3 RB4 10 Port B bit 4 RB5 11 Port B bit 5 RB6 12 Port B bit 6 RB7 13 Port B bit 7 Arsitektur Mikrokontroler PIC16F84 Mikrokontroler PIC16F84 menggunakan arsitektur komputer Harvard. Arsitektur ini dikembangkan oleh Universitas Harvard. Pada arsitektur ini terjadi pemisahan bus antara Bus Data dengan Bus Alamat. Keuntungannya adalah dapat digunakan suatu kata panjang ( long word ) tunggal untuk perintah yang membutuhkan hanya satu lokasi pada program memori. Seperti telah kita ketahui mikrokontroler ini memiliki data berukuran 8-bit dan instruksi berukuran 14-bit. Instruksinya memiliki 5 langkah yaitu : a. Pengambilan kode operasi ( fetch ) b. Penerjemahan kode operasi ( decode ) c. Pembacaan operand ( read ) d. Pelaksanaan kode operasi ( execute ) e. Penulisan operand ( write ).

Gambar berikut adalah gambar arsitektur Harvard secara umum dimana terjadi pemisahan antara bus data dan bus alamat. PROGRAM MEMORI CPU DATA MEMORI Gambar 2 Arsitektur Harvard Mikrokontroler PIC16F84 menggunakan set instruksi yang sedikit. Hal ini karena mikrokontroler PIC16F84 termasuk dalam golongan komputer RISC ( Reduced Instruction Set Computer ). Mikrokontroler RISC melaksanakan perintah lebih cepat dari pada alat CISC namun ia memiliki kekurangan beberapa operasi akan memerlukan lebih banyak lokasi pada program memori.

Flash Memory Program Counter 8 Level Stack RAM File Register EEPROM Data Memory Instruction Reg Addr Mux TMR0 RA4 FSR Status Reg Instructui n Decode Timing Generatio Power Up Timer Osc Start-up Timer Power On Reset Watchdog Timer ALU Mux W Reg I/O PORT RA0~RA 3 PORT B Gambar 3 Blok diagram mikrokontroler PIC16F84

ALU ( Arithmetic and Logic Unit ) ALU pada mikrokontroler PIC16F84 lebarnya 8-bit yang dapat melaksanakan operasi penjumlahan, pengurangan, pergeseran dan operasi logika. Kecuali disebutkan lain, semua operasi arithmetic memakai sistem komplemen dua. Pada operasi dua operand, biasanya satu operand adalah register kerja ( Working Register = W ). Operand lainnya adalah register file atau suatu konstanta. Pada instruksi dengan operand tunggal, operandnya bisa berupa register W atau suatu register file. W register lebarnya 8-bit tidak berada pada data memori. Reset Reset merupakan proses untuk membuat mikrokontroler kembali ke keadaan semula ( default ). Reset dapat dipandang sebagai interupsi perangkat keras yang tidak dapat ditolak oleh mikrokontroler. Pada mikrokontroler PIC16F84 dibedakan beberapa macam reset yaitu : a. Power On Reset ( POR ) Pada saat pertama kali mikrokontroler dihidupkan, maka CPU akan direset untuk pertama kali. Hal ini supaya mikrokontroler berada pada keadaan awal ( PC = 0000 ). Untuk melakukan Reset ini cukup dilakukan dengan menghubungkan pena MCLR# ke pena VDD ( atau melalui suatu resistor 4K7 ~ 10K ). b. MCLR# Reset selama operasi normal. Pada saat mikrokontroler beroperasi dan pena MCLR# mendapat sinyal rendah, maka CPU akan segera direset. c. MCLR# Reset selama SLEEP

Mikrokontroler PIC16F84 dapat menurunkan daya yang dipakainya dengan cara mengeksekusi perintah SLEEP. Pada saat mikrokontroler tidur ini ia dapat dibangunkan dengan memberikan sinyal rendah pada pena MCLR#. d. Reset Time-Out ( perhitungan waktu yang telah selesai ) dari Watchdog Timer selama operasi normal. e. Reset Time-Out dari Watchdog Timer selama prosesor dalam mode SLEEP. Beberapa register tidak direset, kondisi bit mereka tidak diketahui pada saat Power On Reset ( POR ) dan tidak berubah pada reset yang lainnya. Tetapi kebanyakan register direset ke kondisi resetnya pada saat terjadi POR, pada MCLR# atau WDT reset selama operasi normal dan pada reset MCLR# selama SLEEP. Mereka tidak dipengaruhi oleh reset WDT selama SLEEP, karena reset ini dianggap sebagai permulaan operasi normal. Ada beberapa pengecualian. Pencacah Program ( PC ) selalu direset semua ke 0000H. Bit TO# ( Time Out ) dan bit PD# ( Power Down ) diset dan direset secara berbeda pada kondisi reset yang berbeda. Pada tiap kejadian reset, masing-masing bit TO# dan PD# memiliki nilai yang lain-lain sesuai dengan tabel berikut ini.

Tabel 2 Kondisi bit PD# dan TO# setelah reset Penyebab Reset Nilai TO# Nilai PD# WDT bangun dari SLEEP 0 0 WDT time-out ( operasi normal ) 0 1 MCLR# bangun dari SLEEP U 0 Power Up 1 1 MCLR# reset selama operasi normal U U Keterangan : U = tidak berubah Bit-bit TO# dan PD# yang terdapat pada regiter STATUS dapat ditest untuk menentukan penyebab terjadinya suatu reset. Osilator ( Osc ) Suatu mikrokontroler tidak akan dapat bekerja jika tidak diberi detak ( clock ) melalui suatu osilator. Osilator adalah suatu rangkaian yang akan memberikan suatu pulsa pada mikrokontroler yang digunakan untuk mensinkronkan sistem yang ada dalam mikrokontroler tersebut. Untuk mengaktifkan sumber clock ini cukup dengan menambahkan rangkaian pasif saja seperti resistor / kapasitor ( RC Oscilator ), Kristal atau Keramic Resonator. Salah satu keistimewaan mikrokontroler PIC16F84 adalah terdapatnya 4 pilihan penggunaan osilator. Untuk pemakaian yang tidak memerlukan pewaktuan yang kritis, bahkan dapat menggunakan sepasang resitor dan kapasitor saja sebagai osilator.

VCC R PIC16F84 OSC/CLKIN C Gambar 4 PIC16F84 menggunakan RC osilator Perlu anda ketahui bahwa setelah anda memilih suatu jenis osilator ( misalnya RC Osilator ), maka anda harus memberitahukan kepada mikrokontroler pada saat proses pemrograman. Apabila osilator yang anda pasang adalah RC osilator, tetapi pada saat pemrograman anda memilih Kristal/Resonator maka mikrokontroler tidak akan dapat bekerja. Demikian pula sebaliknya. Pada osilator RC, nilai R sebaiknya antara 3 K ohm sampai 100 K ohm. Sedangkan nilai untuk C diatas 20 pf. Pada tipe osilator ini, pena CLKOUT akan mengeluarkan detak dengan frekuensi seper-empat dari frekuensi masukannya. Untuk pemakaian mikrokontroler yang memerlukan pewaktuan kritis, maka perlu menggunakan osilator kristal. Osilator kristal dapat dianggap yang paling baik diantara jenis osilator lainnya. Untuk memakai kristal maka ada komponen yang harus anda tambahkan, yaitu 2 buah kapasitor. Rangkaian dasar untuk osilator kristal dapat dilihat pada gambar berikut ini.

C1 C2 XTAL OSC1 PIC16F84 OSC2 Gambar 5 Rangkaian osilator kristal Nilai kristal yang dapat dipakai maksimum adalah 4.0 MHz atau 10 MHz, hal ini karena mikrokontroler PIC16F84 dibuat dalam dua versi frekuensi kerja. Untuk menentukan frekuensi maksimumnya dapat dilihat pada badan mikrokontroler. Jika terdapat tulisan PIC16F84-04/P berarti frekuensi maksimum yang diijinkan adalah 4.0 MHz. Sedangkan nilai kapasitor C1 dan C2 dapat dilihat pada tabel berikut.

Tabel 3 Nilai kapasitor untuk berbagai frekuensi Tipe Osilator Frekuensi Nilai C1 Nilai C2 LP 32 KHz 30 pf 30 50pF 100 KHz 15 pf 15 pf 200 KHz 0 15 pf 0 15 pf XT 100 KHz 15-30 pf 200-300pF 200 KHz 15-30 pf 100-200 pf 455 KHz 15-30 pf 15-100 pf 1 MHz 15-30 pf 15-30 pf 2 MHz 15 pf 15 pf 4 MHz 15 pf 15 pf HS 4 MHz 15 pf 15 pf 10 MHz 15 pf 15 pf Untuk pemakaian yang kompak dapat menggunakan keramik resonator. Keramik resonator ini memiliki 3 terminal yang masing-masing dihubungkan dengan : a. OSC1 b. Ground c. OSC2 Penulis sering menggunakan keramik resonator untuk membuat proyekproyeknya. Hal ini karena hanya satu komponen saja yang diperlukan yakni resonator itu sendiri.

RESONATOR OSC1 PIC16F84 OSC2 Gambar 6 Osilator menggunakan resonator Anda juga dapat menggunakan sumber detak luar untuk menghidupkan mikrokontroler PIC16F84 seperti terlihat pada gambar berikut ini. DETAK DARI SISTEM LUAR 1 2 PIC16F84 OSC1 OPEN OSC2 Gambar 7. Mikrokontroler dengan detak dari sumber luar Timer / Counter Mikrokontroler PIC16F84 dilengkapi dengan suatu Timer/Counter 8-bit. Timer/Counter ini dapat dipakai untuk beberapa keperluan. Diantaranya adalah untuk menghasilkan tundaan ( delay ), untuk menghitung pulsa yang masuk ( fungsi counter ),

penghasil baud rate dan lain-lain. Timer/Counter ini berukuran 8-bit dan dilengkapi juga dengan prescaler ( pembagi ) 8-bit. Sifat dari Timer/Counter ini adalah sebagai berikut. a. Berukuran 8-bit b. Dapat dibaca atau ditulisi ( alamat file 01H ) c. 8-bit pembagi ( prescaler ) yang dapat diprogram d. Sumber detak dapat dipilih ( detak dalam atau detak luar ) e. Terjadi sela pada limpahan dari FFH ke 00H f. Terdapat pemilihan tebing ( Edge ) untuk detak luar Diagram dari timer/counter yang digunakan oleh mikrokontroler PIC16F84 adalah sebagai berikut. Data Bus F OSC/4 RTCC PIN 0 1 0 Programmable Prescaler 1 Sync With Internal clock RTC RTE RTS PSA SET TOIF INTERUPT ON OVERFLOW Gambar 8 Blok diagram dari timer/counter

Pemilihan mode timer dilakukan dengan membersihkan ( membuat 0 ) bit RTS pada register OPTION. Pada mode timer, modul timer akan menaikkan hitungan (count up ) setiap siklus instruksi ( bila tanpa pembagi ). Mode counter dipilih dengan mengeset ( membuat 1 ) bit RTS ( OPTION<5> ). Pada mode ini counter akan menaikkan hitungan baik pada saat sisi naik atau sisi turun detak pada pena RA4/TOCKI. Pemilihan sisi naik atau sisi turun dikontrol oleh bit RTE ( OPTION <4> ). Bila bit RTE dibuat rendah maka berarti memilih sisi naik. Pembagi pada timer ini terbagi antar modul timer dengan Watchdog timer. Tugas pembagi dikontrol melalui perangkat lunak dengan bit pengontrol PSA ( OPTION<3> ). Membersihkan bit PSA akan menempatkan pembagi ke timer. Pembagi tidak dapat dibaca atau ditulisi. Saat pembagi dipakai untuk pemakaian timer, pembagian dengan nilai 1 : 2, 1 : 4 sampai 1 : 256 dapat dibuat. Saat detak luar digunakan untuk timer, detak tersebut akan diserempakkan dengan fasa detak internal. Untuk hal tersebut masukan detak luar harus memenuhi persyaratan. Juga terdapat tundaan dari tersediannya sisi detak luar dengan naikknya timer. Berdasar gambar berikut, sinkronisasi dilakukan setelah proses pembagian.

Input Clock Luar Atau Keluaran Prescaler Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Clock Luar/Keluaran Prescaler setelah sampling Naikkan TMR0 TMR0 R R+1 R+2 Gambar 9 Timer/Counter dengan masukan detak luar Keluaran dari pembagi akan disampling dua kali setiap siklus instruksi untuk mendeteksi kenaikan ( rising ), penurunan ( falling ) sisi. Karena keluaran pembagi diserempakkan dengan detak internal, ada suatu tundaan kecil saat terjadinya sisi detak dengan terjadinya kenaikan pada modul timer/counter. Pembagi ( prescaler ) merupakan suatu counter 8-bit yang digunakan sebagai pembagi bagi modul timer/counter. Perlu diingat bahwa hanya ada satu pembagi yang dipakai bersama antara modul timer/counter dengan Watchdog Timer. Bila pembagi telah dipakai oleh timer, maka Watchdog Timer tidak dapat menggunakannya. Bit-bit yang mengatur pembagi adalah bit PSA, bit PS2..PS0 pada register OPTION <3..0>.

Watchdog Timer ( WDT ) Watchdog Timer diwujudkan dalam bentuk free running osilator pada chip. Hal ini menyebabkan tidak diperlukannya komponen luar untuk mengaktifkan WDT. WDT akan tetap berjalan walaupun detak pada pena OSC1 dan OSC2 telah berhenti karena instruksi SLEEP dijalankan. Suatu time-out ( perhitungan waktu yang telah selesai ) dari WDT akan menghasilkan suatu kondisi reset. Untuk melumpuhkan WDT secara permanen dilakukan dengan membuat 0 pada fuse konfigurasi pada saat pemrograman mikrokontroler. Nilai nominal periode time-out dari WDT adalah 18 ms ( tanpa pembagi ). Periode time-out dipengaruhi oleh temperature, VDD dan variasi dari part ke part. Jika periode yang panjang diinginkan, suatu pembagi dengan pembagian sampai 1 : 128 dapat dilakukan dengan melalui perangkat lunak pada register OPTION. Periode time-out sampai 2,3 detik dapat direalisasikan. Memori pada PIC16F84 Mikrokontroler PIC16F84 memakai arsitektur Harvard yang memisahkan program memori dan data memori. Jenis Flash memori yang dipakai memungkinkan kita untuk memprogram-hapus sampai 1000 kali tanpa merusak alat. Pencacah program ( PC ) pada mikrokontroler ini memiliki lebar 13-bit dan mampu mengalamati 8K x 14 ruang program memori. Namun hanya permulaan 1K x 14 ( 0000H 03FFH ) yang diwujudkan secara fisik. Vektor reset memiliki alamat 0000H, yang berarti bila terjadi reset maka pencacah program akan diisi dengan 0000H. Sedangkan vector sela adalah 0004H yang berarti bila terjadi sela, maka pencacah

program akan diisi dengan 0004H. Peta program memori dapat dilihat pada gambar berikut. Call Retlw PC<12:0> 13 Stack Level 1 Stack Level 2 Stack Level 8 0000h Reset Vektor 0004h 0005h Interupt Vektor On Chip Program Memory 03FFh Gambar 10 Peta program memori dan stack Pencacah program ( PC ) yang lebarnya 13-bit terdiri dari byte rendah yang diwujudkan dalam register PCL yang bersifat dapat dibaca dan ditulisi. Sedangkan byte tinggi, PCH tidak dapat langsung dibaca atau ditulisi. Byte tinggi dari PC hanya dapat ditulisi melalui register PCLATH ( alamat 0AH ). Saat pencacah program diisi dengan nilai baru selama pelaksanaan instruksi CALL, GOTO atau penulisan ke PCL, bit tinggi dari PC dimuati dari PCLATH.

PC 12 8 7 0 INST with PCL (02h) as dest 5 PCLATH(4:0) ALU Result 8 PCLATH 12 11 10 0 GOTO,CALL 2 PCLATH(4:3) 11 Opcode(10: PCLATH Gambar 11 Pemuatan Pencacah Program ( PC ) pada situasi yang berbeda Stack Mikrokontroler PIC16F84 memiliki 8 ruang x 13-bit stack perangkat keras. Ruang stack bukan merupakan bagian ruang program atau data memori. Stack pointernya tidak dapat dibaca atau ditulisi. Pencacah Program didorong ke stack saat instruksi CALL dilaksanakan atau suatu permintaan sela diketahui. Isi stack akan disembulkan ( popped ) pada pelaksanaan instruksi RETURN, RETLW atau RETFIE. Register PCLATH ( 0AH ) tidak dipengaruhi oleh operasi PUSH dan POP.

Organisasi Register File Register file diorganisasikan sebagai 128 x 8. Register ini dapat diakses baik secara langsung maupun tidak langsung melalui FSR ( File Select Register ). Ada beberapa bit pemilih halaman ( page ) register file pada register STATUS yang memungkinkan memilih sampai 4 halaman. Data memori hanya berukuran 2FH. Dua belas lokasi pertama digunakan untuk memetakan register fungsi khusus. Lokasi antara 0CH sampai 2FH merupakan register kegunaan umum yang diwujudkan sebagai RAM statis. Beberapa register fungsi khusus dipetakan di halaman 1. 00 Indirect addr Indirect addr 80 01 RTCC OPTION 81 02 PCL PCL 82 03 STATUS STATUS 83 04 FSR FSR 84 05 PORT A TRIS A 85 06 PORT B TRIS B 86 07 87 08 EEDATA EECON1 88 09 EEADR EECON2 89 0A 0B 0C 2F PCLATH INTCON 36 General Purpose PCLATH INTCON Mapped in page 0 8A 8B 8C AF PAGE 0 PAGE 1 Gambar 12 Peta register file

Mode Pengalamatan Register file dapat dialamati secara langsung maupun tidak langsung. Pada kedua mode pengalamatan itu, lebih dari 512 lokasi register dapat dialamati. Beberapa mode pengalamatan adalah : a. Mode pengalamatan langsung Suatu alamat langsung 9-bit yang merupakan rangkaian 7-bit alamat langsung dari kode operasi ( op code ) dan dua bit ( RP1, RP0 ) dari register STATUS. b. Mode pengalamatan tak langsung Pengalamatan tak langsung dimungkinkan dengan menggunakan alamat file 00H ( INDF ). Perintah yang menggunakan INDF sebagai register file sebenarnya menghubungi data yang ditunjuk oleh FSR ( File Select Register ). Membaca INDF ( dirinya sendiri ) secara tidak langsung akan menghasilkan 00H. Menulis ke INDF secara tidak langsung menghasilkan suatu no operation, walaupun bit STATUS akan terpengaruh. Suatu alamat 9-bit yang efektif tersusun dari rangkaian 8-bit FSR dan bit IRP pada register STATUS. Beberapa register fungsi khusus dipetakan pada halaman 1. Adalah sangat perlu untuk mengeset bit RP0 untuk mengalamatinya. Bit RP1 dan bit IRP pada intinya tidak diperlukan.

RP1 RP0 6 from opcode 0 IRP 7 (FSR) 0 Page select Location select Page select Location select 00 00 01 10 11 00 0B 0C 2F 30 7F 7F Gambar 13 Pengalamatan langsung / tidak langsung Register Kegunaan Khusus Mikrokontroler PIC16F84 memiliki beberapa register khusus. Masing-masing register memiliki fungsi sesuai dengan namanya. Keseluruhan register dapat dilihat pada tabel berikut ini.

Tabel 4 Daftar Register Kegunaan khusus PAGE 0 00 IND0 Uses contens of FSR to address data memory 01 TMR0 8 bit Real Time Clock Counter 02 PCL Low Order 8 bits of PC 03 STATUS IRP RP1 RP0 TO PD Z DC C 04 FSR Indirect data memory, address pointer 0 05 PORTA - - - RA4/RT RA3 RA2 RA1 RA0 06 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 07 08 EEDATA EEPROM Data Register 09 EEADR EEPROM Address Register 0A PCLATH Holding Register for High Byte of PC 0B INTCON GIE EEIE TOIE INTE RBIE TOIF INTF RBIF PAGE 1 80 IND0 Mapped in Page 0 81 OPTION RBPU# INTEDG RTS RTE PSA PS2 PS1 PS0 82 PCL Mapped in page 0 83 STATUS Mapped in page 0 84 FSR Mapped in page 0 85 TRISA PORTA data direction register 86 TRISB PORTB data direction register

88 EECON1 - - - EEIF WRERR WREN WR RD 89 EECON2 not a physical register 8A PCLATH mapped in page 0 8B INTCON mapped in page 1 Keterangan mengenai register tersebut adalah sebagai berikut. 1. Register STATUS Register ini berisi bit-bit yang merupakan status dari mikrokontroler, misalnya bit pemilihan halaman, bit carry/borrow dan bit mode power down. Susunan bit-bit pada register STATUS MSB LSB Sifat R/W R/W R/W R R R/W R/W R/W Bit IRP RP1 RP0 TO# PD# Z DC C Keterangan : C : Bit Carry / Borrow# Untuk instruksi ADDWF, SUBWF, ADDLW dan SUBLW. Bit ini diset jika ada suatu bawaan ( carry ) dari bit msb suatu hasil operasi ( resultant ). DC : Bit Digit Carry / Borrow# Untuk instruksi ADDWF, SUBWF, ADDLW dan SUBLW. Bit ini diset jika ada suatu bawaan ( carry ) dari bit ke-4 dari suatu hasil operasi ( resultant ). Z : Bit Zero

Bit ini akan diset jika hasil dari suatu operasi aritmetika atau logika adalah nol. Instruksi MOVF akan mempengaruhi bit ini. PD# : Bit Power Down Bit ini diset ke 1 selama power up atau oleh instruksi CLRWDT. Bit ini direset ke 0 oleh instruksi SLEEP. TO# : Bit Time-Out Bit ini diset ke 1 selama power-up dan oleh instruksi CLRWDT dan SLEEP. Bit ini direset ke 0 oleh time-out dari Watchdog Timer. RP1,RP0 : Bit pemilih halaman register untuk pengalamatan langsung 00 : halaman 0 ( 00H 7FH ) 01 : halaman 1 ( 80H FFH ) 10 : halaman 2 ( 100H 17FH ) 11 : halaman 3 ( 180H 1FFH ) Tiap halaman berisi 128 byte. Hanya RP0 yang berguna bagi PIC16F84. Bit RP1 dapat dipakai sebagai bit kegunaan umum. IRP : Bit pemilih halaman untuk pengalamatan tak langsung IRP : 0 - halaman 0, 1 ( 00H FFH ) 1 - halaman 2, 3 ( 100H 1FFH ) Bit ini tidak dipakai untuk PIC16F84. Bit ini dapat dipakai sebagai bit kegunaan umum. 2. Register INTCON Register ini berisi bit-bit untuk mengontrol sela ( interupsi ). Susunan bit-bit pada register INTCON adalah sebagai berikut.

MSB LSB Sifat R/W R/W R/W R/W R/W R/W R/W R/W Bit GIE EEIE TOIE INTE RBIE TOIF INTF RBIF Keterangan : RBIF : bendera sela untuk perubahan pada port B. Bit ini akan diset jika masukan Port B <7:4> ( Port B bit 4 sampai bit 7 ) berubah kondisinya. Direset oleh perangkat lunak INTF : Bendera sela INT. Bit ini diset saat sela INT terjadi. Reset oleh perangkat lunak. TOIF : Bendera sela limpahan Timer. Bit ini diset saat terjadi limpahan hitungan pada Timer. RBIE : Bit pengaktif sela RBIF. Bila RBIE = 0 akan melumpuhkan sela RBIF. Bila RBIE = 1 akan mengaktifkan sela RBIF. INTE : Bit pengaktif sela INT. Bila INTE = 0 maka sela INTF dilumpuhkan. Bila INTE = 1 mengaktifkan sela INTF. TOIE : Bit pengaktif sela Timer. Bila TOIE = 0 maka akan melumpuhkan sela TOIF. Bila TOIE = 1 akan mengaktifkan sela TOIF. EEIE : Bit pengaktif sela penulisan EEPROM. Bila EEIE = 0 akan melumpuhkan sela EEIF. Bila EEIE = 1 akan mengaktifkan sela EEIF. GIE : Bit pengaktif sela global. GIE = 0 sela akan dilumpuhkan. GIE = 1 sela akan diaktifkan. 3. Register OPTION

Register OPTION ( alamat 81H ) bersifat dapat dibaca dan ditulisi yang berisi berbagai bit pengontrol untuk konfigurasi pembagi ( prescaler ), pemilih sisi sela luar INT, pemilih detak Timer dan bit pengaktif pull-up pada port B. MSB LSB Sifat R/W R/W R/W R/W R/W R/W R/W R/W Bit RBPU# INTEDG RTS RTE PSA PS2 PS1 PS0 Keterangan : PS2 PS1 PS0 Timer Rate WDT Rate 0 0 0 1 : 2 1 : 1 0 0 1 1 : 4 1 : 2 0 1 0 1 : 8 1 : 4 0 1 1 1 : 16 1 : 8 1 0 0 1 : 32 1 : 16 1 0 1 1 : 64 1 : 32 1 1 0 1 : 128 1 : 64 1 1 1 1 : 256 1 : 128 PSA : Bit pemilih fungsi Timer atau Watchdog. PSA = 0 terpilih Timer, PSA = 1 terpilih Watchdog Timer. RTE : Pemilihan tebing sinyal Timer RTE = 0 : dinaikkan pada transisi rendah ke tinggi pada pena RA4/TOCKI

RTE = 1 : dinaikkan pada transisi tinggi ke rendah pada pena RA4/TOCKI RTS : Bit pemilih sumber sinyal untuk Timer. RTS = 0 : memilih detak internal RTS = 1 : memilih transisi pada pena RA4/TOCKI ( detak luar ) INTEDG : Bit pemilih tebing ( edge ) pada sela INT INTEDG = 0 : sela terjadi pada tebing turun INTEDG = 1 : sela terjadi pada tebing naik RBPU# : Bit pemilih pull-up pada Port B RBPU# = 0 RBPU# = 1 : pull-up diaktifkan : pull-up dilumpuhkan. 4. Register EECON1 Register ini merupakan register pengontrol EEPROM Data Memori. Susunan bitbit pada register ini adalah sebagai berikut. MSB LSB Sifat U U U R/W R/W R/W R/W R/W Bit - - - EEIF WRERR WREN WR RD Keterangan : RD : bit pengontrol pembacaan. Jika RD = 1 memulai pembacaan EEPROM. RD dihapus oleh perangkat keras. WR : bit pengontrol penulisan. Jika WR = 1 memulai siklus penulisan. Bit ini dihapus oleh perangkat keras jika penulisan telah selesai.

WREN : bit pengaktif penulisan EEPROM. Bila WREN = 0 melumpuhkan penulisan ke data EEPROM. Bila WREN = 1 memungkinkan penulisan ke EEPROM. WRERR : bendera kesalahan diset jika penulisan digagalkan oleh suatu reset MCLR# ( selama normal atau SLEEP ) atau oleh reset WDT selama operasi normal. EEIF : bendera sela penulisan telah selesai. Set saat penulisan telah selesai. Harus direset oleh perangkat lunak. Data Memori EEPROM Mikrokontroler PIC16F84 dilengkapi dengan 64 x 8 data memori EEPROM yang dapat dibaca dan ditulisi selama operasi normal. Memori ini tidak secara langsung dipetakan pada ruang register file. Memori ini dapat diakses melalui 2 register yaitu EEDATA ( 08H ) yang memegang data 8-bit untuk operasi baca / tulis dan register EEADR ( 09H ) yang memegang alamat lokasi EEPROM yang akan diakses. Jumlah 64 byte adalah pada jangkauan 0H sampai 63H. Sebagai tambahan ada dua register kontrol yaitu EECON1 ( 88H ) dan EECON2 ( 89H ). Regsiter EECON1 merupakan register kontrol dengan 5 bit bawah diimplementasikan secara fisik. 3-bit atas tidak diwujudkan dan dibaca sebagai 0. Register ini berisi bit-bit pengontrol operasi pembacaan ( RD ), penulisan ( WR ), pengaktif / pelumpuh penulisan dan lain-lain. Register EECON2 bukanlah suatu register fisik. Membaca EECON2 akan menghasilkan 0. Untuk membaca suatu lokasi data memori, pemakai harus menuliskan alamat ke register EEADR dan kemudian mengeset bit kontrol RD ( EECON < 0 > ). Data tersedia pada siklus berikutnya pada register EEDATA, yang dapat dibaca pada instruksi

selanjutnya. Register EEDATA akan memegang nilai ini sampai penulisan berikutnya atau dituliskan ke suatu register oleh pemakai. Untuk menulis suatu data ke lokasi EEPROM, pemakai pertama kali harus menuliskan alamat ke register EEADR dan data ke EEDATA. Kemudian pemakai harus mengikuti urutan khusus berikut ini untuk menginisialisasi penulisan sebagai berikut. Movlw 55H Movwf EECON2 Movlw AAH Movwf EECON2 Bsf EECON1, WR ; mulai penulisan Penulisan tidak akan diinisialisasi jika urutan diatas tidak diikuti dengan waktu yang tepat. Pemakai harus melumpuhkan sela selama kode segment tersebut. Pada akhir penulisan, bit WR akan dibersihkan oleh perangkat keras dan bit EEIF diset. EEIF harus dibersihkan melalui perangkat keras. Sela ( Interupsi ) Mikrokontroler PIC16F84 memiliki empat sumber sela yaitu. 1. Sela luar pada pena RB0/INT Sela luar pada pena RB0/INT adalah diaktifkan oleh sisi ( edge ) baik sisi naik ( jika INTEDG = 1 ) maupun sisi turun ( INTEDG = 0 ). Bila suatu sisi yang sahih muncul pada pena RB0/INT, bit INTF akan diset. Sela dapat dilumpuhkan dengan membersihkan bit kontrol INTE. Bit INTF harus

dibersihkan oleh program pada rutin pelayanan sela sebelum mengaktifkan lagi sela tersebut. Sela luar ini dapat membangunkan prosesor dari keadaan SLEEP jika bit INTE diset sebelum terjadinya SLEEP. 2. Sela limpahan pada Timer Suatu limpahan ( overflow ) yaitu dari FFH ke 00H pada timer akan mengeset bit TOIF. Sela ini dapat diaktifkan atau dilumpuhkan dengan mengeset/meng-clear bit TOIE. 3. Sela penulisan EEPROM telah selesai Bit bendera sela penulisan EEPROM EEIF ( pada register EECON1 ) akan diset bila penulisan ke EEPROM telah selesai. Sela ini dapat dihalangi dengan membersihkan bit EEIE. 4. Sela karena terjadinya perubahan keadaan pada pena Port B bit 4 bit 7. Suatu perubahan keadaan pada pena PortB <7:4> akan mengeset bit RBIF. Sela ini dapat diaktifkan/dilumpuhkan dengan mengeset/menbersihkan bit RBIE. Masalah sela ini dikontrol oleh register khusus yaitu INTCON pada alamat 0BH. Register ini mencatat permintaan sela individual pada bit benderanya. Register ini juga memuat bit pengaktif sela individual atau sela global. Bit pengaktif sela global ( GIE = Global Interupt Enable ) pada register INTCON<7> mengaktifkan semua sela yang tidak dihalangi atau melumpuhkan ( jika dibersihkan ) semua sumber sela. Sela individual dapat dilumpuhkan melalui bit pengaktif individual pada register INTCON. Bit GIE dibersihkan pada saat terjadi reset. Instruksi RETFIE memungkinkan pemakai kembali dari sela dan mengaktifkan sela pada saat itu juga.

Saat suatu sela menanggapi suatu permintaan sela, bit GIE akan dibersihkan untuk mencegah sela selanjutnya yang muncul, alamat kembali akan didorong ke stack dan pencacah program ( PC ) akan diisi dengan nilai 0004H ( vector sela ). Untuk menentukan sumber sela dapat dilakukan dengan cara polling bit bendera sela. Bit bendera sela harus dibersihkan oleh perangkat lunak sebelum mengaktifkan sela untuk mencegah permintaan sela yang berkelanjutan. Port Mikrokontroler PIC16F84 Port pada mikrokontroler digunakan untuk berhubugan dengan dunia luar. Bila mikrokontroler hendah memantau suatu keadaan sensor atau mikrokontroler hendak menghidupkan suatu LED, maka dipakailah port. Untuk meningkatkan performa mikrokontroler dan juga untuk menghemat jumlah pena, umumnya port pada mikrokontroler dibuat bersifat bi-directional ( dapat bersifat sebagai masukan atau keluaran ). Untuk dapat menentukan suatu port bersifat masukan atau sebagai keluaran, maka dilakukan pada tahap inisisalisasi. Inisialisasi tersebut akan memberitahukan kepada CPU mikrokontroler bahwa suatu port x telah dibuat sebagai masukan dan port lainnya sebagai keluaran. Port mikrokontroler umumnya berukuran 8 jalur ( lines ). Hal ini dikarenakan lebar data adalah 8-bit. Namun masing-masing jalur dapat dipakai sendiri-sendiri.

Port A Port A memiliki lebar 5-bit yang dituliskan sebagai RA<4..0>. Pena RA0..RA4 bersifat bidirectional ( dua arah ) yang mana RA4 memiliki sifat keluaran kolektor terbuka. Port A merupakan register file dengan alamat 05H. Untuk mengatur Port A ini sebagai masukan atau sebagai keluaran digunakan register tertentu yaitu TRISA yang berada pada alamat 85H. Bila bit pada TRISA diisi dengan 0 maka port yang bersangkutan akan menjadi port keluran. Sebaliknya bila diisi dengan 1 maka port tersebut menjadi port masukan. DATA BUS WR PORT WR TRIS D Q CK Q# D Q CK Q# NOT OR AND VDD buffer I/O PIN NOT Q D CK RD PORT NOT Gambar 14 Blok diagram dari pena RA0 RA3 Karena pena RA4 bersifat open kolekor, maka ia memiliki rangkaian tersendiri.

Data Bus D Q CK Q# AND RA4 D Q CK Q# BUFF NOT BUFF Q D RD PORT TMR0 clock input NOT CK Gambar 15 Blok diagram dari pena RA4 Port B Port B merupakan port dua arah dengan lebar 8-bit. Port B merupakan register file dengan alamat 06H. Bit pengatur arah untuk Port B dikontrol oleh register TRISB ( alamat 86H ). Suatu 1 pada TRISB akan mengeset pena port yang bersangkutan sebagai masukan ( input ). Membaca register Port B adalah membaca keadaan dari pena yang bersangkutan, tetapi menulis ke Port B berarti menulis ke penaut ( Port Latch ). Tiap pena Port B memiliki suatu pull-up internal yang dapat diaktifkan menggunakan perangkat lunak. Pull-up ini secara otomatis dimatikan bila port dipakai sebagai keluaran

( output ). Selanjutnya suatu bit kontrol RPBU# ( register OPTION bit 7 ) dapat mematikan pull-up jika bit tersebut diset. Pull-up tersebut dilumpuhkan / dimatikan pada saat terjadi Power On Reset. Port B memiliki kelengkapan sela pada perubahan masukan pada pena RB<7..4>. Saat dikonfigurasikan sebagai masukan, masukan pada pena tersebut akan disampling dan ditahan ( latch ). Masukan baru dibandingkan dengan nilai yang berada pada latch pada tiap siklus instruksi. Suatu keluaran aktif tinggi dihasilkan jika terjadi perbedaan antara pena dengan latch. Beberapa instruksi beroperasi sebagai baca dilanjutkan menulis atau read followed by write. Instruksi BCF dan BSF membaca keadaan port ke CPU, melaksanakan operasi bit dan mengeluarkan hasilnya.

BAB III PERANGKAT LUNAK PIC16F84 Pendahuluan Mikrokontroler adalah alat yang bersifat programmable. Ia dapat diprogram untuk mengontrol suatu alat. Untuk dapat memanfaatkan mikrokontroler tersebut, ia harus diprogram sesuai dengan jenis pekerjaan yang harus ditanganinya. Proses tersebut dinamanakan memprogram. Berbeda dengan rangkaian logika diskrit, mikrokontroler dapat dirubah unjuk kerjanya dengan hanya merubah program ( software )-nya. Program suatu mikrokontroler biasanya dimasukkan kedalam suatu ROM / EPROM. Program tersebut berada dalam ROM / EPROM berwujud kode-kode biner 1 dan 0. Kode-kode tersebut diambil oleh mikrokontroler yang selanjutnya akan diterjemahkan dan dilaksanakan oleh mikrokontroler yang bersangkutan. Kode-kode ini harus diketahui oleh mikrokontroler tersebut. Apabila suatu program untuk mikrokontroler X dipakai oleh mikrokontroler Y, tentu saja hal ini akan menyebabkan mikrokontroler Y tidak dapat bekerja dengan baik. Adalah tidak mungkin bagi pembuat program untuk mengingat deretan angka 1 dan 0 untuk membuat suatu program. Untuk itu, untuk memudahkan membuat program maka dibuatlah suatu mnemonic ( bantuan ingatan ). Mnemonic merupakan kode suatu operasi yang diwujudkan dengan kata sehingga lebih mudah untuk diingat dan lebih manusiawi.

Perangkat lunak PIC16F84 Mikrokontroler PIC16F84 merupakan mesin RISC. Dengan demikian set instruksi jumlahnya hanya sedikit saja. Tiap instruksi pada mikronontroler PIC16F84 merupakan kata 14-bit yang terbagi menjadi suatu kode operasi yang menjelaskan tipe instruksi dan satu atau lebih operand yang nantinya menjelaskan operasi dari instruksi tersebut. Karana tiap-tiap instruksi berukuran 14-bit, maka kode operasi bisa dituliskan menjadi agak panjang. Karena itu nanti anda akan menemui mnemonic seperti : addwf, andwf, movwf, decfsz dan lain-lain. Set instruksi mikrokontroler PIC16F84 dibagi menjadi : a. instruksi orientasi byte b. instruksi orientasi bit c. instruksi literal dan operasi kontrol Untuk instruksi berorientasi bye, f menunjukkan suatu register file dan d menunjukkan suatu tujuan. Bila d adalah nol ( 0 ) maka suatu hasil akan ditempatkan pada register W ( akumulator ). Namun bila d adalah satu ( 1 ) maka hasil akan ditempatkan pada suatu regiter file yang dijelaskan pada instruksi yang bersangkutan. Untuk instruksi orientasi bit, b menunjukkan medan bit yang menunjukkan nilai bit yang dipengaruhi oleh operasi tersebut. Sedangkan f adalah menunjukkan nilai file dimana bit tersebut berlokasi. Untuk instruksi literal dan operasi kontrol k menunjukkan suatu 8 atau 11 bit suatu nilai ( konstanta ) atau nilai literal.

Set Instruksi PIC16F84 Berikut ini adalah format instruksi untuk mikrokontroler PIC16F84. a. Format untuk instruksi berorientasi byte. 13 8 7 6 0 opcode d f(file#) Dimana : d = 0 untuk tujuan register W. d = 1 untuk tujuan f f = 7-bit alamat register file b. Format untuk instruksi berorientasi bit adalah 13 10 9 7 6 0 opcode b(bit#) f(file#) Dimana : b = 3-bit alamat bit f = 7-bit alamat register file

c. Format untuk instruksi literal dan operasi kontrol 13 8 7 0 opcode k ( LITERAL ) Dimana : k = 8-bit nilai langsung Beberapa simbol yang perlu diketahui dalam penulisan program untuk mikrokontroler PIC16F84 adalah sebagai berikut. f alamat register file ( 0x00 sampai 0x7F ) W Working Register ( Accumulator ) b k alamat bit pada file register 8-bit medan literal, konstanta atau label x don t care ( 0 atau 1 ) d tujuan. d = 0 tujuan W register, d = 1 tujuan register f. label nama suatu label TOS Top of Stack PC Program Counter ( Pencacah Program ) PCLATH Program Counter High Latch GIE WDT Global Interupt Enable Watchdog Timer TO# Bit Time-Out ( active low )

PD# Bit Power Down ( active low ) dest tujuan W atau register file [ ] pilihan ( ) isi < > medan bit suatu register ditujukan kepada Keseluruhan instruksi untuk mikrokontroler PIC16F84 adalah sebagai berikut. 1. addlw Add literal to W Penulisan : [label] addlw k Operand : 0 <= k <= 255 Operasi : ( W ) + k W Keterangan : isi dari register W dijumlahkan dengan 8-bit literal k dan hasilnya diletakkan pada W register. Contoh : addlw 0x15 2. addwf Add W to f Penulisan : [label] addwf f,d Operand : 0 <= f <= 127 Operasi : ( W ) + ( f ) ( dest ) Keterangan : Jaumlahkan isi dari W register dengan isi file register ( f ). Jika d adalah 0 hasilnya disimpan pada register W. Jika d adalah 1 hasil disimpan kembali ke register f.

3. andlw AND literal and W Penulisan : [ label ] andlw k Operand : 0 <= k <= 255 Operasi : ( W ) AND ( k ) W Keterangan : isi dari W register di-and-kan dengan 8-bit literl k. Hasilnya ditempatkan di W register. 4. andwf AND W with f Penulisan : [ label ] andwf f,d Operand : 0 <= f <= 127, d = [ 0 atau 1 ] Operasi : ( W ) AND ( f ) dest Keterangan : register W di-and-kan dengan register f. Jika d = 0 hasil disimpan di W register. Jika d = 1 hasil disimpan di register f. 5. bcf Bit Clear f Penulisan : [ label ] bcf f, b Operand : 0 <= f <= 127, 0 <= b <= 7 Operasi : 0 f <b> Keterangan : Bit b pada register f direset ke 0. 6. bsf Bit Set f Penulisan : [ label ] bsf f, b Operand : 0 <= f <= 127, 0 <= b <= 7 Operasi : 1 f<b> Keterangan : Bit b pada register f diset ke 1.

7. btfsc Bit Test, skip if Clear Penulisan : [ label ] btfsc f,b Operand : 0 <= f <= 127, 0 <= b <= 7 Operasi : lompat jika ( f<b> ) = 0 Keterangan : jika bit b pada register f adalah 0 maka instruksi selanjutnya dilompati. 8. btfss Bit Test, skip if Set Penulisan : [ label ] btfss f,b Operand : 0 <= f <= 127, 0 <= b <= 7 Operasi : lompati jika ( f<b> ) = 1 Keterangan : Jika bit b pada register f adalah 1, maka instruksi selanjutnya dilompati. 9. call Subroutine call Penulisan : [ label ] call k Operand : 0 <= k <= 2048 Operasi : (PC) + 1 TOS k PC(10:0) (PCLATH<4:3>) PC<12:11> Keterangan : Subrutin call. Pertama alamat kembali ( PC+1) didorong ke stack. Alamat langsung 11 bit diisikan ke PC (10:0). Bit atas pada PC diambil dari PCLATH.

10. clrf Clear f Penulisan : [ label ] clrf f Operand : 0 <= f <= 127 Operasi : 00H f 1 Z Keterangan : Isi dari register f dibersihkan dan bit Z diset. 11. clrw Clear W register Penulisan : [ label ] clrw Operand : tidak ada Operasi : 00H (W) 1 Z Keterangan : W register dibersihkan. Bit Zero ( Z ) diset. 12. clrwdt Clear Watchdog Timer Penulisan : [ label ] clrwdt Operand : tak ada Operasi : 00H WDT 0 prescaler WDT 1 TO# 1 PD# Keterangan : instruksi clrwdt mereset watchdog timer. Juga mereset pembagi wdt. Bit PD# dan TO# diset.

13. comf Complement f Penulisan : [ label ] comf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : komplement ( f ) dest Keterangan : isi register f dikomplemenkan. Jika d = 0 hasil disimpan pada W. Jika d = 1 hasil disimpan di register f. 14. decf Decrement f Penulisan : [ label ] decf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : ( f ) - 1 ( dest ) Keterangan : mengurangkan satu ( decrement ) register f. Jika d = 0 hasil disimpan pada register W. Jika d = 1 hasil disimpan kembali pada register f. 15. decfsz Decrement f, skip if zero Penulisan : [ label ] decfsz f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : ( f ) 1 d, lompati jika hasil = 0 Keterangan : isi register f dikurangi satu. Jika d = 0 hasil disimpan di W. Jika d = 1 hasil diletakkan pada register f. Jika hasil 0, instruksi berikutnya tidak dilaksanakan ( dibuang ). Suatu instruksi NOP akan dilaksanakan,. 16. goto Unconditional Branch Penulisan : [ label ] goto k Operand : 0 <= k <= 2048 Operasi : k PC <10:0 >

( PCLATH<4:3> ) PC<12:11> Keterangan : goto merupakan instruksi bercabang tanpa syarat. Sebelas bit nilai langsung diisikan ke PC<10:0>. Bit atas dari PC diisikan dari PCLATH<4:3> 17. incf Increment f Penulisan : [ label ] incf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : ( f ) + 1 ( dest ) Keterangan : isi dari register f dinaikkan ( increment ). Jika d = 0 hasil ditempatkan pada W. Jika d = 1 hasil diletakkan di register f. 18. incfsz Increment f, skip if zero Penulisan : [ label ] incfsz f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : ( f ) + 1 ( dest ), lompati jika hasil = 0 Keterangan : isi dari register f dinaikkan ( increment ). Jika d = 0 hasil diletakkan di W. Jika d = 1 hasil diletakkan di register f. Jika hasilnya 0 instruksi selannjutnya yang siap diambil tidak dilaksanakan. Suatu instruksi NOP dilaksanakan. 19. iorlw Inclusive OR Literal with W Penulisan : [ label ] iorlw k Operand : 0 <= k <= 255 Operasi : ( W ) OR ( k ) ( W )

Keterangan : isi dari register W di-or-kan dengan 8-bit literal k. Hasil disimpan pada register W. 20. iorwf Inclusive OR W with f Penulisan : [ label ] iorwf f,d Operand : 0 <= f <= 127, d = [0,1] Operasi : ( W ) OR ( f ) ( dest ) Keterangan : isi register W di OR kan dengan isi register f. Jika d = 0 hasil disimpan di W. Jika d = 1 hasil disimpan di register f. 21. movlw Move Literal to W Penulisan : [ label ] movlw k Operand : 0 <= k <= 255 Operasi : k ( W ) Keterangan : 8-bit literal k dimuatkan ke register W. 22. movf Move f Penulisan : [ label ] movf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : ( f ) ( dest ) Keterangan : isi dari register f dipindah ke tujuan d. Jika d = 0 tujuan adalah W. Jika d = 1 tujuan adalah register itu sendiri. d = 1 berguna untuk mengetest suatu register f karena bit STATUS Z terpengaruh. 23. movwf Move W to f Penulisan : [ label ] movwf f Operand : 0 <= f <= 127

Operasi : ( W ) ( f ) Keterangan : pindahkan data dari register W ke register f. 24. nop No Operation Penulisan : [ label ] nop Operand Operasi : tidak ada : tidak ada Keterangan : tidak ada operasi. 25. option Load Option Register Penulisan : [ label ] option Operand : tidak ada Operasi : W option Keterangan : isi dari W register dimuatkan ke register OPTION. 26. retfie Return from Interupt Penulisan : [ label ] retfie Operand : tidak ada Operasi : TOS PC 1 GIE Keterangan : kembali dari sela. Stack disembulkan dan Top of Stack ( TOS ) dimuatkan ke PC. Sela diaktifkan dengan mengeset bit GIE. 27. retlw Return Literal to W Penulisan : [ label ] retlw k Operand : 0 <= k <= 255 Operasi : k W, TOS PC

Keterangan : register W dimuati oleh 8-bit literal k. PC dimuati dari TOS. 28. return Return from Subroutine Penulisan : [ label ] return Operand : tidak ada Operasi : TOS PC Keterangan : kembali dari sela. Stack disembulkan dan TOS dimuatkan ke PC. 29. rlf Rotate Left f through Carry Penulisan : [ label ] rlf f,d Operand : 0 <= f <= 127, d = [0,1] Operasi : f<n> d<n+1>, f<7> C, C d<0> Keterangan : isi dari register f digeser 1-bit kekiri melalui bendera carry. Jika d = 0 hasil diletakkan ke W. Jika d = 1 hasil dikirim kembali ke register f. c Register f 30. rrf Rotate Right f through carry Penulisan : [ label ] rrf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : f<n> d<n-1>, f<0> C, C d<7> Keterangan : isi dari register f digeser 1-bit kekanan melalui bendera carry. Jika d = 0 hasil diletakkan di register W. Jika d = 1 hasil diletakkan kembali ke register f.

c Register f 31. sleep Penulisan : [ label ] sleep Operand : tidak ada Operasi : 00H WDT, 0 WDT prescaler 1 TO#, 0 PD# Keterangan : Bit Power Down dibersihkan ( clear ). Bit Time Out diset. Watchdog Timer dan pembaginya dibersihkan. 32. sublw Subtract W from Literal Penulisan : [ label ] sublw k Operand : 0 <= k <= 255 Operasi : k - ( W ) ( W ) Keterangan : register W dikurangkan ( komplement dua ) dari 8-bit literal k. Hasil diletakkan kembali pada register W. 33. subwf Subtract W from f Penulisan : [ label ] subwf f,d Operand : 0 <= f <= 127, d = [0,1] Operasi : ( f ) - ( W ) ( dest )

Keterangan : pengurangan ( komplemen dua ) register W dari register f. Jika d = 0 hasil disimpan di W. Jika d = 1 hasil disimpan di register f. 34. swapf Swap f Penulisan : [ label ] swapf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi : f<0:3> d<4:7> f <4:7> d<0:3> Keterangan : nibble atas dan bawah dari register f saling di tukar. Jika d = 0 hasil diletakkan di W. Jika d = 1 hasil diletakkan di register f. 35. tris Load TRIS register Penulisan : [ label ] tris f Operand : 5 <= f <= 7 Operasi : W tris register f Keterangan : instruksi ini untuk mendukung kompatibilitas dengan PIC16C5X. 36. xorlw Exclusive OR Literal with W Penulisan : [ label ] xorlw k Operand : 0 <= k <= 255 Operasi : ( W ) XOR k ( W ) Keterangan : isi dari register W di-xor-kan dengan 8-bit literal k. Hasil diletakkan pada register W. 37. xorwf Exclusive OR W with f Penulisan : [ label ] xorwf f, d Operand : 0 <= f <= 128, d = [ 0,1 ]

Operasi : ( W ) XOR ( f ) ( dest ) Keterangan : isi dari register W di-xor-kan dengan isi dari register f. Jika d = 0 hasil disimpan diregister W. Jika d = 1 hasil disimpan di register f.

BAB IV PEMROGRAMAN PIC16F84 PIC16F84 merupakan mikrokontroler yang berbasis Flash memori, sehingga dapat diprogram hingga 1000 kali. Hal yang menyenangkan adalah bahwa kita dapat memprogram Flash memori langsung pada mikrokontroler tersebut karena Flash memori tersebut sudah ditanamkan dalam mikrokontroler tersebut. Berbeda dengan mikrokontroler terdahulu, dimana program harus disimpan dalam EPROM terpisah. Sebelum mendapat manfaat dari pemakaian mikrokontroler, ada beberapa langkah-langkah yang harus dipersiapkan. Pertama adalah membuat program. Program bagi mikrokontroler PIC16F84 menggunakan bahasa tertentu yang telah diterangkan pada bab sebelumnya. Anda harus menuliskan program tersebut pada sebuah editor teks apa saja. Setelah itu proses selanjutnya adalah meng-kompilasi program yang telah dibuat. Hasil kompilasi ( umumnya berektensi.hex ) berisi kode-kode yang diketahui oleh mikrokontroler. File ini harus dimasukkan kedalam memori mikrokontroler ( ROM atau Flash memori pada PIC16F84 ) melalui programmer khusus. Setelah proses pemrograman dilaksanakan, maka saatnya untuk menguji apakah mikrokontroler telah bekerja dengan benar. Bila mikrokontroler belum bekerja sebagaimana mestinya, maka beberapa hal harus diperhatikan. a. Cek power-supply kepada mikrokontroler tersebut b. Cek osilator yang dipakai mikrokontroler tersebut c. Cek kode program ( program source ) pada mikrokontroler tersebut.

Ada baiknya bila anda memiliki sebuah mikrokontroler PIC16F84 yang dipakai sebagai master. Dimana mikrokontroler tersebut telah berisi program sederhana yang telah bekerja dengan baik. Jadi bila ada mikrokontroler yang tidak menunjukkan unjuk kerja yang benar, cek dahulu dengan mikrokontroler master. Editor Teks Editor teks merupakan program pengolah kata sederhana yang digunakan untuk menulis program bagi mikrokontroler. Pengolah kata yang canggih tentu tidak diperlukan, karena yang diperlukan hanya pengolah ascii teks saja. Beberapa program dibawah lingkungan Windows dapat dipakai seperti Notepad atau Wordpad ( save as text document ). Beberapa editor teks under DOS juga masih dapat dipakai, malah lebih memudahkan. Penulis menyukai Q Edit untuk menulis program mikrokontroler. Microchip sebagai pembuat mikrokontroler PIC16F84 menyediakan program khusus yaitu MPLAB yang selain berfungsi sebagai editor teks juga sebagai kompiler bagi mikrokontroler ( menggunakan MPASM ) dan juga sebagai programmer ( bagi programmer buatan Microchip seperti PICSTART, PROMATE dll ). Apapun editor teks yang anda gunakan, satu hal yang harus diingat adalah berilah nama program dengan ekstensi.asm. Hal ini memudahkan kita bahwa file tersebut adalah file assembler. Pada dasarnya pemberian ektensi yang lain juga tidak disalahkan. MPASM MPASM adalah program buatan Microchip yang dipakai untuk mengkompilasi program yang telah kita buat bagi mikrokontroler keluarga PICmicro. Setelah

dikompilasi, program yang telah kita buat akan diubah menjadi kode-kode tertentu ( biner / hex ) yang hanya diketahui oleh mikrokontroler yang bersangkutan. Karena itu file yang dihasilkan oleh MPASM akan berektensi.hex. Berikut ini adalah salah satu contoh file hex. :0A00000083168501831205140428FD :00000001FF Kita tidak mengerti maksud dari angka-angka tersebut, tetapi mikrokontroler PIC16F84 akan memahaminya! Setelah anda mengkompilasi program buatan anda dan telah mendapatkan file. hex-nya maka kini saatnya untuk memasukkan program tersebut kedalam mikrokontroler dan melihat kinerja mikrokontroler. Proses pemrogram mikrokontroler PIC16F84 dapat disederhanakan sebagai berikut. Program.asm Program.hex PIC MPASM Programmer Gambar 1 Langkah untuk memprogram mikrokontroler PIC16F84 Program MPASM adalah program kompilasi bukan hanya untuk mikrokontroler PIC16F84 saja, tetapi untuk keluarga mikrokontroler PICmicro. Program ini ada yang bekerja pada lingkungan Windows dan adapula yang bekerja pada lingkungan DOS. Untuk menjalankan program ini diperlukan komputer IBM PC/Compatible dengan DOS versi 5.0 keatas. Program MPASM dapat dipakai dengan 2 cara :

a. Untuk menghasilkan kode absolut ( absolute code ) yang dapat dieksekusi secara langsung oleh mikrokontroler. b. Untuk menghasilkan kode object ( object code ) yang dapat di-linked dengan modul terkompilasi lainnya. Gambar 2. MPASM pada lingkungan Windows File sumber yang dipakai sebagai masukan pada MPASM memiliki format tertentu. Format ini harus diikuti untuk mencegah kesalahan pada saat proses assembly dilakukan. Apabila terdapat kesalahan pada file sumber, maka pada saat dilakukan proses assembly akan dihasilkan pesan kesalahan Bila kesalahan terjadi, maka akan dihasilkan file kesalahan ( *.err ) yang dapat dibaca oleh program editor teks. File sumber dapat dibuat dengan mengikuti aturan-aturan sebagai berikut.

Tiap-tiap baris pada file sumber dapat berisi empat tipe informasi yaitu : a. Label b. Mnemonic c. Operand d. Komentar Posisi dimana mereka ditempatkan adalah sangat penting. Label harus ditempatkan pada kolom pertama. Mnemonic dapat dimulai pada kolom kedua atau selebihnya. Operand mengikuti mnemonic. Komentar dapat diikutkan mengikuti operand, mnemonic atau label dan dapat dimulai pada kolom berapapun. Maksimum lebar kolom adalah 255 karakter. Satu atau lebih spasi harus dipakai untuk memisahkan label dan mnemonic dan antara mnemonic dan operand. Suatu label harus dimulai pada kolom pertama. Label ini dapat diikuti oleh tanda titik dua ( : ), spasi, tab, atau akhir baris. Label harus dimulai oleh suatu huruf atau tanda garis bawah dan mungkin dapat mengandung huruf, garis bawah atau tanda tanya. Label dapat menggunakan karakter sampai 32 panjangnya. Suatu mnemonic instruksi assembler, directive assembler, pemanggilan makro harus dimulai pada kolom kedua atau lebih. Jika ada label pada baris yang sama, perintah harus dipisahkan dari label tersebut oleh tanda titik dua atau oleh satu atau lebih spasi atau tab. Operand harus dipisahkan dari mnemonic oleh satu atau lebih spasi atau tab. Setelah tanda titik-koma oleh MPASM akan dianggap sebagai komentar dan akan diabaikan oleh MPASM. Untuk memulai menggunakan MPASM adalah sangat mudah. Setelah anda mengaktifkan program ini maka tampilan seperti pada gambar 2 akan didapatkan. Anda

tinggal memasukkan file yang akan dikompilasi melalui tombol BROWSE. Setelah itu tinggal tekan tombol ASSEMBLE. Apabila file sumber tidak mengandung kesalahan, maka akan ditunjukkan dengan warna hijau, tetapi jika terdapat kesalahan akan ditunjukkan dengan warna merah. Untuk mengetahui kesalahan apa yang telah kita lakukan dapat dilihat pada file *.err yang secara otomatis akan dihasilkan. Perhatikan baik-baik pesan kesalahan pada file *.err. Kemudian perbaiki kesalahan tersebut, dan kompilasi lagi dengan MPASM. Apabila semua pesan kesalahan telah dibetulkan, maka file *.err tidak akan dihasilkan lagi. Gambar 3. Proses kompilasi yang berhasil Proses kompilasi yang gagal dapat dilihat pada gambar berikut.

Gambar 4 Proses kompilasi yang gagal Setelah didapat file *.hex didapat dari hasil kompilasi menggunakan MPASM, maka kini saatnya untuk memasukkan file tersebut kedalam chip mikrokontroler PIC16F84. Pengarah Assembler Sebelum membicarakan tentang pemroraman PIC16F84, akan dibahas terlebih dahulu tentang pengarah assembler ( Assembler Directive ). Pengarah ini merupakan suatu perintah assembler yang terdapat pada file sumber ( source file ) tetapi tidak diterjemahkan secara langsung menjadi kode operasi. Pengarah ini digunakan untuk mengontrol masukan, keluaran dan alokasi data assembler. Beberapa pengarah assembler memiliki nama dan format alternatif. Dibawah ini akan diberikan beberapa pengarah assembler yang sering digunakan. a. EQU Penulisan : < label > equ < expr >

Keterangan : Nilai dari < expr > akan menjadi nilai bagi < label > Contoh : rp0 equ 5 b. ORG Penulisan : < label > org < expr > Keterangan : mengatur awal program sebagaimana ditunjukkan oleh nilai < expr >. Contoh : org 0x00 c. END Penulisan : end Keterangan : pengarah assembler ini menunjukkan akhir dari suatu program. Contoh : end ; akhir program d. INCLUDE Penulisan : include < < include file > > Include < include_file > Keterangan : suatu file lain akan diikutkan dalam proses kompilasi. Contoh : include c:\include_file\p16f84.inc e. PROCESSOR Penulisan : processor Keterangan : pengarah assembler untuk menentukan tipe prosesor yang dipakai. Contoh : processor 16f84

Belajar Mikrokontroler PIC16F84 melalui Micro-1 Computer Micro-1 Computer merupakan papan pengembangan untuk belajar mikrokontroler PIC16F84. Hal ini karena Micro-1 Computer menggunakan PIC16F84 sebagai kontrol utamanya. Micro-1 Computer juga dilengkapi dengan ICSP programmer sehingga pembuatan alat menjadi lebih mudah dan cepat. Micro-1 Computer memiliki hubungan dengan PC ( Personal Computer ) menggunakan port paralel ( printer port ). Program yang telah dikompilasi ( *.hex ) dapat segera didownload ke Micro-1 Computer dan dapat segera dilaksanakan. Apabila ternyata program tersebut tidak berjalan sebagaimana mestinya, maka kode sumber dapat diperbaiki terlebih dahulu untuk kemudian di-download lagi. Gambar 5 Micro-1 Computer Fitur ( kelengkapan ) yang terdapat pada Micro-1 Computer meliputi : a. Penurun tegangan 7805 yang menyediakan tegangan +5 Volt. b. DIP switch untuk merubah mode program dengan mode run c. Osilator dengan Ceramik Resonator 4.0 MHz

d. Programmer untuk PIC16F84 e. Kabel untuk menghubungkan dengan PC ( DB-25 ) Untuk dapat menggunakan Micro-1 Computer, anda harus terlebih dahulu menyiapkan sumber daya listrik sebesar +14 Volt ( tidak boleh lebih ). Tegangan ini akan digunakan untuk memprogram Flash memory pada mikrokontroler PIC16F84 yang terpasang pada Micro-1 Computer. Setelah menghubungkan Micro-1 Computer dengan PC ( paralel port ) dan menghubungkan catu daya +14 Volt. Maka program untuk melakukan download program ke Micro-1 Computer dapat segera dijalankan. Program download untuk Micro-1 Computer setelah terbuka akan terlihat seperti pada gambar berikut.

Gambar 6 Contoh software untuk mendownload program ke Micro-1 Computer Pada software tersebut terdapat beberapa pilihan prosesor tetapi pilihlah PIC16F84 sebagaimana dipakai Micro-1 Computer. Pada kolom Fuses beri tanda centang pada PUT, hal ini akan mengaktifkan Power Up Timer. WDT adalah Watchdog Timer. Setelah itu pilihlah jenis osilator sesuai jenis yang dipakai. Setelah persiapan ini selesai, segera buka file yang akan didownload ( *.hex ) dan tekan tombol Write PIC. Pada saat ini pastikan bahwa setting DIP Switch pada Micro- 1 Computer pada mode program yaitu : Switch 1 = ON, Switch 2 = ON, Switch 3 = ON, Switch 4 = OFF, Switch 5 = OFF. Setelah proses download selesai, maka dapat

ditekan tombol Verify untuk memastikan bahwa tidak kesalahan pada saat proses download. Setelah proses ini selesai, cabut catu daya +14 Volt dan cabut hubungan dengan PC. Kemudian atur DIPswitch pada mode run yaitu : Switch 1 = OFF, Switch 2 = OFF, Switch 3 = OFF, Switch 4 = ON dan Switch 5 = ON. Setelah ini maka Micro-1 Computer akan bekerja sesuai dengan program yang telah didownload dengan memberikan tegangan kerja + 9 Volt ~ +12 Volt.

BAB V BERPRAKTEK MENGGUNAKAN PIC16F84 Salah satu cara agar berhasil dalam belajar sistem mikrokontroler adalah dengan mempraktekkannya. Untuk itu bab ini khusus akan mengetengahkan cara bereksperimen dengan mikrokontroler PIC16F84. Disini akan diberikan contoh-contoh program sederhana yang dapat dikembangkan sendiri sesuai kebutuhan. Beberapa program juga diambil dari internet dengan sedikit perubahan sesuai kebutuhan. Alat atau bahan yang diperlukan untuk mempraktekkan mikrokontroler PIC16F84 adalah sebagai berikut. a. Programmer PIC16F84 b. Baterai 9 Volt / Catu daya 9V ~ 12 V c. PCB lubang / Breadboard untuk mencoba rangkaian d. Micro-1 Computer ( opsional ) Anda dapat belajar menggunakan mikrokontroler PIC16F84 menggunakan contoh-contoh program yang diberikan dibawah ini. Anda dapat menggunakan mikrokontroler PIC16F84 lepasan tetapi anda harus memiliki programmer untuk mikrokontroler tersebut ( PICStart, Universal Programmer dll ). Atau anda dapat pula menggunakan Micro-1 Computer. Pada Micro-1 Computer telah terpasang detak dengan keramik Resonator 4 MHz. Beberapa proyek dibawah ini ada yang menggunakan RC osilator. Jika anda menggunakan Micro-1 Computer dan akan mencoba rangkaian yang menggunakan

osilator RC, maka anda dapat mengambil keramik resonator yang terpasang dan simpan untuk penggunaan selanjutnya. Berikut ini beberapa contoh program sederhana menggunakan mikrokontroler PIC16F84. Progam ini dapat dikembangkan sesuai dengan kebutuhan. a. Menyalakan LED Program ini akan menyalakan sebuah LED yang terpasang pada suatu port. Hal pertama yang harus dilakukan adalah membuat port yang bersangkutan sebagai port keluaran. Setelah itu bit pada port yang terpasang LED harus dibuat berlogika tinggi. +5 V 4 14 RESONATOR 4.0 MHZ 15 17 PIC16F84 RA0 100 LED 16 5 Gambar 1 Menyalakan sebuah LED

;Program untuk menyalakan 1 buah LED ;yang terhubung ke RA0 ;Nama file : led.asm ;Programmer : Moh.Ibnu Malik ;=================================== processor 16f84 status equ 0x03 porta equ 0x05 trisa equ 0x85 rp0 equ 5 ;--------------------------------------------------------- org 0x00 mulai bsf status,rp0 ; ke halaman 1 ( set bit rp0 ) clrf trisa ; port a sebagai keluaran bcf status,rp0 ; kembali ke halaman 0 ( clear rp0 ) led_on bsf porta,0 ; nyalakan led pada RA0 loop goto loop ;---------------------------------------------------------- end ; end of program ;==== Hasil ====================== ; Lampu LED pada RA0 harus menyala ;================================= b. Flip-Flop Flip-flop adalah rangkaian dengan dua LED yang akan menyala bergantian. Bila LED pertama menyala, maka LED kedua mati demikian seterusnya secara bergantian. Untuk membuat hal ini dilakukan dengan menyalakan sebuah LED, kemudian memberikan tundaan ( delay ) sehingga LED menyala dalam jangka waktu tertentu. Setelah itu LED tersebut dibuat mati juga selama waktu delay dan LED yang lain dibuat hidup tentunya selama waktu delay. Jika diinginkan waktu menyala dan waktu mati berbeda, maka dilakukan dengan memberi tundaan yang berbeda.

+5 V 4 14 RESONATOR 4.0 MHZ 15 17 PIC16F84 RA0 100 LED 16 18 RA1 100 5 LED Gambar 2 Rangkaian Flip-Flop ;Program untuk membuat 2 led menyala bergantian ( flip-flop ) ;LED terhubung ke RA0 dan RA1 ;Nama file : flipflop.asm ;Programmer : Moh.Ibnu Malik ;=================================== processor 16f84 status equ 0x03 porta equ 0x05 trisa equ 0x85 rp0 equ 5 ;--------------------------------------------------------- org 0x00 mulai bsf status,rp0 ; ke halaman 1 ( set bit rp0 ) clrf trisa ; port a sebagai keluaran bcf status,rp0 ; kembali ke halaman 0 ( clear rp0 ) flipflop bsf porta,0 call delay bcf porta,0 bsf porta,1 call delay bcf porta,1 call delay ; nyalakan led pada RA0 ; tunda sesaat ; matikan led pada RA0 ; nyalakan led pada RA1 ; tunda sesaat ; matikan led pada RA1 ; tunda sesaat

goto flipflop ; buat loop tertutup ;------ rutin tunda ---------------------------------------- delay ;----------------------------------------------------------- movlw d'255' ; isi W dengan 255 desimal movwf 0x2e ; simpan isi W ( 255D ) ke RAM alamat 2EH loop1 loop2 movlw d'255' ; isi W dengan 255 desimal movwf 0x2d ; simpan isi W ke RAM alamat 2DH decfsz 0x2d goto loop2 decfsz 0x2e goto loop1 ; kurangi satu ( -1 ) isi RAM pada alamat 2DH ; jika belum 0 pergi ke loop2 ; kurangi satu ( -1 ) isi RAM pada alamat 2EH ; jika belum 0 pergi ke loop1 return ; jika sudah 0 keluar dari subrutin ;---------------------------------------------------------- end ; end of program ;==== Hasil ================================================== ; Lampu LED pada RA0 dan RA1 menyala bergantian ( flip-flop ) ;============================================================= c. Masukan dengan sebuah Switch Setelah mencoba port a sebagai keluaran, kini saatnya mencoba port a sebagai keluaran sekaligus sebagai masukan. Masukan disini akan menggunakan sebuah switch / saklar untuk membuah LED menyala. Perhatikan cara menginisialisasi port a. Karena RA0 sebagai keluaran ( dihubungkan dengan LED ) sedangkan RA1 sebagai masukan ( dihubungkan dengan saklar ). Perlu diketahui bahwa suatu port dapat di buat sebagai masukan atau keluaran per-bitnya tidak harus perbyte.

+5 V 4 14 RESONATOR 4.0 MHZ 15 17 PIC16F84 RA0 100 +5V 10K LED 16 5 18 RA1 SWITCH Gambar 3 Menyalakan LED melalui saklar ;Program untuk menyalakan LED pada RA0 ;jika suatu switch ( RA1 ) ditekan. Resistor pull 10K up perlu ;dipasang. ;Untuk mematikan led dengan memutus arus ke PIC16F84 ;Nama file : led&swit.asm ;Programmer : Moh. Ibnu Malik ;====================================================================== processor 16f84 status equ 0x03 porta equ 0x05 trisa equ 0x85 rp0 equ 5 ;--------------------------------------------------------- org 0x00 mulai bsf status,rp0 ; ke halaman 1 ( set bit rp0 ) movlw b'000000010' ; RA0 sbg output, RA1 sbg input movwf trisa ; kirim ke register trisa bcf status,rp0 ; kembali ke halaman 0 ( clear rp0 ) bcf porta,0 ; matikan led (inisialisasi ) cek_switch btfss porta,1 ; cek swith ditekan? bsf porta,0 ; nyalakan led goto cek_switch

;---------------------------------------------------------- end ; end of program ;==== Hasil ========================== ; LED akan menyala jika switch ditekan ;====================================== d. Menggunakan sensor penerima infra merah Sensor penerima infra merah banyak dipakai pada televisi atau audio set untuk menerima informasi tentang tombol yang ditekan pada remote control. Kita dapat menggunakan sensor ini untuk menyalakan led dari jarak jauh. Pada saat sebuah tombol apa saja pada remote ditekan, pena keluaran pada sensor ini akan berlogika rendah. Hal inilah yang akan dipergunakan dalam rangkaian berikut untuk dapat membuat sebuah led akan menyala jika tombol ( apa saja ) pada remote ditekan. OUT GND +5V Gambar 4 Sensor remote control

+5V PIC16F84 RA0 10K IR RECEIVER 100 RA1 +5 V LED GND VDD(+5V) Gambar 5 Hubungan IR receiver dengan PIC16F84 ;Program untuk menyalakan LED ( RA0 ) dengan menggunakan Remote Control ;Input Sensor Remote receiver terhubung ke RA1. Tekan lagi untuk ;mematikan LED ;Nama file : remote2.asm ;Programmer : Moh.Ibnu Malik ;====================================================================== processor 16f84 status equ 0x03 porta equ 0x05 trisa equ 0x85 count equ 0x0c hitung equ 0x0d rp0 equ 5 ;--------------------------------------------------------- org 0x00 mulai bsf status,rp0 ; ke halaman 1 ( set bit rp0 ) movlw b'000000010' ; RA0 sbg output dan RA1 sbg input movwf trisa ; kirim ke register a bcf status,rp0 ; kembali ke halaman 0 ( clear rp0 ) bcf porta,0 ; matikan LED ( inisialisasi ) cek_remote1 btfss porta,1 call led_on goto cek_remote1 ; cek logika pada pena RA1 ; ke label led_on ; remote tak ditekan! Ulangi pengecekan cek_remote2

led_on btfss porta,1 call led_off goto cek_remote2 bsf porta,0 ; nyalakan LED! call long_delay goto cek_remote2 led_off bcf porta,0 ; matikan LED! call long_delay goto cek_remote1 ;---------------------------------------------- long_delay movlw 0xff movwf hitung ulang call delay decfsz hitung,f goto ulang return ;---------------------------------------------- delay movlw 0xff movwf count repeat decfsz count,f goto repeat return ;---------------------------------------------------------- end ; end of program ;==== Hasil ====================== ; Lampu LED pada RA0 harus menyala ; pada saat tombol apa saja pada ; remote ditekan. Tekan lagi untuk ; mematikan LED. ;================================= e. LED Berjalan Program ini akan membuat LED yang dihubungkan dengan Port B akan berjalan. Kecepatan jalannya LED ditentukan oleh besarnya waktu tunda yang diberikan dan juga ditentukan oleh frekuensi detak ( clock ). Perhatikan pada rangkaian ini

menggunakan osilator tipe RC. Bila menggunakan Micro-1 Computer maka Resonator pada Micro-1 harus dicabut terlebih dahulu untuk menggunakan RC osilator ini. Bila tetap ingin menggunakan resonator pada Micro-1 maka waktu rutin tunda harus ditambah waktunya. Vdd 100K 4 14 Vdd MCLR# RB0 6 100 LED 1 16 OSC1 33p PIC16F84 RB7 Vss 5 13 100 LED 8 Gambar 6 Rangkaian 8 LED berjalan ; Program : LED berjalan ; 8 buah LED pada Port B akan berjalan ; Programmer : Moh.Ibnu Malik ;====================================== processor 16F84 Status PortB TrisB Rp0 C equ h 0003 equ h 0006 equ h 0006 equ h 0005 equ h 0000 ;====================================== org 0000 Mulai

call Initport ; panggil rutin initport bcf Status,C ; clear carry flag movlw 0001 ; isi 1 ke w untuk 1 led on movwf 002F ; simpan pada lokasi RAM 2FH Putar movf 002F,0 ; kirim isi lokasi RAM 2FH ke w movwf PortB ; kirim isi W ke PortB call Tunda ; panggil rutin tunda rlf 002F,1 ; geser ke kiri goto Putar ;============================================ Tunda ;============================================ movlw d 255 ; isi w dengan 255 desimal movwf 002E ; kirim isi w ke lokasi RAM 2EH T1 T2 movlw d 255 ; isi w dengan 255 desimal movwf 002D ; kirim isi w ke lokasi RAM 2DH decfsz 002D goto T2 decfsz 002E goto T1 return ; decremet isi lokasi RAM 2DH ; decrement isi lokasi RAM 2EH ;=============================================== Initport ;=============================================== bsf Status,Rp0 ; ke bank 1 clrf TrisB ; portb sebagai keluaran bcf Status,Rp0 ; kembali ke bank 0 return end ; akhir program ;================================================= f. Bangun dari Sleep Mikrokontroler PIC16F84 memiliki fasilitas untuk menghemat daya yaitu dengan adanya fasilitas sleep ( tidur ). Dengan adanya fasilitas ini, maka mikrokontroler akan semakin irit tenaga apalagi bila didayai dengan baterai. Bila mikrokontroler sedang tidak aftif maka ia dapat diberikan mode sleep, sebagaimana pada remote control. Bila remote tidak dipakai lama maka prosesornya akan masuk ke mode

sleep, tetapi jika salah satu tombol ditekan maka prosesor segera bangun dari sleep dan segera melaksanakan perintah. Pada rangkaian ini LED akan mati dan prosesor masuk ke mode sleep, jika tombol ditekan maka ia akan bangun dan menyalakan LED. Vdd 100K 4 14 Vdd MCLR# RA0 17 100 LED 1 16 OSC1 33p PIC16F84 RB4 Vss 5 10 100 SWITCH Gambar 7 Rangkaian Sleep ;Program bangun dari sleep jika tombol ditekan ;Menggunakan interupsi ;Programmer : Moh.Ibnu Malik ;============================================= processor 16f84 Status PortB PortA TrisB TrisA Rp0 Rbpu Rbif Rbie Intcon equ h 0003 equ h 0006 equ h 0005 equ h 0006 equ h 0005 equ h 0005 equ h 0007 equ h 0000 equ h 0003 equ h 000B

OptionReg equ h 0001 org 0000 Goto Mulai Org 0004 ; awal rutin interupsi goto Interupsi Mulai call Initport sleep Waste nop goto Waste ; panggil rutin initport ; masuk mode sleep ;========== Interupsi ;========== btfsc Intcon,Rbif ; check jika terjadi perubahan logika RB4~RB7 goto Servis ; ya pergi ke servis nop return ;============= Servis ;============= bcf Intcon,Rbie ; lumpuhkan interupsi berikutnya movlw 1 movwf PortA ; nyalakan LED call Tunda ; panggil rutin tunda movlw 0 movwf PortA ; matikan LED bcf Intcon,Rbif ; reset bendera itnerupsi bsf Intcon,Rbie ; aktifkan lagi interupsi retfie ; kembali dari rutin interupsi ;========== Initport ;========== bsf Status,Rp0 ; pilih bank 1 movlw 0 movwf PortA ; LED mati movlw b 11110000 movwf PortB ; RB4 ~ RB7 sebagai input bcf OptionReg,Rbpu ; aktifkan pull up internal bcf Status,Rp0 ; ke bank 0 clrf PortB clrf PortA bcf Intcon,Rbie bcf Intcon,Rbif bsf Intcon,Rbie retfie

;======= Tunda ;======= { Rutin tunda disini } end ;====================================== g. Menampilkan pada 7 Ruas Program berikut untuk menampilkan angka pada peraga tujuh ruas.angka yang ditampilkan adalah 0 sampai FH. Vdd 14 7 x 100 4K7 0,47uF 4 16 Vdd 6 MCLR# RB0 OSC1 RB6 12 PIC16F84 5 Vss Gambar 8 Menampilakan angka pada Tujuh Ruas

;Program untuk menampilkan angka pada peraga 7 ruas ;menggunakan delay dari Timer ;Programmer : Moh. Ibnu Malik ;================================================== processor 16f84 Status equ h 0003 PortB equ h 0006 PortA equ h 0005 TrisB equ h 0006 TrisA equ h 0005 Rp0 equ h 0005 Hitung equ h 000C ;RAM lokasi 0CH OptionReg equ h 0001 Intcon equ h 000B Toif equ h 0002 Toie equ h 0005 Pcl equ h 0002 TMR0 equ h 0001 org 0000 Mulai call initport clrf Hitung ; clear isi RAM Ulang movf Hitung,0 andlw b 00001111 call Display movwf PortB call Delay incf Hitung,1 goto Ulang ; masukkan isi RAM ke w ; modulus FH ; kirim ke PortB ; naikkan isi RAM ;====== Delay ;====== bsf Status,Rp0 ; bank 1 movlw b 00001111; osilator / 256 ke timer0 movwf OptionReg bcf Status,Rp0 ; bank 0 clrf TMR0 bcf Intcon,Toif bsf Intcon,Toie Check btfss Intcon,Toif ; timer overflow? goto Check ; tidak.check lagi bcf Intcon,Toie bcf Intcon,Toif ; bersihkan bendera interupsi return ;=========== Initport ;=========== bsf Status,Rp0 ; bank 1 clrf TrisB ; PortB sebagai keluaran

bcf Status,Rp0 ; bank 0 return ;=========== Display ;=========== addwf Pcl,1 retlw 003f ; angka 0 retlw 0006 ; angka 1 retlw 005b ; angka 2 retlw 004f ; angka 3 retlw 0066 ; angka 4 retlw 006d ; angka 5 retlw 007d ; angka 6 retlw 0007 ; angka 7 retlw 007f ; angka 8 retlw 006f ; angka 9 retlw 0077 ; angka a hex retlw 007c ; angka b hex retlw 0039 ; angka c hex retlw 005e ; angka d hex retlw 0079 ; angka e hex retlw 0071 ; angka f hex end ;============= h. Menangani sela Mikrokontroler PIC16F84 dapat menerima 4 sumber sela yaitu sela INT, sela perubahan keadaan pada port RB4 ~ RB7, sela melimpahnya Timer 0 dan sela selesainya penulisan EEPROM. Semua sumber sela memiliki alamat vector 0004H. Untuk mengetahui sumber sela yang aktif, maka dapat dicheck bendera selanya. Apabila bendera selanya diset ( 1 ) maka berarti sumber sela itu sedang aktif. Program berikut untuk menunjukkan cara menangani beberapa sumber sela yang diaktifkan. Sela berasal dari pena RB0/INT ( bendera sela INTF ) dan pena RB4 bila terjadi perubahan keadaan logika ( bendera sela RBIF ). Program akan

mengecek bendera sela mana yang diset. Bendera sela yang diset berarti sela tersebut sedang aktif. VDD 3 x 100 CERAMIC RESONATOR 4.0 MHz 4 15 14 17 18 1 6 LED1 LED2 LED3 16 5 10 CHANGE STATUS INT Gambar 9 Menangani sela INT dan sela karena perubahan keadaan pada port ;Program untuk membedakan beberapa sumber sela ;sertakan pula file p16f84.inc ;programmer : Moh. Ibnu Malik ;============================================== processor 16f84 include c:\16f84.inc org 0000 call Mulai org 0004 ; vector sela call Servis_interupsi Mulai call Initport

Waste bsf PORTA,0 ; nyalakan led1 nop goto Waste ; waste time Servis_interupsi btfsc INTCON,RBIF goto Servis_RB btfsc INTCON,INTF goto Servis_INT retfie ; terjadi int_on_change? ; ya maka servis RB ; tidak, terjadi interupsi INT? ; ya maka servis INT ; tidak Servis_RB bcf INTCON,RBIE ; lumpuhkan sela RB selanjutnya bsf PORTA,1 ; nyalakan led 2 call Tunda bcf PORTA,1 ; matikan led 2 bcf INTCON,RBIF ; clear bendera sela RB bsf INTCON,RBIE ; aktifkan lagi sela RB retfie Servis_INT bcf INTCON,INTE ; lumpuhkan sela INT selanjutnya bsf PORTA,2 ; nyalakan led 3 call Tunda bsf PORTA,2 ; matikan led 3 bcf INTCON,INTF ; clear bendera sela INT bsf INTCON,INTE ; aktifkan lagi sela INT retfie Initport bsf STATUS,RP0 ; ke bank 1 clrf TRISA ; porta sebagai keluaran movlw b 11110001 movwf PORTB bcf OPTION_REG,NOT_RBPU ; aktifkan pull-up bcf STATUS,RP0 ; ke bank 0 clrf PORTB ; init port clrf PORTA ; init port bcf INTCON,RBIF ; clear bendera RB bsf INTCON,RBIE ; aktifkan sela RB bcf INTCON,INTF ; clear bendera INT bcf OPTION_REG,INTEDG ; pilih sisi turun bsf INTCON,INTE ; aktifkan sela INT retfie ;===== Tunda ;===== ; { tempatkan rutin tunda disini } end ;====================================

i. Menampilkan tulisan pada LCD Berikut ini contoh program untuk menuliskan tulisan pada LCD 1 x 16. Program ini diambil dari internet dengan sedikit penyesuaian / perubahan. LCD 5 V PIC16F84 RA2 RA1 1 14 4.0 MHz RB0..7 Gambar 10 Rangkaian dengan LCD ;=======LCD8.ASM=====================================5/5/97== list p=16c84 radix hex ;------------------------------------------------------------ ; cpu equates (memory map) indf equ 0x00 status equ 0x03 fsr equ 0x04 porta equ 0x05 portb equ 0x06 count1 equ 0x0c

count2 equ 0x0d trisa equ 0x85 trisb equ 0x86 ;------------------------------------------------------------ ; bit equates z equ 2 rp0 equ 5 ;------------------------------------------------------------ org 0x000 ; start bsf status,rp0 ;switch to bank 1 movlw b'00000000' ;outputs movwf trisa movwf trisb bcf status,rp0 ;switch back to bank 0 movlw b'00000000' ;all outputs low movwf porta movwf portb call blanks ;fill display RAM with blanks call board ;create message in display RAM call del_5 ;allow lcd time to initialize itself call initlcd ;initialize display call disp16 ;send 16 characters to display circle goto circle ;done ;------------------------------------------------------------ blanks movlw 0x10 ;count=16 movwf count1 movlw 0x20 ;first display RAM address movwf fsr ;indexed addressing movlw 0x20 ;ascii blank store movwf indf ;store in display RAM location ; pointed to by file select register decfsz count1,f ;16? goto incfsr ;no return ;yes, done incfsr incf fsr,f ;increment file select register goto store ;------------------------------------------------------------ board movlw 'B' movwf 0x20 movlw 'O' movwf 0x21 movlw 'A' movwf 0x22 movlw 'R' movwf 0x23 movlw 'D' movwf 0x24 return ;------------------------------------------------------------ initlcd bcf porta,1 ;E line low bcf porta,2 ;RS line low, set up for control call del_125 ;delay 125 microseconds

movlw 0x38 ;8-bit, 5X7 movwf portb ;0011 1000 call pulse ;pulse and delay movlw 0x0c ;display on, cursor off movwf portb ;0000 1100 call pulse movlw 0x06 ;increment mode, no display shift movwf portb ;0000 0110 call pulse call del_5 ;delay 5 milliseconds - required ; before sending data return ;------------------------------------------------------------ disp16 bcf porta,1 ;E line low bcf porta,2 ;RS line low, set up for control call del_125 ;delay 125 microseconds movlw 0x80 ;control word = address first half movwf portb call pulse ;pulse and delay bsf porta,2 ;RS=1, set up for data call del_125 ;delay 125 microseconds movlw 0x20 ;initialze file select register movwf fsr getchar movf 0x00,w ;get character from display RAM ; location pointed to by file select ; register movwf portb call pulse ;send data to display movlw 0x27 ;8th character sent? subwf fsr,w ;subtract w from fsr btfsc status,z ;test z flag goto half ;set up for last 8 characters movlw 2f ;test number subwf fsr,w btfsc status,z ;test z flag return ;16 characters sent to lcd incf fsr,f ;move to next character location goto getchar half bcf porta,2 ;RS=0, set up for control call del_125 ;delay 125 microseconds movlw 0xc0 ;control word = address second half movwf portb call pulse ;pulse and delay bsf porta,2 ;RS=1, set up for data incf fsr,f ;increment file select register to ; select next character call del_125 ;delay 125 microseconds goto getchar ;------------------------------------------------------------ del_125 movlw 0x2a ;approx 42x3 cycles (decimal) movwf count1 ;load counter repeat decfsz count1,f ;decrement counter goto repeat ;not 0 return ;counter 0, ends delay ;------------------------------------------------------------ del_5 movlw 0x29 ;decimal 40 movwf count2 ;to counter

delay call del_125 ;delay 125 microseconds decfsz count2,f ;do it 40 times = 5 milliseconds goto delay return ;counter 0, ends delay ;------------------------------------------------------------ pulse bsf porta,1 ;pulse E line nop ;delay bcf porta,1 call del_125 ;delay 125 microseconds return ;------------------------------------------------------------ end Gambar 11. Antarmuka dengan LCD

DAFTAR BACAAN 1. PIC Microcontroller Project Book. John Iovine McGraw Hill Book USA. 2. PIC n Up The Pace.PIC Microcontroller Application Guide. David Benson. Square-1 Electronics PO.Box 501 Kelseyville, CA 95451 3. Programming and Customizing the Basic Stamp Computer. Scott Edward. McGraw Hill Book USA. 4. Programming and Customizing PICmicro Microcontroller. Myke Predko. McGraw Hill Book USA.

LAMPIRAN 1 Berikut adalah isi dari P16F84.inc header file. LIST ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. NOLIST ; This header file defines configurations, registers, and other useful bits of ; information for the PIC16F84 microcontroller. These names are taken to match ; the data sheets as closely as possible. ; Note that the processor must be selected before this file is ; included. The processor may be selected the following ways: ; 1. Command line switch: ; C:\ MPASM MYFILE.ASM /PIC16F84 ; 2. LIST directive in the source file ; LIST P=PIC16F84 ; 3. Processor Type entry in the MPASM full-screen interface ;====================================================================== ; ; Revision History ; ;====================================================================== ;Rev: Date: Reason: ;2.00 07/24/96 Renamed to reflect the name change to PIC16F84. ;1.01 05/17/96 Corrected BADRAM map ;1.00 10/31/95 Initial Release ;====================================================================== ; ; Verify Processor ; ;====================================================================== IFNDEF 16F84 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF ;====================================================================== ; ; Register Definitions ; ;====================================================================== W EQU H'0000' F EQU H'0001'

;----- Register Files-------------------------------------------------- INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' EEDATA EQU H'0008' EEADR EQU H'0009' PCLATH EQU H'000A' INTCON EQU H'000B' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' EECON1 EQU H'0088' EECON2 EQU H'0089' ;----- STATUS Bits ---------------------------------------------------- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- INTCON Bits ---------------------------------------------------- GIE EQU H'0007' EEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RBIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RBIF EQU H'0000' ;----- OPTION Bits ---------------------------------------------------- NOT_RBPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' ;----- EECON1 Bits ---------------------------------------------------- EEIF EQU H'0004'

WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'0001' RD EQU H'0000' ;====================================================================== ; ; RAM Definition ; ;====================================================================== MAXRAM H'CF' BADRAM H'07', H'50'-H'7F', H'87' ;====================================================================== ; ; Configuration Bits ; ;====================================================================== _CP_ON EQU H'000F' _CP_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _PWRTE_OFF EQU H'3FFF' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LP_OSC EQU H'3FFC' _XT_OSC EQU H'3FFD' _HS_OSC EQU H'3FFE' _RC_OSC EQU H'3FFF' LIST

LAMPIRAN 2 Perusahaan penjual Mikrokontroler PIC16F84, Programer, Software pendukung atau Konsultan. 1. Wirz Electronics PO.Box 457 Littleton MA 01460-0457 USA. Menjual Programmer, Software Simulator ( UMPS ) 2. Virtual Micro Design I.D.L.S Technopole Izarbel 64210 Bidart France. Menjual UMPS. 3. Dontronics Po.Box 595 Tullamarine 3043 Australia. Menjual PIC16F84, Simm Stick, Programmer PIC dll 4. Aengginering Co. 3300 S Fox Spi Rd Langley WA 98260-8010 Konsultan design menggunakan PICmicro. Telp. (360) 730-2058 5. Bubble Software 8 Westminster Crt. Somerville Victoria Australia 3912. Membuat / menjual software PICNPoke. Telp. +61 3 59775792

6. DIY Electronics PO.Box 88458 Sham Shui PO Hongkong. Menjual Microcontroller PICmicro, General PIC16Cxx Programmer Telp. 852-2720-0255 7. Hi-Tech Software Po.Box 103 Alderley QLD 4051 Australia. Menjual / membuat ANSI-C Compiler untuk PIC micro. 8. Parallax Inc 3805 Atherton Rd, Suite #102 Rocklin CA 95675 Menjual programmer PICmicro, BasicStamp dll. Telp. (916) 624-8333 9. Tato Computadores R Santos Arcadio, 37 Sao Paulo / SP Brazil 04707-110 Menjual programmer PICmicro ( Pro PIC ) Telp. (011) 240-6474 10. Micro Solutions PO.Box 61 / TB Bekasi 17510 Menjual Microcontroler PIC16F84, Micro-1 Computer dll Telp. 08129329512 ( emal : askmicro@yahoo.com )

Tentang Penulis Moh.Ibnu Malik,ST adalah lulusan Elektronika dan Telekomunikasi Teknik Elektro Universitas Diponegoro Semarang. Selepas menyelesaikan pendidikannya kemudian bergabung dengan Dept. Quality Assurance PT.Sony Electronics Indonesia. Tertarik dengan bidang Mikrokontroler, Komunikasi data dan Networking. Buku pertamannya berjudul Bereksperimen dengan Mikrokontroler 8031 diterbitkan oleh PT.Elex Media Komputindo.