buku panduan pic16f84 _6_

30
1 BUKU PANDUAN BELAJAR MIKROKONTROLLER PIC16F84 By Ahmad Zarkasi, ST (Lab. Robotika dan Sistem Kendali) Buku ini didedikasikan untuk mahasiswa Fakultas Ilmu Komputer khususnya dan mahasiswa pada umumnya. Semoga bermanfaat. Amin….. Referensi by Prof. Yasuhiro Oyama Moh. Ibnu Malik

Upload: d4y4t20

Post on 27-Jun-2015

466 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Buku Panduan PIC16F84 _6_

1

BUKU PANDUAN BELAJAR MIKROKONTROLLER

PIC16F84

By Ahmad Zarkasi, ST

(Lab. Robotika dan Sistem Kendali)

Buku ini didedikasikan untuk mahasiswa Fakultas Ilmu

Komputer khususnya dan mahasiswa pada umumnya. Semoga

bermanfaat. Amin…..

Referensi by Prof. Yasuhiro Oyama

Moh. Ibnu Malik

Page 2: Buku Panduan PIC16F84 _6_

C P U

M E M

O R

ID

A T A

M E M

O R

IP R

O G

R A

M

8B IT

8B IT

C P U

M E

M O

R I

D A

T A

M E M

O R

IP R

O G

R A

M

1 4B IT

8B IT

a b

Mikrokontroler PIC16F84A

Mikroprosesor umumnya didesain berdasarkan arsitektur von Neumann, dimana

program dan data disimpan dalam memori yang sama. Mikrokontroler PIC16F84A

merupakan mikrokontroler dari keluarga PICmicro buatan Microchip Inc dan merupakan

mikrokontroler 8 bit dengan arsitektur Harvard. Adanya arsitektur Harvard memungkinkan

program dan data disimpan dalam memori yang berbeda dan ini akan membuat kerja

mikrokontroler lebih efisien dan perintah yang dimiliki lebih sedikit.

Instruksi yang dimiliki oleh mikrokontroler PIC16F84A hanya 35 buah, sehingga

mikrokontroler ini termasuk dalam golongan RISC (Reduced Instruction Set Computer).

Mikrokontroler RISC melaksanakan perintah lebih cepat daripada alat CISC (Complex

Instruction Set Computer). Gambar 2.1 melukiskan perbedaan antara arsitektur Harvard dan

arsitektur von Neumann.

Gambar 1. Arsitektur mikrokontroler dan mikroprosesor

a. Arsitektur Harvard b. Arsitektur von Neuman

Page 3: Buku Panduan PIC16F84 _6_

R A 1

R A 0

O SC 1 /C L K IN

O SC 2 /C L K O U T

V D D

R B 7

R B 6

R B 5

R B 4

18

17

16

15

14

13

12

11

109

8

7

6

5

4

3

2

1 R A 2

R A 3

R A 4 /T O C K

M C L R

V ss

R B O / IN T

R B 1

R B 2

R B 3

P IC 16F 84A

Mikrokontroler PIC16F84A yang banyak terdapat di pasaran adalah dalam kemasan

PDIP (Plastic Dual In Line) 18 pin, ini dapat dilihat pada gambar 2.2

Gambar 2. Pin - pin mikrokontroler PIC16F84A

2.1.1. Organisasi Memori Mikrokontroler PIC16F84A

Memori pada PIC16F84A dapat dipisahkan menjadi dua blok memori terpisah, yaitu :

A. Memori Program

Ukuran blok memori program mikrokontroler PIC16F84A adalah 1024

(0000h - 03FFh) lokasi dengan lebar kata (word) 14 bit. Lokasi 0000h dan 0004h

dicadangkan untuk vektor reset dan vektor interupsi. Memori program dibuat dengan

teknologi Enhanced FLASH (FLASH yang ditingkatkan), sehingga memori ini dapat

ditulis dan dihapus hingga 10.000 kali.

B. Memori Data

Blok memori data dapat dikelompokkan menjadi dua bagian, yaitu memori RAM

(dimana pada memori ini dibagi menjadi dua bank yang terdiri atas General Purpose

Register dan Special Function Register) dan memori EEPROM. 12 lokasi pertama pada

memori RAM digunakan untuk special function register, dan lokasi antara 0Ch - 4Fh

digunakan untuk general purpose register. Memori RAM tidak bersifat permanen, saat

power suplai dimatikan, isi dalam memori RAM akan terhapus.

Memori EEPROM tidak secara langsung dialamati, tetapi diakses dengan tak

langsung melalui register EEADR dan EEDATA. Memori EEPROM bersifat permanen

sehingga saat power suplai dimatikan, isi dalam memori ini tidak terhapus. Oleh karena

Page 4: Buku Panduan PIC16F84 _6_

PC <12:0>Program Counter

Stack level 1

Stack level 2

.

.

.

Stack level 8

Reset vektor address

Interrupt vektor address

Memori program

1024 x 14

INDF INDF

EEDATA

Memori data64 x 8 EEPROM

00h01h

3Eh3Fh

EEA

DR

TMR0 OPTIONPCL PCL

STATUS STATUSFSR FSR

PORTAPORTB

TRISATRISB

EEDATA EECON1EEADR EECON2PCLATH PCLATHINTCON INTCON

Unimplementedmemory location

Unimplementedmemory location

68 bytes RAM memoryGPR Register

Address Address00h01h02h03h04h05h06h

08h07h

09h0Ah0Bh0Ch

4Fh50h

7Fh

80h81h82h83h84h85h86h87h88h89h8Ah8Bh8Ch

CFhD0h

FFh

.

.

Data bus

Address bus

Address bus

0000h

0004h

8

Bank 0 Bank 1

inilah, memori EEPROM umumnya digunakan untuk menyimpan data - data yang

penting. Susunan memori pada mikrokontroler PIC16F84A dapat dilihat pada gambar 2

