Monday, 18 June 2012

AVR MIKROKONTROLLER


AVR MIKROKONTROLER 

DASAR TEORI
F PERCOBAAN I. 
Mengeluarkan Output ke PORTB (8xled merah)
- Led terhubung dengan PORTB
#define F_CPU 11059200 //xtal yang dipakai
#include "avr/io.h"
#include "util/delay.h"
#define led PORTB
//=====================================subrutin init devices
void init_devices()
{
                  DDRB=255; //PORTB sebagai output
}
//=========================================program utama
                   int main()
{
                   init_devices(); //panggil sub rutin init devices
                   for(;;) //pengulangan
{
                                led=255; //aktifkan semua led
                               _delay_ms(1000); //tunda 1 detik
                               led=0; //matikan semua led
                              _delay_ms(1000); //tunda 1 detiku
                        }
}
//===========================================
 
F PERCOBAAN II. 
Mengeluarkan Output ke PORTB (8xled merah) dan buzzer
- Led terhubung dengan PORTB
- Buzzer terhubung dengan PORTA.7
//===========================================
#define F_CPU 11059200
#include "avr/io.h"
#include "util/delay.h"
#define led PORTB
#define buzzer_hi PORTA|=(1<<7)
#define buzzer_lo PORTA&=~(1<<7)
//===========================================
void init_devices()
     {
DDRB=255;
DDRA|=(1<<7);
      }
      //======================================program utama
     int main()
   {
            init_devices();
            for(;;)
            {
                        led=255;
                        buzzer_hi;
                        _delay_ms(1000);
                        buzzer_lo;
                        led=0;
                        _delay_ms(1000);
     }
}
//===========================================

F PERCOBAAN III. 
Membaca input push button untuk mengontrol 8 x led
- Led terhubung dengan PORTB
- push button terhubung dengan pind.2 dan pind.3
#define F_CPU 11059200
#include "avr/io.h"
#include "util/delay.h"
#define led PORTB
#define tombol PIND
#define satu 2
#define dua 3
//===========================================
void init_devices()
{
DDRB=255; //LED OUTPUT
DDRD&=~(1<<2); //INPUT
DDRD&=~(1<<3); //INPUT
PORTD|=(1<<2); //PULL UP INTERNAL AKTIF
PORTD|=(1<<3);
      }
     //=======================================program utama
    int main()
    {
            init_devices();
            led=0;
            for(;;)
            {
            if(bit_is_clear(tombol,satu)) led=255;
            if(bit_is_clear(tombol,dua)) led=0;
}
    }
   //===========================================
F PERCOBAAN IV
Mengeluarkan Output ke PORTB (8xled merah) dengan interval waktu on dan off led 1 detik menggunakan timer 1
Nah sebelumnya kita cari nilai TCNT1?
- XTAL 11.0592
- PRESCALER 1024
- WAKTU YANG DIINGINKAN 1 DETIK
inget rumus: TCNT1 = (1+0xFFFF) - (waktu *( XTAL / prescaler) )
Jadi,...............
TCNT1= (1+65535)-(1detik * (11059200/1024))
=65536 - (1detik*10800)
=65536-10800
=54736 (desimal)
= D5D0 (heksadesimal) 

#define F_CPU 11059200
#include "avr/io.h"
#include "util/delay.h"
#define led PORTB
//===========================================
void init_devices()
{
DDRB=255;
}
void delay1detik()
{
TCCR1B=0B00000101;
TCNT1=0xd5d0;
            while(!(TIFR&(1<<TOV1)));
TIFR=4;
TCCR1B=0B00000000;
}
//=========================================program utama
int main()
{
            init_devices();
            for(;;)
            {
                        led=255;
                        //_delay_ms(1000);
                        delay1detik();
                        led=0;
                        //_delay_ms(1000);
                        delay1detik();
            }
}
//===========================================

