P. 1
Cara Membuat Program Microcontroller

Cara Membuat Program Microcontroller

|Views: 88|Likes:
Published by Agung Imam Rahmanto
materi buat temen - temen yang ingin belajar tentang mikrokontroler
materi buat temen - temen yang ingin belajar tentang mikrokontroler

More info:

Published by: Agung Imam Rahmanto on Mar 31, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

09/29/2013

pdf

text

original

Cara Membuat Program Microcontroller

Jika sudah mempelajari tentang seluk-beluk pemrograman bahasa C langkah selanjutnya adalah “ mulailah mencoba” atau saatnya beraksi. Permasalahan klasiknya adalah “dari mana dulu??”. Nah lo.. dari mana?. “ apa dulu yang di kerjakan?.. “ nulis apa dulu?”. oke.. oke.. gak usah bingung. Mari kita bahas satu-persatu. Membuat program / code pada dasarnya adalah untuk memecahkan masalah. Panjang pendeknya program dan bentuk program tidak dipermasalahkan yang terpenting adalah program tersebut dapat menyelesaikan masalah yang ada. Lalu masalahnya apa?. Contoh : Membuat led menyala berjalan: masalahnya adalah bagaimana membuat beberapa buah lampu led agar seolah-olah menyala berjalan !!!. setelah mengetahui masalahnya selanjutnya kita identifikasi masalah tersebut, kita harus membuat/ mengetahui/membayangkan skematik hardwarenya. Misal:

Dari skema diatas dapat di identifikasi 8 buah led terhubung di PORTC.0 sampai PORTC.7 led akan menyala jika output PORT berlogika 1. ditambah ada 3 saklar di PORTB.0, PORTB.1 dan PORTB.2 (tambahan saja). PORT yang ke tombol akan berlogika 0 jika tombol ditekan. Hardware dah tau.. terus?. Langkah selanjutnya adalah membuat/membayangkan/memikirkan/melamunkan logika berfikir cara kerjanya. Kita harus berfikir sistematis bagaimana 8 led tersebut agar nampak menyala berjalan. misal Logikanya adalah seperti ini: pertama matikan semua led kemudian tunda beberapa saat. Selanjutnya nyalakan led di PORTC.0 kemudian tunda dulu beberapa saat. Setelah itu matikan led di PORTC.0 dan nyalakan Led di PORTC.1 kemudian tunda lagi beberapa saat.. lanjut matikan led di PORTC.1 dan nyalakan led di PORTC.2 tunda lagi beberapa saat.. dan seterusnya sampai led di PORTC.7 menyala kemudian tunda, selanjutnya ulangi lagi dari langkah pertama.. begitu seterusnya selamanya..

1

