You are on page 1of 9

Interfacing Port Paralel Komputer, Serial dan PPI 8255

Pengenalan Port Paralel 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 Compatibilitas, 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 computer. 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 berate 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 dta 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 control. Berikut ialah tabel nama pin dari konekter DB25 dan Centronics dengan jumlah konektor 34. DB25 ialah konektor yang umum digunakan di computer 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, yaitu1284 tipe A ialah konektor DB25 yang dapat ditemukan di hampir semua komputer, 1284 tipe B ialah konektor Centronics 36 pin yang umum ditemukan di printer, IEEE 1284 type C ialah konektor 36 pin seperti Centronics, tetapi ukurannya lebih kecil dan lebih memuaskan. Tabel Nama pin dari konektor parallel port DB 25 dan Centronics Pin Pin Centronics SPP Signal Arah Register Hardware di DB25 In/out invert 1 1 nStrobe In/Out Control Ya 2 2 Data 0 Out Data 3 3 Data 1 Out Data 4 4 Data 2 Out Data 5 5 Data 3 Out Data 6 6 Data 4 Out Data 7 7 Data 5 Out Data 8 8 Data 6 Out Data 9 9 Data 7 Out Data 10 10 nAck In Status 11 11 Busy In Status Ya 12 12 Paper-Out / In Status Paper-End

13 14 15 16 17 18 - 25

13 14 32 31 36 19-30

Select nAuto-Linefeed nError / nFault nInitialize nSelect-Printer / nSelect-In Ground

In In/Out In In/Out In/Out Gnd

Status Control Status Control Control

Ya

Ya

Untuk mengeluluarkan data di port parallel, anda gunakan fungsi outport (8 bit ) dan outportb(16 bit) sebagai berikut : //Program menggunakan bahasa C untuk pengendali lampu led di port paralel #include <conio.h> #include <stdio.h> #include <stdlib.h> int main() { outport(0x378,0);//lampu led mati sleep(1); //tunda 1 detik outport(0x378,1); //lampu led hidup sleep(1); return 0; } //Program menggunakan bahasa Visual C++ untuk pengendali lampu led di port paralel #include <conio.h> #include <stdio.h> #include <stdlib.h> int main() { _outp(0x378,0); // model visual C++ untuk outport _sleep(1000); _outp(0x378,1); _sleep(1000); return 0; } Jika anda ingin menggunakan Bahasa Visual Basic, maka Anda harus mengimport file inpout32.dll ke direktori c:\windows, c:\windows\system dan default direktori program anda untuk memastikan file ini dapat ditemukan , file .dll ini dapat Anda temukan di widodo.com/downloads/downloads.html.

Berikut contoh kodenya : Private Declare Function Inp Lib "inpout32.dll" _ Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" _ Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)Dim Port1 As Integer Private Sub Command1_Click() Port1 = 888 Out Port1, 1 End Sub Private Sub Command2_Click() Port1 = 888 Out Port1, 0 End Sub

Gambar berikut contoh penggunakan port paralel untuk mengendalikan 5 buah 7 segment menggunakan IC 74LS244 dan 75492. Perlu diketahui bahwa port control di port paralel menggunakan jenis open kolektor, dimana jika diukur dnegan voltmeter, maka output port control akan selalu bernilai tinggi (5V). Yang dibutuhkan di sini ialah kecerdikan anda di dalam membuat program , jika dilihat dari gambar, 7 segment membutuhkan 7 input yang berasal dari 74LS244. Sedangkan untuk memilih 7 segment mana yang aktif Anda cukup memberikan pulsa ke pin IC 75492 yang sesuai. Alamat port paralel umumnya 378H, Jika anda menggunakan bahasa Pascal untuk mengeluarkan data ke port paralel berikut contoh kodenya : Prosedure lampu_hidup_naik; Begin I:=1; repeat Port[$378]:=I; I:=I*2; until I>255; End; Jika anda ingin menggunakan bahasa C, akan lebih baik alamat port anda definisikan sebagai berikut #define PORT 0x378

Centronics Centronics ialah standar transfer data dari komputer ke printer .Berikut diagram dari protokol Centronics yang telah disederhanakan.

