Setelah mengenal mikrokontroler PIC16F877, kini saatnya kita berkreasi menggunakan mikrokontroler ini. Hal sederhana yang bisa kita lakukan adalah membuat aplikasi menggunakan LED dan pushbutton.
Rangkaian yang digunakan ditunjukkan pada Gambar 1. Menggunakan resonator atau rangkaian kristal 20 MHz. Empat buah LED masing-masing dihubungkan dengan konfigurasi Common Anoda (sehingga perlu logika LOW untuk menghidupkan) ke RA0, RA1, RA2 dan RA3. Masing-masing LED dipasangi resistor 470 ohm untuk membatasi arus. Dua pushbutton kita konfigurasi aktif rendah (berlogika LOW saat ditekan) kita pasang masing-masing ke RA4 dan RA5, perhatikan penggunaan pullup resistor sebesar 10kohm. Sambungan ke downloader/programmer PICKit2 juga disediakan.
Gambar 1
Aplikasi yang akan kita buat adalah membaca tombol sedemikian hingga jika RA4 berlogika LOW maka LED yang terpasang pada RA0 akan berkedip-kedip, jika RA4 bernilai HIGH maka gantian RA1 yang akan berkedip-kedip…
Program selengkapnya sebagai berikut (menggunakan kompilator CCS):
// led_push01.c // created by Agfianto Eko Putra // this program is LED on/off
#include <16F877.h>
#FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=20000000)
void main() { set_tris_a(0xF0); // PORTA3,2,1,0 set as output and PORTA7,6,5,4 as input output_a(0x0F); // turn OFF all LEDs at port A3,2,1,0 while(true) { switch(input(PIN_A4)) // RA0 or RA1 { case 0: output_toggle(pin_a0); // toggle LED at RA0 break; case 1: output_toggle(pin_a1); // toggle LED at RA1 break; } delay_ms(500); } }
Penjelasan program
- Karena menggunakan mikrokontroler PIC16F877, maka berkas pustaka yang disertakan adalah “16f877.h”;
- Diikuti dengan beberapa definisi atau deklarasi terkait dengan pengaturan PIC16F877 itu sendiri, tidak menggunakan pewaktu Watchdog (NOWDT), kristal frekuensi tinggi (HS), tidak menggunakan fasilitas brownout (NOBROWNOUT) dan tidak menggunakan pemrograman dengan tegangan rendah (NOLVP);
- Selanjutnya dinyatakan berapa kristal atau resonator yang digunakan, yaitu 20 MHz, atau dituliskan #use delay(clock=20000000);
- Selanjutnya adalah program utama (void main());
- Port A yang digunakan untuk LED kita nyatakan sebagai luaran (output) sedangkan yang terhubungkan dengan tombol kita nyatakan sebagai masukan (input), cara menyatakan melalui register TRISA. Cara mengatur menggunakan perintah set_tris_a(0xF0) pada program C. Logika 0 menyatakan masukan, sedangkan logika 1 menyatak luaran;
- Matikan dulu semua luaran LED dengan memberikan logika HIGH (ingat LED dirangkaiaan menggunakan konfigurasi CA), menggunakan instruksi output_a(0x0F);
- Berikutnya membuat loop terus menerus menggunakan while(true);
- Untuk mengetahui atau membaca kondisi masukan pada RA4 digunakan instruksi input(PIN_A4). Untuk membuat kedip-kedip LED digunakan fasilitas togel ON/OFF pada RA0 dan RA1, menggunakan instruksi output_toggle(pin_a0) dan output_toggle(pin_a1);
- Digabungkan menggunakan instruksi switch(input(PIN_A4)) yang diikuti dengan pernyataan case 0 dan case 1, artinya apakah RA4 dalam kondisi LOW (0) atau HIGH (1), lakukan togel LED sesuai dengan kondisinya masing-masing;
- Untuk memberikan tundaan 500 milidetik atau setengah detik digunakan instruksi delay_ms(500);
- Demikian penjelasan singkat program tersebut, selanjutnya Anda dipersilahkan membuat modifikasi program dengan aneka kemungkinan penyalaan LED dan pembacaan tombol. Dan share melalui komentar, terima kasih sebelum dan sesudahnya.
Semoga bermanfaat…
Ditulis di Funabashi, Japan, 29 Nopember 2011