Anda di halaman 1dari 23

SERIAL PORT

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.

Gambar 2.1 Pengiriman huruf ‘A’ tanpa bit paritas


Kecepatan transmisi (baud rate) dapat dipilih bebas dalam rentang tertentu.
Baud rate yang umum dipakai adalah 110, 135, 150, 300, 600, 1200, 2400 dan
9600 bit/s. Dalam komunikasi data serial, baud rate dari kedua alat yang
berhubungan harus diatur pada kecepatan yang sama.|njil atau tanpa paritas) dan
jumlah bit ‘Stop’ (1, 1½ atau 2 bit).

2.2.2 Karakteristik Sinyal Port Serial (RS232)


Standar sinyal komunikasi data serial yang banyak digunakan adalah
standar RS232 yang dikembangkan oleh Electronic Industry Association and The
Telecommunications Industry Association (EIA/TIA) yang pertma kali
dipublikasikan pada tahun 1962. Ini terjadi jauh sebelum IC TTL pupuler
sehingga sinyal ini tidak ada hubungan sama sekali dengan level tegangan IC
TTL. Standar ini hanya menyangkut komunikasi data antara komputer (Data
Terminal Equipment – DTE) dengan alat-alat pelengkap komputer (Data Circuit-
Terminating Equipment- DCE). Standar RS232 inilah yang biasa digunakan pada
port serial IBM PC kompatible.
Standar sinyal serial RS232 memiliki ketentuan level tegangan sebagai
berikut:

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:

Gambar 2.4 Konektor DB-9 Jantan

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

Keterangan mengenai fungsi register-register tersebut adalah :


 RX Buffer, digunakan untuk menampung dan menyimpan data dari DCE
 TX Buffer, digunakan untuk menampung dan menyimpan data yang akan
dikirim ke serial port

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

 Interrupt Identification Register, digunakan untuk menentukan urutan


prioritas interupsi.
Tabel 2.5 Rincian bit pada Interrupt identification register

Nomor bit Keterangan


0 0: Interrupt
1: No interrput pending
1 dan 2 00: Prioritas tertinggi oleh LSR

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

Nomor bit Keterangan


0 dan 1 Jumlah bit data
00: Jumlah bit data adalah 5
01: Jumlah bit data adalah 6
10: Jumlah bit data adalah 7
11: Jumlah bit data adalah 8
2 Bit stop
0: Jumlah bit stop adalah 1
1: Jumlah bit stop adalah 1,5 untuk 5 bit data dan 2 untuk
6 hingga 8 bit data
3 Bit pariti
0: Tanpa pariti
1: dengan pariti
4 0: Pariti ganjil
1: Pariti genap
5 1: Bit pariti ikut dikirimkan (stick parity)
6 0: Set break kontrol tidak diaktifkan
1: Set break kontrol diaktifkan
7 0: Baud rate divisor tidak dapat diakses
1: Baud rate divisor dapat diakses

 Modem control register, digunakan untuk mengatur saluran pengatur


modem terutama saluran DTR dan saluran RST.
Tabel 2.7 Rincian bit pada Modem Control Register

Nomor bit Keterangan


0 Bit DTR
0: Saluran DTR diaktifkan (aktif 0)
1: Saluran DTR dibuat normal (tidak aktif)
1 Bit STR
0: Saluran RST diaktifkan (aktif 0)
Saluran RST dibuat normal (tidak aktif)
2 Bit OUT1, digunakan sebagai penghubung ke perangkat

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

 Line status register, digunakan untuk menampung bit-bit yang menyatakan


kedaan penerimaan atau pengirimandata danstatus kesalahan operasi.
Tabel 2.8 Rincian bit pada LSR
No. Bit Keterangan
0 1: Menyatakan adanya data masuk pada buffer Rx
1 1: Data yang masuk mengalami overrun
2 1: Terjadi kesalahan pada bit pariti
3 1: Terjadi kesalahan framing
4 1: Terjadi Break Interrupt
5 1: Menyatakan bahwa register Tx telah kosong
6 1: Menyatakan bahwa transmitter shift register telah kosong
7 Diisi 0

 Modem status register, digunakan untuk menampung bit-bit yang


