MODE KOMUNIKASI SERIAL
1. Teori Dasar
Komunikasi
Serial:
“Komunikasi
serial adalah komunikasi yang mengantarkan data digital secara bit per bit
secara bergantian melalui media interface serial”, contoh: modem, mouse dll
Pengiriman data
melalui interface serial dapat dilakukan secara bit per bit (setiap satu step
waktuà 1 bit) atau juga dalam satuan baud dimana
1 baud tidak mesti senilai dengan 1 bit per second, tergantung besaran data
untuk setiap kali clock transfer.
Kerugian Komunikasi Paralel
§
Penggunaan
kabel yang lebih pendek, sebab keterbatasan proses transfer
§
Membutuhkan
banyak kabel penghantar
Konsekuensi terhadap Komunikasi Serial
§ Tingginya tingkat keamanan terhadap gangguan karena tingginya ayunan
tegangan (dengan jangkauan max. 50 Volt) à Sehingga dapat direalisasikan dengan kabel yang lebih panjang.
§
Membutuhkan
sedikit kabel penghantar (misalkan dg tiga utas kabel: Tx, Rx dan Ground)
§
Membutuhkan
penyesuaian protokol komunikasi data terutama untuk sinkronisasi antara
pengirim dan penerima.
Perbedaan
diantara Komunikasi Serial
§ Perbedaan data rate (jumlah data per waktu)
§
Jumlah
dan jenis penghantar (min. 1 kabel koaxial)
§ Penggunaan protokol komunikasi
Metode Sinkronisasi
n
Problem
utama komunikasi serial adalah metode sinkronisasi, yakni pengendalian clock
pengirim dan penerima. Kedua clok seharusnya berada pada
frekuensi yang sama, agar penerima dapat mengambil data tepat pada waktunya.
n Tujuan sinkronisasi adalah menghindari
keterlambatan dan kesalahan pengambilan data sehingga perlu dilakukan penyesuaian
clok penerima dengan clok pengirim.
Komunikasi Sinkron
n Ditandai dg: Clok penerima disetting
hanya pada awal komunikasi clok pengirim.
n Terdapat dua bentuk realisasi:
1. Menyediakan 3 penghantar ( untuk data yang dikirim, data yang
diterima dan external clok). Dengan bantuan penghantar clok, penerima dapat
mengendalikan proses pengambilan data (sampling data).
2. Interface serial terdiri hanya satu
penghantar atau pasangan penghantar, dimana diawal paket data dikirimkan bit preamble
sebagai bit sinkronisasi. Clok penerima akan mengalami
settingan selama bit preamble berjalan.
Komunikasi Asynchrone (Tidak Sinkron)
n Ditandai dg: Dimana sinkronisasi clok pengirim dan penerima
terjadi pada awal dari setiap simbol data yang dikirim.
n
Realisasinya: sebelum bits data terdapat satu atau dua
startbit. Starbit ini menentukan kapan penerima mengambil data, dan ini
berjalan dalam sebagian dari periode clok.
n
Komunikasi
Asynchrone mengirimkan data secara simbol per simbol, dimana disini ditandai acknowledge
untuk setiap penyelesaian masing-masing simbol.
n
Format Data Komunikasi Asynchrone tidak standard,
bervariasi tergantung pada:
1. Genap atau ganjilnya parity (parity
menandakan genap atau ganjilnya jumlah dari bit ‘1’ )
2.
Satu atau dua stopbits
Komunikasi
Asynchrone pada RS -232 (mis. 1 simbol = 1 Byte)
Gambar diatas
memperlihatkan bentuk gelombang komunikasi serial dengan format 8N1,
yaitu 8-bit data, tanpa parity, 1 stop bit.
n Pada keadaan idle atau menganggur (idle),
jalur RS-232 ditandai dengan mark state atau Logika HIGH.
n Pengiriman data diawali dengan start bit
yang berlogika 0 atau LOW, berikutnya
data dikirimkan bit demi bit mulai dari LSB (Least Significant Bit) atau bit
ke-0.
n Pengiriman setiap byte diakhiri dengan stop bit yang
berlogika HIGH.
Gambar ini memperlihatkan kondisi LOW
setelah stop bit, ini adalah start bit yang
menandakan data berikutnya akan dikirimkan. Jika tidak ada lagi data yang ingin dikirim, maka
jalur transmisi ini akan dibiarkan dalam keadaan HIGH.
Ada yang disebut
‘Break Signal’, yaitu keadaan LOW yang lamanya cukup untuk
mengirimkan 8-bit data. Jika pengirim menyebabkan jalur komunikasi dalam
keadaan seperti ini, penerima akan menganggap ini adalah ‘break signal’ atau
sinyal rusak.
Data yang
dikirimkan dengan cara seperti pada gambar diatas disebut data yang
terbingkai (to be framed) oleh start dan stop bit.
Jika stop bit dalam keadaan LOW, berarti telah terjadi framing error. Biasanya
hal ini terjadi karena perbedaan kecepatan komunikasi antara pengirim dengan
penerima.
UART
pada 8051
n UART: Universal Asynchronous Receiver
Transmitter.
Fungsi UART
membangun komunikasi aliran data digital secara serial dalam frame yang
ditetapkan. Frame ini terdiri dari Start Bit, 5 s/d 9 Bits Data, optional
memiliki bit Parity yang berperan untuk mendeteksi kesalahan transfer
data, dan Stop Bit.
UART juga
merupakan salah satu sarana yang disediakan oleh Intel 8051, yang melayani
pengiriman dan penerimaan data dengan bantuan register SBUF.
Dengan adanya
UART, programer hanya butuh membaca data dari register SBUF tanpa harus susah
payah mengatur pengiriman data bit demi bit dengan baudrate tertentu.
Baudrate : besaran kecepatan komunikasi data untuk setiap kali
step (clok) pengiriman. Satuannya adalah baud
atau symbol/second
Sebelum komunikasi berlangsung, harus
dilakukan dulu inisialisasi register-register tertentu pada SFR yang terkait
dengan komunikasi serial termasuk penentuan baudrate. Saat proses pengiriman
maupun penerimaan data sedang berlangsung, kosong dan penuhnya SBUF akan
diberitakan melalui bit indikator TI dan RI. Pemantauan TI dan RI dapat
dilakukan dengan atau tanpa melibatkan sistem interupsi.
2. Setting Mode Komunikasi Serial
Sebelum
komunikasi dilakukan, programer harus melakukan setting-an register:
§
SCON à apabila komunikasi yang dilakukan secara
sinkron
§
SCON
serta TMOD (utk settingan Timer Mode), TH1, dan SMOD (salah satu bit register
PCON) à apabila
komunikasi dilakukan secara asynchrone
Isi Register SCON
Bit ke-
|
Nama bit
|
Address
|
Explanation of Function
|
7
|
SM0
|
9F
|
Serial
port mode bit 0
|
6
|
SM1
|
9E
|
Serial
port mode bit 1.
|
5
|
SM2
|
9D
|
Multiprocessor
Communications Enable
|
4
|
REN
|
9C
|
Receiver
Enable.
|
3
|
TB8
|
9B
|
Transmit
bit 8. The 9th bit to transmit in mode 2 and 3.
|
2
|
RB8
|
9A
|
Receive
bit 8. The 9th bit received in mode 2 and 3.
|
1
|
TI
|
99
|
Transmit
Flag. Set when a byte has been completely transmitted.
|
0
|
RI
|
98
|
Receive
Flag. Set when a byte has been completely received.
|
Sebagai
tambahannya, tabel diatas berisi mode komunikasi serial yang sesuai dengan
keadaan bit-bit SM0 dan SM1.
Mode
komunikasi serial berdasarkan bit pada SM0 dan SM1
SM0
|
SM1
|
Serial Mode
|
Explanation
|
Baud Rate
|
0
|
0
|
0
|
8-bit
Shift Register
|
Oscillator / 12
|
0
|
1
|
1
|
8-bit
UART
|
Terkait dengan Timer 1
|
1
|
0
|
2
|
9-bit
UART
|
Oscillator / 32 or / 64
|
1
|
1
|
3
|
9-bit
UART
|
Terkait dengan Timer 1
|
Bit ke-7 sampai
bit ke-4 pada SCON merupakan bit konfigurasi. Seperti tampak pada Tabel 10.2,
setting bit SM0 dan bit SM1 memungkinkan kita memilih 1 dari 4 mode komunikasi.
Mode 0 berarti komunikasi asinkron dengan kecepatan transfer 1/12 kali
frekuensi osilator. Jika kita menggunakan osilator 12 MHZ, berarti kecepatan
transfernya 1 Mbaud. Mode 1 adalah mode yang palign sering dipilih. Pada mode
ini, komunikasi dilakukan secara asinkron dengan baudrate ditentukan
berdasarkan setting pada Timer 1. Jika mode 1 ini dipilih, Timer 1 harus diset
pada mode 8-bit autoreload. Pengisian register TH1 dan bit SMOD pada register
PCON menentukan baudrate yang akan berlaku pada komunikasi serial tipe ini.
Mode 2 dan 3
adalah mode komunikasi serial dengan bingkai atau frame berukuran 9-bit. Karena
1-byte data hanya terdiri dari 8-bit, bit kesembilan diambil dari bit TB8 atau
RB8 pada register SCON. Bit TB8 adalah bit yang ditambahkan ketika dilakukan
transmit atau pengiriman data, sedangkan bit RB8 ditambahkan ketika prosesor
sedanga menerima atau receive data.
Bit SM2 hanya
digunakan untuk komunikasi multiprosesor. Biasanya, jika prosesor sedang
berperan sebagai penerima data, saat SBUF penuh, bit RI akan berubah menjadi
HIGH. Tetapi jika SM2 diset HIGH, maka perubahan RI menjadi HIGH ini bergantung
pada bit ke-9 yang diterima, jika bit ke-9 ini HIGH, maka RI juga ikut menjadi
HIGH. Meskipun SBUF telah penuh, jika bit ke-9 LOW, maka bit indikator RI tidak
akan berubah menjadi HIGH. Hal seperti ini berguna pada aplikasi tertentu yang
melibatkan beberapa prosesor untuk berkomunikasi antar mereka. Dengan kata lain
setting SM2 bisa membuat prosesor bersangkutan menjadi tuli, tidak menghiraukan
datangnya data pada SBUF karena memang data tersebut bukan untuknya tetapi
untuk prosesor lainnya yang ada pada jalur komunikasi serial yang sama.
Bit REN atau
Receive Enable diset jika kita ingin komunikasi berlangsung 2 arah, prosesor
juga dapat menerima data selain dapat mengirim data melalui saluran serial.
Jika bit ini diset LOW, maka prosesor menjadi tuli, sama sekali tidak dapat
menerima data.
Empat bit LSB
pada register SCON merupakan bit-bit operasional. Bit TB8 dan bit RB8 terkait
dengan komunikasi serial mode 2 dan 3 seperti telah dijelaskan sebelumnya.
Sedangkan bit RI dan TI merupakan bit indikator yang menyatakan SBUF telah
dalam keadaan penuh atau kosong. Jika prosesor mengirim data, data tsb cukup
diletakkan di register SBUF, pengiriman bit demi bit dilakukan oleh internal
USART. Saat SBUF kosong karena semua bit telah dikirimkan ke saluran serial
TxD, maka bit indikator TI (transmit interrupt) akan berubah menjadi HIGH.
Sedangkan bit indikator RI bekerja sebaliknya. Ketika prosesor sedang menerima
data bit demi bit dari saluran serial RxD, bit indikator RI (receive interrupt)
akan berubah menjadi HIGH saat SBUF telah dipenuhi 8-bit data.
Perlu dicatat
bahwa sebenarnya bit TI diset HIGH pada pertengahan pengiriman stop bit,
sedangkan bit RI diset pada pertengahan penerimaan stop bit. Untuk komunikasi
dengan standard RS-485 programmer tidak boleh melakukan disable saluran
komunikasi terlalu cepat, ia harus menunggu paling tidak selama setengah
periode stop bit setelah RI atau TI berubah menjadi HIGH, jika tidak, maka akan
terjadi transmission error.
3. Setting untuk menentukan Baudrate
Seperti tampak
pada tabel sebelumnya penentuan kondisi bit SM0 dan SM1 berakibat pada pilihan
1 dari 4 mode komunikasi serial. Mode 0 dan 2 menggunakan baudrate yang hanya
bergantung pada frekuensi osilator. Pada mode 0, hanya satu macam baudrate yang
diizinkan, yaitu frekuensi kristal. Jika kita menggunaka
kristal 11.0592 Mhz, baudrate untuk mode 0 adalah 921600 baud. Untuk mode 2,
disediakan 2 pilihan baudrate, yaitu atau kali frekuensi kristal, bergantung pada
kondisi bit SMOD pada register PCON. Jika SMOD diset HIGH, maka baudrate sama
dengan kali frekuensi kristal. Jika frekuensi kristal
11.0592 Mhz dan SMOD diset LOW, maka baudrate untuk mode 2 adalah 172800 baud.
Untuk mode 1 dan
3, penentuan baudrate harus melibatkan Timer 1. Timer 1 harus digunakan dengan
mode 8-bit autoreload dan pengisian TH1 harus disesuaikan dengan baudrate yang
diinginkan. Rumus untuk menentukan isi TH1 terkait dengan budrate yang
diinginkan adalah sebagai berikut.
, jika bit
SMOD pada register PCON diset LOW.
, jika bit
SMOD = HIGH.
Misalnya, jika
kita menggunakan kristal 11.0592 Mhz, untuk memperoleh baudrate 19200 baud, TH1
harus diisi dengan angka berikut ini,
TH1 = 256 - ((f / 384) / Baud)
TH1 = 256 - ((11059200 / 384) /
19200)
TH1 = 256 - ((28,799) / 19200)
TH1 = 256 - 1.5 = 254.5
Tetapi karena TH1
harus diisi dengan bilangan integer, maka kita harus memilih pembulatan dari 254.5
menjadi 254 atau 255. Jika kita pilih TH1 = 254, maka baudrate yang akan kita
peroleh adalah 14400 baud, sedangkan jika kita pilih TH1 = 255, maka
baudratenya menjadi 28800 baud. Tentu saja ini menyulitkan kita. Untuk
mengatasinya, kita dapat memanfaatkan bit SMOD pada register PCON. Jika SMOD
diset HIGH, maka perhitungan TH1 menjadi seperti berikut ini,
TH1 = 256 - ((f / 192) / Baud)
TH1 = 256 - ((11059200 / 192) /
19200)
TH1 = 256 - ((57699) / 19200)
TH1 = 256 - 3 = 253
Karena yang
diperoleh adalah bilangan integer, yaitu 253, maka baudrate yang kita peroleh
akan sama dengan 19200 baud.
Secara ringkas,
untuk memperoleh baudrate 19200 baud, kita harus melakukan langkah-langkah
berikut ini,
1. Pilih komunikasi serial
mode 1 atau 3.
2. Pilih mode 2 atau 8-bit
autoreload untuk Timer 1.
3. Isi register TH1 dengan
bilangan 253.
4. Set bit SMOD pada
register PCON menjadi HIGH.
4. Mengirim dan Menerima Data melalui saluran
Serial
Secara ringkas,
pengiriman data cukup dilakukan dengan mengisi register SBUF dengan data yang
akan dikirimkan, byte selanjutnya dikirim ketika bit TI berubah menjadi HIGH.
Sedangkan penerimaan ada cukup dilakukan dengan mengambil data dari SBUF
setelah bit RI menjadi HIGH.
Berikut ini adalah contoh potongan program
tanpa interupsi untuk mengirimkan 8-byte data dari RAM mulai alamat 30H melalui
saluran serial TxD dengan kecepatan transfer 19200 baud. Frekuensi kristal yang
digunakan harus 11.0592 MHz.
$MOD51
DSEG
ORG 30H
Buffer: DS 10 ;pesan
tempat 10-byte pada RAM mulai 30H
Loop: DS 1 ;sebagai counter pengulangan
CSEG
ORG
0H
LJMP START
ORG
30H
START:
MOV SCON,#01010000B
MOV TMOD,#00100001B
MOV PCON,#10000000B
MOV TH1,#253
MOV TL1,#253
SETB TR1
MOV R1,#buffer
MOV Loop,#8
Ulang:
CLR TI
MOV SBUF,@R1 ;copy data dari RAM internal ke SBUF
JNB TI,$
INC R1
DJNZ Loop,ulang
END
Jika kita ingin
mengambil 8-byte data dari saluran serial RxD kemudian meletakkannya di RAM
mulai alamat 30H, maka potongan programnya sebagai berikut,
$MOD51
DSEG
ORG 30H
Buffer: DS 10 ;pesan
tempat 10-byte pada RAM mulai 30H
Loop: DS 1 ;sebagai counter pengulangan
CSEG
ORG
0H
LJMP START
ORG
30H
START:
MOV SCON,#01010000B
MOV TMOD,#00100001B
MOV PCON,#10000000B
MOV TH1,#253
MOV TL1,#253
SETB TR1
MOV R1,#buffer
MOV Loop,#8
Ulang:
JNB RI,$
MOV @R1,SBUF ;copy data dari SBUF ke RAM internal
CLR RI
INC R1
DJNZ Loop,ulang
END
5. Menghubungkan pin TxD dan RxD
dengan konektor DB9.
Untuk melakukan
komunikasi serial dengan standar RS-232, harus dilakukan penyesuaian level
sinyal dari level TTL menjadi level RS-232 menggunakan IC tertentu, misalnya DS
275 atau MAX232. Gambar 5.1. di bawah ini merupakan contoh penggunaan IC MAX232
untuk menyesuaikan tegangan dari prosesor dengan tegangan standar RS-232 yang
melalui konektor DB9. Pin TxD dari prosesor dihubungkan dengan pin T1IN pada
MAX232, sedangkan pin RxD dari prosesor dihubungkan dengan pin R1OUT pada
MAX232.
Gambar 5.1. Contoh penggunaan IC pengubah
level sinyal.
Gambar 5.2.
memperlihatkan contoh sambungan prosesor AT89C2051 dengan konektor DB9. Karena
prosesor terhubung juga dengan driver stepper motor, maka dapat dibuat program
untuk memungkinkan pengendalian stepper tersebut melalui saluran serial.
Informasi dapat berasal dari PC maupun alat lainnya seperti handphone.
Gambar 5.2.
Contoh sambungan antara DB9 dengan prosesor AT89C2051.
6. Menghubungkan prosesor Intel
8051 dengan Personal Computer.
Berikut ini
adalah contoh potongan program yang menggunakan interupsi untuk komunikasi anta
prosesor Intel 8051 dengan sebuah Personal Computer melalui konektor DB9.
Gambar 6.1. memperlihatkan software yang digunakan untuk komunikasi serial pada
PC, sedangkan gambar 6.2. adalah contoh setting format data dan baudrate yang
diinginkan.
Gambar 6.1. Penggunaan program Hyper Terminal pada Windows XP.
Gambar 6.2.
Penentuan konektor DB9 (kiri) dan baudrate (kanan)
Untuk menerima
data dari PC, prosesor Intel 8051 harus diisi dengan program penerimaan data
dari PC seperti tampak pada listing berikut ini,
PENERIMAAN
DATA DARI PC
$MOD51
ORG 000H
LJMP START ;alamat awal program
ORG 023H ;alamat awal ISR untuk Komunikasi
Serial
LJMP SERIALKOM
START: MOV SCON,#50H
MOV TMOD,#0010000B
MOV TL1,#0FDH ;baud
rate 9600 bps
MOV TH1,#0FDH
MOV PCON,#00H
SETB TR1
SETB ES
SETB EA
SJMP $
SERIALKOM: CLR RI
MOV A,SBUF
MOV P1,A
RETI
END
PENGIRIMAN DATA KE PC
$MOD51
ORG 000H
LJMP START
;alamat awal program
ORG 023H
;alamat awal ISR untuk Komunikasi Serial
LJMP SERIALKOM
START: CLR ET1
MOV SCON,#40H
MOV TMOD,#0010000B
MOV TL1,#0FDH ;baud
rate 9600 bps
MOV TH1,#0FDH
MOV PCON,#80H
SETB TR1
SETB ES
SETB EA
MOV A,#’1’ ;kode ASCII untuk angka ‘1’
CLR TI
MOV SBUF,A
SJMP $
SERIALKOM: CLR TI
MOV SBUF,A
CJNE A,#’9’,PLUS
MOV A,#’1’
SJMP EXIT
PLUS: INC A
EXIT: RETI
END
PENERIMAAN DAN PENGIRIMAN DATA.
Program
ini memungkinkan prosesor Intel 8051 menerima data dari PC, kemudian langsung
mengembalikannya ke PC.
$MOD51
ORG 000H
LJMP START
;alamat awal program
ORG 023H ;alamat awal ISR untuk Komunikasi
Serial
LJMP SERIALKOM
START: CLR ET1
MOV SCON,#50H
MOV TMOD,#0010000B
MOV TL1,#0FDH ;baud
rate 9600 bps
MOV TH1,#0FDH
MOV PCON,#00H
SETB TR1
SETB ES
SETB EA
SJMP $
SERIALKOM: CLR RI
MOV A,SBUF
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
RETI
END
Tidak ada komentar:
Posting Komentar