Tutorial Mikrokontroler 89S51: Contoh Program Komunikasi Data Serial UART


89s51_rs232

Komunikasi data serial UART merupakan salah satu fitur mikrokontroler 89S51 yang sangat penting karena dengan adanya fitur ini mikrokontroler dapat melakukan komunikasi data secara serial dengan  komputer, dengan sesama mikrokontroler, ataupun dengan piranti-piranti kontrol dan otomasi seperti PLC, Temperature Controller, Power Meter, dan lain-lain.

Gambar disamping adalah skematik rangkaian mikrokontroler AT89S51 dengan konverter tegangan TTL-to-RS232 menggunakan IC Maxim MAX232. Kapasitor C1, C2, C3, dan C4 adalah kapasitor elektrolit dengan nilai 1uF/25V atau 22uF/25V. Konektor J1 terhubung ke port serial RS232 komputer.

Untuk menguji rangkaian di atas, berikut adalah contoh program komunikasi data serial yang ditulis dalam bahasa C. Program dikompilasi menggunakan kompiler freeware SDCC. Untuk memudahkan proses pengembangan program, saya menggunakan IDE yang juga freeware yakni MIDE-51. Sedikit pengantar mengenai MIDE-51 beserta download link-nya dapat Anda baca pada postingan berikut ini: https://telinks.wordpress.com/2012/10/12/tutorial-mikrokontroler-89s51-mengenal-mide-51-development-tools-mcs-51-gratis-dari-opcube/

image 

LISTING PROGRAM

/*
  Contoh program komunikasi data serial
http://teknikelektrolinks.com
*/
#include <at89x51.h>
#include <stdio.h>

void delay(unsigned int n)
{
   unsigned int i, j;

   for (i=1;i<=n;i++) for (j=1;j<=10;j++);
}

void putchar (char c)
{
  while (!TI);
  TI = 0;
  SBUF = c;
}

char getchar(void)    // Get Character from UART
{
  if (RI!=0)
  {
    RI = 0;
    return SBUF;
  }
  else
    return -1;
}

void initseri()
{
   SCON = 0x52;
   TMOD = (TMOD & 0x0F) | 0x20;
   PCON = 0x80;
   TH1 = 0xFD;
   TR1 = 1;
   ES = 1;
   TI = 1;
   RI = 0;
   EA = 1;
}

/* PROGRAM UTAMA */
int main()
{
  int x = 0, c;

  initseri();

  printf_tiny("Minsys AT89S51\n\r");
  printf_tiny("Teknik Elektro Links\n\r");
  printf_tiny("http://teknikelektrolinks.com\n\r");

  while(1)
  {
    c = getchar();
    if (c!=-1)
    {
      printf_tiny("\n\rTerima data = %d\n\r", c);
    }
    P1 = ~P1;
    P2 = ~P2;
    P0 = ~P0;
    x++;
    printf_tiny("%d", x);
    delay(5000);
    if (x==10)
    {
      x = 0;
      printf_tiny("\n\r\n\r");
      printf_tiny("Minsys AT89S51\n\r");
      printf_tiny("Teknik Elektro Links\n\r");
      printf_tiny("http://teknikelektrolinks.com\n\r");
    }
  } 
}

Sebelum dapat digunakan, UART perlu diinisialisasi terlebih dahulu, termasuk juga fungsi TIMER1 untuk pembangkit clock baudrate. Pada contoh ini digunakan baudrate 2×9600=19200 pada sistem dengan kristal 11,0592MHz. Pada percobaan ini saya menggunakan kristal 22,1184MHz sehingga baudrate yang dihasilkan adalah 38400.

Berikut adalah screenshot program Hyperterminal yang berkomunikasi dengan mikrokontroler melalui port serial RS232.

89s51_rs232_hyperterminal

Inisialisasi UART dilakukan dengan memanggil fungsi initseri(). Selanjutnya mikro akan mengirimkan tulisan: “Minsys AT89S51… dst.”, dan menampilkan deretan angka mulai dari 1 hingga 10. Mikrokontroler akan terus-menerus mengirimkan data tersebut.

Selain mengirimkan data tulisan, mikrokontroler juga senantiasa mengecek apakah ada data yang diterima dari komputer. Jika mikrokontroler menerima data dari komputer, maka mikrokontroler akan mengirimkan tulisan: “Terima data = <data>”. <data> adalah nilai integer dari data karakter yang diterima oleh mikrokontroler.

Perlu diperhatikan juga bahwa dalam contoh program ini digunakan fungsi printf_tiny(), yakni fungsi untuk menampilkan atau mengeluarkan data karakter atau string ke standard output yang ditentukan, dalam hal ini adalah port serial UART. SDCC memiliki banyak jenis fungsi printf() yang dapat Anda pelajari pada dokumentasi SDCC.

telinks_ms89s51

Modul Minimum System 89S51 lengkap dengan rangkaian RS232 seperti di atas dapat Anda dapatkan di: http://teknikelektrolinks.com.

Semoga bermanfaat, selamat belajar dan selamat berkarya!

🙂

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s