F PERCOBAAN V
Mengeluarkan Output ke PORTB (8xled merah) dengan interval waktu on dan off led 1 detik menggunakan timer 2
#define F_CPU 11059200
#include "avr/io.h"
#include "util/delay.h"
#define led PORTB
//===========================================
void init_devices()
{
            DDRB=255;
}
void delay10ms()
{
            TCCR2=0B00000111;
            TCNT2=0x94;
            while(!(TIFR&(1<<TOV2)));
            TIFR=64;
            TCCR2=0B00000000;
}
void delay1detik()
{
            unsigned char ulang;
            for(ulang=0;ulang<100;ulang++)
            {
                        delay10ms();
            }
}
//=========================================program utama
int main()
{
                        init_devices();
            for(;;)
            {
                        led=255;
                        //_delay_ms(1000);
                        delay1detik();
                        led=0;
                        //_delay_ms(1000);
                        delay1detik();
            }
}
//===========================================

F PERCOBAAN VI
Mengeluarkan Output ke PORTB (8xled merah) dengan interval waktu on dan off led 1 detik menggunakan timer 0
 #define F_CPU 11059200
#include "avr/io.h"
#include "util/delay.h"
#define led PORTB
//===========================================
void init_devices()
{
DDRB=255;
} 
void delay10ms()
{
            TCCR0=0B00000101;
                        TCNT0=0x94;
            while(!(TIFR&(1<<TOV0)));
            TIFR=1;
            TCCR0=0B00000000;
}
void delay1detik()
{
            unsigned char ulang;
            for(ulang=0;ulang<100;ulang++)
            {
                        delay10ms();
            }
}
//=========================================program utama
int main()
{
            init_devices();
            for(;;)
            {
                                    led=255;
                        //_delay_ms(1000);
                        delay1detik();
                        led=0;
                        //_delay_ms(1000);
                        delay1detik();
            }
}
//===========================================

F PERCOBAAN VII
Menulis karakter ke LCD  
#define F_CPU 11059200UL
#include "util/delay.h"
#include "stdlib.h"
#include "avr/io.h"
#include "avr/pgmspace.h"
#define led PORTB
#define tombol PIND
#define satu 2
#define dua 3
#define LCD_RS_HI PORTC|=(1<<7) //LCD
#define LCD_RS_LO PORTC&=~(1<<7)
#define LCD_EN_HI PORTC|=(1<<6)
#define LCD_EN_LO PORTC&=~(1<<6)
#define LCD_D4_HI PORTC|=(1<<5)
#define LCD_D4_LO PORTC&=~(1<<5)
#define LCD_D5_HI PORTC|=(1<<4)
#define LCD_D5_LO PORTC&=~(1<<4)
#define LCD_D6_HI PORTC|=(1<<3)
#define LCD_D6_LO PORTC&=~(1<<3)
#define LCD_D7_HI PORTC|=(1<<2)
#define LCD_D7_LO PORTC&=~(1<<2)
//==============================================
#define line1 0x00
#define line2 0x40
//===========================================
void LCD_STROBE()
{
            LCD_EN_HI;
            LCD_EN_LO;
}
void lcd_write(unsigned char datalcd)
{
if(datalcd & 0x80) {LCD_D7_HI;} else {LCD_D7_LO;}
if(datalcd & 0x40) {LCD_D6_HI;} else {LCD_D6_LO;}
if(datalcd & 0x20) {LCD_D5_HI;} else {LCD_D5_LO;}
if(datalcd & 0x10) {LCD_D4_HI;} else {LCD_D4_LO;}
LCD_STROBE();
if(datalcd & 0x08) {LCD_D7_HI;} else {LCD_D7_LO;}
if(datalcd & 0x04) {LCD_D6_HI;} else {LCD_D6_LO;}
if(datalcd & 0x02) {LCD_D5_HI;} else {LCD_D5_LO;}
if(datalcd & 0x01) {LCD_D4_HI;} else {LCD_D4_LO;}
LCD_STROBE();
_delay_ms(5);
}
 void lcd_clrscr()
{
LCD_RS_LO;
lcd_write(0x1);
_delay_ms(2);
            }

void lcd_putc(unsigned char c)
{
                        LCD_RS_HI;
                        lcd_write(c);
}
void lcd_puts(const char *s)
{
                        register char c;

                        while ( (c = *s++) ) {
                                    lcd_putc(c);
                        }
}
void lcd_puts_pp(const char *progmem_s)
{
                        register char c;
                                    for(;;)
                                                {
                        c = pgm_read_byte(progmem_s++);
                        if(c==0) break;
                                    lcd_putc(c);
                        }
}
void lcd_goto(unsigned char poslcd)
{
                        LCD_RS_LO;
                        lcd_write(0x80 + poslcd);
            }
