Input / Output (I/O) Programming

download Input / Output (I/O) Programming

of 8

description

www.digizoneku.comPort paralel simpel dan tidak mahal, sehingga banyak digunakan untuk hobi-hobi yang berhubungan dengan elektronik, seperti robotika, dsb. Model port paralel menggunakan standar IEEE 1284. Standar IEEE 1284 adalah standar yang mendefinisikan komunikasi paralel 2 arah antara komputer dengan periferal lain. IEEE 1284 bisa beroperasi dalam 5 mode:   Compability Mode (Centronics / SPP), mode ini banyak digunakan pada printer. Nibble Mode. Interface yang mengizinkan device untuk N.B- Info cara mencegah dan mengobati berbagai penyakit (www.herbanesia.com)- info cara tambah tinggi badan, max usia 35th (www.smarttaller.com)- info cara turun berat badan (www.dietsehat911.com)- layanan internet cepat tanpa batas, tanpa quota, full speed 24/7 (www.digizoneku.com)- agen pulsa murah all operator (www.digizonecell.com)

Transcript of Input / Output (I/O) Programming

www.digizoneku.com

Port paralel simpel dan tidak mahal, sehingga banyak digunakan untuk hobi-hobi yang berhubungan dengan elektronik, seperti robotika, dsb. Model port paralel menggunakan standar IEEE 1284. Standar IEEE 1284 adalah standar yang mendefinisikan komunikasi paralel 2 arah antara komputer dengan periferal lain. IEEE 1284 bisa beroperasi dalam 5 mode: Compability Mode (Centronics / SPP), mode ini banyak digunakan pada printer. Nibble Mode. Interface yang mengizinkan device untuk mentransmit data 4 bit dalam satu waktu pengiriman. Byte Mode. Bekerja dalam mode half-duplex dan bisa mentransmit data 8 bit dalam satu waktu pengiriman di jalur data yang sama. Banyak digunakan di Mode PS/2. Enhanced Parallel Port (EPP). Mode half-duplex, mengizinkan device seperti printer, scanner, media penyimpanan untuk mentransmit data dalam jumlah besar, dan bisa pindah arah channel. Extended Capability Port (ECP). Seperti EPP tapi hanya diimplementasikan pada Direct Memory Access (DMA), menyediakan fasilitas data transfer yang lebih cepat daripada EPP. Contoh konektor paralel yang memenuhi standar IEEE 1284 adalah DB25. Gambar konektor DB25 di bawah akan menjelaskan fungsi masing-masing pin pada port paralel.

Gambar 1. Model PIN konektor paralel DB25

I/O Programming

Bimo Adi Pradono

www.digizoneku.com

Berdasarkan fungsinya, pin-pin port paralel dibagi menjadi 3: Data lines mentransfer data

Control lines mengontrol periferal Status lines menerima status sinyal kembalian dari periferal

Untuk detail fungsi tiap pin tertulis di tabel di bawah ini: Pin No (DB25) Signal name Direction Register - bit Inverted 1 nStrobe Out Control-0 Yes 2 Data0 In/Out Data-0 No 3 Data1 In/Out Data-1 No 4 Data2 In/Out Data-2 No 5 Data3 In/Out Data-3 No 6 Data4 In/Out Data-4 No 7 Data5 In/Out Data-5 No 8 Data6 In/Out Data-6 No 9 Data7 In/Out Data-7 No 10 nAck In Status-6 No 11 Busy In Status-7 Yes 12 Paper-Out In Status-5 No 13 Select In Status-4 No 14 Linefeed Out Control-1 Yes 15 nError In Status-3 No 16 nInitialize Out Control-2 No 17 nSelect-Printer Out Control-3 Yes 18-25 Ground Ketika data, control, dan status lines pada port paralel terkoneksi, maka akan berkorespondensi dengan register di dalam komputer. Dengan memanipulasi register-register tersebut, kita bisa dengan mudah membaca atau menulis ke port paralel dengan bahasa pemrograman seperti C dan VB (Basic). Register-registernya, antara lain: Data register Control register terkoneksi dengan data lines terkoneksi dengan control linesBimo Adi Pradono

I/O Programming

www.digizoneku.com

Status register

terkoneksi dengan status lines

Apa pun yang akan kita tulis di register-register ini, pada kondisi real-nya akan berkorespondensi dalam bentuk tegangan (Volt). Contoh apabila kita akan menulis 1 ke Data register, maka jalur pin Data0 akan diberi +5V. Dengan kata lain, kita hanya melakukan kombinasi on/off di Data lines dan Control lines (dengan kata lain data yang di-input adalah kombinasi biner, karena mesin hanya menggunakan logika 1 dan 0 / on dan off). Lokasi pengalamatan untuk typical PC, base address LPT1 adalah di 0x378, lalu LPT2 di 0x278 (untuk data register). Untuk lebih jelasnya bisa dilihat di tabel di bawah ini: Register data register(baseaddress + 0) LPT1 LPT2 0x378 0x278

status register (baseaddress + 1) 0x379 0x279 control register (baseaddress + 2) 0x37a 0x27a

Untuk bisa melihat alamat pada port paralel di Windows, bisa mengikuti petunjuk di bawah ini:Klik kanan di My Computer > Properties > Pilih Tab Hardware > Device Manager > Double klik pada Parallel Port > Tab

Resources.

Selanjutnya akan terlihat interface seperti pada gambar di bawah:

I/O Programming

Bimo Adi Pradono

www.digizoneku.com