Data dikirim ke pin 2 hingga 7. Komputer akan mengecek apakah printer sibuk. Jika printer sibuk , maka line busy haruslah berlogika 0. Program lalu mengeluarka nsinyal strobe, menunggu sekitar 1uS, dan menonaktifkan sinyal strobe . Data dibaca oleh printer/peripheral pada saat ujung strobe. Pada model port Extended , Anda akan memperoleh Mode Centronics yang cepat Fast Centronics Mode, dimana mengizinkan hardware melakukan seluruh handshaking. Yang harus dilakukan oleh program ialah menulsi data ke port I/O. Hardware akan mengecek apakah printer sibuk, akan mengeluarkan sinyal strobe. Mode ini umumnya tidak mengecek sinyal nAck . Alamat Port Port Paralel mempunyai 3 alamat seperti pada tabel 6.2 . 3BCH ialah alamat dasar yang diperkenalkan sejak munculnya port Paralel pada kartu video yang kemudian tidak digunakan lagi . LPT1 ialah line printer dengan alamat 378h, lalu LPT2 dengan alamat 278H meskipun alamat ini dapat dirubah. Saat ini, alamat 378H dan 278H umumnya digunakan sebagai alamat port Paralel . Tabel Alamat port paralel Penjelasan Digunakan untuk paralel port di kartu video, tidak mendukung alamat ECP 378H - 37FH Alamat untuk LPT 1 278H - 27FH Alamat untuk LPT 2 Ketika komputer dihidupkan, BIOS (Basic Input/Output System) akan menentukan jumlah port yang anda miliki dan mengeset nama LPT1, LPT2 & LPT3 ke masing-masing port tersebut. BIOS pertama kali mencari alamat 3BCH. Jika parallel port ditemukan di sana,BIOS akan mengeset dengan nama LPT1, lalu mencari alamat lainnya yaitu 378H. Berikut contoh program menerima data dari port paralel , dimana base alamatnya ialah 379H.: #include <stdio.h> #include <dos.h> #include <conio.h> /*****************************************/ /*membaca input data dari port paralel */ /*****************************************/ int Read_Input() {int Byte; Byte=inportb(0x379); return Byte;} void main (void) {int PP_Input; clrscr(); PP_Input = Read_Input; printf("%d",var); getch();} Ketika BIOS mengeset alamat ke peralatan printer Anda, ia menyimpan alamat pada lokasi tertentu di memory, seperti pada Tabel. Alamat 0000:040E pada BIOS Data Area mungkin digunakan sebagai Extended Bios Data Area di PS/2 dan BIOS yang lebih baru . Tabel Alamat LPT di BIOS Data Area Alamat Awal 0000:0408 0000:040A 0000:040C 0000:040E Fungsi LPT1's Base Address LPT2's Base Address LPT3's Base Address LPT4's Base Address (Note 1) Alamat 3BCH - 3BFH

Tabel diatas menampilkan alamat dimana kita dapat mencari alamat port printer pada BIOS Data Area. Tiap alamat membutuhkan 2 byte. Kode berikut ialah contoh program pencarian alamat port printer di komputer Anda.

#include <stdio.h> #include <dos.h> void main(void) { unsigned int far *ptraddr; /* Pointer ke lokasi alamat port */ unsigned int address; /* alamart Port */ int a; ptraddr=(unsigned int far *)0x00000408; for (a = 0; a < 3; a++) { address = *ptraddr; if (address == 0) printf(" port tidak ditemukan di LPT%d \n",a+1); else printf("Alamat yang diset di LPT%d ialah %Xh\n",a+1,address); *ptraddr++; } Port Bi-direksional Diagram di bawah ini menampilkan register data port paralel menggunakan keluarga IC 74LS, meskipun sekarang sudah ada IC ASIC (Application Specific Integrated Circuits).

Gambar Rangkaian Port Bi-direksional Port non bi-direksional dibuat menggunakan 74LS374. port bi-direksional menggunakan bit control 5 yang dihubungkan ke 74LS374 sehingga keluarannya dapat dimatikan. Pada saat port paralel ini kita set seperti ini, maka data yang kita tulis ke register data paralel port tidak akan sampai ke DB25 karena 374 dalam keadaan tidak menghantar. Menggunakan Port Paralel untuk 8 bit input Jika paralel port anda tidak mendukung mode bi-direksional, Anda dapat memasukkan maksimum 9 bit pada 1 waktu. Untuk melakukan ini anda dapat menggunakan 5 input line dari port Status dan 4 input (open collector) dari port control. Dengan skema seperti gambar 6.3, 4 bit register status difungsikan sebagai 4 bit MSB pertama . Register control menjadi 4 bit LSB terakhir. Pin Busy ialah MSB dari semuanya dan LSB 4 bit pertama ialah Select. Untuk mode nibble, akan diabca 8 bit dengan menngunakan parallel port tanpa mengubahnya ke dalam modus balik, artinya tanpa memerlukan pengesetan bit ke 5 dari register control . Mode ini diperkenalkan oleh Hewlett Packard sebelum IBM memperkenalkan port paralel yang bidireksional.