void init_lcd()
{
            LCD_RS_LO;
            _delay_ms(15);
            LCD_D4_HI;
            LCD_D5_HI;
            LCD_STROBE();
            _delay_ms(5);

            LCD_STROBE();
            _delay_us(100);
            LCD_STROBE();
            _delay_ms(5);
            LCD_D4_LO;
            LCD_STROBE();
            _delay_us(40);
            lcd_write(0x28);
            lcd_write(0x0C);
                        lcd_write(0x06);
            lcd_write(0x01);
            _delay_ms(10);
            }
//==================================================
void init_devices()
{
            DDRB=255; //LED OUTPUT
            DDRD&=~(1<<2); //INPUT
            DDRD&=~(1<<3); //INPUT
            PORTD|=(1<<2); //PULL UP INTERNAL AKTIF
            PORTD|=(1<<3);
            DDRC=255;
}
//=========================================program utama
int main()
{
            _delay_ms(100);
            init_devices();
                        init_lcd();
            led=0;
            for(;;)
            {
                        lcd_goto(line1);
                        lcd_puts("hallo lcd");

                        lcd_goto(line2);
                        lcd_puts("lcd lcd ");

                        for(;;)
                        {
                        }
}
}
//========================================================= 

   LANGKAH – LANGKAH  PRAKTIK

1)         Jalankan aplikasi B51PEB pada komputer

2)         Ketikkan program yang akan dibuat pada text editor dengan cara menekan
            Tombol D.

3)         Setelah program diketikkan, simpan program dengan nama file yang
            dinginkan.h51.

4)         Lalu tekan alt + X dan tekan alt + M untuk mengetahui program yang error

5)         Setelah tidak ada program yang error, kemudian compile file yang telah disave tadi dengan cara tekan O lalu tekan H kemudian muncul nama filenya selanjutnya tekan Enter.

6)         Kemudian buka program untuk mengetahui outputnya. Pada device selection pilih AT89S51 dan XTAL nya ubah menjadi 11 MHZ.

7)         Load file dan pilih file yang telah disimpan tadi lalu open.

8)         Jika ada muncul program, maka di lakukan erase selanjutnya klik write flash.


HASIL DAN DATA PRAKTIK
1.    Hasil dan data untuk program pertama yaitu sebagai berikut :
#define F_CPU 11059200 //xtal yang dipakai
#include "avr/io.h" //Memanggil fungsi input atau output pada library AVR
#include "util/delay.h" //Memanggil library delay untuk waktu tunda
#define led PORTB //Memberikan nama led pada register PORTB
//=======================================subrutin init devices
void init_devices() //Memanggil program utama
{ //Statement
DDRB=255; // Data Direction Register  PORTB sebagai output  
} //Statement
//==========================================program utama
int main() //Program utama
{  //Statement
init_devices(); //Panggil sub rutin init devices
for(;;) //Pengulangan
{ //Statement
led=255; //Aktifkan semua led
_delay_ms(1000); //Tunda 1 detik
led=0; //Matikan semua led
_delay_ms(1000); //Tunda 1 detik
} //Statement
} //Statement
//===========================================

2.    Hasil dan data untuk program kedua yaitu sebagai berikut :
//===========================================
#define F_CPU 11059200 // xtal yang dipakai
#include "avr/io.h" //Memanggil fungsi input atau output pada library AVR
#include "util/delay.h" //Memanggil library delay untuk waktu tunda
#define led PORTB // Memberikan nama led pada register PORTB
#define buzzer_hi PORTA|=(1<<7) //Menyalakan LED pada port A pin 1 -7
#define buzzer_lo PORTA&=~(1<<7) //Menyalakan LED pada port A
      dari pin 1 -7
//===========================================
void init_devices() //Memanggil program utama
{ //Statement
DDRB=255; // Data Direction Register  PORTB sebagai output
DDRA|=(1<<7); // Data Direction Register  PORTA sebagai output  
       dari pin 1-7
 } //Statement
 //==========================================program utama
