Monday, December 4, 2017


TUGAS MATAKUIAH 
MIKROPROSESOR DAN MIKROKONTROLER
MIKROKONTROLER ATMEL
AT89C51


DOSEN PENGAMPU : Ir. DARWISON, M.T.





REFERENSI :

Iswanto.2011.Mikrokontroler AT89S51 dengan bahasa C.Yogyakarta:ANDI



UTS

Rangkaian dan Program sistem minimum 8086


1. Latar Belakang  [kembali]


Perancangan sistem minimum 8086 adalah perancangan peta memori dan peta I/O. Pada sistem minimum 8086 untuk pemetaan memori dan I/O dapat digabung dalam suatu peta atau dapat juga terpisah. Untuk perancangan peta memori ada dua lokasi address yaitu program disimpan pada lokasi address memori ROM dan data disimpan pada lokasi address RAM. Salah satu aplikasi dari mikroprosesor 8086 adalah peta keypad dan seven segmen. Secara garis besar, rangkaian bermula dari pemasukan input yang berasal dari keypad lalu diproses sehingga berjalan ke mikroprosesor dan menghasilkan output yaitu seven segmen.

2. Rangkaian [kembali]



3. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini


Saturday, December 2, 2017

12. PORT SERIAL

[KEMBALI KE MENU SEBELUMNYA]

APLIKASI PORT SERIAL



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]


Program serial ini mengirim data serial memerlukan deklarasi register untuk mikrokontroler jenis AT89x51. Setelah mendeklarasi register, program akan menginsialisasi port serial mikrokontroler untuk bekerja pada mode 1. Kecepatan transmisinya ditentukan oleh timer 1 dan nilai TH 1. Selain itu, program pun memerlukan fungsi untuk mengirim karakter dan mengirim teks. Kemudian, program akan masuk ke program utama. Di dalam program utama, terdapat variabel karakter teks yang berfungsi menyimpan data. Data tersebut akan dikeluarkan oleh mikrokontroler dengan menggunakan port serial.


C. Listing Program [kembali]

#include <at89x51.h>
void Init_Serial(char baud )
    {
            TMOD=0x20;        //timer 1 mode 2 (autoreload)
            PCON=0x0 ;      // SMOD =0
            SM0=0;
            SM1=1;      // mode 1
        REN=1;      //terima diperbolehkan
            TH1=baud;          //kecepatan 9600 bps (nilai reload)
            TL1=baud;          //nilai awal timer   
            TR1=1;          // timer dijalankan
    }
void KirimChar(char datanya)
{
        SBUF=datanya;
        while(!TI)
            {;}
        TI=0;
}
void KirimTeks(char *teks)   //Fungsi untuk mengirim teks ke
{
        char i=0;          //port serial pada mode 1.
    while(teks[i]!=0) //dari pada menggunakan fungsi printf()
        {
       KirimChar(teks[i]);// atau printf_small standard
   i++;          //lebih efisien kodenya membuat
        }                //sendiri

}

void main()
{
        char *teks={"Selamat datang SDCC\n"};//teks dikirim
        Init_Serial(0xfd);     // inisialisasi port serial
        KirimTeks(teks);      // pada mode 1 kecepatan 9600 bps
}



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini


11. INTERUP

[KEMBALI KE MENU SEBELUMNYA]

APLIKASI INTERUP PADA LED



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]




C. Listing Program [kembali]

#include <at89x51.h>

unsigned int    i,j;

void serial_int (void) //interrupt 4
{
    static char chr = '\0'; // buffer karakter

    if (RI == 1)              // terjadi interupsi penerimaan
    {
        chr = SBUF;        // simpan karakter pada buffer lokal
        RI = 0;                 // bersihkan flag interuspsi penerimaan
        TI = 1;                 // menandakan ada karakter yang akan dikirim
    }
    else if (TI == 1)       // jika terjadi interupsi pengiriman
    {
        TI = 0;                 // bersihkan flag interuspsi pengiriman
        if (chr != '\0')       // jika ada karakter di buffer lokal
        {
            if (chr == '\r') chr = '\n';
            SBUF = chr;     // simpan karakter di buffer pengiriman
            chr = '\0';
        }
    }
    P3 = 0x55;   /* jika terjadi interupsi port B = 01010101D */
    for (i=0;i<60000;i++) {;} /* delay */
}

