Cara Membuat Program Microcontroller PART IV


Tiap orang logika berfikirnya pasti berbeda - beda, sesuai kreatifitas masing-masing, jadi kalo programnya tidak sama dengan yang lain, ya.. itu bukan masalah. Yang penting masalah terselesaikan..
Lanjut.. Mari kita belajar penggunaan prosedur.
Contoh:

#include <mega16.h>
#include <delay.h> 


int i;  // ini variable i dgn type data integer.
unsigned char nyala[9]= {0b00000000,0b00000001,
                         0b00000010,0b00000100,
                         0b00001000,0b00010000,
                         0b00100000,0b01000000,0b10000000};

void led_jalan(){

      for(i=0;i<9;i++){   // ulangi i=0 sd i-8  
            PORTC=nyala[i];    
            // PORTC = data "nyala" ke "i"
            delay_ms(500);   
        };
    };
                       
void main(void)
{
    // komentar lama sudah di hapus,tidak usah tanya lagi.
    DDRC=0xff;   
                                                         
    while (1){   
              
        led_jalan();

        }                 
     
}


Hayo.. apanya yang berubah???.. silahkan di pahami.

Terakhir kita modifikasi supaya bisa berubah arah nyala lednya jika tombol di pencet. Kita gunakan tombol yang ada di PINB.0 dan PINB.1 . Tombol terhubung dengan ground, artinya jika tombol PINB.0 di tekan makan PINB.0 berlogika 0. Jika tidak di tekan PINB.0 tidak berlogika apa-apa (mengambang). Supaya ketika tidak di tekan berlogika 1. Maka kita perlu mengaktifkan resistor pull-up internal.
Contoh:


#include <mega16.h>
#include <delay.h> 

int i,jalan;  // variable i dan jalan dgn type data integer.

unsigned char nyala[9]= {0b00000000,0b00000001,
                         0b00000010,0b00000100,
                         0b00001000,0b00010000,
                         0b00100000,0b01000000,0b10000000};

void led_jalan(unsigned char arah){
      for(i=0;i<9;i++){   // ulangi i=0 sd i-8  
            if (arah == 0){       // jika nilai arah =0;
                PORTC=nyala[i];    
                // PORTC = data "nyala" ke "i" 
            }else{                // jika nilai bukan =0;
                PORTC=nyala[8-i];    
                // PORTC = data "nyala" ke "8 dikurangi i" 
            }
            delay_ms(500);

            if (PINB.0==0 || PINB.1==0){ 
                // jika tombol di PINB.0 atau PINB.1 ditekan
                break;   // keluar dari for.   
            }  
        }
    };
                
      
void main(void)
{
    DDRC=0xff;       
   
    DDRB=0b11111000; // PORTB.0 - PORTB.3 sbg input
    PORTB=0b00000111; // aktifkan resistor pull-up internal 
   
    jalan=0;     // variable jalan awalnya bernilai 0
                                                              
    while (1){  
        if (PINB.0==0){ // jika tombol di PINB.0 ditekan
            jalan=0; // variable jalan diberi nilai 0 
            }  
        if (PINB.1==0){ // jika tombol PINB.1 ditekan
            jalan=1; // variable jalan diberi nilai 1 
            }
        if (jalan==0){  // jika variable jalan = 0
            led_jalan(0);   
            // panggil prosedur  led_jalan(nilai arah = 0);
        }else if(jalan==1){
            led_jalan(1); 
            // panggil prosedur  led_jalan(nilai arah = 1);

              };                  
       
        };                 
     
};