// <------end void main. kita tambahkan perintah PORT di bawahnya yang nilainya kebalikan dari DDR. PORTD=0xf0. delay_ms(500).4 s/d PORTD.4 nyalakan led di PORC.6 = output |_ _ _ PORTC. Jika satu port saja cara penulisan: PORT<NAMA PORT>.artinya variable data bernilai PIND.7 = sebagai input).2 nyalakan led di PORC.Artinya variabel data bernilai dari semua PORTD.0 s/d PORTD.h> // ini untuk perintah tundaan.3 = sebagai output. Buatlah new project.5 detik // matikan led di PORC. PORTC=0b10110110. PORTC=0b00000010. PORTA. delay_ms(500).Buka software codevisionAVR.5 detik // matikan led di PORC.0 s/d PORTD. // delay_ms(100). /* | | |_ _ _ PORTC. delay_ms(500). DDR adalah register untuk mengatur i/o sebagai input atau output. PORTC=0b00000100.artinya (PORTD. CONTOH LAGI: DDRA.4 s/d PORTD.1 // tunda 0.5 detik // matikan led di PORC. dan PORTD.3 = 0 dan PORTD..5 detik // matikan led di PORC. #include <delay. PORTC=0b01000000.4 // tunda 0.5 detik // <------sampai disini program diulangi lg dari while (1) Build program diatas.5 detik // matikan led di PORC. /* Catatan: dalam bahasa pemrograman C setiap menulis pernyataan harus diakhiri dengan tanda ” .artinya keluarkan Ob11110000 di PORTD.perulangan tiada henti.1=0.0 nyalakan led di PORC.6 nyalakan led di PORC. Bagai mana mengubah arah nyalanya led? Misal ini menyala kekanan bagaimana supaya menyala kekiri?.5 detik // nyalakan led di PORC.0 = output | |_ _ _ _ PORTC. PORTC=0b00010000.0 saja. Cara penulisan : DDR<NAMAPORT> atau DDR<NAMA PORT>.<NOMOR PORT> CONTOH: DDRA=0x0f. PORTA=0xf0. delay_ms(500). delay_ms(500). delay_ms(500).7 // tunda 0.<NOMOR PORT> CONTOH : PORTA. tunda selama 100 millisecond // delay_us(100). PORTC=0b00100000.Artinya keluarkan logika 0 di PORTA.2 // tunda 0.3 // tunda 0.. . Setelah disimpan. .5 detik // matikan led di PORC.5 detik // matikan led di PORC.< NOMOR PORT > CONTOH: data=PIND. hapus saja semua tetapi sisakan header dan void main() nya saja. delay_ms(500). 2 .6 // tunda 0. . (PORTD. tunda selama 100 microsecond void main(void) { //pertama kita membuat inisialisasi port DDRC=0xff. PORTC=0b10000000. ”. bingung?. . }. }.h> // ini library untuk chip ATmega 16. Perintah PORTC digunakan untuk akses keseluruhan (8 bit PORTC). CONTOH: DDRA=0x0f. = DDRC=0b11111111. PORTC=0b00001000.7 = 1).5 // tunda 0.5 nyalakan led di PORC.1=0. // DDRC=0xff.1 sampai PORTC.1 nyalakan led di PORC. delay_ms(500). data=PIND. kemudian di coba / disimulasikan.0 // tunda 0.7 = output DDR = data direction. lagi : DDRC=0b01001001. nah lo.3 nyalakan led di PORC.1 saja. untuk mengatur port sebagai input atau dijadikan output */ // setelah inisialisasi selanjutnya kita realisasikan logika berfikirnya while (1){ PORTC=0b00000000. . contoh programnya sesuai logika berfikir di postingan sebelumnya: #include <mega16. */ // <-------. delay_ms(500).0. untuk mengaktifkan resistor pull-up internal.1=1. Untuk input : PIN < NAMA PORT > atau PIN < NAMA PORT >. jika ada yang sebagai input. PORTC=0b00000001. // matikan semua led // tunda 0.

