Cara Membuat Program Microcontroller PART III

Program disini tertulis lebih dari 10 baris ( tanpa komentar ), semakin panjang dan banyak program yang ditulis maka memori yang digunakan juga semakin besar. Memori mikrokontroller terbatas misal di Atmega16 hanya  16Kilobyte saja. Atmega 8535 hanya 8kilobyte. Sehingga optimasi code sangat diperlukan agar memori yang digunakan bisa digunakan semaksimal mungkin.
Misal kita ubah menjadi:

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

int i;  // ini variable i dgn type data integer.

void main(void)
{
    // komentar lama sudah di hapus,gak usah nanya lagi.
    DDRC=0xff;                                                            
    while (1){                       
        PORTC=0x00;         // matikan semua led
        delay_ms(500);      // tunda 0.5 s
        for(i=0;i<8;i++){   
            // program di dalam for ini akan di jalankan 8 kali,
            // dimuali dari i=0 sampai i=7.
  
            PORTC=0b00000001<<i;    
            // PORTC = 0b00000001 digeser kekiri sejauh i.

            delay_ms(500);          // tunda 0.5 s

              }      // kembali ke for lagi sampai i=7.
       
        } // kembali ke while                
     
};


Kok sedikit sekali ya.. beda sama sebelumnya.. ???.
Tapi hasilnya sama kan?. 
Program pertama (yang banyak itu) kita ubah pakai array. Dengan array ini kita bisa mengatur nyala led sesuka kita, hanya dengan mengubah nilai di dalam array itu, tanpa mengubah kode utamanya.
Contoh:

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

int i;  // ini variable i dengan type data integer.

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

/* array diatas mempunyai nama " nyala" dengan jumlah indek 9 (dari 0-8)
   dengan type data unsigned char.
   nyala[0]= nyala ke 0 diberi nilai 0b00000000
   nyala[1]= nyala ke 1 diberi nilai 0b00000001
   .... dst
   nyala[8]= nyala ke 8 diberi nilai 0b10000000
*/
                       
void main(void)
{
    // komentar lama sudah di hapus,tidak usah tanya lagi.
    DDRC=0xff;                                                            
    while (1){
                          
        for(i=0;i<9;i++){   // ulangi i=0 sd i-8  
            PORTC=nyala[i];    // PORTC = data "nyala" ke "i"
            delay_ms(500);   
              };
       
        };                 
     
};

Sama juga kan hasilnya???..