buku panduan pic16f84 _6_
TRANSCRIPT
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
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
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
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.
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.
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
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.
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.
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
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.
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
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
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.
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
• 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
• 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
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
• 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
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
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.
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
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 :
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
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
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
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
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
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
3. sleep = Go to Standby mode or Sleep
digunakan untuk membawa mikrokontroler ke keadaan stanby
operasi : sleep
contoh : sleep