Komunikasi Serial Mikrokontroller
PERCOBAAN 5
KOMUNIKASI SERIAL (μController dengan PC)
Tujuan
1. Praktikan mampu membuat dan memahami pemrograman komunikasi serial pada
μController, baik sebagai penerima atau pengirim data.
2. Praktikan mampu membuat aplikasi interface sederhana dengan program Borland Delphi
sebagai penghubung antara μController dengan PC secara komuikasi serial .
Teori Dasar
MCS-51 memiliki kemampuan untuk berkomunikasi secara serial melalui pin RXD dan TXD. Satu
hal yang perlu diingat adalah tingkat tegangan komunikasi kedua pin serial menggunakan tingkat
tegangan TTL. Pada prinsipnya, komunikasi serial adalah komunikasi dimana transmisi data
dilakukan per bit. Interface serial hanya membutuhkan jalur yang sedikit (umumnya hanya 2 jalur),
sehingga lebih menghemat pin jika dibandingkan dengan interface paralel. Komunikasi serial ada
dua macam, asynchronous serial dan synchronous serial :
1. Synchronous serial adalah komunikasi dimana hanya ada satu pihak pengirim atau
penerima) yang menghasilkan clock dan mengirimkan clock tersebut bersama-sama
dengan data. Contoh pengunaan synchronous serial terdapat pada transmisi data
keyboard.
2. Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan penerima)
masing-masing menghasilkan clock namun hanya data yang ditransmisikan, tanpa clock.
Agar data yang dikirim sama dengan data yang diterima, maka kedua frekuensi clock
harus sama dan harus terdapat sinkronisasi. Setelah adanya sinkronisasi, pengirim akan
mengirimkan datanya sesuai dengan frekuensi clock pengirim dan penerima akan
membaca data sesuai dengan frekuensi clock penerima. Contoh penggunaan
asynchronous serial adalah pada Universal Asynchronous Receiver Transmitter (UART)
yang digunakan pada serial port (COM) komputer. MCS-51 mendukung komunikasi
secara asinkron, bahkan tiga dari empat serial mode yang dimiliki MCS-51 kompatibel
dengan UART.
Register yang digunakan untuk mengatur komunikasi serial terdapat pada Serial Control (SCON)
Gambar V.1, Alokasi Bit SCON
Modul Embdded System
ZAV created (Yudho)
V-2
Tabel V.1, Serial port controll
Berikut ini adalah penjelasan masing-masing bit SCON yang berkaitan
dengan serial port:
- SM0 & SM1
Pemilih mode komunikasi serial.
Tabel V.2, Mode komunikasi serial
Baud rate pada mode 1, 2, dan 3 dapat dilipatgandakan dengan memberi nilai ‘1’
pada SMOD (dalam SFR PCON). Baud rate variabel adalah baud rate yang
dihasilkan oleh Timer 1.
- SM2
Jika SM2 bernilai ‘1’ maka komunikasi multiprosesor diaktifkan dengan kondisi terdapat
pada tabel V.3
Tabel V.3, Mode komunikasi
Pada mode 0, nilai SM2 harus 0
- REN
REN harus diberi nilai ‘1’ untuk mengaktifkan penerimaan data. Jika REN diberi nilai
‘0’, maka tidak akan ada penerimaan data.
- TB8
TB8 adalah bit ke-9 yang dikirimkan dalam mode 2 atau 3. Nilai bit ini diatur oleh
program user.
Modul Embdded System
ZAV created (Yudho)
V-3
- RB8
RB8 adalah bit ke-9 yang diterima dalam mode 2 atau 3. Pada mode 1, RB8 adalah stop
bit. yang diterima. Pada mode 0, RB8 tidak digunakan.
MCS-51 memiliki 4 mode komunikasi serial. Mode 0 berupa synchronous serial (shift register),
sedangkan tiga mode yang lain berupa asynchronous serial (UART). Pada semua mode, pengiriman
dilakukan jika ada instruksi yang mengisi nilai register SBUF. Sedangkan pada saat penerimaan,
data yang diterima akan disimpan pada register SBUF.
MODE 0
Mode 0 adalah 8 bit shift register dimana data dikirimkan dan diterima melalui pin RXD
sedangkan clock dikirimkan dan diterima melalui pin TXD. Pengiriman data 8 bit dilakukan
dengan mengirimkan Least Significant Bit (LSB) terlebih dahulu. Pada mode 0, baud rate
yang gunakan adalah sebesar 1/12 dari frekuensi osilator.
MODE 1
Pada mode 1, jumlah data yang dikirimkan sebanyak 10 bit yang terdiri dari start bit, 8 bit
data (LSB terlebih dahulu), dan stop bit. Ada proses penerimaan, nilai stop bit akan
dimasukkan ke RB8 secara otomatis. Pada proses pengiriman, stop bit akan diberi nilai ‘1’
secara otomatis. Pada mode 1, baud rate yang digunakan dapat diatur melalui Timer 1.
MODE 2
Pada mode 2, jumlah data yang dikirimkan sebanyak 11 bit yang terdiri dari start bit, 8 bit
data (LSB terlebih dahulu), bit ke-9, dan stop bit. Pada proses pengiriman, nilai bit ke 9
dapat diatur dengan mengisi nilai TB8. Pada proses penerimaan, bit ke 9 akan dimasukkan
ke RB8 secara otomatis. Pada mode 2, baud rate yang dapat digunakan adalah sebesar
1/64 frekuensi osilator atau 1/32 frekuensi osilator jika SMOD bernilai ‘1’.
MODE 3
Mode 3 hampir sama dengan mode 2. Perbedaannya terdapat pada baud rate yang digunakan.
Jika mode 2 menggunakan baud rate yang pasti, mode 3 menggunakan baud rate yang
dihasilkan oleh Timer 1.
Baud rate adalah frekuensi clock yang digunakan dalam pengiriman dan penerimaan data. Satuan
baud rate pada umumnya adalah bps (bit per second), yaitu jumlah bit yang dapat ditransmisikan
per detik. Baud rate untuk mode 0 bernilai tetap dengan rumus yang terdapat pada persamaan 1.
Sedangkan baud rate untuk mode 2 memiliki 2 variasi tergantung dari kondisi SMOD. Rumus baud
rate untuk mode 2 terdapat pada persamaan 2.
Modul Embdded System
ZAV created (Yudho)
V-4
Baud rate untuk mode 1 dan 3 dihasilkan oleh Timer 1. Pengaturan baud rate untuk mode 1 dan 3
dapat dilakukan dengan cara mengubah nilai SMOD, TMOD, dan TH1. Nilai baud rate dapat
diperoleh dengan menggunakan persamaan 3.
Umumnya Timer 1 dioperasikan pada mode 2 (8-bit Auto Reload) sehingga didapat persamaan 4.
Berdasarkan persamaan 4 user dapat menghitung berapa nilai TH1 yang dibutuhkan jika diketahui
baud rate yang diinginkan dengan persamaan 5.
Satu hal yang harus diperhatikan dalam pengaturan baud rate adalah nilai baud rate dan nilai TH1
diusahakan harus tepat dan bukan merupakan pembulatan. Untuk komunikasi serial kecepatan
tinggi, pembulatan terhadap nilai-nilai tersebut dapat mengakibatkan kekacauan dalam proses
pengiriman atau penerimaan. Jika terdapat nilai pecahan, user disarankan untuk mengganti osilator
dengan frekuensi yang sesuai. Untuk komunikasi dengan kecepatan rendah, toleransi terhadap
kesalahan cukup besar sehingga pembulatan masih boleh dilakukan.
Misalkan baud rate yang diinginkan adalah 19200 bps dengan frekuensi osilator 11,0592 MHz.
Dengan memasukkan data ini ke dalam persamaan 5 maka akan didapat persamaan 6.
Jika 2 SMOD bernilai ‘1’, maka akan didapat TH1 sebesar 254,5. Untuk menghindari TH1 berupa
pecahan, 2 SMOD harus bernilai ‘2’ (SMOD bernilai ‘1’) sehingga didapat TH1 sebesar 253 atau FDh.
Untuk mendapatkan baud rate yang lambat, user dapat mengoperasikan Timer 1 pada mode 1
dengan rumus pada persamaan 7.
Modul Embdded System
ZAV created (Yudho)
V-5
Tabel V.4, Nilai dan konfigurasi Baud Rate
Proses inisialisasi bertujuan untuk menentukan mode komunikasi serial dan baud rate yang
digunakan. Register yang harus diatur terlebih dahulu meliputi:
1. SCON
Langkah pertama adalah menentukan mode yang akan digunakan (mode 0, 1, 2, atau 3),
kemampuan menerima data, dan nilai bit ke-9. Misalnya mode yang digunakan adalah mode
1 dengan kemampuan menerima data namun tanpa komunikasi multiprosesor, maka
instruksinya adalah sebagai berikut:
MOV SCON, #01010000b
atau
MOV SCON, #50h
Atau
SETB SM1
SETB REN
2. TMOD, TH1 dan/atau TL1, PCON, dan TCON
Jika komunikasi serial digunakan dalam mode 1 atau 3, maka
langkah berikutnya adalah menentukan baud rate.
Misalnya Timer/Counter 1 digunakan sebagai timer dalam mode 2
untuk membangkitkan baud rate 19200 bps, maka instruksinya
adalah sebagai berikut :
MOV TMOD, #20h
MOV TH1, #0FDh
MOV PCON, #80h
MOV TCON, #40h
Atau
Modul Embdded System
ZAV created (Yudho)
V-6
MOV TMOD, #20h
MOV TH1, #0FDh
MOV PCON, #80h
SETB TR1
3. IE dan/atau IP
Jika komunikasi serial yang diprogram akan digunakan sebagai sumber interrupt, maka IE
dan/atau IP juga harus diatur. Misalnya komunikasi serial digunakan sebagai sumber
interrupt dengan prioritas tinggi, maka instruksinya adalah sebagai berikut :
MOV IP, #00010000b
MOV IE, #10010000b
atau
MOV IP, #10h
MOV IE, #90h
atau
SETB PS
SETB ES
SETB EA
Serial Communication Fixed Data
Kirim Data, dari uCon ke … :
Mov SBUF, A
SCON = 40h
Tmod = 20h
th1 = Baudrate
PCON = x
Clr ti
Terima data, dari … ke uCon :
Mov A, SBUF
SCON = 50h
Tmod = 20h
th1 = Baudrate
PCON = x
Clr ri
Baudrate :
Lihat table V.4
1. Modul training kit uController, beserta kabel interkoneksi (kabel ribbon dan kabel RS-232).
2. PC berbasis MS Windows yang terdapat Hyper Terminal, Reads51 dan Borland Delphi.
1. Hyper 1 (PC => uController)
a. Ketik syntax diatas pada program Reads51, save pada My Documents/Embedded
System/Percobaan 5/Hyper1.asm, kemudian compile.
b. Bila tidak terdapat pesan kesalahan buka program Atmel ISP, dan lakukan flashing terhadap
file tersebut ke dalam uController.
c. Sebelum Run target, buka program Hyper Terminal (Name = Baud 19200 bps, Connection
Using = Com 1, Bits per second = 19200, Flow control = none).
d. Klik Run target pada program Atmel ISP, tekan tombol keyboard dan amati nyala led. Catat
hasil outputnya
Al a t – a l a t
Pr o s ed ur Pe r c o b a a n
#include <sfr51.inc>
acall init_serial
start:
acall detect
mov p2, a
sjmp start
;
init_serial:
mov scon, #50h
mov tmod, #20h
mov th1, #0fdh
mov tl1, #0fdh
mov pcon, #80h
setb tr1
setb es
setb ea
ret
;
detect:
jnb ri, detect
clr ri
mov a, sbuf
ret
;
end
2. Hyper 2 (uController => PC)
a. Ketik syntax diatas pada program Reads51, save pada My Documents/Embedded
System/Percobaan 5/Hyper2.asm, kemudian compile.
b. Bila tidak terdapat pesan kesalahan buka program Atmel ISP, dan lakukan flashing terhadap
file tersebut ke dalam uController.
c. Sebelum Run target, buka program Hyper Terminal (Name = Baud 9600 bps, Connection
Using = Com 1, Bits per second = 9600, Flow control = none).
d. Klik Run target pada program Atmel ISP, catat hasil output yang tampil pada program Hyper
Terminal.
#include <sfr51.inc>
org 100h
;
start:
acall init_serial
mov a,#41h
send_data :
acall send_out
acall delay
inc a
cjne a, #5Bh, send_data
sjmp start
;
init_serial:
mov scon, #40h
mov tmod, #20h
mov th1, #0fdh
mov tl1, #0fdh
mov pcon, #00h
setb tr1
setb es
setb ea
ret
;
send_out:
clr ti
mov sbuf, a
ret
;
delay:
mov r7, #0ffh
delay1:
mov r6, #0ffh
djnz r6, $
djnz r7, delay1
ret
end
3. Inter 1 (PC => u Controller, dengan Borland Delphi)
a. Klik File–Save All pada My Documents/Embedded System/Percobaan 5/Inter 1/Project1….,
Kemudian Tekan tombol F9, cek syntax dan setingan properties bila ada pesan kesalahan.
b. Flashing program “ Latman Hyper1.hex ” kedalam DT-51.
c. Buka Windows Explore, double klik file exe hasil kompilasi dari program Delphi yang telah
dibuat
d. Klik Run target pada program Atmel ISP, tekan tombol yang telah dibuat, perhatikan hasil
output led dan buat kesimpulan dari pengamatan kalian
Cat : Bila ada yang kurang jelas, sebaiknya tanyakan kepada asisten yang bertugas.
A. Borland Delphi :
Buat Form Seperti Gambar Di Bawah ;
Pengaturan nilai properties :
Komponen Properties Pengaturan
Form1 Caption Inter 1
Button1 Caption Putar Ke Kanan
Font 12 pt
Button2 Caption Putar Ke Kiri
Font 12 pt
Comport1 BaudRate br19200
Connected True
Program :
Double klik pada Button1 :
procedure TForm1.Button1Click(Sender: TObject);
begin
Comport1.WriteStr (‘a’);
end;
Double klik pada Button2 :
procedure TForm1.Button2Click(Sender: TObject);
begin
Comport1.WriteStr (‘b’);
end;
4. Inter 2 (u Controller, dengan Borland Delphi => PC)
a. Klik File–Save All pada My Documents/Embedded System/Percobaan 5/Inter 1/Project2….,
Kemudian Tekan tombol F9, cek syntax dan setingan properties bila ada pesan kesalahan.
b. Flashing program “ Latman Hyper2.hex ” kedalam DT-51.
c. Buka Windows Explore, double klik file exe hasil kompilasi dari program Delphi yang telah
dibuat
d. Klik Run target pada program Atmel ISP, tekan tombol yang telah dibuat, perhatikan hasil
output pada program Inter 2 dan buat kesimpulan dari pengamatan kalian
Cat : Bila ada yang kurang jelas, sebaiknya tanyakan kepada asisten yang bertugas.
B. Borland Delphi :
Buat Form Seperti Gambar Di Bawah ;
Pengaturan nilai properties :
Komponen Properties Pengaturan
Form1 Caption Inter 2
Memo1 – -
Comport1 BaudRate br9600
Connected True
Program :
Klik pada Comport1, pada tab events double klik OnRxChar
Procedure TForm1.ComPort1RxChar(Sender:TObject;Count:Integer);
Var
Str : string;
Begin
Comport1.ReadStr (Str,1);
memo1.text := memo1.text + Str;
end;
3 Comments »
Leave a Reply
-
Archives
- September 2008 (1)
-
Categories
-
RSS
Entries RSS
Comments RSS

mantab
tpi gak ada gambar membingungkan!!!!!
Gambarnya menyusul belakangan