menyatakanstatus dari saluran hubungan dengan modem.
Tabel 2.9 Rincian bit pada modem status register
No. Bit Keterangan
0 1: Menyatakan adanya perubahan keadaan di saluran CTS
1 1: Menyatakan adanya perubahan keadaan di saluran DSR
2 1: Menyatakan adanya perubahan keadaan di saluran Ring
Indicator (RI) dari low ke high
3 1: Menyatakan adanya perubahan keadaan di saluran
Receive line signal detect (DCD)
4 1: Menyatakan saluran Clear to Send (CTS) sudah dalam
keadaan hukum
5 1: Menyatakan saluran Data set ready (DSR) sudah dalam
keadaan aktif
6 1: Menyatakan bahwa saluran Ring Indicator (RI) sudah
dalam keadaan aktif
7 1: Menyatakan bahwa saluran Receive Line Signal Detect
(DCD) sudah dalam keadaan aktif)

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.

Gambar 2.5 Koneksi Null Modem


Pada gambar diatas, hanya diperlukan 3 kabel, yakni TD, RD dan SG.
Sembarang data yang dikirim oleh konputer 1 dihubungkan langsung ke RD
komputer 2, sehingga TD komputer 1 langsung dihubungkan ke RD komputer 2,
dan sebaliknya. SG dihubungkan untuk membentuk common graound dikedua
komputer.
DTR di loop-back ke DSR dan CD di masing-masing komputer. Alasannya,
jika DTR dimunculkan dan aktif maka DSR dan CD segera aktif juga, dan
kerananya komputer seolah mempunyai virtual modem yang terhubung
kepadanya dan sedang dalam keadaan siap berkomunikasi. Dengan
dihubungkannya CD seperti diatas maka komputer akan mendeteksi juga adanya
carrier dari modem lain.
Pin RTS dan CTS digunakan untuk mengontrol kesiapan serial port dalam
transfer data. Asumsikan bahwa kedua komputer berjalan dengan kecepatan yang
sama sehingga kedua sinyal ini (RTS dan CTS) tidak diperlukan dan dihubungkan
langsung untuk ”membohongi” komputer. Jika komputer akan mengirim data

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).

2.2.5 Universal Asynchronous Receiver Transmitter (UART)


Seperti yang dibahasakan sebelumnya, bahwa untuk mengakses serial port
secara hardware digunakan UART. UART digunakan untuk komunikasi dalam
pengiriman dan penerimaan data adalah saluran RD dan saluran TD serta saluran-
saluran untuk kontrol yaitu saluran DCD, DSR, RTS, CTS, DTR dan RI. Saluran
ini ada yang sebagai output dan ada yang sebagai input. Kecuali saluran RD,
saluran-saluran ini dapat diakses secara langsung melalui register UART. Di
bawah ini adalah tabel 2.10 yang memperlihatkan alamat dan lokasi bit saluran
pada register UART.
Tabel 2.10 Alamat dan lokasi bit saluran pada register UART
No Pin
Nama Pin COM1 COM2 Bit Arah
pada DB-9
TD 3 3FBh 2FBh 6 Output
DTR 4 3FCh 2FCh 0 Output
RTS 7 3FCh 2FCh 1 Output
CTS 8 3FEh 2FEh 4 Input
DSR 6 3FEh 2FEh 5 Input
RI 9 3FEh 2FEh 6 Input
DCD 1 3FEh 2FEh 7 Input

Untuk mengaksesnya dapat dilakukan dengan cara pendefinisian alamat


yang sesuai dan diisi dengan nilai datanya.

2.2.6 Alasan penggunaan Port Serial


Dibandingkan dengan pralel port, penggunaan port serial terkesan lebih
sulit dan rumit. Berikut keuntungan dari penggunaan serial port:
 Pada komunikasi dengan kabel yang panjang, masalah kabel loss tidak akan
menjadi masalah besar, karena port serial mentransmisikan ‘0’ pada level
tegangan +3 V sampai +25 V dan ‘1’ pada level tegangan -3 V sampai -25 V.

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.

2.2.7 Interfacing dengan Serial Port


Untuk melakukan pengaksesan ke serial port, selain menggunakan hardware
(UART) maka juga dapat menggunakan software, dalam hal ini menggunakan
kontrol MSComm (dengan Visual Basic).
Pengaksesan dengan menggunakan MSComm
Kontrol MSComm menyediakan fasilitas komunikasi antara progrm
aplikasi yang kita buat dengan port serial untuk mengirim dan menerima data
melalui port serial. Setiap MSComm hanya menangani satu port serial sehingga
jika kita ingin mengguankan lebih dari satu port serial, kita juga harus
menggunakan MSComm sebanyak port serial yang kita pakai.
Property MSComm
Beberapa property yang penting kita ketahui sebelum kita dapat
menggunakan MSComm seperti:
Tabel 2.11 Beberapa property MSComm
Property Keterangan
CommPort Untuk menentukan nomor port serial yang akan dipakai
Setting Untuk menset nilai baud rate, pariti, jumlah bit data, dan
jumlah bit stop
PortOpen Untuk membuka ataupun menutup port serial yang
dihubungkan dengan MSComm
Input Untuk mengambil data string yang ada paa buffer penerima
Output Untuk menulis data string pada buffer kirim

Event pada MSComm


MSCommMSComm hanya mempunyai satu even saj, yaitu even OnComm. Even
OnComm dibangkitkan jika nilai properti dariCommEvent berubah yang
mengindikasikan telah terjadi even pada port serial baik even komunikasi maupun

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

Tabel 2.13 Nilai-nilai properti evenkomunikasi pada CommEvent


Konstanta Keterangan
comEvSend Jumlah karakter pada buffer kirim lebih sedikit daripada
nilai properti sthreashold. Even ini akan dibangkitkan jika
nilai properti sthreshold tidak diisi ’0’
comEvReceive Telah diterima karakter sebanyak nilai properti Rthreshold.
Even ini akan dibangkitkan terus-menerus sampai data
diambil dari buffer penerima menggunakan perintah input.
Even ini akan dibangkitkan jika nilai properti Rthreshold
tidak diisi ’0’
comEvCTS Terjadi perubahan pada saluran Clear to Send (CTS)
comEvDSr Terjadi perubahan pada saluran data set ready (DSR)
comEvCD Terjadi perubahan pada saluran carrier detect
comEvRing Terdetaksi adanya sinyal ring
comEvEOF Karakter end of file diterima

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.

Gambar 2.7 Rancangan Form Traffic Light

23
3. Ubah properti object seperti tabel dibawah ini:

Object Properti Setting


Form1 Caption Traffic Light  COM2
Border Style 1-Fixe Single
MinBotton True
Frame1 Caption Kosongkan
Label1 Caption Pewaktuan Nyala Lampu
Label2 Caption Merah = .... menit
Name LMerah
Label3 Caption Kuning = .... menit
Name LKuning
Label4 Caption Hijau = .... menit
Name LHijau
Hscroll1 Name HSMerah
Max 15
Min 1
Hscroll2 Name HSKuning
Max 15
Min 1
Hscroll1 Name HSHijau
Max 15
Min 1
Shape1 BackStyle 1- Opaque
BackColor Pilih Warna Hitam pada palette
BorderColor Pilih Warna Hitam pada palette
Shape2 BackStyle 1- Opaque
BackColor Pilih Warna Hitam pada palette
BorderColor Pilih Warna Hitam pada palette
Shape3(0) Name ShMerah
BackStyle 1- Opaque
BackColor Pilih Warna Merah pada palette
BorderColor Pilih Warna Merah pada palette
Shape3(1) Name ShKuning
BackStyle 1- Opaque
BackColor Pilih Warna Kuning pada palette
BorderColor Pilih Warna Kuning pada palette
Shape3(2) Name ShHijau
BackStyle 1- Opaque
BackColor Pilih Warna Hijau pada palette
BorderColor Pilih Warna Hijau pada palette
CommandButton Name cmdRun
Caption Run
CommandButton Name cmdStop
Caption Stop

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

LMerah.Caption = "Merah = " & hsMerah.Value & " menit"


LKuning.Caption = "Kuning = " & hsKuning.Value & " detik"
LHijau3.Caption = "Hijau = " & hsHijau.Value & " menit"
End Sub
Penjelasan:
 Membaca register modem status sampai isinya tidak FFh, seperti pada
penjelasan mengenai konfigurasi port serial yakni alamat register modem
status register COM2 adalah 2Feh. Register ini harus dibaca dulu sebelum
kita menggunakan COM2
 Mengisi properti Caption objek Lmerah, Lhijau dan Lkuning dengan nilai
properti value dari Hscroll.
2. Prosedur even Hscroll_Change
Prosedur ini digunakan untuk menangani even Vhange pada objek Hscroll,
yaitu akan mengubah Caption objek Label sesuai dengan nilai properti value
dari objek Hscroll.
Private Sub hsHijau_Change()
LMerah.Caption = "Merah = " & hsMerah.Value & " menit"
End Sub