Gambar Rangkaian input 8 bit di port paralel Berikut contoh program C untuk mengontrol 8 buah alat melalui penekanan tombol keyboard : /* Program untuk mengontrol peralatan menggunakan port paralel . Alat dikontrol dengan menekan tombol 1-8 di keyboard. */ #include<dos.h> #include<stdio.h> #include<conio.h> #define PORT 0x378 /* alamat port paralel */ main() { char val=0,key=0; char str1[]="ON "; char str2[]="OFF"; char *str; clrscr(); printf("Tekan key yang sesuai untuk menghidupkan /mematikan alat \n\n"); printf("Dimana alat ke 1 terhubung ke D0 dari port paralel , begitu seterusnya \n\n"); printf("Tekan \"x\" untuk keluar\n\n"); gotoxy(1,8); printf("Device1:OFF Device2:OFF Device3:OFF Device4:OFF\n"); printf("Device5:OFF Device6:OFF Device7:OFF Device8:OFF"); while(key!='x' && key!='X') //Jika yang ditekan bukan X { gotoxy(1,12); printf("Nilai dalam format hex telah dikirim ke port:"); key=getch(); switch(key){ case '1': //jika kita menekan 1 di keyboard gotoxy(9,8); val=(val&0x01)?(val&(~0x01)):val|0x01; str=(val&0x01)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '2': gotoxy(21,8); val=(val&0x02)?(val&(~0x02)):val|0x02; str=(val&0x02)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break;

case '3': gotoxy(33,8); val=(val&0x04)?(val&(~0x04)):val|0x04; str=(val&0x04)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '4': gotoxy(45,8); val=(val&0x08)?(val&(~0x08)):val|0x08; str=(val&0x08)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '5': gotoxy(9,9); val=(val&0x10)?(val&(~0x10)):val|0x10; str=(val&0x10)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '6': gotoxy(21,9); val=(val&0x20)?(val&(~0x20)):val|0x20; str=(val&0x20)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '7': gotoxy(33,9); val=(val&0x40)?(val&(~0x40)):val|0x40; str=(val&0x40)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; case '8': gotoxy(45,9); val=(val&0x80)?(val&(~0x80)):val|0x80; str=(val&0x80)?str1:str2; printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",(unsigned char)val); break; } } } Program diatas segera akan mengeluarkan data ke port paralel ketika user menekan tombol keyboard menggunakan fungsi case, dan menggunakan fungsi outportb untuk mengendalikan port . Fungsi gotoxy untuk menempatkan string pada posisi x dan y yang telah ditentukan, serta fungsi break untuk berhenti, berikut potongoan kodenya : case '1': //jika kita menekan 1 di keyboard gotoxy(9,8); val=(val&0x01)?(val&(~0x01)):val|0x01; str=(val&0x01)?str1:str2;

printf("%s",str); outportb(PORT,val); gotoxy(1,13); printf("%x",val); break; Untuk mendeteksi alamat port printer apa saja yang telah diset pada port parallel, gunakan perintah debug sebagai berikut :

Gambar Menggunakan perintah debug untuk melihat alamat LPT1 Dari gambar diatas terlihat LPT1 diset dialamat 378H dan ada alamat lainnya yang telah diset juga.

sampel program (saya menggunakan Delphi versi 7) untuk ADC 0804 di port parallel(sumber :Amran) procedure TForm1.Timer1Timer(Sender: TObject); begin asm push dx mov dx,$37A //alamat ofset control parallel mov al,$32 //isi dengan 32 {0010 0000} enable Bi-Directional out dx,al pop dx end; begin asm push dx mov dx,$37A mov al,$36 out dx,al pop dx end; begin asm push dx mov dx,$37A mov al,$37 out dx,al pop dx end; begin asm

//alamat ofset control parallel //isi dengan 36 {0010 0100} aktifkan pin no.3 ADC 804

//alamat ofset control parallel //isi dengan 37 {0010 0101} strobe (enable ADC Output)

push dx mov dx,$378 in al,dx mov data,al pop dx end;

//alamat dasar parallel // baca input Parallel port

begin asm push dx mov dx,$37A //alamat ofset control parallel mov al,$36 //isi dengan 36 {0010 0100} disable ADC Output out dx,al pop dx end; data1:=(5/255)*data; //konversi ke 0-5Volt lcdnumber1.Value:=floattostr(data1); //tampilkan hasil end; end; end; end; end;
Menggunakan INT 17H INT 17H digunakan untuk mencetakan karakter ke printer, berikut contoh assembly untuk mencetak karakter A di printer MOV AH,0 MOV DX,0 MOV AL, 41H INT 17H ;cetak pilihan karakter ;pilih LPT1 ;kode ASCII untuk A ; panggil BIOS

You might also like