.

Gambar.3. Organisasi memori mikrokontroler PIC16F84A

Bagian - bagian umum dari memori data adalah sebagai berikut :

a. General Purpose Register (GPR)

GPR adalah register kegunaan umum yang lebarnya 8 bit dengan pengaksesan lokasi

alamat pada bank 1 sama dengan pengaksesan lokasi alamat pada bank 0.

Page 5: Buku Panduan PIC16F84 _6_

b. Special Function Register (SFR)

SFR adalah register kegunaan khusus yang mengatur operasi kerja mikrokontroler

PIC16F84A. Lokasi SFR adalah 00h - 0bh pada Bank 0, pada Bank 1 yaitu 80h - 8bh.

Pada gambar 2.3, dapat dilihat berbagai jenis register yang ada pada SFR.

c. EEPROM

Memori EEPROM pada mikrokontroler PIC16F84A berkapasitas 64 byte dan

berada pada lokasi 00h sampai 63h. Memori ini dapat ditulisi hingga satu juta kali dan

dapat bertahan walaupun catu daya dimatikan, serta mampu bertahan hingga 40 tahun

(berdasarkan datasheet PIC16F84A). Memori EEPROM ditempatkan pada ruang memori

khusus seperti yang dapat dilihat pada gambar 2.3 dan dapat diakses melalui register

khusus, register tersebut adalah :

• Register EEDATA

• Register EEADR

• Register EECON1

• Register EECON2

Mode Pengalamatan

a. Pengalamatan Langsung

Pengalamatan langsung dilakukan melalui alamat 9 bit. Alamat ini merupakan

rangkaian dari 7 bit alamat instruksi dan 2 bit dari RP0 dan RP1 pada register STATUS.

Contoh pengalamatan langsung adalah pengaksesan register FSR.

b. Pengalamatan Tak Langsung

Pengalamatan tak langsung dilakukan dengan cara menggunakan bit ke 7 (IRP)

dari register STATUS dan semua bit dari register FRS. Lokasi alamat diakses melalui

register INDF yang didalamnya berisi alamat yang ditunjukkan oleh RSR. Misalnya

alamat A0H berisi data 01H. dengan menuliskan 0AH pada register FSR, kita akan

mendapatkan petunjuk register pada alamat 0AH dan dengan membaca register INDF.

Kita akan mendapatkan data 01H. Contoh pengalamatan tidak langsung adalah pada

pengiriman data pada untuk komunikasi serial, saat bekerja dangan buffer dan

penghapusan memori RAM.

Page 6: Buku Panduan PIC16F84 _6_

Gambar 4. Mode Pengalamatan PIC16F84A

CPU (Central Prosessing Unit)

CPU berperan sebagai otak suatu mikroprosesor. Bagian ini bertugas untuk

menjalankan istruksi, melakukan pengkodean, mengeksekusi dan mengatur jalannya

program. Instruksi dalam bahasa assembly terdiri dari opcode (Mnemonic) dan operand.

Opcode menyatakan proses yang harus dilakukan atau kode-kode yang akan dilakukan

oleh program assembly yang ada pada komputer atau mikrokontroler. Cohtohnya MOV,

ADD, MUL dll. Sedangkan operand adalah bagian yang dioperasikan. Contoh w,05h (

ada 2 operand). Agar mikrokontroler dapat mengerti perintah opcode, maka instruksi

harus ditrjemahkan dulu kedalam biner “0’ atau “1”. Tugas ini dilakukan oleh translato

(software assembly atau compiler).

ALU (Arithmatic Logic Unit).

ALU merupakan bagian dari mikrokontroler yang bertanggung jawab terhadapt

operasi aritmaetik, seperti penjumlahan, pengurangan, perkalian pembagian dan

pergeseran. Serta operari Logika seperti AND, OR, NOR, XOR dan NOT. PIC16F84

Page 7: Buku Panduan PIC16F84 _6_

memiliki sebuah ALU 8 bit dan sebuah register kerja (W = Work regster atau

Accumulator untuk mikrokontroler jenis lain).

Untuk instruksi dengan 2 operand, operand bisa berupa register W atau F (File

register) atau sebuah konstanta (k). operand diartikan sebagai suatu yang dioperasikan.

Sementara register F digunakan untuk menyebut register selain register W, baik GPR

maupun FSR.

Gambar 5. Block Diagram PIC16F84A

Sedangkan pada instruksi dengan operan tunggal, operand bisa berupa register W

atau yang lain. Dalam operasi aritmatika ALU akan mempengaruhi bit-bit dalam register

STATUS.

Page 8: Buku Panduan PIC16F84 _6_

Register STATUS

Register ini berisikan status aritmatika dari ALU (C,DC,Z) status reset dan bit-bit

pemilih bank memori (IRP, RP1 dan RP0)

Gambar 6 Register Status

• Bit 0 = C (carry transfer)

Bit ini dipengaruhi oleh operasi penjumlahan, pengurangan dan pergeseran

1 = terjadi limpahan/pinjaman pada bit tertinggi

0 = tidak terjadi transfer

instruksi yang mempengaruhi ADDWF, ADDLW, SUBLW dll

• Bit 1 = DC (digit carry)

Jika terjadi limpahan dari bit3 ke bit4 atau dari bit4 ke bit3 pada operasi

penjumlahan, pengurangan dan pergeseran.

1 = jika terjadi limpahan dari bit 3 ke bit 4

0 = jika tidak terjadi tranfer

• Bit 2 = Z (zerro bit)

Jika hasil dari suatu operasi aritmatika dan logika adalah 0

1 = hasil operasi adalah nol

0 = hasil operasi adalah tidak sama dengan nol

• Bit 3 = PD (power down bit)

bit PD akan diset setelah power supply ON atau setelah eksekusi CLRWDT.