main()

    SCON = 0x50;    /* mode 1, 8-bit uart, enable terima */
    TMOD = 0x20;    /* timer 1, mode 2, 8-bit reload */
    TH1  = 255;     /* nilai reload untuk bautrate 57600 */
    ET0  = 0;       /* mencegah timer 0 interupsi */
    TR1  = 1;       /* timer mulai mencacah */
    TI   = 0;       /* bersihkan buffer pengiriman */

    ES   = 1;       /* enable interupsi serial  */
    EA   = 1;       /* enable global interupsi */

    while (1)
    {
        P3 = 0xaa;    /* keadaan awal port B = 10101010D */
    }
}


D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini


Wednesday, November 29, 2017

10. TIMER

[KEMBALI KE MENU SEBELUMNYA]

APLIKASI TIMER PADA LED



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]

LED Berkedip terlihat menggunakan mikrokontroler AT89C51 sehingga memerlukan deklarasi register untuk mikrokontroler jenis AT89x51. Setelah mendeklarasi register, program akan mendeklarasi waktu 1 detik. Waktu tersebut berfungsi untuk waktu tunda. Kemudian, mikrokontroler akan mengeksekusi program utama.

Pada program utama, terdapat variabel karakter yang berfungsi menyimpan data 00 dan FF. Data tersebut akan dikeluarkan oleh mikrokontroler dengan menggunakan port 3. Intruksi while merupakan instruksi perulangan sehingga mikrokontroler akan mengeluarkan data yang disimpan oleh variabel karakter secara terus menerus.


C. Listing Program [kembali]

#include <at89x51.h>

void tunda(unsigned int j) //deklarasi 1 ms
{ TMOD=0x11;
  while(j) //kerjakan selama j tidak nol

  {
  TH0=0xfc; //isi TH0 dengan FC
  TL0=0x65; //isi TH0 dengan 65
  TR0=1; //timer 0 mulai mencacah
  while(!TF0);
   TF0=0; //bersihkan flag
   TR0=0; //hentikan mencacah
   j--; //kurangi nilai j dengan 1
  }
}

void main() //program utama
{
 while(1)
 {
 P3 = 0xff;            //led hidup semua
 tunda (1000); //selama 1 detik
 P3 = 0x00;            //led mati semua
 tunda (1000);    //selama 1 detik
 }
}


D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini


7. ADC

[KEMBALI KE MENU SEBELUMNYA]

APLIKASI ADC



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]

Program ini memerlukan deklarasi register untuk mikrokontroler jenis AT89x51. Setelah mendeklarasi register, program akan masuk ke dalam perogram utama. Pada program utama terdapat pendeklarasian variabel data1. Data1 berfungsi untuk mengambil nilai dari ADC0804. Selanjutnya, mode timer diaktifkan dan memanggil prosedur menyalakan LCD. LCD akan mengeluarkan data tulisan, lalu mikrokontroler membaca nilai ADC dan ditampilkan ke mikrokontroler.


C. Listing Program [kembali]

#include <at89x51.h>
#include "lcd.h"


idata at 0x50 unsigned int i;
idata at 0x51 unsigned int k;

void PowerOn()
{
    unsigned char inner, outer;

    for (outer = 0x00; outer < 0x10; outer++)
    {
        for (inner = 0x00; inner < 0xFF; inner++);
    }
 
    LCD_init();
 
    for (inner = 0; inner < 10; inner++)
     LCD_delay(2);
}