Konsep pemrograman pada port paralel: menggunakan beberapa fungsi library. Contoh: Borland C menyediakan fungsi Inportb dan Outportb untuk membaca dan menulis ke periferal I/O, fungsi-fungsi ini dideklarasikan di dalam conio.h. Akan lebih baik menggunakan VC++ untuk menulis program untuk port paralel, karena sangat mudah. Untuk melakukan pemrograman port paralel, kita juga memerlukan device yang akan dihubungkan dengan konektor paralel (male). Device yang akan digunakan tersebut akan kita pakai sebagai testing komunikasi dengan port paralel, atau bisa juga disambungkan ke alat peraga (contoh: 7-segmen + rangkaiannya), dsb.

Program yang dibuat dengan VC++ ini berfungsi untuk memanipulasi data-data yang akan dilewatkan melalui jalur data. Misalnya kita ingin program yang terhubung dengan alat peraga 7-segmen, di mana akan menjalankan countdown dari angka 9 hingga 0. UntukI/O Programming Bimo Adi Pradono

www.digizoneku.com

membuat program tersebut, kita bisa menggunakan fungsi FOR dan IF pada VC++ untuk melakukan looping tampilan dari 9 sampai 0. Ketika program tersebut sedang running dan masuk dalam loop untuk menampilkan angka 7, maka jalur data yang diberi input logika untuk menyala adalah segmen a, b, c, d, dan g, dst sampai loop program selesai. 7-segmen membutuhkan mikrokontroller karena programnya sedikit rumit. Atau bisa juga kita hanya menggunakan rangkaian sederhana saja (tanpa mikrokontroller) untuk melakukan testing komunikasi port paralel dengan menghubungkan tiap PIN konektor dengan lampu LED (sebagai indikasi). Contoh rangkaian sederhana pemrograman port paralel:

Rangkaian di atas digunakan sebagai testing komunikasi yang terjadi pada port paralel. LED112 digunakan sebagai indikasi logika 1 dan 0 (on-off). Jika diberi tegangan di jalur LED3, maka lampu LED3 akan menyala, dst. Akan tetapi, ketika menulis program untuk berkomunikasi dengan port paralel di Windows NT/2000/XP, kita butuh fitur dari Inpout32.dll. Jika memakai DOS atau Win95/98, program bisa dijalankan tanpa fitur dari Inpout32.dll. Alasannya karena Windows menjadi OS yang sangat aman sejak era Win NT. Windows mengintergrasi hak akses dan batasan-batasan yang berbeda untuk tiap program yang berjalan dalam OS. Program komunikasi port paralel yang akan dijalankan masuk dalam kategori user mode. Program-program tersebut dibatasi dalam menggunakan

I/O Programming

Bimo Adi Pradono

www.digizoneku.com

instruksi-instruksi tertentu, seperti IN, OUT, dsb. Ketika program tersebut running, maka OS akan menghentikan eksekusinya dan akan menampilkan error message.

Solusinya: kita perlu Inpout32.dll karena berjalan dalam mode kernel untuk membaca dan menulis data ke port paralel dan mempersilakan program dengan mode user untuk berkomunikasi dengan port paralel. Diagram blok di bawah ini akan menjelaskan cara kerja Inpout32.dll

Dalam blok di atas, ada 2 hal yang sangat penting: 1. Device driver dengan mode kernel yang di-embedded di DLL dalam bentuk biner 2. Input-Output DLL (Inpout32.dll)

I/O Programming

Bimo Adi Pradono

www.digizoneku.com

Di windows, driver yang digunakan untuk berkomunikasi melalui port paralel adalah hwinterface.sys. Inpout32.dll diperlukan sebagai antarmuka dari driver

hwinterface.sys. Driver tersebut terletak di C:\Windows\System32\drivers (kernel mode driver source directory) di mana hwinterfacedrv.c sebagai the main application source file. File sizes di Windows XP adalah 3,026 atau 2,996 bytes. Terdapat 3 fungsi yang terimplementasi di dalamnya: 1. DriverEntry(), dipanggil ketika driver di-load. Berfungsi membuat device object dan symbolic link. 2. hwinterfaceUnload(), dipanggil ketika driver di-unload. Berfungsi sebagai permbersih. 3. hwinterfaceDeviceControl(), berfungsi membaca dan menulis ke port parallel sesuai dengan kode control yang lewat.

2 source files yang berfungsi mengimplementasikan fungsi-fungsi dari Inpout32.dll: 1. input32drv.cpp, melakukan penginstalan driver dalam mode kernel, melakukan loading, membaca dan menulis di port parallel, dll 2. osversion.cpp, mengecek versi dari OS yang dipakai user.

Fungsi-fungsinya, antara lain: 1. Inp32(), membaca data dari register port paralel 2. Out32(), menulis data dari register port parallel 3. DllMain(), dipanggil ketika dll di-load atau di-unload. Ketika dll di-load, fungsi ini akan mengecek versi OS dan me-load hwinterface.sys (jika diperlukan). 4. Closedriver(), menutup driver handle yang terbuka.I/O Programming Bimo Adi Pradono

www.digizoneku.com

5. Opendriver(), membuka handle ke driver hwinterface.sys. 6. inst(), dipanggil ketika fungsi Opendriver gagal membuka handle ke servis hwinterface. Berfungsi mengekstrak hwinterface.sys dari biner ke direktori systemroot\driver dan membuat servis. 7. start(), menjalankan servis hwinterface dengan menggunakan Service Control Manager API. 8. SystemVersion(), mengecek versi OS dan mengembalikan kode.

I/O Programming

Bimo Adi Pradono