instruksi SLEEP akan mereset ketika mikrokontroler memasuki mode SLEEP.

1 = power supply ON

0 = saat eksekusi instruksi SLEEP

• Bit 4 = TO (timer out, WDT overflow)

Bit ini diset setelah power supply ON, eksekusi CLRWDT dan instruksi SLEEP.

Reset terjadi saat WDT overflow.

Page 9: Buku Panduan PIC16F84 _6_

1 = tidak terjadi overflow

0 = overflow

• Bit 5,6 : RP1 dan RP0 (Request Bank Select bit)

Kedua bit ini merupakan bit-bit pemilih bank pada mode pengalamatan langsung.

01 = bank 1

00 = bank 0

• Bit 7 : IRP (Register Bank Select bit)

Bit ini digunakan untuk pengalamatan tidak langsung

1 = bank 2 dan bank 3

0 = bank 1 dan bank 0

Register OPTION

Register ini merupakan register yang digunakan untuk mengatur prescaler, sisi

pulsa clock dan interrrupsi serta mengaktifkan resistor pull-up internal pada portB.

Gambar 7 Register OPTION PIC16F84A

Bit 0 s/d 2 : PS0, PS1, PS2 (prescaler rate select bit)

Tiga bit pertama dalam register ini digunakan untuk mengatur nilai prescaler.

Gambar 8 Table Prescaler untuk WDT

Page 10: Buku Panduan PIC16F84 _6_

Bit 3 : PSA (prescaler Assignment bit)

Bit ini digunakan untuk menentukan apakah nilai prescaler yang diberikan akan

digunakan bagi TMR0 atau WDT

1 = WDT

0 = TMR0

Bit 4 : TOSE (TMR0 sourse edge select bit)

Jika pulsa impulse dari in RA4/TOCKI diizinkan sebagai triger bagi TMR0, bit

ini akan menentukan apakah triger tersebut diambil pada posisi naik atau turun.

1 = sisi naik

0 = sisi turun

Bit 5 : TOCS (TMR0 clock sourse select bit)

Bit ini akan menentukan apakah increment pada TMR0 dipicu dari oscilator

internal pada ¼ clock oscilator atau diambil dari impulse pada RA4/TOCKI.

1 = impulse internal

0 = ¼ internal clock

Bit 6 : INTEDG (Interrupt edge select bit)

Bit ini digunakan untuk memilih tepi sinyal yang akan membangkitkan interupsi

melalui pin RB0/INT.

1 = sisi naik

0 = sisi turun

Bit 7 : RBPU (portB pull-up eneble bit)

Bit ini digunakan untuk mengaktifkan resistor pull-up internal pada port B.

1 = pull-up ON

0 = pull-up OFF

Program Counter

PC adalah suatu register 13 bit yang berisi alamat instruksi yang sedang

dieksekusi. PC terbagi menjadi PC Low dan PC High. PCL bersifat dapat dibaca dan

ditulis sedangkan PCH tidak dapat langsung dibaca dan ditulis. PCH hanya dapat ditulis

memalalui register PCLATH.

Page 11: Buku Panduan PIC16F84 _6_

Mikrokontroler PIC16F84 memiliki stack hingga 8 level dengan lebar data 13 bit.

Stack dapat diibaratkan sebagai 8 lokasi memori 13 bit untuk menyimpan nilai PC

apabila program melompat ke suatu subprogram.

Stack digunakan agar program dapat kembali dari subprogram ke progrm utama.

