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 dengan menggunakan baterai.
dan berdaya rendah sehingga memungkinkan didayai
Komponen penyusun Mikrokontroler Mikrokontroler terdiri dari beberapa bagian / part seperti yang terlihat dibawah ini.
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.
Port Mikrokontroler 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. memori Flash.
Mikrokontroler PIC16F84 memakai jenis
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 PIC12C508A
Program Memori Fitur ( kelengkapan ) 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
RA3
RA0
RA4/TOCKI MCLR#
Pin 9
Pin 18
OSC1/CLKIN OSC2/CLKOUT
VSS
VDD
RB0/INT
RB7
RB1
RB6
RB2
RB5
RB3
RB4
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
OSC1/CLKIN
16
OSC2/CLKOUT 15
Ground Masukan untuk detak ( pin untuk kristal/resonator ) 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
EEPROM
Program Counter
8 Level Stack Instruction Reg
Data Memory
RAM File Register
Addr Mux
TMR0
RA4
FSR
Status Reg
Instructui n Decode
Timing Generatio
Mux
Power Up Timer Osc Start-up Timer
I/O PORT ALU
Power On Reset Watchdog Timer
W Reg
Gambar 3 Blok diagram mikrokontroler PIC16F84
RA0~RA 3
PORT B
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
XTAL
OSC1 PIC16F84 OSC2 C2
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. menentukan frekuensi maksimumnya dapat dilihat pada badan mikrokontroler.
Untuk 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
LP
32 KHz
30 pF
30 – 50pF
100 KHz
15 pF
15 pF
200 KHz
0 – 15 pF
0 – 15 pF
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
4 MHz
15 pF
15 pF
10 MHz
15 pF
15 pF
XT
HS
Nilai C2
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.
OSC1 RESONATOR
PIC16F84
OSC2
Gambar 6 Osilator menggunakan resonator
Anda juga dapat menggunakan sumber detak luar untuk menghidupkan mikrokontroler PIC16F84 seperti terlihat pada gambar berikut ini.
PIC16F84 DETAK DARI SISTEM LUAR
1
2
OPEN
OSC1
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
RTE
RTS
0 Programmable Prescaler
1
Sync With Internal clock
PSA
Gambar 8 Blok diagram dari timer/counter
RTC
SET TOIF INTERUPT ON OVERFLOW
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.
PC<12:0>
13
Call Retlw Stack Level 1 Stack Level 2
Stack Level 8
0000h
Reset Vektor
0004h
Interupt Vektor
0005h
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.
12
8
7
5
PCLATH(4:0)
0
PC 8
INST with PCL (02h) as dest ALU Result
PCLATH 12
11
10
0 GOTO,CALL
2
PCLATH(4:3)
Opcode(10: 11
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
PCLATH
PCLATH
8A
0B
INTCON
INTCON
8B
0C
36
Mapped in page 0
8C
General
Purpose 2F
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
Page select
0
IRP
Location select
(FSR)
Page select 00
00
7
01
10
0
Location select 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
04
FSR
05
PORTA
-
06
PORTB
RB7
RP1
RP0 TO
PD
Z
DC
C
Indirect data memory, address pointer 0 -
-
RB6
RA4/RT RA3 RA2 RA1 RA0
RB5
RB4
RB3
RB2
RB1
RB0
TOIF
INTF
07 08
EEDATA EEPROM Data Register
09
EEADR
EEPROM Address Register
0A
PCLATH
Holding Register for High Byte of PC
0B
INTCON
GIE
80
IND0
Mapped in Page 0
81
OPTION
RBPU#
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
EEIE
TOIE
INTE
RBIE
RBIF
PAGE 1
INTEDG
RTS
RTE
PSA
PS2
PS1
PS0
88
EECON1
-
-
-
EEIF
89
EECON2
not a physical register
8A
PCLATH
mapped in page 0
8B
INTCON
mapped in page 1
WRERR
WREN
WR
RD
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 1
- halaman 0 , 1 ( 00H – FFH ) - 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
Bit
GIE
EEIE TOIE
R/W
R/W
INTE RBIE
R/W
R/W
TOIF INTF
R/W 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
Bit
RBPU#
INTEDG
RTS
R/W RTE
R/W
R/W
R/W
R/W
PSA
PS2
PS1
PS0
Keterangan :
PS2
PS1
PS0
Timer 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
1 : 128
PSA
: 256
WDT Rate
: 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
: pull-up diaktifkan
RBPU# = 1
: pull-up dilumpuhkan.
4. Register EECON1 Register ini merupakan register pengontrol EEPROM Data Memori. Susunan bitbit pada register ini adalah sebagai berikut.
MSB Sifat Bit
LSB
U
U
U
R/W
R/W
-
-
-
EEIF
WRERR
R/W WREN
R/W
R/W
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
diimplementasikan secara fisik.
register
kontrol
dengan
5
bit
bawah
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. dilumpuhkan dengan membersihkan bit kontrol INTE.
Sela dapat
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. sendiri-sendiri.
Namun masing-masing jalur dapat dipakai
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
D
Q
CK
Q#
VDD OR I/O PIN
WR TRIS
D
Q
CK
Q#
AND
buffer NOT
Q
NOT
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#
D
AND
RA4
Q
CK
BUFF
Q#
NOT
BUFF
Q
D CK
RD PORT
NOT
TMR0 clock input
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
opcode
6
0
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 opcode
Dimana : b = 3-bit alamat bit f = 7-bit alamat register file
9
7 b(BIT#)
6
0 f(FILE#)
c. Format untuk instruksi literal dan operasi kontrol
13
8
7
opcode
0 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
alamat bit pada file register 8-bit
k
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 TO#
Global Interupt Enable Watchdog Timer 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 )
Keterangan :
W
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
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
Keterangan : Bit “b” pada register “f” diset ke 1.
7.
btfsc Penulisan
Bit Test, skip if Clear : [ label ] btfsc f,b
Operand
: 0 <= f <= 127 , 0 <= b <= 7
Operasi
: lompat jika ( f ) = 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 ) = 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 k
TOS
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 11.
:
Isi dari register “f” dibersihkan dan bit Z diset.
clrw
Clear W register
Penulisan
: [ label ]
Operand
: tidak ada
Operasi
:
00H 1
clrw
(W) 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
Keterangan :
( dest )
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> ) Keterangan :
PC<12:11>
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
Keterangan :
( dest )
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
Keterangan :
( dest ), lompati jika hasil = 0
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
: tidak ada
Operasi
: 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 1
PC 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
d, 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
30.
rrf
Register f
Rotate Right f through carry
Penulisan : [ label ] rrf f,d Operand : 0 <= f <= 127, d = [ 0,1 ] Operasi
:
f
d, 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
31.
Register f
sleep Penulisan : [ label ] sleep Operand
: tidak ada
Operasi
: 00H
WDT, 0
1
TO# , 0
WDT prescaler 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 Operand
:
f,d
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 MPASM
PIC 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 Micro1 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 100 17
RESONATOR 4.0 MHZ
15
RA0 LED
PIC16F84 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 porta trisa rp0
equ equ equ equ
0x03 0x05 0x85 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 100 17
RESONATOR 4.0 MHZ
15
RA0 LED
PIC16F84 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 porta trisa rp0
equ equ equ equ
0x03 0x05 0x85 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 movlw d'255' ; isi W dengan 255 desimal movwf 0x2d ; simpan isi W ke RAM alamat 2DH loop2 decfsz 0x2d ; kurangi satu ( -1 ) isi RAM pada alamat 2DH goto loop2 ; jika belum 0 pergi ke loop2 decfsz 0x2e ; kurangi satu ( -1 ) isi RAM pada alamat 2EH goto loop1 ; 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 100 17
RESONATOR 4.0 MHZ
15
RA0
PIC16F84 16
18
+5V
LED
10K RA1 SWITCH
5
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 porta trisa rp0
equ equ equ equ
0x03 0x05 0x85 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
IR RECEIVER 10K
100
RA1 LED
+5 V
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 porta trisa count hitung rp0
equ equ equ equ equ equ
0x03 0x05 0x85 0x0c 0x0d 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 cek_remote1 btfss porta,1 call led_on goto cek_remote1 cek_remote2
; matikan LED ( inisialisasi ) ; cek logika pada pena RA1 ; ke label led_on ; remote tak ditekan ! Ulangi pengecekan
btfss porta,1 call led_off goto cek_remote2 led_on
bsf porta,0 call long_delay goto cek_remote2
; nyalakan LED !
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 14 100 4 100K 16 33p
LED 1
Vdd MCLR# RB0 6 OSC1 PIC16F84 RB7 13 Vss 5
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 equ equ equ equ
h’0003’ h’0006’ h’0006’ h’0005’ h’0000’
;====================================== Mulai
org 0000
Putar
call Initport bcf Status,C movlw 0001 movwf 002F
; ; ; ;
panggil rutin initport clear carry flag isi 1 ke w untuk 1 led on simpan pada lokasi RAM 2FH
movf 002F,0 movwf PortB call Tunda rlf 002F,1 goto Putar
; ; ; ;
kirim isi lokasi RAM 2FH ke w kirim isi W ke PortB panggil rutin tunda geser ke kiri
;============================================ Tunda ;============================================ movlw d’255’ ; isi w dengan 255 desimal movwf 002E ; kirim isi w ke lokasi RAM 2EH T1 movlw d’255’ ; isi w dengan 255 desimal movwf 002D ; kirim isi w ke lokasi RAM 2DH T2 decfsz 002D ; decremet isi lokasi RAM 2DH goto T2 decfsz 002E ; decrement isi lokasi RAM 2EH goto T1 return ;=============================================== 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 14 100 4
Vdd MCLR# RA0 17
100K 16 33p
OSC1 PIC16F84
SWITCH
RB4 10 Vss 5
100
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 equ equ equ equ equ equ equ equ equ
h’0003’ h’0006’ h’0005’ h’0006’ h’0005’ h’0005’ h’0007’ h’0000’ h’0003’ h’000B’
LED 1
OptionReg equ h’0001’
org 0000 Goto Mulai Org 0004 ; awal rutin interupsi goto Interupsi Mulai Waste
call Initport sleep
; panggil rutin initport ; masuk mode sleep
nop goto Waste
;========== Interupsi ;========== btfsc Intcon,Rbif goto Servis nop return ;============= Servis ;============= bcf Intcon,Rbie movlw 1 movwf PortA call Tunda movlw 0 movwf PortA bcf Intcon,Rbif bsf Intcon,Rbie retfie
; check jika terjadi perubahan logika RB4~RB7 ; ya pergi ke servis
; lumpuhkan interupsi berikutnya ; nyalakan LED ; panggil rutin tunda ; ; ; ;
matikan LED reset bendera itnerupsi aktifkan lagi interupsi 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 4 4K7 16
7 x 100
Vdd 6 MCLR# RB0 OSC1
0,47uF
RB6
12
Vss 5 PIC16F84
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
Ulang
call initport clrf Hitung ; clear isi RAM 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 clrf TrisB
; bank 1 ; PortB sebagai keluaran
bcf Status,Rp0 return ;=========== Display ;=========== addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw
Pcl,1 003f ; 0006 ; 005b ; 004f ; 0066 ; 006d ; 007d ; 0007 ; 007f ; 006f ; 0077 ; 007c ; 0039 ; 005e ; 0079 ; 0071 ;
; bank 0
angka angka angka angka angka angka angka angka angka angka angka angka angka angka angka angka
0 1 2 3 4 5 6 7 8 9 a b c d e f
hex hex hex hex hex 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
18
LED1 LED2
1
LED3
14 17 4 CERAMIC RESONATOR 4.0 MHz
15 6 10 16
5
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 Servis_RB bcf INTCON,RBIE bsf PORTA,1 call Tunda bcf PORTA,1 bcf INTCON,RBIF bsf INTCON,RBIE retfie Servis_INT bcf INTCON,INTE bsf PORTA,2 call Tunda bsf PORTA,2 bcf INTCON,INTF bsf INTCON,INTE retfie
; ; ; ; ;
terjadi int_on_change? ya maka servis RB tidak, terjadi interupsi INT? ya maka servis INT tidak
; lumpuhkan sela RB selanjutnya ; nyalakan led 2 ; matikan led 2 ; clear bendera sela RB ; aktifkan lagi sela RB
; lumpuhkan sela INT selanjutnya ; nyalakan led 3 ; matikan led 3 ; clear bendera sela INT ; aktifkan lagi sela INT
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
5V
1
14
PIC16F84
RA2 RA1 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 movwf call movlw movwf call movlw movwf call call
0x38 portb pulse 0x0c portb pulse 0x06 portb pulse del_5
;8-bit, 5X7 ;0011 1000 ;pulse and delay ;display on, cursor off ;0000 1100 ;increment mode, no display shift ;0000 0110 ;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 Technology, Inc. NOLIST
Microchip
; 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 ;1.01 ;1.00
07/24/96 Renamed to reflect the name change to PIC16F84. 05/17/96 Corrected BADRAM map 10/31/95 Initial Release
;====================================================================== ; ; Verify Processor ; ;====================================================================== IFNDEF __16F84 MESSG "Processor-header file mismatch. processor." ENDIF
Verify selected
;====================================================================== ; ; Register Definitions ; ;====================================================================== W F
EQU EQU
H'0000' H'0001'
;----- Register Files-------------------------------------------------INDF TMR0 PCL STATUS FSR PORTA PORTB EEDATA EEADR PCLATH INTCON
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
H'0000' H'0001' H'0002' H'0003' H'0004' H'0005' H'0006' H'0008' H'0009' H'000A' H'000B'
OPTION_REG TRISA TRISB EECON1 EECON2
EQU EQU EQU EQU EQU
H'0081' H'0085' H'0086' H'0088' H'0089'
;----- STATUS Bits ---------------------------------------------------IRP RP1 RP0 NOT_TO NOT_PD Z DC C
EQU EQU EQU EQU EQU EQU EQU EQU
H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- INTCON Bits ---------------------------------------------------GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
EQU EQU EQU EQU EQU EQU EQU EQU
H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- OPTION Bits ---------------------------------------------------NOT_RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
EQU EQU EQU EQU EQU EQU EQU EQU
H'0007' H'0006' H'0005' H'0004' H'0003' H'0002' H'0001' H'0000'
;----- EECON1 Bits ---------------------------------------------------EEIF
EQU
H'0004'
WRERR WREN WR RD
EQU EQU EQU EQU
H'0003' H'0002' H'0001' H'0000'
;====================================================================== ; ; RAM Definition ; ;====================================================================== __MAXRAM H'CF' __BADRAM H'07', H'50'-H'7F', H'87' ;====================================================================== ; ; Configuration Bits ; ;====================================================================== _CP_ON _CP_OFF _PWRTE_ON _PWRTE_OFF _WDT_ON _WDT_OFF _LP_OSC _XT_OSC _HS_OSC _RC_OSC LIST
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
H'000F' H'3FFF' H'3FF7' H'3FFF' H'3FFF' H'3FFB' H'3FFC' H'3FFD' H'3FFE' H'3FFF'
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 : [email protected] )
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.