int main() //Program utama
{ //Statement
init_devices(); // Panggil sub rutin init devices
for(;;)  //Pengulangan
{ //Statement
led=255; // Aktifkan semua led
buzzer_hi; //Buzzer tinggi
_delay_ms(1000); //Tunda 1 detik
buzzer_lo; //Buzzer rendah
led=0; //Mematikan semua led
_delay_ms(1000); //Tunda 1 detik
     } //Statement
} //Statement
//===========================================

3.    Hasil dan data untuk program ketiga yaitu sebagai berikut :
#define F_CPU 11059200 // xtal yang dipakai
#include "avr/io.h" //Memanggil fungsi input atau output pada library AVR
#include "util/delay.h"//Memanggil library delay untuk waktu tunda
#define led PORTB //Memberikan nama led pada register PORTB
#define tombol PIND //Menentukan tombol PIND
#define satu 2 //PIND tombol 1 untuk tombol 2
#define dua 3 //PIND tombol 2 uuntuk tombol 3
//===========================================
void init_devices() // Memanggil program utama
{ //Statement
DDRB=255; //LED OUTPUT //Data Direction Register  PORTB
      sebagai output  
DDRD&=~(1<<2); //INPUT //Data Direction Register  PORT&
    sebagai input  dari pin 1-2
DDRD&=~(1<<3); //INPUT //Data Direction Register  PORT&
                                                    sebagai input  dari pin 1-3
PORTD|=(1<<2); //PULL UP INTERNAL AKTIF //Mengaktifkan
kondisi sebelum program utama
PORTD|=(1<<3); //Mengaktifkan  PORTD dari pin 1-3
 }  //Statement
//==========================================program utama
    int main() //Program utama
    { //Statement
init_devices(); // Panggil sub rutin init devices
led=0; //Mematikan semua led
for(;;) //Penglangan
{ //Statement
if(bit_is_clear(tombol,satu)) led=255; //Jika bit dihapus tombol 1
maka semua led akan menyala
if(bit_is_clear(tombol,dua)) led=0; //Jika bit dihapus tombol 2
maka semua led akan mati
} //Statement
    } //Statement
   //===========================================

4.    Hasil dan data untuk program keempat yaitu sebagai berikut :
#define F_CPU 11059200 // xtal yang dipakai
#include "avr/io.h" //Memanggil fungsi input atau output pada library AVR
#include "util/delay.h" //Memanggil library delay untuk waktu tunda
#define led PORTB //Memberikan nama led pada register PORTB
//===========================================
void init_devices() //Memanggil program utama
{ //Statement
DDRB=255; // Data Direction Register  PORTB sebagai output  
} //Statement
void delay1detik() //Memanggil waktu tunda 1 detik
{ //Statement
TCCR1B=0B00000101; //Nilai prescaler yaitu 1024 dengan biner
                                                                   111 pada register TCCR1
TCNT1=0xd5d0; // TCNT1 = (1+0xFFFF) - (waktu *( XTAL /
         prescaler) ) Hasilnya dibuat Hexadesimal
while(!(TIFR&(1<<TOV1))); //Pada register TIFR di set (diberi
logika 1) di TOV1
TIFR=4; // Timer/Counter Interrupt Flag Register bernilai 4
TCCR1B=0B00000000; //Nilai prescaler yaitu 0 dengan biner 000
     pada register TCCR1
    } //Statement
//==========================================program utama
int main() //Program utama
{ //Statement
init_devices(); //Panggil sub rutin init devices
for(;;) //Pengulangan
{  //Statement
led=255; //Menyalakan semua led
//_delay_ms(1000); //Tunda 1 detik
delay1detik(); //Tunda 1 detik
led=0; //Mematikan semua led
//_delay_ms(1000); //Tunda 1 detik
delay1detik();  //Tunda 1 detik
} //Statement
} //Statement
//===========================================

