Kamis, 08 Juli 2010

Komunikasi Serial Mikrokontroler

  • Pengenalan Komunikasi Serial
Pada prinsipnya komunikasi serial merupakan komunikasi dimana pengiriman data dilakukan per bit sehingga lebih lambat dibandingkan komunikasi paralel,
seperti pada port printer yang mampu mengirim 8 bit sekaligus dalam satu detak.

  • Peralatan Komunikasi Serial
Peralatan (device) pada komunikasi port serial dibagi menjadi 2 kelompok, yaitu Data Communication Equipment (DCE) dan Data Terminal (DTE).
Konektor port serial terdiri dari 2 jenis, yaitu konektor 25 pin(DB25) dan 9 pin (DB9) yang saling berpasangan. Bentuk dari konektor DB-25 sama persis dengan port paralel.
Umumnya COM1 berada di alamat 3F8H sedangkan COM2  di alamat 2F8H.



  • Komunikasi  Serial AT89S51/52
AT89S51/52 mempunyai On Chip serial port yang dapat digunakan untuk komunikasi data serial secara Full-Duplex sehingga port serial ini masih dapat menerima data pada saat
proses pengiriman data untuk menampung data yang diterima atau data yang akan dikrimkan.
Keluarga MCS-51 mempunyai sebuah register, yaitu SBUF yang terletak pada alamat 99H, dimana register ini berfungsi sebagai buffer pada saat mikrokontroler membaca data yang pertama dan data yang kedua yang belum diterima secara penuh  sehingga data tersebut tidak hilang.
Register SBUF terdiri  dari dua  buah register yang memang mempunyai alamat yang sama, yaitu 99H. Register tersebut merupakan Transmit Buffer Register yang bersifat  Wrute only (hanya dapat ditulis) dan Receive Buffer Register yang bersifat read only(hanya dapat dibaca).



Contoh program pengaturan LCD menggunakan port serial:
#include
#include
#include
#define PORT1 0x3F8  /* alamat port*/
  /* Definisi alamat base port serial */
  /* COM1 0x3F8                        */
  /* COM2 0x2F8                   */
  /* COM3 0x3E8                   */
  /* COM4 0x2E8                   */
void main(void)
{
 int c;
 int count;
 char init[] = { 0x0F, 0x01, 0x38 };
                 /* 0x0F - Init Display */
                 /* 0x01 - Clear Display */
                 /* 0x38 - Dual Line / 8 Bits */
 outportb(PORT1 + 1 , 0x0);   /* mematikan interupt - Port1 */
 outportb(PORT1 + 3 , 0x80);  /* SET DLAB ON */
 outportb(PORT1 + 0 , 0x0C);  /* Set Baud rate */                
                  /*         0x06 =  19,200 BPS */
                  /*         0x0C =   9,600 BPS */
                  /*         0x18 =   4,800 BPS */
                  /*         0x30 =   2,400 BPS */
 /* Set Baud rate - Divisor Latch High Byte */
outportb(PORT1 + 1 , 0x00);
outportb(PORT1 + 3 , 0x03);  /* 8 Bits, No Parity, 1 Stop Bit */
 outportb(PORT1 + 2 , 0xC7);  /* FIFO Control Register */
 outportb(PORT1 + 4 , 0x0B);  /* Turn on DTR, RTS, and OUT2 */
/* Register Select (DTR) */
 outportb(PORT1 + 4 , (inportb(PORT1 + 4) | 0x01));
/* 0 = Instruction Register */
 for (count = 0; count < 3; count++)
  {
   outportb(PORT1, init[count]);      /* kirim Init Data Bytes */
   delay(20);                         /* delay untuk  INIT */
  }
/* Register Select (DTR) */
/* 1 = Data Register */
outportb(PORT1 + 4 , (inportb(PORT1 + 4) & 0xFE));
printf("\nContoh program LCD Serial. Tekan ESC untuk keluar \n");
do {
     if (kbhit()){
          c = getch();
          outportb(PORT1, c);
          printf("%c",c);
         }
    } while (c !=27);

Tidak ada komentar: