Sabtu, 01 Oktober 2011

SEPTIAN ENGGAR S


INTERFACE PARALEL

1.    DEFINISI / PENJELASAN
Antarmuka (interface) merupakan jembatan yang menghubungkan komputer dengan dunia luar. Port paralel merupakan salah satu antarmuka yang mudah digunakan untuk menghubungkan suatu alat (elektronik digital) pada komputer. [1]
Port paralel (DB-25) adalah salah satu jenis soket pada personal komputer untuk berkomunikasi dengan peralatan luar seperti printer model lama. Karena itu paralel port sering juga disebut printer port. Perusahaan yang memperkenalkan port ini adalah Centronic, maka port ini juga disebut dengan Centronics port. [2]
Kesederhanaan port ini dari sisi pemrograman dan antarmuka dengan hardware membuat port ini sering digunakan untuk percobaan-percobaan sederhana dalam perancangan peralatan elektronika. [2]
Paralel port dapat mengirimkan 8 bit data sekaligus/serentak dalam satu waktu, lebih cepat dibanding serial port. Paralel port ini menggunakan konektor DB25. Panjang kabel maksimum yang diperlukan / diperbolehkan adalah 15 feet. [3]

2.    PERANGKAT INTERFACE
Berikut adalah gambar dari konektor DB25 :
 
                                      (a)                                                                (b)
Gambar 1. (a) Konektor DB25 female, (b) Konektor DB25 male
[Buatan Sendiri]
Pada Gambar 1.(a) diatas merupakan konektor DB25 male yang sudah dirangkai dengan tambahan komponen untuk aplikasi downloader program dengan port paralel.

3.    CONTOH PENGGUNAAN / PERIPHERAL
Contoh penggunaan port paralel DB25 sebagai berikut :
Ø  Printer model lama
Ø  Zip drive
Ø  Beberapa scanner
Ø  Sound cards
Ø  Webcams
Ø  Gamepads dan joystick
Ø  Pemrogram EPROM
Ø  Peralatan SCSI melalui adapter Parallel ke SCSI
Ø  Percobaan dengan TTL 12 driver
Ø  External CD-Rom/RW drives
Ø  Dll
[2]

4.    METODE PENGIRIMAN
          Port Paralel banyak digunakan dalam berbagai macam aplikasi Interface. Port ini membolehkan kita memiliki masukan hingga 8 bit atau keluaran hingga 12 bit pada saat  yang bersamaan dengan hanya membutuhkan sedikit rangkaian eksternal sederhana untuk melakukan suatu tugas tertentu.
Port parallel ini terdiri dari :
a)    4 Jalur Kontrol
b)   5 Jalur Status
c)    8 Jalur Data
[4]
Komunikasi yang dilakukan pada port paralel merupakan  komunikasi yang mengirimkan data secara bersamaan. Pada penggunaan komunikasi paralel semua bit dikirim secara bersamaan pada waktu yang sama. Oleh karena itu pada komunikasi ini kita membutuhkan banyak kabel. Hal memang sering menjadi kelemahan komunikasi paralel akibat banyaknya kabel yang dibutuhkan, dan panjang kabel ini tidak boleh lebih dari 20 m, untuk menjaga keaslian data. Namun kelebihan komunikasi paralel adalah lebih cepat dan kapasitas yang dibawa juga banyak serta pemrograman yang lebih mudah.
Komunikasi paralel yang digunakan adalah komunikasi paralel lewat kabel data untuk printer (saat mengeluarkan data). Pada keadaan normal (tidak aktif) tegangan pada pin-pin ini adalah 0 volt, namun bila kita beri high, maka tegangannya akan berubah menjadi 5 volt.
DB25 adalah konektor yang umum digunakan di komputer sebagai port paralel ,sedangkan konektor Centronics umum ditemukan di printer.  IEEE 1284 ialah standar yang menentukan 3 konektor berbeda yang dapat digunakan dengan port paralel, yaitu
a)   1284 tipe A ialah konektor DB25 yang dapat ditemukan di hampir semua komputer,
b)   1284 tipe B ialah konektor Centronics 34 pin yang umum ditemukan di printer, IEEE
c)    1284 type C ialah konektor 36 pin seperti Centronics, tetapi ukurannya lebih kecil dan lebih memuaskan. Konektor ini diklaim memiliki pengunci (latch) jenis klip (clip), sifat elektrik yang lebih baik serta mudah dirakit. Juga mengandung dua pin tambahan yang dapat digunakan untuk mendeteksi apakah piranti yang terpasang memiliki daya atau tidak.
[5]


Gambar 2. DB25 Pada Komputer [3]


DB25 memiliki 25 buah pin dengan keterangan :
o   Control pins
Ø  Pin 4 = Request To Send
Ø  Pin 5 = Clear to send
Ø  Pin 6 = DCE Ready
Ø  Pin 8 = received line signal detector
Ø  Pin 12 = secondary received line signal detector
Ø  Pin 13 = secondary clear to send
Ø  Pin 19 = secondary request to send
Ø  Pin 20 = DTE ready
o   Timing pins
Ø  Pin 15 = transmitter signal element timing (DCE-DTE)
Ø  Pin 17 = receiver signal element timing (DCE-DTE)
Ø  Pin 24 = transmitter signal element timing (DTE-DCT)
o   Other pins
Ø  Pin 1 = shield
Ø  Pin 7 = signal ground / common return
Ø  Pin 9 = reserved (testing)
Ø  Pin 10 = reserved (testing)
Ø  Pin 11 = unassigned
Ø  Pin 18 = local loopback
Ø  Pin 21 = remote loopback & signal quality detector
Ø  Pin 22 = ring indicator
Ø  Pin 23 = data signal rate select
Ø  Pin 25 = test mode
Ø  Pin 2 = transmit data
Ø  Pin 3 = receive data
[3]
Gambar 3. Pin 36 Centronic [5]
Perusahaan yang memperkenalkan port ini adalah Centronic, dengan memperkenalkan dot matrix printer pada tahun 1970,  maka port ini juga disebut dengan Centronics port. Tetapi setelah IBM dan Epson mengambil alih pasar printer dot matrix (kemudian diikuti oleh Hewlett Packard di DeskJet printer laser dan segmen) kebanyakan orang hanya mengasosiasikan kata Centronics dengan port interface itu sendiri, bukan nama produsen. [5]
Gambar 4. Pinout Pada Konektor Port Paralel [5]
Untuk lebih jelasnya setiap sinyal pada Paralel Port dapat dijabarkan sebagai berikut :
Ø Strobe / Stb
Sinyal Strobe merupakan fungsi sinyal input pada printer. Saluran ini diaktifkan komputer jika ia akan meneruskan data ke printer.
Ø Data 0 sampai data 7
Sinyal data merupakan sinyal input pada printer. Sinyal data disinkronkan (diserempakkan) oleh pulsa strobe.
Ø Acknowledge / Ack :
Sinyal ack merupakan sinyal output dari printer, Jika printer telah mengolah data yang diterimanya, maka dalam waktu max 30 mikrodetik ia memberikan sinyal jabat tangan (handshake) ini. Dalam bahasa Indonesia kata Acknowledge berarti “menyatakan telah diterima”.
Ø Busy
Sinyal busy merupakan sinyal output dari printer. Ketika printer menerima data atau mencetak sinyal ini diaktifkan. Demikian pula jika ada gangguan atau dalam status off line.
Ø Paper-Out / Paper End
Sinyal paper out merupakan sinyal output dari printer. Sinyal ini akan terus aktif sampai kertas baru dipasang lagi.
Ø Select / Slt
Sinyal select merupakan sinyal output dari printer. Dengan sinyal ini printer memberitahu bahwa ia sudah terpilih dan dalam keadaan aktif.
Ø Linefeed
Jika sinyal ini diaktifkan, printer pada akhir setiap baris akan pindah ke baris selanjutnya secara otomatis.
Ø Error
Keluaran ini aktif jika ada gangguan atau printer tidak tersambung atau tidak menyala.
Ø Reset
Dengan saluran ini printer kembali ke keadaan awal.
Ø Select-Printer
Pemilihan printer sebagai piranti DTE (Data Terminal Equipment) berlangsung pada saluran sinyal ini.