5.    Hasil dan data untuk program kelima yaitu sebagai berikut :
#define F_CPU 11059200 //xtal yang dipakai
#include "avr/io.h" //Memanggil fungsi input atau output pada library AVR
#include "util/delay.h" //Memanggil library delay untuk waktu tunda
#define led PORTB  //Memberikan nama led pada register PORTB
//===========================================
void init_devices() //Memanggil program utama
{ //Statement
DDRB=255; //Data Direction Register  PORTB sebagai output  
} //Statement
void delay10ms() // Memanggil waktu tunda 0.01 detik
{ //Statement
TCCR2=0B00000111; //Nilai prescaler yaitu 1024 dengan biner
                                                                   111 pada register TCCR2
TCNT2=0x94; //Isi ulang 0x94 agar 1 detik
while(!(TIFR&(1<<TOV2))); Pada register TIFR di set (diberi
logika 1) di TOV2
TIFR=64; //Timer/Counter Interrupt Flag Register bernilai 64
TCCR2=0B00000000; //Nilai prescaler yaitu 0 dengan biner
                                                                   000 pada register TCCR2
} //Statement
void delay1detik() //Memanggil waktu tunda 1 detik
{ //Statement
unsigned char ulang; //Pernyataan akan dijalankan jika kondisi
 terpenuhi
for(ulang=0;ulang<100;ulang++) //Membuat looping data dari 0-
100
{  //Statement
delay10ms(); //Tunda 0.01 detik
} //Statement
} //Statement
//==========================================program utama
int main() ; Program utama
{ //Statement
init_devices(); //Panggil sub rutin init devices
for(;;) //Pengulangan
{ //Statement
led=255; //Menyalakan semua led
//_delay_ms(1000); //Tunda 1 detik
delay1detik(); //Tunda 1 detik
led=0; //Mematikan semua led
//_delay_ms(1000); //Tunda 1 detik
delay1detik();  //Tunda 1 detik
} //Statement
} //Statement
//===========================================

