|
BUKU PANDUAN BELAJAR MIKROKONTROLLER PIC16F84 Ahmad Zarkasi, ST Lab. Robotika dan Sistem Kendali Fakultas Ilmu Komputer Universitas Sriwijaya Buku ini didedikasikan untuk mahasiswa Fakultas Ilmu Komputer khususnya dan mahasiswa pada umumnya. Semoga bermanfaat. Amin….. Referensi by Prof. Yasuhiro Ohyama Moh. Ibnu Malik Andi Pratomo
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 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 inilah, memori EEPROM umumnya digunakan untuk menyimpan data - data yang penting. Susunan memori pada mikrokontroler PIC16F84A dapat dilihat pada gambar 3. . 
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 selanjutnya. 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. >> bersambung ke bagian 2
|