Port paralel ialah port data di komputer untuk mentransmisi 8 bit data dalam sekali detak. Standar port paralel  yang baru ialah IEEE 1284 dimana dikeluarkan tahun 1994. 
Standar ini mendefinisikan 5 mode operasi sebagai berikut :
1.      Mode kompatibilitas
2.      Mode nibble
3.      Mode byte
4.      Mode EPP (enhanced parallel port)
5.      Mode ECP (Extended capability port)
Tujuan dari standar yang baru tersebut ialah untuk mendesain driver dan peralatan yang baru yang kompatibel dengan peralatan lainnya serta standar paralel port sebelumnya (SPP) yangn diluncurkan tahun 1981. Mode Kompatibilitas, nibble dan byte  digunakan sebagai standar perangkat keras yang tersedia di port paralel  orisinal dimana EPP dan ECP membutuhkan tambahan hardware dimana dapat berjalan dengan kecepatan yang lebih tinggi. Mode kompatibilitas atau (“Mode Centronics”) hanya dapat mengirimkan data pada arah maju pada kecepatan 50 kbytes per detik hingga 150 kbytes per detik. Untuk menerima data, anda harus mengubah mode menjadi mode nibble atau byte. Mode nibble dapat menerima  4 bit (nibble) pada arah yang mundur, misalnya dari alat ke komputer. Mode byte  menggunakan fitur bi-directional parallel untuk menerima 1 byte (8 bit) data pada arah mundur. IRQ (Interrupt Request ) pada port paralel  biasanya pada IRQ5 atau IRQ7.
Port paralel Extend dan Enhanced menggunakan  hardware tambahan untuk membangkitkan dan mengatur handshaking.
 Untuk mengeluarkan 1 byte ke printer menggunakan mode kompatibilitas, software harus :
1.      Menulis byte ke data port.
2.      Cek untuk melihat apakah printer sibuk, jika sibuk, ia tidak akan menerima data, sehingga data yang telah ditulis akan hilang.
3.      Buat strobe (pin 1) rendah. Ini memberitahukan printer bahwa data yang benar telah berada di line data.
4.      Buat strobe tinggi lagi setelah menunggu sekitar 5 mikrodetik setelah membuat strobe low.

Hal ini membatasi kecepatan data. Sedangkan EPP dan ECP mengizinkan hardware mengecek jika printer sibuk dan mengeluarkan sinyal strobe  atau handshaking lainnya. Ini berarti hanya 1 instruksi I/O yang harus dilakukan yang akan meningkatkan kecepatan Port ECP juga mempunyai kelebihan menggunakan saluran DMA dan buffer FIFO, jadi data dapat digeser tanpa menggunakan instruksi I/O.
Protokol  EPP mempunyai 4 macam siklus transfer data yang berbeda yaitu :
1.      Siklus baca data (Data read)
2.      Siklus baca alamat (Address Read)
3.      Siklus tulis data (data write)
4.      siklus tulis alamat (address write)
Siklus data digunakan untuk mentrasfer data antara host dan peripheral.  Siklus alamat digunakan untuk mengirimkan alamat, saluran (channel) atau informasi perintah dan kontrol. [7]

5.    CONTOH INTERFACE DENGAN MIKROKONTROLLER
Untuk mendownloadkan program yang kita buat ke Mikrokontroler MCS51 atau AVR kita membutuhkan sebuah peripheral tambahan yang mendukung antara komputer dan Mikrokontroler. Salah satu yang support dan dapat digunakan sebagai kabel downloader tersebut adalah kabel STK200 yang dapat kita buat sendiri dengan menggunakan DB25 (Parallel Port). Komponen yang kita butuhkan hanya Resistor 330ohm, Jumper, Black Holsing Kabel dan DB25 Male (karena Di PC adalah DB25 Female). Dan Konfigurasinya bisa dibuat seperti gambar dibawah ini :
Gambar 5. AVR Kanda System STK200
 
Gambar 6. Hasil Jadi Downloader Dari Paralel Port
[Buatan Sendiri]
Downloader LPT (ISP Programmer) merupakan sebuah perangkat  downloader yang minimum dan sederhana karena hanya menggunakan port LPT (Parallel port) dan resistor sebagai pengaman. 

Proses Mendownload Program Dan Pengaturan Programmer Codevision AVR :
1.    Memasang Port DB25 male (yang dibuat) ke Port DB25 female pada komputer.
Gambar 7. Port DB25 Terpasang Pada Komputer
[Buatan Sendiri]
2.    Jalankan Aplikasi Codevision AVR.
3.    Klik tombol Settings lalu pilih Programmer dan atur pada Programmer Settings seperti pada gambar. Catatan : Pengaturan ini hanya sekali saja.
Gambar 8. Pengaturan Programmer
[Buatan Sendiri]
4.    Membuat program untuk dimasukkan pada mikrokontroller (Dalam percobaan ini membuat program untuk menampilkan data pada LCD).
5.    Setelah selesai membuat program maka untuk memrogram / memasukkan file dari Codevisionavr  ke mikro seperti di bawah ini :
Gambar 9. Memasukkan Program Ke Mikro
[Buatan Sendiri]
6.    Caranya klik build all project files pada Codevisionavr.
7.    Untuk mendownload program ke mikrokontroller maka kita tinggal meng-klik  "Program The Chip". Dan tampil proses download program sebagai berikut :
 
Gambar 10. Proses Download Program
[Buatan Sendiri]

6.    LEVEL TEGANGAN / KARAKTERISTIK ELEKTRIK
Keluaran dari port paralel adalah keluaran TTL, sedangkan arus Sink / Source bervariasi antara port parallel satu dengan yang lainnya. Berdasarkan data sheet kemampuan arus Sink / Source bermacam – macam :
Ø Sink / Source 6mA
Ø Source 12mA Sink 20mA
Ø Sink 16mA Source 4mA
Ø Sink / Source 12mA
Dengan keterbatasan arus port paralel maka diperlukan rangkaian buffer (penyangga) sehingga tidak membebani arus dari port paralel untuk menyuplai rangkaian luar. [2]

7.    RANGKAIAN BUFFER
          Berikut ini adalah contoh rangkaian sederhana dan rangkaian yang menggunakan buffer untuk aplikasi downloader paralel STK200 ISP dongle. Keduanya rangkaian berfungsi untuk mendownload program dari komputer ke mikrokontroller menggunakan port paralel DB25.
Gambar 11. Rangkaian Downloder Simplied dan Buffered

8.    MODE HANDSHAKING
Centronics merupakan standar pengiriman data komputer ke pencetak generasi awal. Hampir semua pencetak menggunakan teknik handshake ini dan biasanya diimplementasikan menggunakan Port Paralel Standar (KPS atau Standar Parallel Port - SPP) melalui kontrol perangkat lunak.