Pada saat program menuju subprogram PC akan didorong ke stack (misal pada perintah

CALL. Kemudian saat program memenuhi perintah RETURN, RETLW atau RETFILE

stack dapat dikembalikan ke PC. Dengan demikian proses dapat kembali ke program

utamanya.

Gambar 9 Stack PIC16F84A

Pembangkit Oscilator

Rangkaian oscilator merupakan rangkaian yang digunakan untk membangkitkan

clock pada mikrokontroler. Clock di perlukan untuk menyerempakkan proses yang

Page 12: Buku Panduan PIC16F84 _6_

berlangsung dalam mikrokontroler. Pengaktifan clock tersebut cukup dengan

menambahkan rangkaian pasif . mikrokontroler PIC16F84 memberikan empat pilihan

oscilator.

1. Oscilator Kristal

Oscilator kristal dibuat dalam kemasan logam yang tertera nilai frekuensi

oscilasinya. Osclator kristal memiliki 2 pin. Pada pemasangannya perlu

ditambahkan kapasitor pada masing-masing kakinya. Sementara kaki yang lain

dihubungkan ke ground. Oscilator kristal umumnya digunakan untuk sistem yang

menggunakan presisi waktu yang tinggi.

2. RC Oscilator

Untuk aplikasi yang tidak memerlukan presisi waktu yang tinggi, maka oscilatro

RC merupakan pilihan yang mudah. Oscilator ini memiliki frekuensi resonansi

bergantung pada tegangan catu daya, resistansi, kapasitansi dan suhu kerjanya.

Pada oscilator ini, nilai R yang kurang dari 2,2 kohm akan menyebabkan oscilator

tidak stabil atau berhenti beroscilasi. Sedangkan jika nilai R terlalu besar (di atas

1M ohm) oscilator akan sangat sensitif terhadap noise dan kelembapan. Oleh

karna itu dianjurkan agar nilai R berkisar antara 3 k ohm s/d 100 k ohm. Kapasitor

yang digunakan sebaiknya bernilai 20 pF untuk mencagah terjadinya noise dan

menjaga kestabilan.

Gambar 10. Oscilator RC PIC16F84A

3. WDT (WatchDog Timer)

WDT bukanlah hal baru dalam dunia mikrokontroler. WDT juga banyak terdapat

pada mikrokontroler yang lain. WDT menggunakan clock yang dibangkitkan oleh

rangkaian RC. Clock ini bersifat bebas terhadap clock eksternal yang disediakan

Page 13: Buku Panduan PIC16F84 _6_

oleh rangkaian luar. WDT digunakan untuk mencegah program masuk dalam

kondisi berhenti dalam waktu yang berlebihan. Stuck dapat terjadi dissat PIC

memonitor perubahan input namun perubahan tidak kunjung terjadi.

Ketikan WDT di-enablekan, WDT akan mencacah naik dari 00h s/d FFh. Saat

FFH + 1, akan terjadi perubahan dari FFH ke 00H. perubahan ini akan

menyebabkan WDT mereset PIC, tidak peduli apa yang sedang dilakukan PIC

saat itu. Ada 2 cara yang dapat dilakukan agar WDT tidak mereset:

Dengan men-disablekan WDT namun dengan resiko program akan stuck.

Dengan mereset WDT secara periodik sebelum WDT mencapai FFH.

Dalam menggunakan WDT terdapat 3 hal yang perlu diperhatikan:

Dari data sheet, default timeout WDT adalah 18 ms. Artinya WDT harus di clear

sebelum 18 ms. Untuk men reset WDT kita menggunakan perintah CLRWDT.

Meskipun timeout adalah 18 ms, kita dapat memperpanjang waktu timeout

dengan menggunakan prescaler. Prescaler dapat diprogram untuk membagi clock

pada WDT. Prescaler diatur melalui register OPTION pada bit 0 s/d 2.

Untuk mengatur prescaler, kita harus berada di bank 1 dan memasukkan nilai

prescaler pada register OPTION. Tapi sebelumnya timer TMR0 harus ditetapkan

0. setelah prescaler WDT ditetapkan, kita harus kembali ke bank 0 untuk instruksi

selanjudnya.

Agar penggunaan WDT dapat diketahui oleh PIC16F84, maka perlu adanya

pemberitahuan kepada PIC16F84 bahwa WDT telah di enablekan. Hal ini dapat

dilakukan melalui pengarah pada file ASM atau pada saat downloding file HEX.

Contoh: pada saat download pilih WDT pada fuse.

Waktu Siklus Instruksi

Clock dari oscilator masuk dimana rangkaian internal mikrokontroler akan

membagi clock tersebut menjadi empat bagian yang tidak saling overlap. Satu siklus

instruksi adalah waktu yang diperlukan untuk mengeksekusi sebuah instruksi, mulai dari

pengambilan instuksi, mendekode, mengeksekusi hingga penulisan kembali pada register

instruksi. Pada pic proses ini memerlukan 4 clock oscilator. Setiap sebuah instruksi

selesai dieksekusi nilai PC akan dinaikkan 1, kecuali untuk instruksi percabangan.

Page 14: Buku Panduan PIC16F84 _6_

Jika kita menggunakan kristal 4 Mhz, PIC akan bekerja pada kecepatan 1 MHz.

siklus instruksinya adalah 1 us.

Selain dengan cara manual, perhitungan waktu instruksi dapat dilakukan dengan

menggunakan simulasi menggunakan MPLAB SIM. Dengan cara ini kita dapat melihat

waktu instruksi melalui jendela stop watch pada MPLAB SIM.

Timer TMR0

Secara fisik, timer TMR0 merupakan sebuah register yang nilainya secara

kontinyu ditingkatkan dari 00 s/d 255 dan terus berulang. Aplikasi timer cukup kompleks

karena berhubungan dengan demensi nyata. Yaitu waktu dan variabel yang menyatakan

status waktu di dalam mikrokontroler. PIC16F84 memiliki TMR0 8 bit. Jumlah bit ini

menunjukkan nilai maksimum dari pencacahsn yang dapat dilakukan. Proses incremen

pada TMR0 dibangkitkan oleh cloc oscilator. Frekuensi clock oscilator dapat di bagi

dengan menggunakan prescaler untuk mendapatkan periode waktu yang lebih panjang.

Nilai pembagi dapat diprogram melalui 3 bit pertama pada register OPTION.

Seperti tleh dijelaskan sebelumnya, prescaler juga bisa digunakan pada WDT.

Cara penggunaannya adlah dengan mengatur bit PSA dalam register OPTION. Jika PSA

= 0 berarti prescaler difungsikan untuk TMR0. jika PSA = 1, maka difungsikan untuk

WDT.

Interupsi

Interupsi respon langsung terhadap beberapa kejadian pada saat peristiwa itu

terjadi tanpa mempedulikan apa yang sedang dikerjakan mikrokontroler saat itu. Secara

umum interupsi akan menyela dan sesudah mengeksekusi subprogram interupsi, maka ia

akan kembali melanjudkan pekerjaannya. Regsiter yang berfungsi untuk mengaktifkan

interupsi adalah INTCON.

Gambar 11. Register INCON PIC16F84A

Page 15: Buku Panduan PIC16F84 _6_

• Bit 0 = RBIF (portB change interrupt flag bit)

Bit ini menginformasikan perubahan status pada RB4 s/d RB7 pada portB

1 = terjadi perubahan status

0 = tidak terjadi perubahan status

• Bit 1 = INTF (INT extenal interrupt flag bit)

Bit ini akan di set jika terjadi interupsi eksternal. Jika suatu sisi sinyal yang

terdefinisi dalam bit INTEDG (pada reg OPTION) terdeteksi pada bin RB0/INT,

maka bit INTF akan diset, dan harus dibersihkan agar intrupsi berikutnya dapat

terdeteksi lagi.

1 = terjadi interupsi eksternal

0 = tidak terjadi interupsi

• Bit 2 = TOIF (TMR0 overflow interrupt flag bit)

Bit ini mendeteksi jika terjadi overflow pada TMR0

1 = terjadi overflow

0 = tidak terjadi oveflow

• Bit 3 = RBIE (PortB change interrup enable bit)

RBIE akan menentukan apakah suatu interupsi saat terjadi perubahan status pad

pin RB4 s/d RB7 diizinkan atau tidak.

1 = interupsi diizinkan

0 = interupsi tidak diizinkan

• Bit 4 = INTE (INT external interrupt enable bit)

INTE menentukan apkah interupsi eksternal diizinkan atau tidak

1 = interupsi diizinkan

0 = interupsi tidak diinginkan

• Bit5 = TOIE (TMR0 overflow interrupt enable bit)

TOIE ini menentukan apakah suatu interupsi salama TMR0 overflow diizinkan

atau tidak

1 = interupsi diizinkan

0 = interupsi tidak diizinkan

Page 16: Buku Panduan PIC16F84 _6_

• Bit 6 = EEIE (EEPROM write complete intrrupt enable bit)

EEIE menentukan apakah interupsi pada saat akhir penulisan EEPROM diizinkan

atau tidak.

1 = interupsi diizinkan

0 = interupsi tidakk diingikan

• Bit 7 = GIE (global interrupt enable bit)

GIE akan menentukan semua jenis interupsi dibolehkan atau tidak sama sekali.

1 = semua interupsi diizinkan

0 = interupsi tidak diizinkan

Sumber-sumber Intrupsi

• Interupsi Eksternal pada Pin RB0/INT

Interrupsi eksternal pada pin RB0/INT dipicu oleh sisi naik (jika bit INTEDG = 1)

atau sisi turun (INTEDG = 0). Ketika perubahan sinyal yang diizinkan terjadi

pada pin ini, bit INTF pada register INTCON akan diset. Bit INTF harus direset

dalam rutin interupsi, sehingga interupsi tidak terjadi berulang kembali ke

program yang sama. Interupsi dapat dihentikan dengan mereset bit INTE pada reg

INTCON.

• Interupsi selama TMR0 Overflow

Overflow pada TMR0 akan menetapkan bit TOIF. Interupsi ini sangat penting

karena banyak persoalan yang dapat datasi menggunakan interupsi ini. Contohnya

adalah pengukuran waktu. Jika kita tahu waktu yang dibutuhkan counter untuk

menyelesaikan satu siklus pencacah dari 00h – FFh, maka cacahan interupsi

dikalikan dengan waktu tersebut akan menghasilkan total waktu yang telah

terlewati. Dalam rutin interupsi beberapa variabel di incremenkan didalam

memori RAM, nilai variabel tersebut kemudian dikalikan dengan waktu 1 siklus

counter sehingga menghasilkan total waktu yan dilewati. Interupsi ini dapat

dilakukan dengan mengaktifkan bit TOIE pada reg. INTCON.

• Interupsi selama perubahan status pada pin RB4 s/d RB7

Perubahan sinyal input pada port B <4:7> akan menetapkan bit RBIF. Keempat

pin tersebut dapat menyebabkan interupsi ketika status tersebut berubah dari 0 ke

Page 17: Buku Panduan PIC16F84 _6_

1 atau sebaliknya. Agar pin-pin ini sensitif terhadap perubahan ini, maka mereka

harus didefinisikan sebagai input. Jika ada yang difefinisikan sebagai output maka

ia tidak akan merasakan terjadinya perubahan status. Interupsi pada pin-pin ini

dapat diaktifkan dengan mengatur bit RBIE pada reg INTCON.

• Interupsi saat penulisan EEPROM selesai

Penulisan satu lokasi EEPROM memerlukan waktu sekitar 10 ms. Penulisan

tersebut tidak memdapatkan perhatian penuh dari CPU. Oleh karena itu,

mekanisme interupsi digunakan agar mikrokontroler diizinkan untuk melanjudkan

perkerjaan, sementara proses penulisan EEPROM tetap berlangsung. Jika

penulisan telah selesai, interupsi akan mengimformasikan pada CPU bahwa

penulisan EEPRO telah selesai. Bit EEIF pada register EECON1 akan diset saat

selesai penulisan selesai.

Memori Data EEPROM

EEPROM berkapasitas 64 byte dan berada pada lokasi 00h – 63h. register yang

dapat mengakses register ini adalah:

1. EEDATA (08h), yang memegang data saat pembacaan dan penuliasan dilakukan.

2. EEADR (09H), berisi alamat EEPROM yang sedang diakses

3. EECON1 (88H), berisi bit-bit kendali

4. EECON2 (89h), digunakan unutk menjaga kesalahan penulisan pada EEPROM.

Register EECON1

Merupakan register kendali yang memiliki 5 bit saja, sedangkan 3 bit lainnya

tidak digunakan.

Gambar 12. Register EECON1 PIC16F84A

Page 18: Buku Panduan PIC16F84 _6_

• Bit 0 : RD (read control bit)

Penetapan nilai pada bit ini akan menginisialisaikan tranfer data dari alamat yang

didefinisikan EEADR ke reg EEDAT. Data dari EEDATA dapat langsung

digunakan oleh instruksi berikutnya karena waktu tidak menjadi masalah dalam

proses pembacaan.

1 = inisialisasi pembacaan data EEPROM

0 = tidak menginisialisasikan pembacaan

• Bit 1 : WR (write control bit)

Penetapan nilai pada bit ini akan menginisialisasikan siklus penulisan data pada

memori eksternal.

1 = siklus penulisan sedang dilaksanakan

0 = siklus penulisan data selesai

• Bit 2 : WREN (EEPROM write enable bit)

Jika bit ini di set, penulisan ke EEPROM diperbolehkan. Jika clear

mikrokontroler tidak akan mengizinkan penulisan ke EEPROM.

1 = Penulisan EEPROM diizinkan

0 = penulisan EEPROM tidak diizinkan

• Bit 3 : WRERR (write EEPROM error flag bit)

Bit ini akan mendeteksi terjadinya error pada proses penulisan

1 = terjadi error

0 = tidak terjadi error

• Bit 4 : EEIF (EEPROM write operation interrupt bit)

Bit ini digunakan untuk membritahukan bahwa penulisan EEPROM telah selesai.

Jika telah selesai penulisan maka bit ini akan diset secara otomatis. Program harus

meng-clearkan bit ini agar akhir dari proses penulisa yang baru dapat dideteksi.

1 = Penulisan EEPROM selesai

0 = penulisan EEPROM belum selesai atau belum dimulai

Page 19: Buku Panduan PIC16F84 _6_

RESET

Reset digunakan agar mikrokontroler dapat dikembalikan pada kondisi awal. Pada

kondisi tertentu mikrokontroler dapat memasuki kondisi tak tentu akibat terjebak dalam

suatu loop atau sebab lain. Reset tidak hanya digunakan untuk keluar dari kondisi

tertentu, tapi juga sering digunakan pada proses pengembangan sistem. Bila saat anda

menyalakan PIC, dan program tidak berjalan, mungkin anda perlu meresetnya terlebih

dahulu. Terdapat beberapa sumber reset:

• Reset saat power ON (POR)

• Reset pada saat operasi normal sedang dijalankan akibat pin MCLR/Vpp

berlogika rendah. Pin MCLR merupakan pin aktif rendah yang dapat

menyebabkan terjadinya reset jika berlogika 0. untuk mencegah agar tidak

terjadinya reset pada saat yang tidak diinginkan, maka perlu ditambahkan resistor

pull-up ke Vdd. Resistor pull-up ini digunakan untuk menjaga pinMCLR/Vpp

berlogika 1. besarnya nilai resistor ini sebaiknya antara 5 kOomh da 10 kohm.

• Reset selama mode SLEEP

• Reset saat WDT overflow ketika operasi normal sedang berlangsung

• Reset saat WDT overflow selama mode SLEEP

Mode SLEEP

Mode SLEEP adalah salah satu fasilitas pada PIC16F84 yang digunakan untuk

menghemat daya. Pada mode ini PIC hanya akan menggunakan arus beberapa uAmper.

Mode ini dapat diaktifkan saat program mengeksekusi instruksi SLEEP.

PIC16F84 dapat dibangunkan dari mode SLEEP oleh kondisi-kondisi berikut:

• Terjadi reset eksternal pada pin MCLR/Vpp

• WDT mencapai time out

• Interupsi

- Perubahan reg port B

- Pin RB0/INT

- Penulisan EEPROM selesai

Page 20: Buku Panduan PIC16F84 _6_

PORT

Pic16f84 memiliki 2 port yaitu port A (5 I/O) dan port B ( 8 I/0). Ada beberapa

pin yangmempunyai fungsi khusus:

• RA4/TOCKI

Selain sebagai I/O biasa pin ini juga perfungsi sebagai masukan clock eksternal

untuk TMR0. jika pin RA yang lain memiliki level input TTL dan tipr output

penggerak CMOS, maka RA4 mimiliki buffer input Schitt Trigger dan output

open drain.

• RB7 s/d RB4

Keempat pin tersebut dapat digunakan untuk jalur masukan jika terjadinya

interupsi. Tapi hanya pin-pin yang dikonfigurasikan sebagai input yang akan

terpengaruh untukmembangkitkan inetrupsi. RB7 dan RB6 juga berfungsi sebagai

jalur data dan clock serial pada mode pemrograman. Semua pin pada port B

memiliki resistor pull-up internal yang dapat diaktifkan menggunakan software,

yakni dengan mengatur bit RBPU (OPTION.7)

• RB0/INT

Pin ini dapat digunakan untuk jalur interupsi eksternal. Jika pin ini digunakan

untuk input interupsi eksternal, pin ini akan memiliki buffer tiper Schemitt

trigger.

Page 21: Buku Panduan PIC16F84 _6_

Pengarah Aliran Program

Instruksi-instruksi PIC16F84 juga dapat dikelompokan berdasarkan media

opersainya:

• Instruksi literal dan kontrol

Simbol ‘ k ‘ pada intruksi literal dan kontrol menunjukkan suatu nilai literal, suatu

nilai konstanta dan label

• Instruksi berorientasi byte

Untuk instruksi berorientasi byte, ‘ f ‘ menunjukan suatu register file dan ‘ d ‘

menunjukan suatu tujuan yang merupakan lokasi untuk menyimpan hasil operasi.

Apabila ‘ d = 0 ‘ hasil operasi akan ditempatkan pada register ‘ W ‘, jika ‘ d = 1’

hasil operasi akan diletakkan pada register file yang bersangkutan.

• Insturksi berorientasi bit

Pada instruksi ini, ‘ b ‘ menunjukkan area bit (lokal bit) yang dijadika objek

operasi tersebut. Sedangkan ‘ f ‘ tetap menunjukkan register file tempat bit

tersebut berada.

Simbol-simbol dalam penulisan program adalah sbb:

• f register file

• W register kerja (work) sebagai Accumulator

• b alamat bit

• k area literal, konstanta atau label

• x don’t care

• d tujuan

d = 0 , hasil operasi diletakkan di register W

d = 1 , hasil operasi ditempatkan di register f

• label nama suatu bagian program

• TOS Top of Stack

• PC program counter

Page 22: Buku Panduan PIC16F84 _6_

Instruksi - instruksi Mikrokontroler PIC16F84A

Mikrokontroler adalah suatu ic yang dapat diprogram untuk mengontrol suatu alat,

sehingga unjuk kerjanya dapat diubah dengan hanya mengubah program (software) yang

ada didalamnya. Program tersebut berwujud kode - kode biner “1” dan “0” dan umumnya

terbagi atas dua bagian, yaitu operasi menggunakan kombinasi bit yang berbeda. Bagian

ini biasanya disebut dengan kode operasi (operation code = op code). Bagian kedua

adalah operand yang memberitahukan CPU mikrokontroler dimana data harus disimpan

atau dicari, atau menunjukkan operasi yang akan dilaksanakan. Namun tidak mungkin

bagi pembuat program untuk mengingat deretan angka “1” dan “0” untuk membuat suatu

program. Untuk memudahkan membuat program maka dibuatlah suatu mnemonic.

Bahasa rakitan (assembly language) adalah contoh bahasa tingkat rendah yang

menggunakan mnemonic sebagai pengganti angka biner. Setiap mikrokontroler memiliki

bahasa assembler yang berbeda, untuk mikrokontroler PIC16F84A menggunakan bahasa

microchip assembler.

Mikrokontroler PIC16F84A hanya dapat diisi dengan program yang disimpan

dalam format “nama_file.hex”. Untuk mengubah program bahasa assembler diperlukan

suatu program yang dapat mengkompilasi format “nama_file.asm” menjadi

“nama_file.hex”. Microchip Inc selaku produsen mikrokontroler PIC16F84A telah

menyediakan perangkat lunak (software program) berbasis Windows bernama Microchip

MPLAB. MPLAB IDE yang digunakan oleh penulis dalam tugas akhir ini adalah versi

5.20, software program ini telah memiliki editor teks, kompiler program dan simulasi

program sebelum diisikan ke mikrokontroler.

Karena mikrokontroler PIC16F84A tergolong mikrokontroler tipe RISC, sehingga

instruksi yang digunakan relatif lebih sedikit, hanya 35 instruksi. Instruski-instruksi

tersebut terdiri atas :

A. Transfer data

Transfer data dalam mikrokontroler PIC16F84A dilakukan antara register kerja

“W” (Working register) dan register file f (baik GPR maupun SFR). Instruksi ini

digunakan untuk memindahkan data antar register. Instruksi yang termasuk dalam

transfer data, yaitu :

Page 23: Buku Panduan PIC16F84 _6_

1. movlw = Move constant to W

digunakan untuk memindahkan nilai literal ke register W artinya kita dapat

memuati register W dengan nilai tertentu.

Operasi : Movlw k

Contoh : movlw 02h : isi reg W dangan nilai 02h

2. movwf = Move W to f

untuk mengkopi isi reg W ke reg f

operasi : movwf f

contoh : movwf temp : isi reg W ke reg temp

3. movf = Move f to d

untuk mengkopi isi reg f ke reg W jika d = 0 atau ke reg f jika d = 1

operasi : movf f,d

contoh : movf temp,0 : kopikan isi reg temp ke reg w karna d = 0

4. clrw = Clear W

mereset reg W atau nilai reg W = 0

operasi : clrw

cohtoh : clrw : isi reg W dengan 00h

5. clrf = Clear f

mereset reg f atau nilai reg f = 0

operasi : clrf f

contoh : clrf temp : isi reg temp dengan 00h

6. Swapf = Swap nibble of f

Digunakan untuk menukar nible atas dan nible bawah pada reg f dan hasilnya

diletakkan di reg tujuan ‘d ‘. Jika d = 0 maka hasil disimpan di reg f dan jika d =

0 maka hasil disimpan di reg W.

Operasi : swapf f,d

Contoh ; swapf temp,0 : tukar nible atas dengan nible bawah isi reg temp

dan hasil di simpan di reg W

Page 24: Buku Panduan PIC16F84 _6_

B. Operasi aritmatika dan logika

Mikrokontroler PIC16F84A hanya mengenal operasi aritmatika berupa

penjumlahan dan pengurangan. Hasil dari operasi ini adalah perubahan bendera bit C,

DC, dan Z yang ada pada register STATUS. Instruksi logika yang dapat dilakukan oleh

mikrokontroler ini diantaranya operasi AND, OR, XOR maupun rotasi. Instruksi yang

termasuk dalam golongan ini, yaitu :

1. addlw = Add literal and W

digunakan untuk menjumlahkan suatu literal atau konstanta dengan isi reg W. dan

hasilnya disimpan di reg W.

operari : addlk k

contoh : addlk num : is reg num + isi reg W dan hasilnya disimpan di

reg W

2. addwf = Add f and W

digunakan untuk menjumlahkan isi reg W dengan isi reg f, hasilnya disimpan di

tujuan.

Operasi ; addwf f,d

Contoh : addwf num,1 : isi reg num + isi reg W dan hasilnya disimpan di

reg num

3. sublw = Subtract W from literal

mengurangkan isi reg W dengan literal atu konstanta , hasilnya disimpan di reg W

operasi : sublw k

contoh : sublw 08h : kurangkan isi reg Wdengan kontanta 08h, hasilnya

disimpan di reg W

4. subwf = Subtract W from f

mengurangkan isi reg W dengan isi reg f, hasilnya disimpan di reg tujuan ‘d ‘

operasi : subwf f,d

contoh : subwf num,0 : isi reg W – reg num, hasilnya disimpan di reg W

5. andlw = And literal with W

AND-kan niali literal dengan isi reg W, haslnya disimpan di reg W

Operasi ; andlw k

Page 25: Buku Panduan PIC16F84 _6_

Contoh : andlw A0h : nilai A0h di AND-kan dengan isi reg W. disimpan

di reg W

6. andwf = And W with f

meng-AND-kan isi reg W dengan isi reg f. hasil disimpan di reg tujuan ‘d ‘

operasi : andwf f,d

contoh : andwf log,0 : isi reg log di AND kan dengan isi reg W, hasil

disimpan di reg W

7. iorlw = Inclusive OR W with literal

meng-OR-kan isi reg W dengan nilai literal ‘ k ‘. Hasilnya disimpan di reg W

operasi : iorlw k

contoh : iorlw AAh : isi reg W di OR kan dengan data AAH. Hasilnya

disimpan di reg W

8. iorwf = Inclusive OR W with f

meng-OR-ka isi reg W dengan reg f, hasilnya disimpan di reg tujuan

operasi ; iorwf f,d

contoh : iorwf log,1 : isi reg W di OR kan dengan isi reg log, disimpan

di reg log.

9. xorlw = Exclusive OR W with literal k

meng-XOR-kan isi reg W dengan nilai literal k, hasil disimpan di reg W

operasi : xorlw k

contoh : xorlw 34h : isi reg W di XOR kan dengan data 34h, disimpan

di reg W

10. xorwf = Exclusive OR W with f

meng-XOR-kan isi reg W dangan isi reg f, hasil disimpan di reg tujuan

operasi : xorwf f,d

contoh : xorwf log,0 : isi reg W di XOR kan dengan isi reg log, hasil

dismpan di reg W

11. incf = Increment f

digunakan untukmenaikkan 1 data reg f, hasilnya disimpan di reg tujuan d

Page 26: Buku Panduan PIC16F84 _6_

operasi : incf f,d

contoh : incf count,1 : naikkan 1 isi reg count, hasil disimpan di reg count

12. decf = Decrement f

digunakan untuk mengurngkan 1 dat reg f, hasilnya di simpan di reg tujuan d

operasi : decf f,d

contoh : decf count,0 : turunkan 1 isi reg count, hasil disimpan di reg W.

13. rlf = Rotate Left f

digunakan untuk menggeser kekiri isi reg f. hasil disimpan di reg tujuan d

operasi : rlf f,d

contoh : rlf temp,0 : geser kekiri data reg temp, hasil disimpan di reg W

14. rrf = Rotate Right f

digunakn untuk menggeser kekanan isi reg f, hasil disimpan di reg tujuan d

operasi : rrf f,d

contoh : rrf temp,1 : geser kekanan data reg temp, hasil disimpan di reg

temp

15. comf = Complement f

digunakan untuk mengkomplemenkan isi reg f, hasil disimpan di reg tujuan d

operasi ; comf f,d

contoh : comf temp,0 : komplemenkan isi reg temp, hasil disimpan di reg W

C. Operasi bit

Operasi bit dilakukan dengan instruksi BCF atau BSF, instruksi ini digunakan

untuk menetapkan atau menghapus suatu bit dalam sebuah register. Instruksi yang

termasuk dalam golongan ini, yaitu :

1. bcf = Bit Clear f

digunakan untuk meng-clear-kan bit reg f,

operasi : bcf f,b

Page 27: Buku Panduan PIC16F84 _6_

cohtoh : bcf buff,4 : bit ke 4 dari reg buff di clear kan

2. bsf = Bit Set f

digunakan untuk mengset bit pada reg f

operasi : bsf f,b

contoh : bsf buff,3 : bit ke 3 dari reg buff di set

D. Operasi pengarah aliran data

1. btfsc = Bit Test f, Skip if Clear

digunakan untuk menguji logika suatu bit pada reg f. jika hasilnya 0, maka

instruksi selanjudnya dilompati. Jiak hasilnya 1, maka insrtuksi selanjudnya di

eksekusi.

Operasi ; btfsc f,b

Contoh ; btfsc num,3 : cek bit3 pada reg num, jika nol lompati instruksi

berikutnya.

2. btfss = Bit Test f, Skip if Set

digunakan untuk memeriksa bit pada reg f. jika 1 lompati instruksi selanjutnya,

jika 0 eksekusi instruksi selanjudnya.

Operasi ; btfss f,b

Contoh : btfss num,3 : cek bit ke 3 reg num. jika 1 lompati instruksi

selanjudnya.

3. decfsz = Decrement f, Skip if Zero

digunakan untuk melakukan decremen reg f. kemudian memeriksa hasilnya. Jika

0 instruksi berikutnya dilompati. Hasil disimpan di rek tujuan d.

operasi ; decfsz f,d

contoh : decfsz num,0 :decremenkan isi reg num, hasil di simpan di reg W.

Jika hasilnya 0 lompati instruksi selanjudnya

4. infsz = Incement f, Skip if Zero

digunakan untuk melakukan incremen reg f. kemudian memeriksa hasilnya. Jika

0 instruksi berikutnya dilompati. Hasil disimpan di rek tujuan d.

operasi ; incfsz f,d

contoh : incfsz num,0 : decremenka isi reg num, hasil di simpan di reg W.

Jika hasilnya 0 lompati instruksi selanjudnya

Page 28: Buku Panduan PIC16F84 _6_

5. goto = Go to address

digunakan untuk mengarahkan program kesuatu alamat tertentu

operasi : goto k

contoh : goto label/0x12 : menuju label atau alamat 0x12

6. call = Call subroutine

digunakan untuk memanggil suatu subrutine

operasi : call k

contoh : call tunda : memanggil subrutine tunda

7. return = Return from subroutine

digunakan untuk kembali dari subrutin ke program utama.

Operasi : return

Contoh : return

8. retlw = Return with literal

digunakan untuk kembali dari subrutin ke program utama, tapi reg W di isikan

data dari literal yang menyertainya.

Operasi : retlw k

Contoh : retlw o2h :

9. retfie = Return from interrupt

digunakan untuk kembali dari rutin interup.

Operasi : retfie

Contoh ; retfie

E. Instruksi - instruksi lain

1. nop = No operation

2. clrwdt = Clear Watch Dog Timer

digunakan untuk mereset WDT. Saat WDT di-enablekan, WDT harus direset

sebelum mencapai overflow, agar mikrokontroler tidak reset

operasi : clrwdt

contoh : clrwdt

Page 29: Buku Panduan PIC16F84 _6_

3. sleep = Go to Standby mode or Sleep

digunakan untuk membawa mikrokontroler ke keadaan stanby

operasi : sleep

contoh : sleep

Page 30: Buku Panduan PIC16F84 _6_