6.    Hasil dan data untuk program keenam yaitu sebagai berikut :
#define F_CPU 11059200 //xtal yang dipakai
#include "avr/io.h" //Memanggil fungsi input atau output pada library AVR
#include "util/delay.h" //Memanggil library delay untuk waktu tunda
#define led PORTB //Memberikan nama led pada register PORTB
//===========================================
void init_devices() //Memanggil program utama
{ //Statement
DDRB=255; //Data Direction Register  PORTB sebagai output  
}  //Statement
void delay10ms() //Memanggil waktu tunda 0.01 detik
{ //Statement
TCCR0=0B00000101; //Nilai prescaler yaitu 256 dengan biner
     101 pada register TCCR0
TCNT0=0x94; //Isi ulang 0x94 agar 1 detik
while(!(TIFR&(1<<TOV0))); //Pada register TIFR di set (diberi
logika 1) di TOV0
TIFR=1; // Timer/Counter Interrupt Flag Register bernilai 1
TCCR0=0B00000000; //Nilai prescaler yaitu 0 dengan biner
     000 pada register TCCR0
} //Statement
void delay1detik() //Memanggil waktu tunda 1 detik
{ //Statement
unsigned char ulang; //Pernyataan akan dijalankan jika kondisi
 terpenuhi
for(ulang=0;ulang<100;ulang++) //Membuat looping data dari 0-
100
{ //Statement
delay10ms(); //Tunda 0.01 detik
}  //Statement
} //Statement
//==========================================program utama
int main() //Program utama
{ //Statement
init_devices(); // Panggil sub rutin init devices
for(;;) //Pengulangan
{ //Statement
led=255; //Menyalakan semua led
//_delay_ms(1000); //Tunda 1 detik
delay1detik(); //Tunda 1 detik
led=0; //Mematikan semua led
//_delay_ms(1000); //Tunda1 detik
delay1detik(); //Tunda 1 detik
}  //Statement
}  //Statement
//===========================================
7.    Hasil dan data untuk program ketujuh yaitu sebagai berikut :
#define F_CPU 11059200UL // xtal yang dipakai
#include "util/delay.h" // Memanggil library delay untuk waktu tunda
#include "stdlib.h" // Menambahkan library
#include "avr/io.h" // Memanggil fungsi input atau output pada library AVR
#include "avr/pgmspace.h" // Mengakses port serial
#define led PORTB // Memberikan nama led pada register PORTB
#define tombol PIND // Menentukan tombol PIND
#define satu 2 // PIND tombol 1 untuk tombol 2
#define dua 3 // PIND tombol 2 untuk tombol 3
#define LCD_RS_HI PORTC|=(1<<7) //LCD //
#define LCD_RS_LO PORTC&=~(1<<7) //
#define LCD_EN_HI PORTC|=(1<<6) //
#define LCD_EN_LO PORTC&=~(1<<6) //
#define LCD_D4_HI PORTC|=(1<<5) //
#define LCD_D4_LO PORTC&=~(1<<5) //
#define LCD_D5_HI PORTC|=(1<<4) //
#define LCD_D5_LO PORTC&=~(1<<4) //
#define LCD_D6_HI PORTC|=(1<<3) //
#define LCD_D6_LO PORTC&=~(1<<3) //
#define LCD_D7_HI PORTC|=(1<<2) //
#define LCD_D7_LO PORTC&=~(1<<2) //
//==============================================
#define line1 0x00 // Line 1 berada di alamat 00H
#define line2 0x40 // Line 2 berada di alamat 40H
//===========================================
void LCD_STROBE() // Memanggil lcd strobe
{ //Statement
LCD_EN_HI; //Menampilkan karakter lcd bernilai tinggi
LCD_EN_LO; // Menampilkan karakter lcd bernilai rendah
} //Statement
void lcd_write(unsigned char datalcd) //Menulis tampilan LCD
{ //Statement
if(datalcd & 0x80) {LCD_D7_HI;} else {LCD_D7_LO;} //
if(datalcd & 0x40) {LCD_D6_HI;} else {LCD_D6_LO;} //
if(datalcd & 0x20) {LCD_D5_HI;} else {LCD_D5_LO;} //
if(datalcd & 0x10) {LCD_D4_HI;} else {LCD_D4_LO;} //
LCD_STROBE(); //Menampilkan pada lcd strobe
if(datalcd & 0x08) {LCD_D7_HI;} else {LCD_D7_LO;} //
if(datalcd & 0x04) {LCD_D6_HI;} else {LCD_D6_LO;} //
if(datalcd & 0x02) {LCD_D5_HI;} else {LCD_D5_LO;} //
if(datalcd & 0x01) {LCD_D4_HI;} else {LCD_D4_LO;} //
LCD_STROBE(); //Menampilkan pada lcd strobe
_delay_ms(5); //Tunda 0,05 detik
} //Statement
void lcd_clrscr() // Menghapus tampilan LCD dan menempatkan kursor di
     kolom 0 dan baris 0
{ //Statement
LCD_RS_LO; //Menampilkan karakter bernilai rendah
lcd_write(0x1); // Menulis karakter dari (0x1)
_delay_ms(2); //Tunda 0.02 detik
} //Statement
void lcd_putc(unsigned char c) //Menampilkan karakter pada posisi kursor
    saat itu
{ //Statement
LCD_RS_HI; //Menampilkan karakter bernilai rendah
lcd_write(c); // Menulis karakter pada posisi saat itu
} //Statement
void lcd_puts(const char *s) //Menampilkan karakter pada posisi kursor saat
itu
{ //Statement
register char c; //Mengatur karakter pada register
while ( (c = *s++) ) { //
lcd_putc(c); //Menampilkan karakter pada posisi saat itu
} //Statement
} //Statement
void lcd_puts_pp(const char *progmem_s) //Menempatkan posisi kursor
pada memori program
{//Statement
register char c; //Mengatur karakter pada register
for(;;) //Pengulangan
{ //Statement
c = pgm_read_byte(progmem_s++); //
if(c==0) break; //Apabila karakter bernilai 0 maka akan berhenti
lcd_putc(c); // Menampilkan karakter pada posisi saat itu
} //Statement
} //Statement
void lcd_goto(unsigned char poslcd) // Menempatkan posisi kursor pada
  kolom dan baris LCD
{ //Statement
LCD_RS_LO; //
lcd_write(0x80 + poslcd); //Menulis data (0x80 + poslcd) pada
LCD
} //Statement
void init_lcd() // Memanggil program utama lcd
{ //Statement
LCD_RS_LO; //
_delay_ms(15); // Tunda 0.015 detik
LCD_D4_HI; //
LCD_D5_HI; //
LCD_STROBE(); //
_delay_ms(5); // Tunda 0.05 detik

LCD_STROBE(); //
_delay_us(100); // Tunda 0.1 detik
LCD_STROBE(); //
_delay_ms(5); // Tunda 0.05 detik
LCD_D4_LO; //
LCD_STROBE(); //
_delay_us(40); // Tunda 0.4 detik
lcd_write(0x28); //Menulis karakter (0x28)
lcd_write(0x0C); //Menulis karakter (0x0C)
lcd_write(0x06); //Menulis karakter (0x06);
lcd_write(0x01); //Menulis karakter (0x01);
_delay_ms(10); //Tunda 0.1 detik
} //Statement
//===============================================
void init_devices() // Memanggil program utama
{ //Statement
DDRB=255; //LED OUTPUT // Data Direction Register  PORTB
      sebagai output  
DDRD&=~(1<<2); //INPUT // Data Direction Register  PORT&
    sebagai input  dari pin 1-2
DDRD&=~(1<<3); //INPUT // Data Direction Register  PORT&
                                                    sebagai input  dari pin 1-3
PORTD|=(1<<2); //PULL UP INTERNAL AKTIF // Mengaktifkan
kondisi sebelum program utama
PORTD|=(1<<3); // Mengaktifkan PORTD dari pin 1-3
DDRC=255; // Data Direction Register  PORTC sebagai output  
} //Statement
//==========================================program utama
int main() //Program utama
{ //Statement
_delay_ms(100); //Tunda 0.1 detik
init_devices(); //Panggil sub rutin init devices
init_lcd(); // Panggil sub rutin init lcd
led=0; //Mematikan semua led
for(;;) //Pengulangan
{ //Statement
lcd_goto(line1); //Menempatkan kursor pada line 1
lcd_puts("hallo lcd"); //Menampilkan karakter “hallo lcd”
lcd_goto(line2); //Menempatkan kursor pada line 2
lcd_puts("lcd lcd "); //Menampilkan karakter “lcd lcd”
for(;;) //Pengulangan
{ //Statement
}  //Statement
} //Statement
} //Statement
//===================================================