Private Sub hsKuning_Change()


LKuning.Caption = "Kuning = " & hsKuning.Value & " detik"
End Sub

Private Sub hsMerah_Change()


LHijau.Caption = "Hijau = " & hsHijau.Value & " menit"
End Sub

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

Sub Set_Bit(Alamat_Port, Nomor_Bit)


Dim Nilai, Status_Port, Nilai_Baru As Byte
Select Case Nomor_Bit
Case 0: Nilai = 1
Case 1: Nilai = 2
Case 2: Nilai = 4
Case 3: Nilai = 8
Case 4: Nilai = 16
Case 5: Nilai = 32
Case 6: Nilai = 64
Case 7: Nilai = 128
Case Else
MsgBox "Nomor_Bit harus antara 0 sampai 7"
GoTo Out_range
End Select
Status_Port = Port_In(Alamat_Port)
Nilai_Baru = Status_Port Or Nilai
Port_Out Alamat_Port, Nilai_Baru
Out_range:
End Sub

Sub Clear_Bit(Alamat_Port, Nomor_Bit)


Dim Nilai, Status_Port, Nilai_Baru As Byte
Select Case Nomor_Bit
Case 0: Nilai = 254
Case 1: Nilai = 253
Case 2: Nilai = 251
Case 3: Nilai = 247
Case 4: Nilai = 239
Case 5: Nilai = 223
Case 6: Nilai = 191
Case 7: Nilai = 127
Case Else

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.

5. Prosedur even cmdStop_Click


Kode program pada prosedur ini sebagai berikut:
Private Sub cmdStop_Click()
GlobalDeleteAtom (Traffic_Atom)
hsMerah.Visible = True
hsKuning.Visible = True
hsHijau.Visible = True
Semua_Off
End Sub

Kode program diatas akan elakukan aksi sebagai berikut:


 Menghapus string ”Traffic_Light_On” pada tabel atom.penghapusan
string ini dilakukan untuk mengakhiri looping pada prosedur
cmdRun_Click
 Mem-Visibel-kan kembali objek Hscroll dan semua LED padam.
Berikut Listing program lengkapnya sebagai berikut:
Public Traffic_Atom As Integer

Private Sub cmdRun_Click()


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

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

Private Sub cmdStop_Click()


GlobalDeleteAtom (Traffic_Atom)
hsMerah.Visible = True
hsKuning.Visible = True
hsHijau.Visible = True
Semua_Off
End Sub

Private Sub Form_Load()


Do
Modem_status_Reg% = Port_In(&H2FE)
Loop Until Modem_status_Reg% <> &HFF

LMerah.Caption = "Merah = " & hsMerah.Value & " menit"


LKuning.Caption = "Kuning = " & hsKuning.Value & " detik"
LHijau3.Caption = "Hijau = " & hsHijau.Value & " menit"

End Sub

Private Sub hsHijau_Change()


LMerah.Caption = "Merah = " & hsMerah.Value & " menit"
End Sub

31
Private Sub hsKuning_Change()
LKuning.Caption = "Kuning = " & hsKuning.Value & " detik"
End Sub

Private Sub hsMerah_Change()


LHijau.Caption = "Hijau = " & hsHijau.Value & " menit"
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

Sub Set_Bit(Alamat_Port, Nomor_Bit)


Dim Nilai, Status_Port, Nilai_Baru As Byte
Select Case Nomor_Bit
Case 0: Nilai = 1
Case 1: Nilai = 2
Case 2: Nilai = 4
Case 3: Nilai = 8
Case 4: Nilai = 16
Case 5: Nilai = 32
Case 6: Nilai = 64
Case 7: Nilai = 128
Case Else
MsgBox "Nomor_Bit harus antara 0 sampai 7"
GoTo Out_range
End Select
Status_Port = Port_In(Alamat_Port)
Nilai_Baru = Status_Port Or Nilai
Port_Out Alamat_Port, Nilai_Baru
Out_range:
End Sub

Sub Clear_Bit(Alamat_Port, Nomor_Bit)


Dim Nilai, Status_Port, Nilai_Baru As Byte
Select Case Nomor_Bit
Case 0: Nilai = 254
Case 1: Nilai = 253
Case 2: Nilai = 251
Case 3: Nilai = 247
Case 4: Nilai = 239
Case 5: Nilai = 223
Case 6: Nilai = 191
Case 7: Nilai = 127
Case Else

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

Anda mungkin juga menyukai