void send2lcd(unsigned char value)
{
 unsigned char buf = 0;

 buf = value & 0xF0;  /* Filter for high byte */
 buf = (buf>>4)|(0x30);  /* Convert  to ascii code */

 LCD_putc(buf);   /* Show on LCD */

 buf = value & 0x0F;  /* Filter for low byte */
 buf = buf | 0x30;        /* Convert to ascii code */

 LCD_putc(buf);   /* Show on LCD */
}

void tunda(unsigned int j)
{
  while(j)

  {
  TH0=0xfc;
  TL0=0x65;
  TR0=1;
  while(!TF0);
   TF0=0;
   TR0=0;
   j--;
  }
}

void main()
{
 int  data1;
 TMOD=0x11;
 PowerOn();

 LCD_row1(); LCD_puts("      HALO  ");
 LCD_row2(); LCD_puts("  TEKNIK  ");   
 LCD_delay(2);
 LCD_row1(); LCD_puts(" TEKNIK ELEKTRO");
 LCD_row2(); LCD_puts("  UNAND  ");


 while(1)
 {
 LCD_clear();
 LCD_row1(); LCD_puts("NILAI ADC");
 P3 = 0x00; 
 data1 = P0;
 P3 = 0x0F; 
 LCD_command(0xC6); /* Set LCD cursor at (2,6) */
 send2lcd(data1); /* Show month on LCD */ 
 tunda (1000);
 }
}


D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini


Monday, November 27, 2017

6.MOTOR STEPPER

[KEMBALI KE MENU SEBELUMNYA]

MENGGERAKKAN MOTOR STEPPER



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]

Rangkaian untuk memutar motor stepper dengan mikrokontroler digunakan driver motor stepper, yaitu ULN20032 yang dihubungkan ke port 2 dan motor stepper. Sehingga motor stepper akan dikendalikan dengan 2 saklar yang berfungsi untuk putar kekiri dan putar kekanan.

Pada program motor stepper memerlukan deklarasi register untuk mikrokontroler jenis AT89C51 . setelah mendeklarasi register, program akan masuk ke dalam program utama. Pada program utama terdapat data untuk menggerakkan motor stepper yang dihubungkan ke port 2 pada mikrokontroler. Pada programnya saat port 2 mengeluarkan data, maka data tersebut dikonversi oleh driver motor stepper (ULN20032) sehingga menggerakkan motor stepper berputar kekanan.


C. Listing Program [kembali]


#include <at89x51.h>

void tunda(unsigned int j)
{
  while(j)

  {
  TH0=0xfc;
  TL0=0x65;
  TR0=1;
  while(!TF0);
   TF0=0;
   TR0=0;
   j--;
  }
}

void main()
{
 TMOD=0x11;
 while(1)
 {
 P2 = 0x03;         
 tunda (100);
 P2 = 0x09;         
 tunda (100);
 P2 = 0x0C;       
 tunda (100);
 P2 = 0x06;
 tunda (100);
 }
}



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini


5. MOTOR SERVO

[KEMBALI KE MENU SEBELUMNYA]

MENGGERAKKAN MOTOR SERVO



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]

Program ini memerlukan deklarasi register untuk mikrokontroler jenis AT89C51. Setelah mendeklarasi register, program akan masuk ke dalam program utama. Pada program utama terdapat data untuk menggerakkan motor servo. Pada waktu port 1 mengeluarkan data selama 2 ms, motor servo akan bergerak ke kanan. Saat port 1 mengeluarkan data selama 1,75 ms maka motor servo terletak ditengah.


C. Listing Program [kembali]


#include <at89x51.h>

void tunda(unsigned int j)
{
  while(j)

  {
  TH0=0xfc;
  TL0=0x65;
  TR0=1;
  while(!TF0);
   TF0=0;
   TR0=0;
   j--;
  }
}

void main()
{
 TMOD=0x11;

 while(1)
 {
 P1 = 0x0f;         
 tunda (2);
 P1 = 0x00;         
 tunda (18);     
 tunda (1000);

 P1 = 0x0f;         
 tunda (1.75);
 P1 = 0x00;         
 tunda (18.25); 
 tunda (1000);
 }
} /* End main */



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini




Friday, November 24, 2017

4. DOT MATRIKS

[KEMBALI KE MENU SEBELUMNYA]

MENAMPILKAN KARAKTER



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]


Program Dot Matriks memerlukan deklarasi register untuk mikrokontroler jenis at89x51. Setelah mendeklarasi register, program akan mendeklarasikan waktu kurang lebih per 1 ms. Waktu tersebut berfungsi untuk waktu tunda.
Kemudian mikrokontroler akan mengeksekusi program utama. Di dalam program utama terdapat bebarapa variasi data untuk menapilkan angka 15 dan bentuk persegi pada Dot matriks. Data akan masuk ke port 1 yaitu pada pin 0, saat pin 0 bernilai 1 (aktif) maka mikrokontroler akan menjalankan tampilan angka 15 pada Dot Matriks. Dan pada saat pin 0 bernilai 0 (mati) maka mikrokontroler akan menjalankan tampilan bentuk persegi.

Tampilan angka 15 disusun dengan memberikan data pada baris dan kolom pada dot matriks dengan cara satu per satu pada baris dan kolom yang ingin dihidupkan. Begitu juga dengan tampilan bentuk persegi, yaitu pada data 1 dengan memberikan data pada baris pertama dan akhir, lalu data 2 diberikan data pada kolom pertama dan terakhir. Dengan menggunakan waktu tunda 5 ms, maka tampilan Dot Matris seolah – olah menampilkan bentuk persegi. Di dalam program utama terdapat pernyataan while(1) yang berfungsi melakukan looping terus menerus.

C. Listing Program [kembali]


#include <at89x51.h>         

void tunda1ms() 
{
 int i;
 for(i=0;i<150;i++);
}

void tunda(int n)
{
 int i;
 for (i=0; i<n;i++)
 tunda1ms();
}

void main()
{

while(1)
 {
   if (P1_0 == 1)
   {
P2 = 0x03;
    P3 = 0x20;
    tunda (5);

    P2 = 0x04;
    P3 = 0x27;
  tunda (5);

    P2 = 0x18;
    P3 = 0x20;
    tunda (5);

    P2 = 0x20;
    P3 = 0x3C;
    tunda (5);

    P2 = 0xC0;
    P3 = 0x20;
    tunda (5);
   }

   else
   {
P2 = 0x81;
    P3 = 0x00;
    tunda (5);

P2 = 0x7E;
    P3 = 0x7E;
    tunda (5);
   }
 }
}



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini




3. LCD

[KEMBALI KE MENU SEBELUMNYA]

MENAMPILKAN KARAKTER



A. Gambar Rangkaian [kembali]




B. Prinsip Kerja [kembali]


LCD memerlukan deklarasi register untuk mikrokontroler jenis AT89C51. Setelah mendeklarasi register, program akan mendeklarasi LCD dan masuk ke dalam program utama. Di dalam program utama, mikrokontroler akan berfungsi mengeluarkan data yang akan ditampilkan dengan LCD. Tampilan pada LCD sesuai dengan kondisi pada Port 1 apakah pada kondisi 1 (aktif)  atau 0 (mati) yang mana dihubungkan dengan switch sebagai input pada port 1.

C. Listing Program [kembali]


#include <at89x51.h> //pemanggilan header library AT89C51
#include "lcd.h" //pemanggilan header library LCD

void PowerOn() //fungsi PowerOn
{ unsigned char inner, outer;
  for (outer = 0x00; outer < 0x10; outer++)
  {
      for (inner = 0x00; inner < 0xFF; inner++);
  }
  LCD_init(); //pemanggilan fungsi LCD_init dari library LCD
  for (inner = 0; inner < 10; inner++)
     LCD_delay(1);
}

void send2lcd(unsigned char value) //fungsi send2lcd
{ unsigned char buf = 0;
  buf = value & 0xF0;
  buf = (buf>>4) | (0x30);
  LCD_putc(buf);
}