ANALISA DAN PEMBAHASAN 
Pada praktikum modul IV yakni tentang “ AVR MIKROKONTOLLER ” ini dapat kita analisa bahwa semua program dapat yang dikerjakan berjalan dengan baik dan benar. Adapun pada program pertama cara pengerjaannya adalah pertama – tama buka program B51PEB nya terlebih dahulu. Selanjutnya muncul beberapa perintah, tekan D untuk membuka text editor, selanjutnya unutk memulai mengetik program pada lembaran baru, tekan alt + F, lalu pilih N. Selanjutnya ketikkan program, setelah program selesai diketik, simpan file dengan nama file yang anda inginkan dengan ekstensi h51. Lalu tekan alt X. Lalu tekan M untuk mengetahui apakah ada program yang salah atau tidak. Jika terdapat kesalahan tekan L dan ketikkan nama filenya. Pada program pertama tedapat kesalahan pada penulisan, maka dari itu untuk tekan L dan ketikkan nama filenya lalu buka lagi file yang telah diketik tadi. Tekan alt + F lalu muncul pilihan dan pilih open dan cari nama file anda dengan ekstensi.lst lalu open. Lalu tekan alt + X kemudian tekan D dan perbaiki kesalahan yang diberitahu sebelumnya. Lalu setelah selesai semua save kembali dan tekan alt + X, lalu tekan M dan muncul no error found pertanda tidak ada error pada program. Kemudian kompile program yang yang tadi telah di save dengan cara tekan O lalu tekan H kemudian muncul nama filenya kemudian Enter. Kemudian buka program untuk mengetahui outputnya, pada device selection pilih AT89S51 dan XTAL nya isi dengan 11 MHZ lalu ok. Kemudian load file dan pilih file yang di simpan tadi lalu open. Selanjutnya jika ada muncul program, maka harus di erase terlebih dahulu karena program tersebut adalah program sebelumnya. Kemudian klik write flash maka program yang tadi dibuat berjalan pada rangkaian. Selanjutnya pada program dua prosedurnya sama seperti program pertama hanya saja program yang diketik adalah program yang berbeda dengan program yang pertama dan tentunya output yang dihasilkan juga akan berbeda, pertama – tama buka program B51PEB nya terlebih dahulu. Selanjutnya muncul beberapa perintah, tekan D untuk membuka text editor, selanjutnya unutk memulai mengetik program pada lembaran baru, tekan alt + F, lalu pilih N. Selanjutnya ketikkan program, setelah program selesai diketik, simpan file dengan nama file yang anda inginkan dengan ekstensi h51. Lalu tekan alt X. Lalu tekan M untuk mengetahui apakah ada program yang salah atau tidak. Jika terdapat kesalahan tekan L dan ketikkan nama filenya. Pada program pertama tedapat kesalahan pada penulisan, maka dari itu untuk tekan L dan ketikkan nama filenya lalu buka lagi file yang telah diketik tadi. Tekan alt + F lalu muncul pilihan dan pilih open dan cari nama file anda dengan ekstensi.lst lalu open. Lalu tekan alt + X kemudian tekan D dan perbaiki kesalahan yang diberitahu sebelumnya. Lalu setelah selesai semua save kembali dan tekan alt + X, lalu tekan M dan muncul no error found pertanda tidak ada error pada program. Kemudian kompile program yang yang tadi telah di save dengan cara tekan O lalu tekan H kemudian muncul nama filenya kemudian Enter. Kemudian buka program untuk mengetahui outputnya, pada device selection pilih AT89S51 dan XTAL nya isi dengan 11 MHZ lalu ok. Kemudian load file dan pilih file yang di simpan tadi lalu open. Selanjutnya jika ada muncul program, maka harus di erase terlebih dahulu karena program tersebut adalah program sebelumnya. Kemudian klik write flash maka program yang tadi dibuat berjalan pada rangkaian. Begitu juga untuk program 3, program 4, program 5, program 6, dan program seterusnya secara prosedur pengerjaannya sama hanya saja outputnya pasti berbeda – beda karena programnya juga berbeda – beda.