Sehingga optimasi code sangat diperlukan agar memori yang digunakan bisa digunakan semaksimal mungkin.0b00010000.i<8. Atmega 8535 hanya 8kilobyte. Dengan array ini kita bisa mengatur nyala led sesuka kita. 0b00100000. // ini variable i dgn type data integer. Kok sedikit sekali ya.h> #include <delay. // matikan semua led delay_ms(500). // ini variable i dengan type data integer. void main(void) { // komentar lama sudah di hapus. DDRC=0xff. 3 .Program disini tertulis lebih dari 10 baris ( tanpa komentar ).0b00000001. /* array diatas mempunyai nama " nyala" dengan jumlah indek 9 (dari 0-8) dengan type data unsigned char. beda sama sebelumnya.. Program pertama (yang banyak itu) kita ubah pakai array. ???. PORTC=0b00000001<<i.gak usah nanya lagi. Tapi hasilnya sama kan?.0b01000000.. 0b00000010.5 s for(i=0.i++){ // program di dalam for ini akan di jalankan 8 kali. // dimuali dari i=0 sampai i=7. while (1){ PORTC=0x00. unsigned char nyala[9]= {0b00000000. hanya dengan mengubah nilai di dalam array itu. } // tunda 0.h> int i.0b00000100. semakin panjang dan banyak program yang ditulis maka memori yang digunakan juga semakin besar. Misal kita ubah menjadi: #include <mega16.h> #include <delay.0b10000000}. Contoh: #include <mega16. // tunda 0.h> int i. // PORTC = 0b00000001 digeser kekiri sejauh i. } // kembali ke while }. delay_ms(500). tanpa mengubah kode utamanya. Memori mikrokontroller terbatas misal di Atmega16 hanya 16Kilobyte saja.5 s // kembali ke for lagi sampai i=7. 0b00001000.

}.. Mari kita belajar penggunaan prosedur.tidak usah tanya lagi.. Tiap orang logika berfikirnya pasti berbeda . Lanjut. // PORTC = data "nyala" ke "i" delay_ms(500).nyala[0]= nyala ke 0 diberi nilai 0b00000000 nyala[1]= nyala ke 1 diberi nilai 0b00000001 . sesuai kreatifitas masing-masing.0 dan PINB.0b10000000}. while (1){ for(i=0.i<9. unsigned char nyala[9]= {0b00000000.tidak usah tanya lagi. // PORTC = data "nyala" ke "i" delay_ms(500). 0b00000010. artinya jika tombol PINB. void main(void) { // komentar lama sudah di hapus.. } } Hayo. silahkan di pahami.0b00000001. Yang penting masalah terselesaikan.. jadi kalo programnya tidak sama dengan yang lain.i++){ // ulangi i=0 sd i-8 PORTC=nyala[i]. 0b00100000.. ya. // ini variable i dgn type data integer. DDRC=0xff.0b00010000. Kita gunakan tombol yang ada di PINB.h> #include <delay.0 di tekan makan 4 .h> int i.0b00000100...i++){ // ulangi i=0 sd i-8 PORTC=nyala[i].. 0b00001000. }. apanya yang berubah???. Contoh: #include <mega16.1 . }. DDRC=0xff. void led_jalan(){ for(i=0. Sama juga kan hasilnya???.. itu bukan masalah. while (1){ led_jalan().beda. }. }.i<9. Tombol terhubung dengan ground.0b01000000. Terakhir kita modifikasi supaya bisa berubah arah nyala lednya jika tombol di pencet. dst nyala[8]= nyala ke 8 diberi nilai 0b10000000 */ void main(void) { // komentar lama sudah di hapus.

// PORTC = data "nyala" ke "8 dikurangi i" } delay_ms(500). void main(void) { DDRC=0xff.0b00000100. // variable jalan awalnya bernilai 0 while (1){ if (PINB.1 ditekan jalan=1. Contoh: #include <mega16. 0b00100000.0b00000001. Maka kita perlu mengaktifkan resistor pull-up internal.i++){ // ulangi i=0 sd i-8 if (arah == 0){ // jika nilai arah =0. DDRB=0b11111000.h> int i.0==0 || PINB.PINB. } } }.0 ditekan jalan=0. if (PINB.3 sbg input PORTB=0b00000111.h> #include <delay.0==0){ // jika tombol di PINB. // variable jalan diberi nilai 0 } if (PINB. Jika tidak di tekan PINB. // panggil prosedur led_jalan(nilai arah = 0). }. PORTC=nyala[i]. }. // variable i dan jalan dgn type data integer.1==0){ // jika tombol PINB.i<9. }.0b00010000.0 tidak berlogika apa-apa (mengambang). // aktifkan resistor pull-up internal jalan=0. // PORTC = data "nyala" ke "i" }else{ // jika nilai bukan =0. 0b00000010.PORTB. 0b00001000. unsigned char nyala[9]= {0b00000000. // variable jalan diberi nilai 1 } if (jalan==0){ // jika variable jalan = 0 led_jalan(0).0 atau PINB. PORTC=nyala[8-i]. // keluar dari for. void led_jalan(unsigned char arah){ for(i=0.0b01000000.jalan.1 ditekan break.0 . // panggil prosedur led_jalan(nilai arah = 1). }else if(jalan==1){ led_jalan(1).1==0){ // jika tombol di PINB.0b10000000}. // PORTB. 5 . Supaya ketika tidak di tekan berlogika 1.0 berlogika 0.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->