Gambar 12. Diagram Pewaktu Handshake Pada Centronics [7]
Perhatikan gambar 12, data pertama kali dikirim pada jalur data (pin 2 – 7 Port Paralel), kemudian komputer akan memeriksa apakah pencetak dalam kondisi sibuk (busy} atau tidak, dalam hal ini sedang dalam kondisi rendah (logika 0).` Program kemudian meng-aktifkan strobe, tunggu selama minimum 1 μd kemudian dimatikan kembali. Data kemudian dibaca oleh pencetak (atau alat lain) saat transisi naik dari sinyal strobe. Pencetak akan memberikan indikasi sibuk karena sedang memproses data melalui jalur bus data. Sekali pencetak menerima data, maka dia akan mengirimkan sinyal Ack (acknowledge) sebagai pulsa rendah selama 5 μd.
Seringkali komputer akan mengabaikan sinyal Ack untuk menghemat waktu. Pada Port ECP, Anda akan lihat mode Centronics Cepat, yang membolehkan perangkat keras mengerjakan handshaking untuk Anda. Seorang pemrogram hanya cukup menuliskan data pada jalur I/O. Perangkat keras akan memeriksa apakah pencetak dalam kondisi sibuk atau tidak, kemudian membangkitkan sinyal strobe.

9.    TIMING DIAGRAM
Berikut adalah gambar dari timing diagram tranmisi data antara serial port dan paralel port.
Gambar 13. Timing Diagram Tranmisi Data Port Serial Dan Port Paralel
          Port paralel mudah program dan lebih cepat dibandingkan dengan port serial. Tapi kelemahan utama adalah perlu lebih banyak jumlah jalur transmisi. Karena alasan ini port paralel tidak digunakan dalam komunikasi jarak jauh. Marilah kita tahu perbedaan mendasar antara kerja port paralel dan port serial. Pada port serial, akan ada jalur data dua: Satu transmisi dan satu menerima baris. Untuk mengirim data dalam port serial, itu harus dikirimkan satu bit demi satu dengan beberapa bit tambahan seperti bit start, bit dan stop bit paritas untuk mendeteksi kesalahan. Tapi di port paralel, semua 8 bit dari byte akan dikirim ke port pada suatu waktu dan indikasi akan dikirim di baris lain. Akan ada beberapa data baris, kendali dan beberapa baris handshaking di port paralel. Jika tiga byte data 01000101 10011100 10110011 adalah untuk dikirim, angka berikut akan menjelaskan bagaimana mereka akan dikirim ke port serial dan paralel masing-masing. Kita dapat memahami mengapa komunikasi port paralel adalah lebih cepat dibandingkan dengan serial.
[9]

10.    ALAMAT-ALAMAT PORT PARALEL
Port paralel umumnya memiliki tiga alamat dasar yang bisa digunakan, sebagaimana ditunjukkan pada tabel 1. Alamat dasar 3BCh pertama kali diperkenalkan sebagai alamat port paralel pada kartu- kartu video lama. Alamat ini kemudian sempat menghilang, saat port paralel dicabut dari kartu-kartu video. Sekarang muncul kembali sebagai pilihan untuk port paralel yang terpadu dengan motherboard, yang konfigurasinya dapat diubah melalui BIOS.
LPT1 biasanya memiliki alamat dasar 378h, sedangkan LPT2 adalah 278h. Ini adalah alamat umum yang bisa dijumpai, namun alamat- alamat dasar ini bisa berlainan antara satu komputer dengan komputer lainnya.
Tabel 1. Alamat- alamat dasar port pararel [7]
Saat pertama kali komputer dihidupkan, BIOS (Basic Input/ Output System) akan menentukan jumlah port yang dimiliki kemudian diberi label LPT1, LPT2 dan LPT3. Pertama kali BIOS akan memeriksa alamat 3BCh, jika ditemukan port paralel pada alamat tersebut, maka akan diberi label LPT1, kemudian dicari pada lokasi berikutnya 378h, jika ditemukan akan diberi label selanjutnya yang sesuai. Bisa jadi LPT1 jika tidak ditemukan port paralel di 3BCh atau mungkin LPT2, jika ditemukan port parallel pada alamat tersebut. Alamat port terakhir yang diperiksa adalah 278h dan mengikuti langkah-langkah yang telah dijelaskan tadi. Sehingga dimungkinkan kita memiliki LPT2 dengan alamat 378h bukan 278h sebagaimana yang diharapkan.
Apa yang membuat hal seperti ini menjadi membingungkan adalah, karena beberapa perusahaan memasang jumper yang membolehkan Anda untuk mengatur port Anda ke LPT1, LPT2 dan LPT3. Nah sekarang berapa alamat dari LPT1? Hampir semua kartu, untuk LPT1 dialamatkan pada 378h dan LPT2 pada 278h namun beberapa menggunakan 3BCh sebagai LPT1, 378h sebagai LPT2 dan 278h sebagai LPT3.
Label- label LPT1, LPT2 dan LPT3 seharusnya tidak perlu dikhawatirkan bagi mereka yang hanya menginginkan pengantar-mukaan piranti dengan komputer. Biasanya alamat dasarlah yang digunakan dalam program antarmuka dari label LPT1 dan se-terusnya. Namun jika Anda tetap ingin tahu alamat LPT1 atau LPT yang lain, Anda dapat menggunakan tabel tengok (lookup table) yang disediakan BIOS. Saat BIOS mengarahkan alamat-alamat pada piranti pencetak Anda, maka dia akan menyimpan alamat pada lokasi khusus dalam memori, sehingga Anda bisa menemukannya, hal ini sebagaimana ditunjukkan pada tabel 2.
Pada tabel 2. tersebut, ditunjukkan alamat yang dapat kita gunakan untuk menemukan alamat-alamat port pencetak (paralel) dalam Area Data BIOS. Masing-masing alamat membutuhkan ruang 2 byte. Program berikut (dalam bahasa C) digunakan untuk membaca lokasi alamat-alamat tersebut untuk menemukan alamat-alamat port paralel (pencetak):
Tabel 2. Dafatar Alamat port pararel
[7]


11.    REGISTER-REGISTER PERANGKAT LUNAK-SPP (STANDARD PARALLEL PORT)

Tabel 3. Register Data port pararel

Alamat dasar, biasa dinamakan Port Data atau Register Data digunakan untuk mengeluarkan data pada jalur data Port Paralel (pin 2 s/d 9). Register ini normalnya sebagai port hanya - tulis. Jika Anda mencoba membaca dari port ini, Anda akan mendapatkan byte terakhir yang terkirim. Bagaimanapun juga jika port Anda dwi-arah, Anda juga bisa menerima data melalui alamat ini.
Port status (alamat dasar+1), perhatikan tabel 4, sebagai port hanya-baca saja. Data apa saja yang dituliskan ke port ini akan diabaikan. Port status berasal dari lima masukan port paralel (pin 10, 11, 12, 13 dan 15), sebuah register status IRQ dan dua bit tercadang. Harap dicatat bahwa bit-7 (Busy) sebagai masukan aktif rendah. Jika bit -7 terbaca sebagai logika 0 artinya pada pin tersebut terpasang tegangan +5V. Juga pada bit- 2 (IRQ), jika bit ini terbaca '!', artinya interupsi (sela) tidak muncul.
Register kontrol (alamat dasar+2), perhatikan tabel 4.6, sebagai register tulis saja. Saat sebuah pencetak disambungkan pada port paralel, maka ia membutuhkan 4 kontrol, yaitu Strobe, Auto Linefeed, Initialize dan Select Printer, yang semua sifatnya sungsang (inverted) kecuali Initiliaze.

Tabel 4. Register Status port parallel

Tabel 5. Register Kontrol port parallel
Dalam hal ini pencetak tidak akan mengirimkan sinyal untuk menginisialisasi komputer dan juga tidak akan memberitahukan komputer untuk menggunakan auto linefeed. Bagaimanapun juga, keempat keluaran ini dapat dimanfaatkan sebagai masukan. Namun perlu diketahui bahwa sifatnya adalah "kolektor terbuka" (open collector atau open drain pada piranti CMOS). Ini artinya memiliki dua kondisi, kondisi rendah (0V) dan kondisi impedansi tinggi (rangkaian terbuka). Sehingga jika komputer mengkondisikan pin-pin sebagai tinggi (misalnya +5V) dan piranti Anda yang terhubungkan membutuhkan kondisi rendah (0V), maka akan terjadi hubung singkat pada port yang menyebabkan terjadinya konflik pada pin tersebut.
Normalnya port paralel memiliki resistor internal pull -up (kira-kira sekitar 4k7 ohm), tetapi seperti yang Anda harapkan, tidak semuanya seperti itu. Beberapa memiliki keluaran kolektor terbuka, sedangkan lainnya hanya memiliki keluaran totem pole normal. Agar piranti Anda bisa bekerja dengan benar pada berbagai macam port paralel, maka Anda dapat menggunakan resistor eksternal. Jika digunakan pada port paralel dengan resistor pull-up internal, maka seakan-akan resistor ini akan paralel dengan resistor internal tersebut, sedangkan jika digunakan pada port paralel dengan keluaran totem pole, resistor akan bertindak seolah-olah sebagai beban.
Resistor 4K7 ohm (usahakan jangan yang lebih rendah) dapat digunakan untuk mengkondisikan pin menjadi HIGH (pull high). Ini sebagai antisipasi, jika yang digunakan adalah port paralel dengan resistor internal, sehingga penggunaan resistor eksternal yang kemudian diparalelkan dengan resistor internal, Akan menghasilkan resistor pull-up yang rendah nilainya. Dalam kondisi impedansi tinggi, pin pada port paralel dalam tegangan HIGH (+5V), pada kondisi inilah piranti eksternal Anda dapat menyebabkan pin menjadi LOW (pull low) dan mengakibatkan hasil pembacaan port kontrol menjadi berbeda. Dengan dasar ini, maka port kontrol yang 4-bit dapat digunakan sebagai jalur data dua arah, hanya saja port kontrol harus diset xxxx 0100 terlebih dahulu agar dapat digunakan untuk membaca data (yang bernilai LOW tentunya), karena semua pin kontrol dalam kondisi +5V sehingga Anda bias mengubahnya menjadi LOW (GND)atau pull-low.
Bit 4 dan 5 merupakan kontrol internal. Bit-4 untuk mengaktif- kan IRQ dan bit - 5 digunakan untuk mengaktifkan port data dwi-arah, artinya port data dapat digunakan sebagai masukan 8-bit (DATA0 s/d DATA7). Hal ini bisa dilakukan jika port paralelnya mendukung. Bit-6 dan 7 sebagai cadangan, jika dilakukan penulisan data pada bit- 6 dan 7 ini, maka akan diabaikan.
[7]

12.    PORT DWI-ARAH (BI-DIRECTIONAL PORT)
Pada gambar 12 ditunjukkan Register data Port Paralel yang disederhanakan. Kartu port Paralel yang asli biasanya mengimplementasikan IC seri 74LS. Saat ini semuanya sudah dikemas dalam satu 1C ASIC (Application Specific Integrated Circuit), namun dasar kerjanya tetap sama.
Gambar 14. Operasi Port Paralel dwi-arah Standar [7]
Port non dwi-arah biasanya menggunakan 1C 74LS374 dengan keluaran yang dibuat permanen rendah (LOW), dengan demikian port data selalu bertindak sebagai keluaran saja. Saat Anda membaca register data Port Paralel, datanya berasal dari 74LS374 yang juga terhubungkan dengan pin-pin data. Sekarang jika Anda mampu meng-ouerdrive 374, akan Anda dapatkan Port Dwi-arah (atau sebagai port masukan saja, jika Anda merusakkan keluaran- keluaran terkunci atau output latches!)
Banyak yang melakukan hal tersebut. Pernah ada suatu rangkaian (di Internet) yang menghubungkan antara sebuah osiloskop dengan port paralel. Pengarangnya menggunakan suatu ADC, namun ternyata ADC-nya menggunakan transistor pada masing- masing jalurnya, agar dapat bekerja! Tidak tahu mengapa? Ada juga yang menggunakan 68HC11 yang tidak cukup mampu menyedot (sink) arus (30 hingga 40 mA)!
Port paralel dwi-arah menggunakan bit-5 dari register kontrol yang dihubungkan ke OE (Output Enable)-nya. 374 sehingga penggerak keluaran dapat dimatikan. Dengan cara ini, Anda dapat membaca data yang tersedia pada pin-pin data Port Paralel, tanpa mengalami konflik bus dan kebocoran arus yang berlebihan.
Bit-5 Register Kontrol dapat digunakan untuk mengaktifkan dan mematikan fungsi dwi-arah pada Port Paralel. Hal ini hanya dibenarkan pada port dwi-arah yang sesungguhnya. Jika bit ini sama dengan 1, pin 2 hingga 9 dalam kondisi impedansi tinggi. Dalam kondisi ini, Anda boleh memasukkan data pada jalur-jalur tersebut dan membacanya dari Port Data. Sembarang data yang dituliskan ke port data akan disimpan tetapi tidak akan tersedia pada pin- pin data. Untuk mematikan fungsi dwi-arah ini, set bit-5=0.
Bagaimanapun juga tidak semua port sifatnya sama, Port lain boleh jadi membutuhkan bit-6 pada Register Kontrol untuk mengaktifkan mode dwi-arah dan menset bit-5-nya untuk mematikan mode tersebut. Perusahaan lain membuat port dwi-arah mereka dengan cara yang berbeda. Jika Anda ingin menggunakan port dwi-arah untuk pemasukan data, maka ujilah terlebih dahulu dengan logic probe atau multimeter untuk memastikan port paralel dalam mode dwi-arah.
[7]

13.    MENGGUNAKAN PORT PARALEL UNTUK MASUKAN 8 BIT
Jika port paralel Anda tidak mendukung mode dwi-arah, Anda dapat memasukkan maksimum 9-bit kapan saja. Untuk melakukan hal ini, Anda dapat menggunakan 5 jalur masukan pada Port Status dan 4 jalur masukan (kolektor terbuka) pada Port Kontrol.
Gambar 15. Inverter Heks 74LS05 Kolektor Terbuka [7]
Masukan ke Port Paralel telah dipilih sedemikian rupa sehingga akan memudahkan kita. Sinyal Busy dijadikan sebagai MSB (Bit-7) dari Port Status, kemudian diikuti sesuai urutan gambar 4.3, sinyal- sinyal Ack, Paper Out dan Select melalui nibel (4-bit) Tinggi atau MS (Most Significant) dari Port Kontrol. Tanda garis di atas sinyal digunakan sebagai tanda inversi perangkat keras, yaitu +5V akan terbaca 0 dari register, sedangkan GND akan terbaca 1. Sedangkan Port Status hanya memiliki sebuah masukan terinversi.
Port Kontrol digunakan untuk membaca nibel Rendah atau LS (Least Significant). Sebagaimana telah dijelaskan sebelumnya, Port Kontrol merupakan keluaran kolektor terbuka, yaitu dua kemungkinan kondisi, impedansi tinggi dan GND. Jika kita menghubungkan masukan-masukan kita langsung ke port (misalnya dengan sebuah ADC0804 yang keluarannya totem pole), maka akan terjadi konflik jika masukannya tinggi dan port mencoba untuk membuat rendah (pull it down), dengan demikian kita gunakan inverter kolektor terbuka.
Bagaimanapun juga hal ini tidak perlu harus selalu dilakukan. Jika kita menghubungkan saklar-saklar kutub tunggal (single pole switches) dengan port menggunakan resistor pull up, maka tidak perlu dikuatirkan masalah proteksi di atas. Demikian juga jika perangkat lunak Anda menginisialisasi Port Kontrol dengan xxxx0100 sehingga semua pin pada port kontrol dalam kondisi tinggi, maka mungkin tidak perlu juga. Jika Anda tidak mempedulikan dan alat terlanjur terpasang pada Port Paralel dan program telah berjalan, maka Anda bisa mendapatkan masalah.
Permasalahan lain yang perlu diperhatikan adalah resistor pull-up yang terpasang pada Port Kontrol dan rata-rata resistor tersebut bernilai 4K7 ohm. Agar jalur tersebut dapat menyedot arus ke kondisi rendah (LOW), maka alat Anda harus mampu menyedot arus sekitar 1mA, yang mana beberapa piranti-piranti daya rendah kesulitan melakukan hal tersebut. Sekarang apa yang akan terjadi jika dianggap beberapa port memiliki resistor pull-up sebesar IK ohm? Maka alat Anda harus mampu menyedot arus (sink) sebesar 5 mA. Hal ini semakin menguatkan alasan penggunaan inverter kolektor terbuka.
 Walaupun penyangga kolektor terbuka bisa juga digunakan, namun inverter kolektor terbuka yang dipiiih, karena inverter tersebut banyak dijumpai di pasaran. Kemungkinan lain adalah penggunaan transistor.
Masukan D3 dihubungkan melalui inverter ke Select Printer. Sinyal ini merupakan bit-3 dari Port Kontrol, D2, D1 dan D0 dihubungkan masing-masing ke Init, Auto linefeed dan Strobe. Jika hal ini sudah selesai kita rangkai, sekarang ditulis programnya. Pertama kali kita harus mcnuliskan xxxx0100 ke Port Kontrol agar semua jalur kontrol dalam kondisi tinggi (HIGH), sehingga dapat digunakan untuk menarik rendah (pull down) masukan data . Kemudian kita dapat membaca nibel MS dari port Status. Dengan demikian akan kita AND-kan hasilnya dengan F0h (agar nibel LS terhapus = 0). Sinyal Busy di- inversikan secara perangkat keras, namun sementara ini belum kita khawatirkan. Sekali dua byte direkonstruksikan, dengan cara mentogel Busy dan Init pada saat yang bersamaan.
Sekarang kita bisa membaca nibel LS pada Port Kontrol begitu mudahnya. Sekarang kita tidak tertarik pada nibel MS pada port, sehingga kita AND- kan hasilnya dengan 0Fh untuk menghapus nibel MS tersebut. Setelah itu, kita kombinasikan keduanya, dengan cara OR-kan kedua byte tersebut. Sekarang diperoleh sebuah byte, namun perlu diketahui bahwa bit-2 dan 7 diinversi, sehingga perlu di-XOR-kan dengan 84h atau 1000 0100b untuk mentogel kedua bit tersebut.
Catatan: Beberapa port kontrol bukan merupakan kolektor terbuka, namun berupa totem pole. Hal ini berlaku juga untuk port EPP dan ECP. Normalnya jika anda menggunakan mode EPP atau ECP pada Port Paralel, port kontrol menjadi keluaran totem pole saja. Sekarang apa yang terjadi jika Anda menghubungkan peralatan ke Port Paralel dalam mode ini? Untuk portabilitas, disarankan untuk menggunakan rangkaian yang akan dibahas berikut, membaca sebuah nibel.
[7]

14.    MODE NIBEL
Mode nibel merupakan cara untuk membaca 8-bit data tanpa menempatkan port pada mode terbalik (reverse mode) dan tanpa menggunakan jalur data. Mode nibel menggunakan sebuah 1C Quad 2 to 1 multiplexer (74LS157) untuk membaca sebuah nibel data, kemudian pindah ke nibel satunya dan membacanya. Melalui perangkat lunak kedua nibel tersebut disatukan menjadi sebuah byte. Kelemahan mode ini hanya masalah lambatnya proses. Dan dibutuhkan beberapa perintah I/O untuk membaca sebuah byte dan membutuhkan 1C eksternal.


Gambar 16. Masukan 8- bit menggunakan 74LS157 [7]
Cara kerja rangkaian pada gambar 14 cukup mudah. 74LS157 Bertindak seakan-akan sebagai empat saklar. Jika masukan A/B dalam kondisi LOW, maka masukan A dipilih, misalnya 1A ke 1Y, 2A ke 2Y dan seterusnya. Jika sekarang masukan A/B = 1, maka masukan B dipilih. Keluaran Y dihubungkan ke port status dari Port Paralel sedemikian hingga menyatakan nibel MS dari register status, hal ini untuk memudahkan dalam penulisan program.
Untuk menggunakan rangkaian ini, pertama kali harus dilakukan inisialisasi multi- plekser untuk memilih masukan A atau B. Kita akan membaca nibel LS terlebih dahulu, sehingga masukan A/B dibuat = 0 (dari B > Y), karena sinyal strobe terinversi secara perangkat keras, maka bit-0 pada port kontrol agar dalam kondisi LOW (=0) diberi nilai 1. Setelah nibel rendah terpilih, kemudian dilakukan pembacaan dari port status. Perhatian, jalur busy diinversikan, namun belum akan kita tangani saat ini. Kita hanya tertarik pada nibel LS (rendah) saja, sehingga hasilnya di-AND-kan dengan F0h untuk menghapus nibel MS (tinggi).
[7]

15.    PENGGUNAAN INTERUPSI PADA PORT PARALEL
IRQ pada Port Paralel tidak digunakan untuk pencetakan dalam lingkungan DOS atau Windows. Versi awal dari 0/S 2 yang menggunakannya, namun tidak dipakai pada versi-versi berikutnya. Interupsi sangat baik digunakan saat melakukan pengantarmukaan alat pengawasan seperti alarm suhu tinggi dan lain-lain, yang mana Anda tidak tahu kapan alarm tersebut aktif. Akan lebih enak menggunakan interupsi dibandingkan menggunakan teknik polling dan hal ini akan terasa manfaatnya jika komputer juga harus melakukan proses-proses yang lain.
Interupsi yang digunakan pada Port Paralel adalah IRQ5 atau IRQ7, atau yang lainnya jika kedua interupsi ini telah dipakai. Serta dimungkinkan juga interupsi tersebut dimatikan pada kartunya, jika kartu tersebut hanya digunakan untuk tujuan pencetakan. Namun dengan menggunakan bit-4 pada register kontrol, Anda dapat mengaktifkan dan mematikan interupsi, mengaktifkan IRQnya, melalui jalur Ack. Interupsi umumnya akan muncul pada saat terjadi transisi dari rendah ke tinggi (rising edge) pada jalur Ack. Dan ada pula yang terjadi pada saat transisi dari tinggi ke rendah.
Kode-kode program berikut digunakan untuk menguji polaritas suatu interupsi sekaligus contoh program yang menggunakan interupsi. Program ini akan memeriksa apakah interupsi terjadi pada saat naik atau jatuhnya sisi pulsa pada jalur Ack. Untuk menggunakan program, cukup Anda sambung salah satu dari kaki 2 hingga 9 (pin-pin data) ke pin Ack (atau kaki 10), misalnya kaki 9 dan 10 (agar tidak memerlukan kabel penghubung atau langsung disolder).
Pada saat kompilasi mungkin akan dihasilkan beberapa peringatan atau warning seperti "condition always true", "condition always false", "unreachable code" dan lain- lain. Hal ini tidak perlu dicemaskan, karena peringatan-peringatan tersebut berasal dari beberapa pengujian struktur kondisi dimana IRQ-nya diuji dan karena IRQ didefinisikan sebagai konstanta beberapa hasi tidak berubah. Sebenarnya hal-hal demikian bisa juga diimplementasikan sebagai pengarah praprosesor (preprocessor directive).
Bagian awal rutin program menghitung Vektor Interupsi, alamat PIC dan Mask dalam rangka penggunaan fasilitas interupsi Port Paralel. Setelah Rutin Layanan Interupsi (RLI) disiapkan demikian juga dengan PIC-nya, maka kita aktifkan interupsi pada Port Paralel, yang bisa dilakukan dengan membuat bit-4 pada register kontrol menjadi 1:
Sebelum mengaktifkan interupsi, kita tuliskan FFh pada port paralel terlebih dahulu agar kondisi 8 jalur data menjadi jelas (=1). Karena semua jaiur data sudah samadengan 1, maka kita sekarang dalam posisi siap untuk menuliskan 00h pada port data, yang akan mengakibatkan transisi tinggi ke rendah pada jaiur Ack di port paralel (karena terhubungkan pada salah satu dari 8 jaiur data).
Jika interupsi muncul pada transisi tinggi ke rendah tersebut maka IF (Interrupt Flag) akan diset dan otomatis jenis polaritas interupsinya adalah transisi tinggi ke rendah. Jika dengan transisi tersebut interupsi belum muncul maka kita tuliskan port data (paralel,) agar terjadi transit rendah ke tinggi. Jika tetap tidak muncul interupsi, kemungkinan tidak bekerja, pastikan IRQ dan alamat dasarnya benar dan koneksi (jalur data dan Ack) pada konektor DB25 male.
[7]
16.    MODE-MODE PORT PARALEL DALAM BIOS
Saat ini kebanyakan Port Paralel merupakan port-port beragam mode dan normalnya dapat dikonfigurasi melalui perangkat lunak. Mode- modenya meliputi:
Ø Mode Printer (kadangkala disebut Default atau Normal Mode)
Ø Mode Standard and Bi-directional (SPP)
Ø Mode EPP1.7 and SPP
Ø Mode EPP1.9 and SPP
Ø Mode ECP
Ø Mode ECP and EPP1.7
Ø Mode ECP and EPP1.9
Mode Printer merupakan mode yang paling dasar dan merupakan Port Paralel standar satu arah, tidak ada fitur dwi-arah, sehingga bit-5 pada port kontrol tidak digunakan. Mode Standard and Bi-directional merupakan mode dwi-arah. Menggunakan mode ini, bit-5 pada port kontrol akan membalikkan arah port sehingga Anda dapat membaca kembali nilai yang diberikan pada jalur data.
Mode EPP1.7 and SPP merupakan suatu kombinasi dari Mode EPP 1.7 (Enhanced Parallel Port) dan SPP. Pada mode ini Anda diperbolehkan mengakses register-register SPP (data, status dan kontrol) serta register- register EPP. Pada mode ini juga, Anda bisa membalikkan arah port menggunakan bit-5 dari register kontrol. EPP 1.7 merupakan versi awal dari EPP dimana tidak terdapat bit untuk time-out.
Mode EPP1.9 and SPP seperti mode sebelumnya, hanya saja menggunakan versi 1.9 dari EPP dan membolehkan pengaksesan bit tune-out pada register EPP.
Mode ECP akan memberikan Port dengan kemampuan tambahan (Extended Capabilities Port). Mode ini dapat diset melalui register kontrol tambahan (extended control register) dari ECP. Hanya saja mode ini EPP tidak tersedia.
Mode ECP and EPP 1.7 dan ECP and EPP1.9 akan memberikan ECP, seperti mode sebelumnya. Namun mode EPP dalam ECR-nya mode EPP disediakan dan versi mode EPP-nya mengikutii versi 1.7 atau 1.9.
Mode-mode diatas dapat dikonfigurasi melalui BIOS. Anda bias mengkonfigurasi ulang menggunakan perangkat lunak yang Anda tulis, tetapi ini tidak disarankan. Register-register perangkat lunak ini, umumnya ditemukan pada alamat-alamat 2FAh, 3F0h, 3Flh dan lain-lain yang diperuntukkan diakses oleh BIOS. Tidak ada standarisasi pada register-register konfigurasi ini, sehingga jika Anda ingin menggunakan register-register tersebut, maka perangkat lunak atau program Anda menjadi tidak portable.
Pilihan yang baik adalah Mode ECP and EPP 1.7 atau ECP and EPP1.9 melalui BIOS kemudian menggunakan register control tambahan ECP untuk memilih mode Port Paralel Anda. Mode EPP1.7 memiliki beberapa masalah berkaitan dengan Strobe untuk Data dan Alamat yang harus diberikan untuk mengawali sebuah siklus awal (start cycle) tidak peduli dengan adanya kondisi tunggu (wait state), sehingga mode ini sudah jarang digunakan sekarang. Dengan demikian pilihan terbaik pada Mode ECP and EPP1.9.                                              [7]
17.    Mode -Mode Port Paralel dan Register Kontrol ECP
Sebagaimana telah dibicarakan sebelumnya, pilihan terbaik adalah menggunakan Mode ECP and EPP1.9 dan menggunakan Register kontrol tambahan ECP untuk memilih beragam mode operasi. Register ECP distandarisasi dibawah Microsoft's Extended Capa bilities Port Protocol and ISA Interface Standard, sehingga kita tidak memiliki masalah lagi yang berkaitan dengan standarisasi.
Pada saat diset Mode ECP, sebuah register baru muncul pada alamat dasar + 400h. Pada tabel 5 ditunjukkan ECR (Extended Control Registerr) yang dipetakan pada alamat dasar + 402h. Catatan: register ECP tidak akan tersedia untuk port-port dengan alamat dasar 0x3BC.
Pada tabel 6 ditunjukkan untuk ECR, yang perlu diperhatikan adalah 3 MSB (.bit 5, 6 dan 7) dari ECR yang digunakan untuk memilih mode operasi. Ada 7 kemungkinan mode operasi, namun tidak semua port mendukung semua mode tersebut. Mode EPP misalnya, tidak tersedia untuk beberapa port.

Mode - mode Operasi
Ø Mode Standar
Mode ini menyebabkan port ECP bertingkahlaku seperti SPP (Standard Parallel Port) tanpa fungsi dwi-arah;
Ø Mode Byte (Mode PS/2)
Seperti pada SPP dalam mode dwi-arah, bit-5 akan membuat port dalam mode terbalik (data > komputer);
Ø Mode Paralel (FIFO)
Pada mode ini, sembarang data yang dituliskan ke FIFO data akan terkirim ke piranti menggunakan SPP handshake. Perangkat keras akan membangkitkan sinyal-sinyal handshaking yang dibutuhkan. Berguna untuk alat-alat non-ECP seperti Pencetak (Printer). Anda dapat memperoleh beberapa fitur ECP seperti penyangga FIFO dan perangkat keras pembangkit sinyal handshaking namun dengan SPP handshake (bukan ECP handshake);
Ø Mode FIFO ECP
Mode standar untuk ECP. Mode ini menggunakan ECP handshake. Pada saat menggunakan Mode ECP dan register ECR diset ke mode FIFO ECP, maka register SPP akan hilang.

Ø Mode EPP 'tercadang)
Untuk mengaktifkan mode EPP, jika tersedia. Jika pada BIOS diset ke Mode ECP and EPPl.x, maka EPPl.x akan tersedia dibawah standarisasi Microsoft's Extended Capabilities Port Protocol and ISA Interface Standard mode; ini digunakan untuk Para Pemasok (Vendor) Tercadang Dibawah standarisasi Microsoft's Extended Capabilities Port Protocol and ISA Interface Standard mode ini digunakan untuk Para Pemasok (Vendor).
Ø Mode FIFO Test
Pada mode ini, sembarang data yang dituliskan ke Register test FIFO akan ditempatkan pada FIFO dan sembarang data yang terbaca dari register Test FIFO akan dibaca melalui penyangga FIFO. Bit status FIFO penuh/kosong sesuai dengan kondisi sebenarnya.
Ø Mode Konfigurasi
Pada mode ini, dua register konfigurasi, cnfgA dan cnfgB akan tersedia pada alamatnya masing-masing.
Tabel 6. ECR
Jika Anda berada dalam mode ECP (melalui BIOS) atau kartu pencetak Anda diset menggunakan ECP maka ada baiknya untuk menginisialisasi mode dari port ECP Anda ke suatu kondisi awal sebelum digunakan. Jika Anda ingin menggunakan mode SPP, maka set port ke Mode Standar untuk pertama kalinya, jangan punya anggapan bahwa port siap dalam mode SPP.
Untuk beberapa mode, register SPP dapat hilang atau tidak bekerja dengan baik. Jika Anda menggunakan SPP, maka set ECR ke Mode Standar.
[7]
18.    CONTOH PROGRAM
################################################
# Program C :  Antarmuka LCD dengan Port Paralel #
################################################
Modul LCD yang tersedia dalam berbagai macam seperti 8x1, 8x2 16x1, 16x2, 20x2, 20x4, 40x4. Di sini kita telah menggunakan 16x2 - yang berarti 2 baris 16 karakter. Ini adalah Hitachi HD44780 modul yang kompatibel, memiliki 16 pin termasuk 2 pin untuk lampu latar.
Tabel berikut memberikan struktur pin modul LCD. Modul LCD tanpa backlight hanya akan memiliki 14 pin. Jika Anda menggunakan LCD seperti, mengabaikan pin 15 dan 16.
Tabel 7. Pin LCD
Untuk program modul LCD, pertama kita harus menginisialisasi LCD dengan mengirimkan beberapa kata kontrol. RS harus rendah dan E harus tinggi ketika kita mengirim kontrol. R / W pin 0 berarti data menulis atau kontrol ke LCD dan R / W pin 1 berarti membaca data dari LCD. Untuk mengirim data ke LCD, membuat RS tinggi, R / W rendah, menempatkan data di pin 7 sampai 14 dan membuat E pin tinggi dan rendah sekali. Anda dapat memahami metode yang tepat setelah melihat kode, kemudian dalam tutorial ini. Di sini, kita akan menulis pada modul LCD dan tidak membaca kembali. Jadi, R / W adalah secara langsung terhubung ke ground. Kita tidak perlu harus masukan data melalui, sehingga semua pin output yang digunakan dalam aplikasi kita. Data pin LCD yang terhubung ke pin data port. Strobe sinyal (Pin 1 dari konektor D25) diberikan ke E (Pin 6 LCD), Pilih printer (Pin 17 dari D25) terhubung ke RS (pin 4 dari LCD).
Gambar 17. Rangkaian Modul LCD Dengan DB25
Dalam diagram di atas, modul LCD dihubungkan ke port LPT menggunakan D25 konektor laki-laki. Nomor pin 3 dari LCD adalah untuk menyesuaikan kontras, dihubungkan sedemikian rupa sehingga dapat bervariasi dari 0V ke 5V.
Jika semuanya OK, Anda harus mendapatkan modul LCD sebagai berikut ketika berada dalam posisi ON.
Gambar 18. LCD Dalam Posisi ON
Jika Anda mendapatkan layar ini, maka kita dapat memulai pemrograman. Jika tidak periksa koneksi Anda, cobalah dengan memvariasikan potensiometer 10K. Jika Anda mendapatkan tampilan ini juga, Anda bisa mendapatkan kejelasan maksimum dengan memvariasikan pot. Bagi saya, pot yang diperlukan untuk menjadi hampir 0V. Jadi, itu adalah OK jika Anda tidak menggunakan pot juga, hanya menghubungkan pin 3 ke ground.
Tabel berikut menjelaskan bagaimana untuk menulis kata-kata control Ketika RS = 0 dan R / W = 0, data dalam pin D0 untuk D7 akan memiliki arti sebagai berikut.
Tabel 8. Deskripsi Kontrol LCD

LISTING PROGRAM
#include <dos.h>
#include <string.h>
#include <conio.h>
#include <time.h>

#define PORTADDRESS 0x378 /* Enter Your Port Address Here */

#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2


void lcd_init(void);
void lcd_write(char char2write);
void lcd_putch(char char2write);
void lcd_puts(char * str2write);
void lcd_goto(int row, int column);
void lcd_clear(void);
void lcd_home(void);
void lcd_cursor(int cursor);
void lcd_entry_mode(int mode);


void main(void)
{
lcd_init();
lcd_goto(1,1);
lcd_puts("Welcome To");
lcd_goto(1,0);
lcd_puts("electroSofts.com");

while(!kbhit() ) //wait until a key is pressed...
{}
}

void lcd_init()
{
outportb(CONTROL, inportb(CONTROL) & 0xDF);
//config data pins as output

outportb(CONTROL, inportb(CONTROL) | 0x08);
//RS is made high: control (register select)

lcd_write(0x0f);
delay(20);
lcd_write( 0x01);
delay(20);
lcd_write( 0x38);
delay(20);
}

void lcd_write(char char2write)
{
outportb(DATA, char2write);
outportb(CONTROL,inportb(CONTROL) | 0x01); /* Set Strobe */
delay(2);
outportb(CONTROL,inportb(CONTROL) & 0xFE); /* Reset Strobe */
delay(2);
}

void lcd_putch(char char2write)
{
outportb(CONTROL, inportb(CONTROL) & 0xF7);
//RS=low: data
lcd_write(char2write);
}

void lcd_puts(char *str2write)
{
outportb(CONTROL, inportb(CONTROL) & 0xF7);
//RS=low: data
while(*str2write)
    lcd_write(*(str2write++));
}
void lcd_goto(int row, int column)
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
if(row==2) column+=0x40;
/* Add these if you are using LCD module with 4 columns
if(row==2) column+=0x14;
if(row==3) column+=0x54;
*/

lcd_write(0x80 | column);
}

void lcd_clear()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x01);
}
void lcd_home()
{
outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x02);
}
void lcd_entry_mode(int mode)
{
/*
if you dont call this function, entry mode sets to 2 by default.
mode: 0 - cursor left shift, no text shift
1 - no cursor shift, text right shift
2 - cursor right shift, no text shift
3 - no cursor shift, text left shift
*/

outportb(CONTROL, inportb(CONTROL) | 0x08);
lcd_write(0x04 + (mode%4));
}

void lcd_cursor(int cursor)
{
/*
set cursor: 0 - no cursor, no blink
1 - only blink, no cursor
2 - only cursor, no blink
3 - both cursor and blink
*/


outportb( CONTROL, inportb(CONTROL) | 0x08 );
lcd_write( 0x0c + (cursor%4));
}
Dan Output Program Seperti Berikut :
Gambar 19. Output
[8]

###################################################
# Program Delphi :  Menghidupkan Dan Mematikan Led #
###################################################
Pembuatan program Bahasa Delphi komunikasi paralel dengan menggunakan komponen io.dll, untuk menghidupkan dan mematikan LED.
Perhatikan pada gambar 20 tersebut. Delapan buah LED terhubung ke port 0, yang difungsikan sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika LOW ‘0’ melalui port 0, dan LED akan padam bila diberi logika HIGH ‘1’ melalui port 0.
  

Gambar 20. Rangkaian LED
Percobaan  ON OFF 8 buah LED secara bersamaan
Rencanakan program untuk menghidupkan dan mematikan LED 8 buah, dengan menekan tombol ON dan OFF, pada komunikasi paralel. Lakukan sesuai dengan langkah-langkah berikut ini:
1. Hubungkan kabel paralel pada port paralel komputer ke rangkaian LED.
2. Rencanakan program dengan tampilan sebagai berikut.
Gambar 21. Tombol ON dan OFF

LISTING PROGRAM
implementation
{$R *.dfm}
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
portout($378,0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
portout($378,255);
end;
[10]






################################
# Program Java :  Rangkaian LED #
################################
Buat rangkaian LED-nya selang-seling dan solder resistor pada pin 2-9 (resistor boleh terbalik). Solder  kaki  LED  positif  ke  resistor  dan  LED  negatif  ke  pin  25  (kaki  LED  yang panjang  itu  positif  sedangkan  kaki  LED  yang  pendek  itu  negatif.  Ini  tidak  boleh terbalik ).
Gambar 22. Rangkaian LED dan DB25
Jangan Lupa Letakkan jnpout32.dll  di C:\WINDOWS\system32 
Buat program java dengan nama ioPort.java untuk komunikasi ke portnya. 
Gambar 23. Program Java
Buat program tes.java untuk programnya :
Gambar 24. Program Tes Java
Pasang rangkaian led ke port paralel dan pastikan semua led dalam keadaan menyala.  Compile dan jalankan program java di atas. 
Ganti  nilai  alamat  pin  pada  tes.java  dengan  0-255  bebas,  compile  lalu  jalankan  programnya.  Prinsipnya,  untuk  menyalakan  LED,  kita  kirim  data  ke  port  paralel.
Sesuaikan pengiriman data ini dengan LED yang ingin dinyalakan. Misalnya, untuk
menyalakan LED pertama, maka data yang dikirim adalah 1 desimal. 
Daftar berikut dapat digunakan sebagai acuan.
DataPort Bit 0 = LED1 = 00000001 bin = 1 hex = 1 Oct = 1 dec
DataPort Bit 1 = LED2 = 00000010 bin = 2 hex = 2 Oct = 2 dec
DataPort Bit 2 = LED3 = 00000100 bin = 4 hex = 4 Oct = 4 dec
DataPort Bit 3 = LED4 = 00001000 bin = 8 hex = 10 Oct = 8 dec
DataPort Bit 4 = LED5 = 00010000 bin = 10 hex = 20 Oct = 16 dec
DataPort Bit 5 = LED6 = 00100000 bin = 20 hex = 40 Oct = 32 dec
DataPort Bit 6 = LED7 = 01000000 bin = 40 hex = 100 Oct = 64 dec
DataPort Bit 7 = LED8 = 10000000 bin = 80 hex = 200 Oct = 128 dec
[11]

######################################
# Program Visual Basic :  Rangkaian LED #
######################################
Dibutuhkan suatu cara agar VB bisa melakukan akses perangkat keras. Salah satunya dengan lib io.dll, yang bisa didownload dari  http://www.geekhideout.com/iodll.shtml secara gratis, yang harus disimpan atau ditempatkan pada folder C:/windows/system32 pada komputer.
Cara penggunaannya sangat mudah, pertama definisikan terlebih dahulu fungsi dan prosedur untuk akses masukan maupun keluaran perangkat keras pada bagian modul khusus VB sebagai berikut:
 Public Declare Sub PortOut Lib "io.dll" _
(ByVal Port As Integer, ByVal Data As Byte)
 Public Declare Sub PortWordOut Lib "io.dll" _
(ByVal Port As Integer, ByVal Data As Integer)
 Public Declare Sub PortDWordOut Lib "io.dll" _
(ByVal Port As Integer, ByVal Data As Long)

Public Declare Function PortIn Lib "io.dll" _
(ByVal Port As Integer) As Byte
 Public Declare Function PortWordIn Lib "io.dll" _
(ByVal Port As Integer) As Integer
 Public Declare Function PortDWordIn Lib "io.dll" _
(ByVal Port As Integer) As Long
 Public Declare Sub SetPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte)
 Public Declare Sub ClrPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte)
 Public Declare Sub NotPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte)
 Public Declare Function GetPortBit Lib "io.dll" _
(ByVal Port As Integer, ByVal Bit As Byte) As Boolean
 Public Declare Function RightPortShift Lib "io.dll" _
(ByVal Port As Integer, ByVal Val As Boolean) As Boolean
 Public Declare Function LeftPortShift Lib "io.dll" _
(ByVal Port As Integer, ByVal Val As Boolean) As Boolean
 Public Declare Function IsDriverInstalled Lib "io.dll" () As Boolean

Kedua tinggal penggunaan fungsi dan prosedur tersebut secara biasa, fungsi PortIn membutuhkan  dua parameter yaitu alamat perangkat keras dan variabel hasil pembacaan data dari perangkat keras dengan tipe data byte. Sedangkan prosedur  PortOut membutuhkan dua parameter juga yaitu alamat perangkat keras dan nilai atau variabel yang menyimpan nilai yang akan dikirimkan ke perangkat keras yang bersangkutan.

PortOut                 : Mengirim data dalam format byte (8-bit) ke port tertentu.
PortWordOut       : Mengirim data dalam format word (16-bit) ke port tertentu.
PortDWordOut    : Mengirim data dalam format double word (32-bit) ke port tertentu.
PortIn                    : Membaca data falam format byte (8-bit) dari port tertentu.
PortWordIn          : Membaca data falam format word (16-bit) dari port tertentu.
PortDWordIn       : Membaca data falam format double word (32-bit) dari port
  tertentu.
GetPortBit             : Membaca status dari bit tertentu.
SetPortBit              : Set bit (=1) pada port tertentu.
ClrPortBit             : Reset bit (=0) pada port tertentu.
NotPortBit             : Lakukan inversi (NOT) bit pada port tertentu
RightPortShift      : Geser bit dari port tertentu ke kanan, LSBàMSB.
LeftPortShift        : Geser bit dari port tertentu ke kiri, MSB àLSB.
IsDriverInstalled   : Akan memberikan nilai bukan-NOL jika io.dll sudah terinstal dan
  berfungsi. Tujuan utama dari fungsi ini adalah untuk memastikan
  bahwa penggerak mode kernel pada NT/2000/XP telah diinstal dan
  dapat diakses.

Pemograman LED Driver adalah sebuah program yang digunakan untuk melakukan pengontrolan nyala LED melalui port paralel. Program ini memerlukan rangkaian LED driver yang dipasangkan pada port paralel dan program LED driver untuk menjalankannya.
Rangkaian LED Driver berikut digunakan untuk interfacing LED dengan port Paralel :
Gambar 25. Rangkaian LED Driver
PEMOGRAMAN LED DRIVER untuk Menghidupkan dan mematikan LED
Program ini digunakan untuk mematikan dan menghidupkan LED-LED yang terpasang pada pin-pin data secara bersama-sama. Menggunakan bantuan komponen  CheckBox, Anda bisa mengganti dengan komponen lainnya selama bisa digunakan untuk proses Toggle (ON-OFF secara bergantian). Status dari LED langsung ditunjukkan pada komponen tersebut.
Gambar 26. Tampilan Program menghidupkan dan mematikan LED

KOMPONEN VISUAL BASIC
Komponen
Properti
Subroutin
Form
Name    : Form1
Caption : Led Driver1
Private Sub Form_Load()
CheckBox
Name    : Check1
Caption : ON/OFF
Private Sub Check1_Click()
CommandButton
Name    : Command1
Caption : Keluar
Private Sub Command1_Click()

LISTING PROGRAM


Private Sub Form_Load()
If Not IsDriverInstalled Then
MsgBox "error", vbOKOnly
Unload Me
End If
End Sub



Private Sub Check1_Click()
If Check1.Value = 1 Then
PortOut &H378, &HFF
Check1.Caption = "Lampu ON semua"
Else
PortOut &H378, &H0
Check1.Caption = "Lampu OFF semua"
End If
End Sub

Private Sub Command1_Click()
Unload Me
End Sub


[12]





















Referensi:
[1]     http://lpfilkom.freeservers.com/referens/LPT_B.htm
[3]     http://terminaltechno.blog.uns.ac.id/2009/11/07/contoh-rangkaian-dan-program-
               aplikasi-dengan-konektor-db9-db25-dan-usb/
[4]     http://bocah-cakil.blogspot.com/2010/03/port-paralel-db25.html
[5]     http://haris-tkj-kreatif.blogspot.com/2011/05/port-printer.html
[6]     http://www.mycomputerclub.com/reference-cables-guide.html
[7]     journal.mercubuana.ac.iddatalecKK-012325-6-1.pdf
[8]     http://electrosofts.com/parallel/lcd.html
[11]   http://dc381.4shared.com/doc/7DDTYBbZ/preview.html
          modulla-g.doc






3 komentar:

  1. Mohon pencerahan, bagaimana memprogram untuk 4 Input dari limited switch (push button on/off) dan 4 outputnya (lampu) di simulasikan di PC. Terimakasih.
    Mohon dibalas. via email : mei.suprihartini@gmail.com

    BalasHapus
  2. mohon bantuan hidupin 4led biner 1 2 4 8 melalui saklar pakai port parallel db 25,terus bilangan heksanya bisa ditampilkan itu gimana programnya pakai program delphi,saya bingung

    BalasHapus