void main(void) //fungsi utama
{ PowerOn(); //pemanggilan fungsi PowerOn

 LCD_clear(); //LCD dibersihkan dari karakter sebelumnya
 while(1)
  {
    if (P1_0 == 0)
    { LCD_row1(); LCD_puts("    ALFARIZI    "); //Tampilan LCD baris 1
      LCD_row2(); LCD_puts("   1510952064   "); //Tampilan LCD baris 2
    }
 

    else if (P1_5 == 0)
    { LCD_row1(); LCD_puts("     JURUSAN    ");
      LCD_row2(); LCD_puts(" TEKNIK ELEKTRO ");
    }


    else
    { LCD_row1(); LCD_puts("      TEKAN     ");
      LCD_row2(); LCD_puts("    SWITCH..    ");
    }
  }
}



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini




2. Seven Segment

[KEMBALI KE MENU SEBELUMNYA]

MENAMPILKAN ANGKA



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]


Seven segmen memerlukan deklarasi register untuk mikrokontroler jenis AT89x51. Setelah dideklarasi, program akan masuk ke dalam program utama. Di dalam program utama, mikrokontroler akan mengeluarkan data berupa beberapa angka. Data tersebut dikeluarkan oleh mikrokontroler dengan menggunakan port 3. Kemudian, mikrokontroler memanggil tunda 1 detik lalu memanggil data angka tersebut. Intruksi while merupakan intruksi perulangan sehingga mikrokontroler akan  mengeluarkan data secara terus menerus.

C. Listing Program [kembali]


#include <at89x51.h> //deklarasi register AT89c51

void tunda1ms() //fungsi tunda 1 milidetik
{ int i;
  for (i=0; i<100; i++);
}

void tunda(int n) //fungsi tunda n milidetik
{ int i;
  for (i=0; i<n; i++)
  tunda1ms();
}


void main() //fungsi utama
{
while(1)
{
  if (P1_0 == 0)
  {
  P3=0xf9; tunda(1000);  //angka 1
  P3=0x24; tunda(1000); //angka 2
  }
  else if (P1_1 == 0)
  { P3=0x30; tunda(1000); // angka 3
    P3=0x19; tunda(1000); // angka 4
  }
  else
  {P3 =0x00; // angka 8
  }
}
}



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini




1. LED

[KEMBALI KE MENU SEBELUMNYA]

RUNNING LED



A. Gambar Rangkaian [kembali]



B. Prinsip Kerja [kembali]


Program Led Berjalan memerlukan deklarasi register untuk mikrokontroler jenis at89x51. Setelah mendeklarasi register, program akan mendeklarasikan waktu kurang lebih per 1 ms. Waktu tersebut berfungsi untuk waktu tunda.

Kemudian mikrokontroler akan mengeksekusi program utama. Di dalam program utama terdapat variabel karakter yang berfungsi menyimpan data 0x01. Data tersebut akan dikeluarkan oleh mikrokontroler dengan menggunakan port 2. Kemudian mikrokontroler akan menjalankan operasi led berjalan. Diantara operasi led berjalan terdapat waktu tunda kurang lebih 100 ms. Di dalam program utama terdapat pernyataan while(1) yang berfungsi melakukan looping terus menerus.

C. Listing Program [kembali]


#include <at89x51.h>

void feel1ms()
{
  int i;
  for (i=0; i<150; i++);
}

void feel(int n)
{
  int i;
  for (i=0; i<n; i++)
  feel1ms();
}

void main()
{
  volatile unsigned char a=0x82;
  
  while(1)
  {
   if (P1_0 == 0)
   {
   a=((a>>7)|(a<<1));
   feel(100);
   P2=a;
   }

   else 
   { P2 = 0xaa;
   }
  }
}



D. Flowchart [kembali]




E. Link Download [kembali]

     File Program silahkan download disini
     File Rangkaian silahkan download disini
     HTML silahkan download disini