KESIMPULAN DAN SARAN

KESIMPULAN :
1.      tombol D untuk membuka text editor pada program B51PEB , selanjutnya unutk memulai mengetik program pada lembaran baru, tekan alt + F, lalu pilih N.

2.      Jika terdapat kesalahan tekan L dan ketikkan nama filenya. Pada program pertama tedapat kesalahan pada penulisan, maka dari itu untuk tekan L dan ketikkan nama filenya lalu buka lagi file yang telah diketik tadi. Tekan alt + F lalu muncul pilihan dan pilih open dan cari nama file anda dengan ekstensi.lst lalu open.

3.      Setekah semua program dipastikan telah benar dan tidak terdapat kesalahan tekan alt + X, lalu tekan M dan muncul no error found pertanda tidak ada error pada program. Kemudian kompile program yang yang tadi telah di save dengan cara tekan O lalu tekan H kemudian muncul nama filenya kemudian Enter. Kemudian buka program untuk mengetahui outputnya, pada device selection pilih AT89S51 dan XTAL nya isi dengan 11 MHZ

4.      Untuk melihat outpunya klik write flash maka program yang tadi dibuat berjalan pada rangkaian. Maka led akan akan hidup sebagai outputnya.

SARAN :
1.      Sebelum melakukan percobaan, periksalah kelengkapan komponen dan alat praktikum apakah sudah lengkap apa belum.

2.      Periksalah komponen dan alat praktikum, sebelum digunakan, apakah alat dan bahan dalam kondisi baik atau tidak.


3.      Apabila kondisi listrik sedang tidak stabil, Gunakanlah Stabilyzer untuk memudahkan pengerjaan praktikum

4.      Telitilah dalam pembacaan hasil percobaan yang telah dilakukan.


5.      Apabila ada kesulitan dalam proses pengamatan, maka disarankan bertanya kepada asisten laboratorium yang sedan bertugas.


DAFTAR PUSTAKA

1.      Modul IV Praktikum “Mikroprossesor dan Antaruka”
2.      http://terminaltechno.blog.uns.ac.id/





0 comments: