Wednesday 7 November 2007

Serial Port MCS-51

Serial Port Merupakan hal yang penting dalam mikrokontroller, karena dengan serial port kita dapat dengan mudah menghubungkan mikrokontroller dengan komputer atau perangkat lainnya, serial port sering dikenal dengan istilah UART
, serial port pada mikrokontroller terdiri atas dua pin yaitu RXD dan TXD, RXD berfungsi untuk menerima data dari komputer/perangkat lainnya, TXD berfungsi untuk mengirim data ke komputer/perangkat lainnya, Standar komunikasi serial untuk komputer ialah RS-232, RS-232 mempunyai standar tegangan yang berbeda dengan serial port mikrokontroller, sehingga agar sesuai dengan RS-232 maka di butuhkan suatu rangkaian level converter, IC yang digunakan bermacam-macam, tetapi yang paling mudah dan sering digunakan ialah IC MAX232/ICL232/HIN232 karena mudah di jumpai di pasaran indonesia.


serial communication block

ARSITEKTUR SERIAL PORT MCS-51


Sebelum melangkah lebih lanjut kita harus mengetahui bagaimana arsitektur serial port MCS-51, serial port memiliki beberapa register antara lain SBUF ,SCON, SMOD, untuk kecepatan transfer data di tentukan oleh clock yang di berikan ke serial port yang di generate oleh Timer1 atau oleh Timer2 yang ada pada family dengan akhiran 52 mis: AT89S52, oleh karena itu kecepatan transfer data akan ditentukan oleh nilai yang di programkan ke Timer1/Timer2 ini. Family dengan akhiran 52 dapat memilih clock source untuk serial portnya apakah dari Timer1/Timer2, Timer yang tidak dipakai dapat digunakan untuk aplikasi lainnya. Tapi yang dibahas disini adalah yang menggunakan clock source dari Timer1, berikut penjelasan register serial port :



  • SBUF, berfungsi sebagai register untuk menerima dan mengirim
    data, jadi data yang diterima akan disimpan di SBUF, dan data yang dikirim ditulis ke SBUF, sebenarnya SBUF merupakan dua register yang terpisah untuk penerimaan dan pengiriman data

  • SCON, berfungsi untuk mengontrol serial port, isi dari register ini akan menentukan mode dari serial port(SM2,SM1,SM0), pengaktifan penerimaan data (REN), penerimaan dan pengiriman bit ke 9 pada mode 2 dan 3(TB8,RB8), dan bit status dari penerimaan (RI) dan pengiriman data (TI). Bit RI akan bernilai "1" jika suatu data di terima oleh serial port, bit TI akan bernilai "1" jika pengiriman data sudah selesai dilaksanakan

  • SMOD, SMOD merupakan bit yang ada pada register PCON yang mana bila nilainya di set (1) maka kecepatan data (baud rate) akan dikalikan 2


Untuk penjelasan lebih lanjut anda dapat membaca data sheet mikrokontroller yang digunakan


INISIALISASI SERIAL PORT


Disini hanya dibahas penggunaan serial port pada Mode1 karena mode lainnya sangat jarang digunakan mode 1 artinya transmisi data 8 bit tanpa parity dan 1 stop bit, sebelum digunakan serial port harus lebih dahulu diinisialisasi, berikut merupakan langkah-langkah inisialisasi serial port:



  1. Menghitung berapa baud rate / kecepatan transfer data dengan rumus yang ada pada datasheet mikrokontroller yang digunakan , nilai ini akan di gunakan untuk nilai reload dari timer 1, usahakan menggunakan Xtal dengan frekuensi yang tidak menimbulkan error dalam perhitungan diatas mis: xtal 11.0592 MHz

  2. Set timer 1 pada mode 2 (auto reload)

  3. Set serial port mode 1 dan receiver di aktifkan

  4. Jalankan Timer 1

  5. Jalankan Interrupt Serial Port (ES) jika digunakan

  6. Jalankan Interrupt Global (EA) jika digunakan




SCON = 0x52; // 8-bit UART mode
TMOD = 0x20; // Timer 1 mode 2 auto reload
TH1= 0xFD; // Baud Rate 9600 8-n-1 pada kristal 11,0592Mhz
TR1 = 1; // Menjalankan timer1
ES = 1; // Mengaktifkan Interrupt Serial Port
EA = 1; // Mengaktifkan Interrupt Global

Contoh




  
//
// Program Serial Port Sederhana (non interrupt)
// Menampilkan data yang diterima serial port ke Port 1
// Baud Rate 9600-n-1
//

#include <at89x51.h>
#include <stdio.h>

unsigned char getchr(void)
{
while(!RI); // loop disini (menunggu) hingga 1 karakter/data diterima (RI=1)
RI =0; // hapus/clear received status bit
return SBUF; // karakter yang diterima ada pada SBUF, sehinga nilai fungsi = SBUF
}


void main(void)
{

SCON = 0x52; // 8-bit UART mode
TMOD = 0x20; // timer 1 mode 2 auto reload
TH1= 0xFD; // 9600 8n1
TR1 = 1; // run timer1


while(1) // Loop Forever
{
P1 = getchr(); // menampilkan data yang diterima ke port1

}
}

Keterangan :


Check Back Later



Bagi rekan-rekan yang mempunyai artikel dalam bahasa indonesia yang menarik untuk dimuat disini silahkan kirim ke tu_darma@yahoo.com

Copyright © Putu Darmayasa 2006

No comments: