2.1. Pendahuluan
Pada umumnya peralatan output sebuah komputer terdiri dari Serial dan
Paralel port. Dari segi namanya maka komunikasi serial akan mengirimkan data
secara serial/berurutan. Serial port lebih sulit ditangani daripada paralel port
karena peralatan yang dihubungkan ke serial port harus berkomunikasi
menggunakan transmisi serial, sedangkan data pada komputer dikelola secara
paralel. Karenanya data dari (dan ke) serial port harus dikonversikan ke (dan dari)
bentuk paralel untuk bisa digunakan. Secara hardware, hal ini bisa dilakukan oleh
Universal Asynchronous Receiver Transmitter (UART), namun pada softwarenya
justru ada lebih banyak register UART yang harus ditangani dibanding pada
paralel port.
2.2. Penyajian
2.2.1 Tata Cara komunikasi Serial
Dikenal dua cara komunikasi data secara serial, yaitu komunikasi data serial
secara asinkron dan secara sinkron. Pada komunikasi data serial sinkron, clock
dikirimkan bersama-sama dengan data serial, sedangkan komunikasi data serial
asinkron, clock tidak dikrimkan bersama data serial, tetapi dibangkitkan secara
sendiri-sendiri baik pada sisi pengirim (transmitter) maupun pada sisi penerima
(receiver). Pada IBM PC kompatibel port serialnya termasuk jenis asinkron.
Komunikasi data serial ini dikerjakan oleh UART.
Pada UART, kecepatan pengiriman data (baud rate) dan fase clock pada sisi
transmitter dan pada sisi receiver harus sinkron. Untuk itu diperlukan sinkronisasi
antara transmitter dan receiver. Hal ini dilakukan oleh bit ‘Start’ dan bit ‘Stop’.
Ketika saluran transmisi dalam keadaan idle (kosong), output UART adalah dalam
keadaan logika ‘1’. Ketika transmitter ingin mengirimkan data, output UART
11
akan diset lebih dulu ke logika ‘0’ untuk waktu satu bit. Sinyal ini pada receiver
akan dikenali sebagai sinyal ‘start’ yang digunakan untuk mensinkronkan fase
clocknya sehingga sinkron dengan fase clock transmitter. Selanjutnya data akan
dikirimkan secara serial dari bit paling rendah (bit 0) sampai bit tertinggi.
Selanjutnya akan dikirim sinyal ‘Stop’ sebagai akhir dari pengiriman data serial.
Cara pemberian kode data yang disalurkan tidak ditetapkan secara pasti. Berikut
ini adalah contoh pengiriman huruf ‘A, dalam format ASCII (41 heksa / 1000001
biner) tanpa bit paritas.
12
1. Logika ‘1’ disebut ‘mark’ terletak antara -3 Volt hingga -25 Volt
2. Logika ‘0’ disebut ‘space’ terletak antara +3 Volt hingga +25 Volt.
3. Daerah tegangan antara -3 Volt hingga +3 Volt adalah invalid level,
yaitu daerah tegangan yang tidak memiliki level logika pasti sehingga
harus dihindari. Demikian juga dengan level tegangan lebih negatif dari
-25 Volt atau lebih positif dari +25 Volt juga harus dihindari karena
tegangan tersebut dapat merusak line driver pada saluran RS232.
Gambar dibawah ini merupakan contoh level tegangan RS232 pada
pengiriman huruf ‘A’ dalam format ASCII tanpa bit paritas.
Gambar 2.2 Level tegangan RS232 pengiriman huruf ‘A’ tanpa bit paritas
Konverter Logika RS 232
Jika peralatan yang kita gunakan menggunakan logika TTL maka sinyal port
harus kita konversikan dahulu ke pulsa TTL sebelum kita gunakan, dan sebaliknya
sinyal dari peralatan harus dikonversikan ke logika RS-232 sebelum diinputkan ke
serial p[ort. Konverter yang paling mudah digunakan adalah MAX-232. Didalam
IC ini terdapat Charge pump yang akan membangkitkan + 10 Volt dan -10 Volt
dari sumber +5 Volt tunggal. Dalam IC DIP (Dula in-line Package) 16 pin (8 pin x
2 baris) yang terdapat 2 buah transmitter dan 2 buah receiver.
13
Gambar 2.3 pin out MAX-232
Selain IC MAX terdapat juga IC DS 1489 dan DS 1448 yang dapat
digunakan sebagai konverter RS-232. Dua IC terpisah ini harus digunakaan
bersama karena DS1448 adalah driver RS-232 dan DS 1488 adalah penerima
(receiver) RS-232. Pada setiap IC terdapat 4 inverter driver maupun receiver. IC
DS1448 membutuhkan power supply ganda ±7,5 V dan ±15 V.
2.2.3 Hardware
Peralatan yang menggunakan media serial port untuk berkomunikasi dibagi
dalam dua kelompok yaitu: Data Communication Equipment (DCE) seperti
Modem, Ploter, dll dan Data Terminal Equipment (DTE) seperti terminal
dikomputer.
Konektor port serial terdiri dari 2 jenis, yaitu konektor 25 pin (DB25 dan 9
pin (DB9) yang berpasangan (jantan dan betina). Bentuk dari konektor DB-25
sama persis dengan port paralel. Umumnya COM1 berada dialamat 3F8H,
sedangkan COM2 dialamat 2F8H. Seperti diperlihatkan pada gambar 2.4 di
bawah ini:
14
Pin Out Serial Port
Tabel 2.1 dibawah ini menunjukkan hubungan konektor serial port dengan
nama sinyalnya. Diberikan juga kesesuaian antara DB-9 dan DB-25.
Tabel 2.1 Pin out serial port
DB-25 DB-9 Singkatan Nama Arah Sinyal
2 3 TD transmit data Ke DEC
3 2 RD receive data Dari DCE
4 7 RTS request to send Ke DCE
5 8 CTS clear to send Dari DCE
6 6 DSR data set ready Dari DCE
7 5 SG signal ground -
8 1 CD carrier detect Dari DCE
20 4 DTR data terminal ready Ke DCE
22 9 RI Ring indicator Dari DCE
Untuk dapat menggunakan port serial kita perlu mengetahui alamatnya. Biasanya
tersedia dua port serial pada CPU yaitu COM1 dan COM2. Base Address COM1
adalah 1016 (3F8h) dan COM2 biasanya 760 (2F8h). Setelah kita mengetahui
base addressnya, maka kita dapat menentukan alamat register-register yang
digunakan untuk komunikasi port serial ini. Berikut adalah tabel register-register
tersebut beserta alamatnya.
Tabel 2.2 Alamat register port serial
Nama register COM1 COM2
TX Buffer 3F8h 2F8h
RX Buffer 3F8h 2F8h
Baud rate divisor Latch LSB 3F8h 2F8h
Baud rate divisor Latch MSB 3F9h 2F9h
Interupt Enable Register 3F9h 2F9h
Interupt Identification Register 3Fah 2FAh
Line Control Register 3FBh 2FBh
Modem Control Register 3FCh 2FCh
Line Status Register 3FDh 2FDh
Modem Status Register 3FEh 2FEh
15
Baud rate divisor Latch LSB, digunakan untuk menampung byte bobot
rendah untuk pembagi clock pada IC UART agar didapat baud rate yang
tepat
Baud rate divisor Latch MSB, digunakan untuk menampung byte bobot
rendah untuk pembagi clock pada IC UART sehingga total angka pembagi
adalah 4 byte yang dapat dipilih dari 0001h sampai FFFFh. Berikut adalah
tabel angka pembagi yang sering digunakan.
Tabel 2.3 Angka pembagi clock pada IC UART
Baud rate (bit/detik) Angka pembagi
300 0180h
600 0C00h
1200 0060h
1800 0040h
2400 0030h
4800 0018h
9600 000Ch
Interrupt Enable Register, digunakan untuk menset interupsi apa saja yang
akan dilayani komputer, dan dapat menampung pemrograman agar jika
terjadi suatu keadan khusus dapat melangsungkan interupsi ke CPU.
Tabel 2.4 Rincian bit pada IER
No. Bit Keterangan
0 1: Interupsi akan diaktifkan jika menerima data
1 1: Interupsi akan diaktifkan jika register Tx kosong
2 1:interupsi diakrifkan jika ada perubahan keadaan pada line
Status Register
3 1: diaktifkan jika ada perubahan keadaan pada modem status
register
4,5,6,7 Diisi 0
16
01: Prioritas tertinggi oleh register Rx jika menerima data
10: Prioritas tertinggi oleh register Tx jika telah kosong
11: Prioritas tertinggi oleh modem status register
3,4,5,6,7 Diisi 0
Line Control Register, digunakan untuk menentuakan jumlah bit data, bit
pariti, jumlah bit stop dan untuk menentukan apakah baud rate divisor
dapat diubah atau tidak.
Tabel 2.6 Rincian bit pada Line Control Register
17
lain, dapat dibuat logika high atau logika low. Secara normal
tidak digunakan
3 Bit OUT2, digunakan sebagai penghubung ke perangkat
lain, dapat dibuat logika high atau logika low
4 0: Loop back intenal diaktifkan
1: Loop back internal tidak diaktifkan
5,6,7 Diisi 0
18
2.2.4 Null Modem
Null modem digunakan untuk menghubungkan 2 buah komputer (DTE)
sekaligus. Umumnya digunakan sebagai cara murah dalam bermain game pada
jaringan, atau juga digunakan untuk transfer file antar komputer menggunakan
protokol Zmodem, Xmodem, dll. Untuk membuat null modem, hubungkan 2 buah
DTE seperti yang diperlihatkan pada gambar 2.5 dibawah ini.
19
maka komputer mengirimkan sinyal RTS bernilai tinggi, dan sinyal ini diperlukan
oleh CTS. Dengan menghubungkan keduanya secara langsung maka seolah
komputer tujuan langsung siap menerima data menerima data begitu ada
permintaan untuk mengirim data (RTS).
20
dibutuhkan jumlah kabel yang lebih sedikit, bisa hanya menggunakan 3
kabel, yaitu saluran transmit data, receive data, dan saluran ground
(konfigurasi null modem)
Saat ini penggunaan mikrokontrolel semakin populer, kebanyakan
mikrokontroler sudah dilengkapi dengan SCI (Serial Communication
Interface) yang digunakan untuk komunikasi dengan port serial komputer.
21
even error. Tabel 2.12 dan tabel 2.13 dibawah ini merupakan nilai-nilai dari
properti CommEvent. Nilai properti ini tidak tersedia pada saat design time,
melainkan dapat dibaca pada saat run time.
Tabel 2.12 Nilai-nilai properti even error pada CommEvent
Konstanta Keterangan
comEventFrame Hardware mendeteksi adanya kesalahan framing
comEventRxParity Hardware mendeteksi adanya kesalahan pariti
comEventRxOver Buffer penerima mengalami over flow, tidak ada ruang
kosong lagi pada buffer penerima
comEventTxFull Buffer kirim penuh
comEventEverrun Port mengalami overrun
comEventBreak Sinyal break diterima
comEventDCB Mendapatkan kembali device kontrol block (DCB) dari port
serial
Traffic Ligt
Program traffict light merupakan contoh pengaksesan port serial secara langsung
melalui register UART. Anda dapat memilih pilihan port pada COM1 atau COM2.
Gambar 2.6 adalah rangkaian interfacing port serial dengan LED yang
mempresentasikan lampu pada trafficlight.
22
Gambar 2.6 Rangkaian interfacing port serial dengan LED
Pada rangkaian di atas tidak diperlukan resistor karena pada port serial sudah
dilengkapi rangkaian pembatas arus, arus keluaran ini kecil dan tidak akan
merusak LED.
Langkah pembuatan program dengan Visual Basic.
1. Buka VB. Pada menu file klik New Project lalu klik OK untuk membuat
sebuah file executable standar.
2. Ubah ukuran form agar tampilannya menjadi ideal dan rancanglah seperti
gambar 2.7 dibawah ini.
23
3. Ubah properti object seperti tabel dibawah ini:
24
CommandButton Name cmdExit
Caption EXIT
Sampai disini proses pembuatan form telah selesai. Langkah selanjutnya adalah
menuliskan kode-kode program sehingga program bisa berjalan sesuai dengan
yang diinginkan.
Kode Program
1. Prosedur even Form_Load
Berikut adalah kode programnya:
Private Sub Form_Load()
Do
Modem_status_Reg% = Port_In(&H2FE)
Loop Until Modem_status_Reg% <> &HFF
25
3. Prosedur even cmdRun_Click
Prosedur ini merupakan prosedur utama dari program ini, yaitu mengatur
penyalaan LED melalui port serial COM2.
Traffic_Atom = GlobalFindAtom("Traffic_Light_On")
If Traffic_Atom = 0 Then
Traffic_Atom = GlobalAddAtom("Traffic_Light_On")
End If
cmdRun.Enabled = False
hsMerah.Visible = False
hsKuning.Visible = False
hsHijau.Visible = False
Do
Merah_On
ShMerah.BackColor = vbRed
ShKuning.BackColor = vbBlack
ShHijau.BackColor = vbBlack
For i% = 0 To (HScroll3.Value) '* 60 '(menit)
Tunda 1000
If GlobalFindAtom("Traffic_Light_On") = 0 Then
Exit Do
End If
Next i%
Kuning_On
ShMerah.BackColor = vbBlack
ShKuning.BackColor = vbYellow
ShHijau.BackColor = vbBlack
For i% = 0 To (HScroll2.Value) '(detik)
Tunda 1000
If GlobalFindAtom("Traffic_Light_On") = 0 Then
Exit Do
End If
Next i%
Hijau_On
ShMerah.BackColor = vbGreen
ShKuning.BackColor = vbBlack
ShHijau.BackColor = vbBlack
For i% = 0 To (HScroll1.Value) '* 60 '(menit)
Tunda 1000
If GlobalFindAtom("Traffic_Light_On") = 0 Then
Exit Do
End If
Next i%
Loop Until GlobalFindAtom("Traffic_Light_On") = 0
ShMerah.BackColor = vbGreen
ShKuning.BackColor = vbYellow
ShHijau.BackColor = vbRed
cmdRun.Enabled = True
End Sub
Penjelasan:
26
Membaca tabel Atom apakah sudah ada string ”Traffic_Light_On”, jika
belum ada maka akan ditambahkan string ”Traffic_Light_On” pada tabel
Atom. Tabel Atom merupakan tabel sekumpulan string yang dapat
diakses oleh seluruh aplikasi windows. Fungsi-fungsi untuk mengakses
tabel Atom yang disediakan wondows API meliputi:
Fungsi GlobalFindAtom, merupakan fungsi Windows API yang
digunakan untuk mencari string tertentu pada tabel Atom. Fungsi ini
akan mengembalikan nilai pengenalnya jika ditemukan string yang
sesuai dengan yang dicari dan mengembalikan nilai 0 jika tidak
ditemukan
Fungsi GlobalAddatom, digunakan untuk menambah string tertentu
pada tabel Atom. Fungsi ini akan mengembalikan nilai pengenalnya.
Fungsi GlobalDeleteAtom, digunakanuntuk menghapus string
tertentu pada tabel Atom. Fungsi ini memerlukan nilai pengenal
string yang akan dihapus tersebut.
String yang disimpan pada tabel Atom ini nantinya akan digunakan untuk
keluar dari Loop Do...Loop
Melakukan looping Do...Loop yang akan berakhir jika string
”Traffic_Light_On” sudah dihapus dari tabel Atom, yaitu dengan
memeriksa nilai kembalian dari GlobalFindAtom(”Traffic_Light_On”) =
0, selama itu looping akan mengerjakan hal-hal berikut:
Menyalakan LED Hijau dengan memanggil prosedur Hijau_On
Men-set properti BackColor
Melakukan penundaan sesuai dengan value dari Hscroll dengan
memanggil fungsi Tunda
Hal-hal diatas akan diulang terus untuk led Kuning dan led Merah sampai
fungsi GlobalFindAtom(”Traffic_Light_On”) mengembalikan nilai 0.
Prosedur Hijau_On, Kuning_On dan Merah_On merupakan prosedur
untuk menyalakan led dengan cara mengakses langsung register UART.
Prosedur-prosedur ini terdapat pada modul1.
27
Jika sudah keluar dari looping, maka object Shape1 akan diset menjadi
warna hijau, kuning dan merah serta tombol cmdRun diaktifkan kembali.
4. Modul1 (PortIO.bass)
Kode program yang terdapat pada modul1 adalah sebagai berikut:
Option Explicit
Public Declare Sub Tunda Lib "Port_IO.dll" (ByVal lama As
Integer)
Public Declare Sub Port_Out Lib "Port_IO.dll" (ByVal nPort As
Integer, ByVal nData As Byte)
Public Declare Function Port_In Lib "Port_IO.dll" (ByVal nPort
As Integer) As Byte
Public Declare Function GlobalAddAtom Lib "kernel32" Alias
"GlobalAddAtomA" (ByVal lpString As String) As Integer
Public Declare Function GlobalFindAtom Lib "kernel32" Alias
"GlobalFindAtomA" (ByVal lpString As String) As Integer
Public Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal
nAtom As Integer) As Integer
28
MsgBox "Nomor_Bit harus antara 0 sampai 7"
GoTo Out_range
End Select
Status_Port = Port_In(Alamat_Port)
Nilai_Baru = Status_Port And Nilai
Port_Out Alamat_Port, Nilai_Baru
Out_range:
End Sub
Sub Hijau_On()
Set_Bit &H2FC, 0
Clear_Bit &H2FC, 1
Clear_Bit &H2FB, 6
End Sub
Sub Kuning_On()
Clear_Bit &H2FC, 0
Set_Bit &H2FC, 1
Clear_Bit &H2FB, 6
End Sub
Sub Merah_On()
Clear_Bit &H2FC, 0
Clear_Bit &H2FC, 1
Set_Bit &H2FB, 6
End Sub
Sub Semua_Off()
Clear_Bit &H2FC, 0
Clear_Bit &H2FC, 1
Clear_Bit &H2FB, 6
End Sub
Penjelasan:
Mendeklarasikan fungsi Tunda, Port_out dan Port_in yang terdapat pada
file Port_IO.dll
Mendeklarasikan fungsi GlobalAddAtom, GlobalFindAtom, dan
GlobalDeleteAtom yang merupakan fungsi-fungsi Windows API
Membuat prosedur set-Bit dan prosedur clear-Bit yang digunakan untuk
mengubah bit tertentu pada alamat port tertentu.
Membuat prosedur Hijau_On, Kuning_On, Merah_On dan semua_Off
yang digunakan untuk mengontrol nyala LED pada port serial.
LED hijau dihubungkan dengan kaki DTR pada COM2 dengan
alamat 2FCh pada bit 0. Untuk menghidupkan LED hijau digunakan
perintah:
Set_Bit &H2FC, 0
Sedangkan untuk mematikan LED hijau digunakan perintah:
29
Clear_Bit &H2FC, 0
LED kuning dihubungkan dengan kaki RST pada COM2 dengan
alamat 2FCh pada bit 1
LED merah dihubungkan dengan kaki TxD pada COM2 dengan
alamat 2FBh pada bit 6. Untuk menyalakan LED kita harus menset
bit Set Break pada register Line Control Register.
Do
Merah_On
ShMerah.BackColor = vbRed
ShKuning.BackColor = vbBlack
ShHijau.BackColor = vbBlack
For i% = 0 To (HScroll3.Value) '* 60 '(menit)
Tunda 1000
30
If GlobalFindAtom("Traffic_Light_On") = 0 Then
Exit Do
End If
Next i%
Kuning_On
ShMerah.BackColor = vbBlack
ShKuning.BackColor = vbYellow
ShHijau.BackColor = vbBlack
For i% = 0 To (HScroll2.Value) '(detik)
Tunda 1000
If GlobalFindAtom("Traffic_Light_On") = 0 Then
Exit Do
End If
Next i%
Hijau_On
ShMerah.BackColor = vbGreen
ShKuning.BackColor = vbBlack
ShHijau.BackColor = vbBlack
For i% = 0 To (HScroll1.Value) '* 60 '(menit)
Tunda 1000
If GlobalFindAtom("Traffic_Light_On") = 0 Then
Exit Do
End If
Next i%
Loop Until GlobalFindAtom("Traffic_Light_On") = 0
ShMerah.BackColor = vbGreen
ShKuning.BackColor = vbYellow
ShHijau.BackColor = vbRed
cmdRun.Enabled = True
End Sub
End Sub
31
Private Sub hsKuning_Change()
LKuning.Caption = "Kuning = " & hsKuning.Value & " detik"
End Sub
portIO.bass
Option Explicit
Public Declare Sub Tunda Lib "Port_IO.dll" (ByVal lama As Integer)
Public Declare Sub Port_Out Lib "Port_IO.dll" (ByVal nPort As
Integer, ByVal nData As Byte)
Public Declare Function Port_In Lib "Port_IO.dll" (ByVal nPort As
Integer) As Byte
Public Declare Function GlobalAddAtom Lib "kernel32" Alias
"GlobalAddAtomA" (ByVal lpString As String) As Integer
Public Declare Function GlobalFindAtom Lib "kernel32" Alias
"GlobalFindAtomA" (ByVal lpString As String) As Integer
Public Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal
nAtom As Integer) As Integer
32
MsgBox "Nomor_Bit harus antara 0 sampai 7"
GoTo Out_range
End Select
Status_Port = Port_In(Alamat_Port)
Nilai_Baru = Status_Port And Nilai
Port_Out Alamat_Port, Nilai_Baru
Out_range:
End Sub
Sub Hijau_On()
Set_Bit &H2FC, 0
Clear_Bit &H2FC, 1
Clear_Bit &H2FB, 6
End Sub
Sub Kuning_On()
Clear_Bit &H2FC, 0
Set_Bit &H2FC, 1
Clear_Bit &H2FB, 6
End Sub
Sub Merah_On()
Clear_Bit &H2FC, 0
Clear_Bit &H2FC, 1
Set_Bit &H2FB, 6
End Sub
Sub Semua_Off()
Clear_Bit &H2FC, 0
Clear_Bit &H2FC, 1
Clear_Bit &H2FB, 6
End Sub
2.3. Penutup
Penyajian yang diberikan dalam bab 2 ini, diharapkan akan menambah
pengetahuan anda tenatng komunikasi menggunakan serial port. Contoh pada
komunikasi ini menggunakan software Visual Basic, sehingga pengetahuan anda
menggunakan beberapa program akan lebih beragam selain menggunakan Delphi.
33