P. 1
Interfacing Port Paralel Komputer, Serial Dan PPI 8255

Interfacing Port Paralel Komputer, Serial Dan PPI 8255

|Views: 34|Likes:
Dipublikasikan oleh P-e G-i

More info:

Published by: P-e G-i on Mar 18, 2012
Hak Cipta:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

07/09/2013

pdf

text

original

Interfacing Port Paralel Komputer, Serial dan PPI 8255

(Kutipan dari Buku saya)

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. 2. 3. 4. 5. Mode kompatibilitas mode nibble mode byte mode EPP (enhanced parallel port) 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. 2. 3. 4. menulis byte ke data port cek untuk melihat apakah printer sibuk, jika sibuk, ia tidak akan menerima data, sehingga data yang telah ditulis akan hilang. buat strobe (pin 1) rendah. Ini memberitahukan printer bahwa data yang benar telah berada di line data 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. 2. 3. 4. Siklus baca data (Data read) Siklus baca alamat (Address Read) Siklus tulis data (data write) 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 DB25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - 25 Pin Centronics 1 2 3 4 5 6 7 8 9 10 11 12 13 14 32 31 36 19-30 SPP Signal nStrobe Data 0 Data 1 Data 2 Data 3 Data 4 Data 5 Data 6 Data 7 nAck Busy Paper-Out / PaperEnd Select nAuto-Linefeed nError / nFault nInitialize nSelect-Printer / nSelect-In Ground Arah In/out In/Out Out Out Out Out Out Out Out Out In In In In In/Out In In/Out In/Out Gnd Register Control Data Data Data Data Data Data Data Data Status Status Status Status Control Status Control Control Hardware di invert Ya

Ya

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

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

alamat 378H dan 278H umumnya digunakan sebagai alamat port Paralel . akan mengeluarkan sinyal strobe. dimana mengizinkan hardware melakukan seluruh handshaking. maka line busy haruslah berlogika 0. Hardware akan mengecek apakah printer sibuk. Data dibaca oleh printer/peripheral pada saat ujung strobe. 3BCH ialah alamat dasar yang diperkenalkan sejak munculnya port Paralel pada kartu video yang kemudian tidak digunakan lagi . tidak mendukung alamat ECP . Anda akan memperoleh Mode Centronics yang cepat Fast Centronics Mode.Centronics Centronics ialah standar transfer data dari komputer ke printer . Tabel Alamat port paralel Alamat 3BCH .3BFH Penjelasan Digunakan untuk paralel port di kartu video. Saat ini. dan menonaktifkan sinyal strobe . Yang harus dilakukan oleh program ialah menulsi data ke port I/O. lalu LPT2 dengan alamat 278H meskipun alamat ini dapat dirubah.Berikut diagram dari protokol „Centronics‟ yang telah disederhanakan. menunggu sekitar 1uS. Mode ini umumnya tidak mengecek sinyal nAck . Komputer akan mengecek apakah printer sibuk. Alamat Port Port Paralel mempunyai 3 alamat seperti pada tabel 6.2 . Data dikirim ke pin 2 hingga 7. Pada model port Extended . Program lalu mengeluarka nsinyal strobe. Jika printer sibuk . LPT1 ialah line printer dengan alamat 378h.

/* Pointer ke lokasi alamat port */ unsigned int address. seperti pada Tabel.var). return Byte. dimana base alamatnya ialah 379H. Jika parallel port ditemukan di sana.} void main (void) {int PP_Input.h> /*****************************************/ /*membaca input data dari port paralel */ /*****************************************/ int Read_Input() {int Byte.: #include <stdio.h> #include <dos. Byte=inportb(0x379). ptraddr=(unsigned int far *)0x00000408.h> #include <conio.378H . Tiap alamat membutuhkan 2 byte.} Ketika BIOS mengeset alamat ke peralatan printer Anda.h> #include <dos. Alamat 0000:040E pada BIOS Data Area mungkin digunakan sebagai Extended Bios Data Area di PS/2 dan BIOS yang lebih baru .h> void main(void) { unsigned int far *ptraddr. BIOS pertama kali mencari alamat 3BCH. #include <stdio.37FH 278H . ia menyimpan alamat pada lokasi tertentu di memory. . printf("%d". lalu mencari alamat lainnya yaitu 378H. /* alamart Port */ int a. PP_Input = Read_Input.27FH Alamat untuk LPT 1 Alamat untuk LPT 2 Ketika komputer dihidupkan.BIOS akan mengeset dengan nama LPT1. getch(). BIOS (Basic Input/Output System) akan menentukan jumlah port yang anda miliki dan mengeset nama LPT1. 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) Tabel diatas menampilkan alamat dimana kita dapat mencari alamat port printer pada BIOS Data Area. clrscr(). Kode berikut ialah contoh program pencarian alamat port printer di komputer Anda. LPT2 & LPT3 ke masing-masing port tersebut. Berikut contoh program menerima data dari port paralel .

Mode ini diperkenalkan oleh Hewlett Packard sebelum IBM memperkenalkan port paralel yang bidireksional. . a++) { address = *ptraddr. Menggunakan Port Paralel untuk 8 bit input Jika paralel port anda tidak mendukung mode bi-direksional. Register control menjadi 4 bit LSB terakhir.a+1). 4 bit register status difungsikan sebagai 4 bit MSB pertama . akan diabca 8 bit dengan menngunakan parallel port tanpa mengubahnya ke dalam modus balik. Anda dapat memasukkan maksimum 9 bit pada 1 waktu. Pada saat port paralel ini kita set seperti ini. if (address == 0) printf(" port tidak ditemukan di LPT%d \n". Dengan skema seperti gambar 6. maka data yang kita tulis ke register data paralel port tidak akan sampai ke DB25 karena „374 dalam keadaan tidak menghantar. a < 3. artinya tanpa memerlukan pengesetan bit ke 5 dari register control . else printf("Alamat yang diset di LPT%d ialah %Xh\n". Untuk mode nibble. Untuk melakukan ini anda dapat menggunakan 5 input line dari port Status dan 4 input (open collector) dari port control. Gambar Rangkaian Port Bi-direksional Port non bi-direksional dibuat menggunakan 74LS374.3. port bi-direksional menggunakan bit control 5 yang dihubungkan ke 74LS374 sehingga keluarannya dapat dimatikan.a+1. Pin Busy ialah MSB dari semuanya dan LSB 4 bit pertama ialah Select. *ptraddr++.address). meskipun sekarang sudah ada IC ASIC (Application Specific Integrated Circuits). } Port Bi-direksional Diagram di bawah ini menampilkan register data port paralel menggunakan keluarga IC 74LS.for (a = 0.

Alat dikontrol dengan menekan tombol 1-8 di keyboard.h> #include<conio. char str1[]="ON ". .key=0. */ #include<dos.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 .h> #include<stdio.h> #define PORT 0x378 /* alamat port paralel */ main() { char val=0.

outportb(PORT. switch(key){ case '1': //jika kita menekan 1 di keyboard gotoxy(9. printf("Tekan key yang sesuai untuk menghidupkan /mematikan alat \n\n"). printf("%x". printf("Device1:OFF Device2:OFF Device3:OFF Device4:OFF\n"). gotoxy(1. char *str. while(key!='x' && key!='X') //Jika yang ditekan bukan X { gotoxy(1. begitu seterusnya \n\n"). key=getch().13).val). case '2': gotoxy(21. printf("%s".8). printf("Device5:OFF Device6:OFF Device7:OFF Device8:OFF"). clrscr().8). printf("Tekan \"x\" untuk keluar\n\n").char str2[]="OFF".str). str=(val&0x01)?str1:str2. gotoxy(1. printf("Nilai dalam format hex telah dikirim ke port:"). .12).val). printf("Dimana alat ke 1 terhubung ke D0 dari port paralel . break. val=(val&0x01)?(val&(~0x01)):val|0x01.8).

break.val). outportb(PORT.val).13). printf("%x".val). printf("%s".str).val). gotoxy(1. printf("%x". str=(val&0x02)?str1:str2. outportb(PORT. printf("%s". printf("%x".val).str). case '3': gotoxy(33. case '5': gotoxy(9. outportb(PORT.13).str). str=(val&0x08)?str1:str2.val=(val&0x02)?(val&(~0x02)):val|0x02.val). .8).13). case '4': gotoxy(45. break. val=(val&0x08)?(val&(~0x08)):val|0x08. gotoxy(1.8). printf("%s".9). gotoxy(1. str=(val&0x04)?str1:str2. break. val=(val&0x04)?(val&(~0x04)):val|0x04.

case '6': gotoxy(21.str).val). str=(val&0x40)?str1:str2. gotoxy(1.val). .val).9). str=(val&0x20)?str1:str2. gotoxy(1. break. outportb(PORT. printf("%x". val=(val&0x40)?(val&(~0x40)):val|0x40. break. case '8': gotoxy(45.str).9). printf("%s".val).9). printf("%x". printf("%x".val).13). case '7': gotoxy(33. printf("%s". outportb(PORT. outportb(PORT.val=(val&0x10)?(val&(~0x10)):val|0x10.13).13).val). val=(val&0x20)?(val&(~0x20)):val|0x20. str=(val&0x10)?str1:str2.str). break. gotoxy(1. printf("%s".

(unsigned char)val). gunakan perintah debug sebagai berikut : . Fungsi gotoxy untuk menempatkan string pada posisi x dan y yang telah ditentukan. } } } Program diatas segera akan mengeluarkan data ke port paralel ketika user menekan tombol keyboard menggunakan fungsi case.8). str=(val&0x01)?str1:str2. val=(val&0x01)?(val&(~0x01)):val|0x01. printf("%x".val=(val&0x80)?(val&(~0x80)):val|0x80. str=(val&0x80)?str1:str2.13).str).val). break. Untuk mendeteksi alamat port printer apa saja yang telah diset pada port parallel.val). dan menggunakan fungsi outportb untuk mengendalikan port . berikut potongoan kodenya : case '1': //jika kita menekan 1 di keyboard gotoxy(9. printf("%s". break. gotoxy(1. outportb(PORT. serta fungsi break untuk berhenti.val). printf("%s".13).str). gotoxy(1. outportb(PORT. printf("%x".

begin asm push dx mov dx.al pop dx end.$32 //isi dengan 32 {0010 0000} enable Bi-Directional out dx.Timer1Timer(Sender: TObject).$37A //alamat ofset control parallel mov al.Gambar Menggunakan perintah debug untuk melihat alamat LPT1 Dari gambar diatas terlihat LPT1 diset dialamat 378H dan ada alamat lainnya yang telah diset juga.al pop dx //alamat ofset control parallel //isi dengan 36 {0010 0100} aktifkan pin no. sampel program (saya menggunakan Delphi versi 7) untuk ADC 0804 di port parallel(sumber :Amran) procedure TForm1.3 ADC 804 //alamat ofset control parallel //isi dengan 37 {0010 0101} strobe (enable ADC Output) .$37A mov al.$37 out dx. begin asm push dx mov dx.$37A mov al.$36 out dx. begin asm push dx mov dx.al pop dx end.

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

kelemahannya kita butuh software yang menangani register UART yang cukup rumit dibanding pada parallel port.Kelebihan dari komunikasi serial ialah panjang kabel jauh dibanding paralel. hal ini bisa dilakukan oleh Universal Asyncronous Receiver Transmimeter (UART). Umumnya sinyal serial diawali dengan start bit. Bandingkan dengan port paralel yang menggunakan level TTL berkisar dari 0 V untuk logika 0 dan +5 Volt untuk logika 1. Serial port lebih sulit ditangani karena peralatan yang dihubungkan ke serial port harus berkomunikasi dengan menggunakan transmisi serial. Setiap word disinkronkan dengan start bit. data bit dan sebagai pengecekan data menggunakan parity bit serta ditutup dengan 2 stop bit. yakni sinyal detak tidak dikirim bersama dengan data. Gambar Bentuk sinyal serial Komunikasi melalui serial port adalah asinkron. karena serial port mengirimkan logika “1” dengan kisaran tegangan –3 V hingga –25 V dan logika 0 sebagai +3 Volt hingga +25 V sehingga kehilangan daya karena panjangnya kabel bukan masalah utama. Level tengangan -3 V hingga +3 V dianggap sebagai undetermined region. .. sehingga komunikasi serial jauh lebih lambat daripada komunikasi paralel. Berikut contoh bentuk sinyal komunikasi serial . Menggunakan hardware.Konsep Komunikasi serial pada Komputer Komunikasi serial ialah pengiriman data secara serial (data dikirim satu persatu secara berurutan). dan sebuah clock internal di kedua sisi menjaga bagian data saat pewaktuan (timing). sedang data di computer diolah secara paralel. Oleh karena itu data dari dan ke serial port harus dikonversikan ke dan dari bentuk paralel untuk bisa digunakan.

plotter. . 4. Contoh dari DCE ialah modem.Peralatan Komunikasi Serial Hardware pada komunikasi serial port dibagi menjadi 2 (dua ) kelompok yaitu Data Communication Equipment (DCE) dan Data Terminal Equipment (DTE). Arus hubungan singkat tidak boleh melebihi 500mA. Berikut tampilan port serial DB9 yang umum digunakan Gambar 12. 3. “Mark” (logika 1) ialah tegangan antara –3 hingga –25 V.Bentuk dari konektor DB-25 sama persis dengan port paralel. 5. “Space” (logika 0) ialah tegangan antara + 3 hingga +25 V. scanner dan lain lain sedangkan contoh dari DTE ialah terminal di komputer.3 Port DB9 betina Konektor port serial terdiri dari 2 jenis. Daerah antara + 3V hingga –3V tidak didefinisikan /tidak terpakai Tegangan open circuit tidak boleh melebihi 25 V.2 Port DB9 jantan Gambar 12. 2. yaitu konektor 25 pin (DB25 dan 9 pin (DB9) yang berpasangan (jantan dan betina). Spesifikasi elektronik dari serial port merujuk pada Electronic Industry Association (EIA) : 1.

dan sebaliknya sinyal dari peralatan kita harus dikonversikan ke logika RS-232 sebelum di-inputkan ke serial port. Di dalam IC ini terdapat Charge Pump yang akan membangkitkan +10 Volt dan -10 Volt dari sumber +5 . Tabel Alamat dan IRQ port serial Nama COM 1 COM 2 COM 3 COM 4 Alamat 3F8 2F8 3E8 2E8 IRQ 4 3 4 3 Konverter Logika RS-232 Jika peralatan yang kita gunakan menggunakan logika TTL maka sinyal serial port harus kita konversikan dahulu ke pulsa TTL sebelum kita gunakan.Tabel Jenis Sinyal RS232 yang umum digunakan Alamat Port dan IRQ Alamat standar serial port adalah sebagaimana tampak dalam Tabel 12.2. Konverter yang paling mudah digunakan adalah MAX-232. misalnya pada komputer PS/2 yang menggunakan Micro Channel Bus. Hal ini masih dengan catatan bahwa mungkin ada komputer yang memiliki alamat port dan IRQ yang berbeda dengan alarnat di bawah ini.

‟.model small . anda cukup menghubungkan : 1.code main proc mov ax.ax mov ah. Pin TxD ke pin RxD computer lain Pin RXD dihubungkan ke pin TxD komputer lain RTS dan CTS dihubung singkat DSR dan DTR dihubung singkat GND dihubungkan ke GND komputer lain Listing Program 1. 1 stop. 5. Komunikasi Serial antara 2 PC (SerialPC.0dh db „Tekan ESC untuk keluar‟. Untuk komunikasi ini. Dalam IC DIP (Dual In-line Package) 16 pin (8 pin x 2 baris) ini terdapat 2 buah transmiter dan 2 receiver. karena kemampuan jarak pengiriman data dibandingkan port paralel. 3.asm) TITLE Komunikasi data serial antara 2 PC .0ah.@data mov.09 .‟$‟ .0dh db „key apa saja ditekan akan dikirim ke komputer lain „.data Message db „Komunikasi serial melalui Com2. 2. 8 bit data.tanpa parity.Volt tunggal. 4. Berikut contoh program assembly untuk komunikasi serial antara 2 PC.stack .0ah.4800.ds. Pemrograman Port Serial Komputer Port serial sering digunakan untuk interfacing komputer dan mikrokontroler.

kita harus menggunakan int 16h 2 kali.mengcek key yang ditekan dan dikirim ke com2 untuk transfer data again: mov ah.01 . ada key yang ditekan.cek D0 untuk melihat jika ada sebuah karakter .ambil status com2 mov dx.jika tidak ada key cek port port . offset message int 21h .4800.mov dx.1 .cek key yang ditekan menggunakan int 16h. ambil ! int 16h .1 . tidak ada key yang ditekan .0 . 8 bit data mov ah.inisialisasi com2 mov ah.0c3h int 14h .01 .01 . jika ada ambil dan tampilkan next: mov ah.03 . al=ascii karakter yang ditekan cmp al.01 Int 14h .tanpa parity.ah mempunyai status com. mask seluruh bit kecuali D0 cmp ah. kirim karakter ke com2 Mov dx. ah=01 int 16h jz next .ya.inisialisasi port com mov dx.apakah key ESC? Je exit .1bh .com2 mov al.tidak.dengan ah=0 untuk mengambil karakter.01 int 14h and ah. untuk keuda kalinya .jika ZF=1.ya exit Mov ah.1 stop.0 .cek com2 untuk melihat apakah ada karater.

Berikut program komunikasi data serial menggunakan fungsi BIOSCOM.02 . //8 bit teratas dari return value ialah untuk status //8 bit terendeah tergantung pada perintah yang telah ditentukan //perintah dapat berisi : // 0 | Set parameter komunikasi ke nilai dalam abyte // 1 | Mengirim karakter dalam abyte .ya. 1 untuk COM2 dan seterusnya.dl mempunyai karakter yang akan ditampilkan Int 21h Jmp again .keluar ke DOS Anda juga dapat memprogram komunikasi serial antara 2 PC menggunakan C dengan lebih mudah .02 .ambil Mov dl.c) //Program komunikasi serial menggunakan fungsi bioscom //Dibuat oleh Widodo Budiharto //nilai port 0 untuk COM1.al .tidak ada data.terus memonitor keyboard Exit: mov ah. untuk memonitor keyboard mov ah.dan tampilkan menggunakan int 21h Mov ah. Komunikasi serial menggunakan C (SerialPC.jne again .01 Int 14h . 4ch Int 21h Main endp End . ambil! Mov dx. Listing Program 2. com2 mempunyai data.

h> //definisi port #define COM1 0 #define DATA_READY 0x100 #define TRUE #define FALSE //definisi settings 1 0 . 0xEB //(0xE0|0x08|0x00|0x03) untuk abyte akan menset //port komunikasi ke 9600 baud. odd parity. //Menyertakan header file yang dibutuhkan #include <bios.// 2 | Menerima sebuah karakter dari jalur komunikasi // 3 | Kembalikan status saat ini dari port komunikasi // abyte ialah kombinasi dari bit berikut // 0x02 | 7 data bits 0x00 // 0x03 | 8 data bits 0x20 // // 0x00 | 1 stop bit 110 baud 150 baud 300 baud 0x40 0x60 600 baud 1200 baud 2400 baud // 0x04 | 2 stop bits 0x80 // 0x00 | No parity // 0x08 | Odd parity 0xA0 0xC0 4800 baud // 0x18 | Even parity 0xE0 9600 baud //Sebagai contoh.1 stop bit. dan 8 bit data //bioscom menggunakan BIOS 0x14 interrupt.h> #include <conio.

} Jika Anda ingin membuat aplikasi menggunakan bahasa Visual Basic . } } return 0. if (kbhit()) { if ((in = getch()) == '\x1B') DONE = TRUE. bioscom(1.NET.#define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00) int main(void) { int in. out. while (!DONE) { status = bioscom(3. COM1). bioscom(0. in. tekan [ESC] untuk keluar \n"). COM1). COM1) & 0x7F) != 0) putch(out). DONE = FALSE. COM1). berikut contohnya : ‘ Program Inisialisasi dan membuka port komunikasi . if (status & DATA_READY) if ((out = bioscom(2. 0. SETTINGS. 0. status.//3 parameter dari bioscom cprintf("Komunikasi serial menggunakan BIOSCOM.

Dtr = True moRS232.StopBit = Rs232.Rx(10) 'Ambil 10 byte dari buffer serial Dim sRead as String=moRs232.htm Penerapan Port Serial Komputer Berbagai aplikasi elektronika dapat berkomunikasi dengan port serial komputer.DataBit = 8 ‘ 8 data bit .Parity_None ' No Parity .RxData Untuk informasi lebih lanjut mengenai kode diatas anda dapat mengunjungi http://www. meskipun dapat anda gantikan dengan rangkaian transistor.Timeout = 500 ' 500 ms timeout End With 'inisialisasi dan membuka port moRS232.BaudRate = 2400 ' baud rate sebesar 2400 .Text moRS232. IC MAX 232 ialah IC yang umum digunakan sebagai RS232 Converter.codeworks.Port = 1 'Menggunakan COM1 .it/net/VBNetRs232.DataStopBit.StopBit_1 ' 1 Stop bit .TxData = txtTx.Parity = Rs232. Program berikut akan menampilkan karakter ke LCD menggunakan port serial .‘ Membuat instance Dim moRS232 as New Rs232() With moRs232 . .DataParity.Rts = True ‘Mengirim data moRS232.Tx() ‘Menerima Data moRS232.Open () ’Anda dapat menambahkan control dari jalur DTR/RTS setelah port dibuka moRS232.

0x80). 0x0).h> #include <conio. /* mematikan interupt .Clear Display */ /* 0x38 . /* 0x0F .c) #include <dos. 0x01.Gambar Interfacing LCD menggunakan Serial port Listing Program Interfacing LCD dengan port Serial Komputer (LCDSerial.Port1 */ outportb(PORT1 + 3 . char init[] = { 0x0F. /* SET DLAB ON */ . 0x38 }.h> #define PORT1 0x3F8 /* alamat port*/ /* Definisi alamat base port serial */ /* COM1 0x3F8 */ /* COM2 0x2F8 */ /* COM3 0x3E8 */ /* COM4 0x2E8 */ void main(void) { int c.h> #include <stdio. int count.Dual Line / 8 Bits */ outportb(PORT1 + 1 .Init Display */ /* 0x01 .

c). /* kirim Init Data Bytes */ delay(20). /* Turn on DTR. (inportb(PORT1 + 4) | 0x01)). No Parity. 0x00). printf("\nContoh program LCD Serial.600 BPS */ /* 0x18 = 4. c). /* FIFO Control Register */ outportb(PORT1 + 4 . count++) { outportb(PORT1.400 BPS */ /* Set Baud rate . (inportb(PORT1 + 4) & 0xFE)). outportb(PORT1 + 3 . outportb(PORT1. /* Set Baud rate */ /* 0x06 = 19. /* delay untuk INIT */ } /* Register Select (DTR) */ /* 1 = Data Register */ outportb(PORT1 + 4 .200 BPS */ /* 0x0C = 9. 0x0C).Divisor Latch High Byte */ outportb(PORT1 + 1 . 1 Stop Bit */ outportb(PORT1 + 2 .800 BPS */ /* 0x30 = 2.outportb(PORT1 + 0 . Buat program yang dapat mengontrol stepper motor seperti gambar berikut : . 0x03). 0x0B). count < 3. and OUT2 */ /* Register Select (DTR) */ outportb(PORT1 + 4 . } } while (c !=27). } Latihan: 1. Tekan ESC untuk keluar \n"). /* 8 Bits. init[count]). 0xC7). RTS. printf("%c". /* 0 = Instruction Register */ for (count = 0. do { if (kbhit()){ c = getch().

Buat program untuk komunikasi serial antara 2 komputer menggunakan bahasa C. void send_byte(unsigned char).h> #include <bios.h> #include <conio. int tecla = 1. 3->com4 //Konfigurasi: 9600 bd. 1->com2.h> #define TRUE 1 #define PARAM 0xA7 #define COM1 0 #define COM2 1 void init_port(void). char state_port(void). unsigned char read_byte(void).2 stop bits dan 8 data bit //AL register value is 1 1 1 0 0 1 1 1 -> 0xE7 #include <stdio.Gambar Pengendali motor stepper dengan 89C2051 dan port serial 2. 2->com3. void main ( void ) { .no parity. void keyb(void).h> #include <dos. namun mengkombinasikan dengan bahasa assembly sebagai berikut : //Program komunikasi serial antara 2 PC //00H bios function (AL register) //Register Dx 0->com1.h> #include <process.

dx = COM2. } //mengembalikan keadaan port char state_port() { union REGS regs. &regs). clrscr().h.ah = 0x03. int86( 0x14.h. read_com=read_byte(). if(bioskey(1)==0) return. /*ESC*/ default: keyb=15.x. } } //kirim karakter ke port serial void send_byte(unsigned char byte) { .ah & 0x40) printf("\t TSR EMPTY\n").} } } void init_port() { union REGS regs. if(regs.ah & 0x04) printf("\t PARITY ERROR\n").char b[3]. return.}keystroke.ah & 0x20) printf("\t THR EMPTY\n"). return.a=bioskey(0). init_port().h. if(regs.h. if(regs. keystroke. if(regs.read_com). if(regs.h.h.b[1]. if(regs. &regs).ah & 0x02) printf("\t OVERLOAD ERROR\n"). switch (inkey) { case 1: keyb=0. regs. send_byte(read_kb). if(read_com!=0){printf("%c". inkey=keystroke.x. unsigned char read_kb.al = PARAM.h. while(read_kb != 'c') { read_kb=getch().h.ah & 0x80) printf("\t EXCEED TIME\n").ah & 0x08) printf("\t THREAT ERROR\n"). regs.ah = 0x00.h.unsigned char read_com. if(regs.ah). regs.char inkey=0. int86( 0x14. &regs.h. regs. regs.h. } //penanganan keyboard void keyb() { union u_type{int a. return (regs.ah & 0x10) printf("\t INTERRUPTION\n").dx = COM2. &regs.

} return(regs.al = byte. dimana perlu diingat bahwa pin gnd berada di pin 7 dan Vcc berada di pin ke 26.h. &regs.&regs). regs. int86(0x14.dx = COM2. union REGS regs.h.1 ialah pin IC 8255.x. regs.al).union REGS regs.a. regs.dx = COM2. int86( 0x14. if( regs.} else { return(0). regs.ah & 0x80) { printf("\t Penerimaan data error"). } } //membaca sebuah karakter dari port serial unsigned char read_byte() { int x. .ah = 0x01. PPI 8255 merupakan chip yang paling banyak digunakan untuk interfacing komputer yang dihubungkan ke port ISA komputer.x. &regs).h.h. if(regs.&regs. exit(1).h. Anda juga dapat memesan card PPI 8255 ini melalui Innovative Electronics dengan harga yang sangat terjangkau. Gambar 14. exit(1).ah = 0x02. karena umumnya hanya dibutuhkan 1 IC tambahan sebagai address decoder yaitu 74LS688 beserta jumper. if((estate_port() & 0x01)) { regs.ah & 0x80) { printf("\t SENDING ERROR ").h.}} Pengenalan PPI 8255 Programmable peripheral Interface (PP() 8255 ialah chip antarmuka 24 bit (3 port) yang dapat diprogram sesuai keinginan kita.

A0 dan A1 yang memilih port tertentu.  PC0-PC7 Port C ini dapat diprogram sebagaiinput/output. Bahkan dapat dipecah menjadi 2 yaitu CU( bit PC4-PC7) dan CL (bit PC0-PC3) yang dapat diprogram sebagai input/output .  RD dan WR Sinyal control aktif rendah ini dihubungkan ke 8255.  PB0-PB7 Port B ini dapat deprogram sebagai input /output. Ketika RESET diaktifkan. atau control register sesuai Tabel Tabel Pemilihan port 8255 . seluruh port diinisialisasi sebagai port input.  RESET Pin aktif tinggi ini digunakan untuk membersihkan control register. dapat diprogram sebagai input atau output dengan mode bidirectional input/output. IOR adan IOW dari system bus dihubungkan ke kedua pin ini. tetapi tidak dapat digunakan sebagai port bi-directional. 3 pin ini digunakan untuk mengakses port A.Gambar 1Pin IC PPI 8255 Berikut penjelasan masing-masing pin :  PA0-PA07 Ini ialah port A yang terdiri dari 8 bit . Pada saat CS memilih chip. B atau C. Jika 8255 menggunakan desain peripheral I/O.

Mode BSR ( bit set/reset ). Mode 1. 90H MOV CNTLREG.CS* 0 0 0 0 1 A1 0 0 1 1 x A0 0 1 0 1 X Yang dipilih Port A Port B Port C Control register 8255 tidak dipilih Mode Pemilihan dari 8255 Pada saat port A. hanya bit individual port C yang dapat diprogram 2. PORTA PORTB PORTC EQU 52H EQU 50H EQU 51H CNTLREG EQU 53H … MOV AL. Sinyal jabat tangan disediakan oleh bit-bit port C Mode 2. 3. Pada mode ini seluruh bit sebagai output atau input. port A dapat digunakan sebagai port bi-directional I/O dengan kemampuan jabat tangan dimana sinyalnya disediakan oleh port C. B dan C digunakan sebagai I/). Mode 0. Pada mode ini. dimana semua port dapat deprogram sebagai input/putput. Berikut contoh bahasa assembly untuk membuat PPI 8255 dengan port A sebagai input dan Port B dan Port C sebagai output. Ada 4 mode operasi yang dimiliki 8255 yaitu : 1. ini ialah mode yang paling sederhana. perlu diset juga mode operasi dari port tersebut. pada mode ini port A dan B dapat digunakan sebagai input atau output dengan kemampuan jabat tangan. 4. tidak ada bit yang dapat dikontrol secara individual.AL . Port B dapat digunakan sebagai mode I/O sederhana atau mode 1 jabat tangan.

PORTA OUT PORTB. AL OUT PORTC. CR.IN AL.asm) DATA_SAYA DB “Selamat mencoba 8255”. LF DB “Menggunakan buku Saya”.2 Rangkaian 8255 dengan Printer Listing Program Program menampilkan string ke printer (PrinterPPI. Program di bawah ini akan menampilkan pesan “Selamat mencoba 8255. “$” PA PB PC CWP EQU 300H EQU 301H EQU 302H EQU 303H . Tanda $ menandakan akhir dari pesan 8255 Printer Gambar 14. AL Contoh berikut merupakan koneksi 8255 dengan sebuah printer .LF. CR.Menggunakan buku Saya “$”.

tetap lakukan . OFFSET DATA_SAYA LAGI: MOV AH.DX=303 CW port . PA MOV AL. control PA= out mode 1 . buat DX=300. [SI] CMP JZ AH. AH OUT DX. menggunakan mode BSR . jika ya. naikkan data pinter . port data . mengirim control word .DX =302.alamat port C .apakah selesai? . 08 JZ BACK MOV DX. DX AND. . tetpa mengecek . dan . ke DOS MOV DX. AL.S1= data address . jika ya.PC6=1 untuk INT a . ambil sebuah karakter .jika tidak. 10100000B MOV DX. AL MOV SI. AL INC SI JMP AGAIN OVER: … Gambar di bawah ini memperlihatkan koneksi port paralel dengan PPI 8255. keluar . 00001101B OUT DX.LF CR EQU 0AH EQU 0DH Dari segmen kode : MOV AL. „S‟ OVER .CWP OUT DX.ambil status byte dari port C . PC BACK: IN AL.kirim karakter ke printer . AL MOV AL.apakah INTRa tinggi .

Untuk memprogram Bus ISA yang akan berfungsi mengendalikan Kartu PPI (PPI Card) menggunakan bahasa C/C++. Berikut tampilan Bus ISA . kita menggunakan fungsi outport untuk 8 bit data dan outportb untuk 16 bit data..Gambar Rangkaian Port Paralel dengan 8255 Pemrograman C untuk PPI 8255 C sangat mendukung pemrograman hardware komputer.

printf (“Program PPI 8255\n”) outportb (CW. port B dan C output //membuat looping data dari 0-255 for (data=0. .Gambar Bus ISA komputer Berikut contoh program C untuk mengeluarkan data 0-255 di port B dan C. Program Mengeluarkan data di PPI (PPI.h> //mendefinisikan konstanta //symbol 0x menandakan address komputer #define PA 0x300 //port A di alamat 300H #define PB 0x301 //port B di alamat 301H #define PC 0x302 //port C di alamat 302H #define CW 0x303 //Control Word di alamat 303H void main() { int data=0.//port A input.C) //Menyertakan header file #include <stdio.data<=255. Listing Program 2.data++) { nilai=inportb (PA).h> #include <conio. printf (“Data yang masuk di port A %d \n“. sedangkan port A sebagai input. 0x90). nilai). int nilai. clrscr().

5 detik outportb (PC.//mengeluarkan data di port B printf (“Mengeluarkan data: %d \n. //delay 0. data). } Koneksi DAC di PPI 8255 Untuk koneksi ke DAC. delay(500).//mengeluarkan data di port C printf (“Mengeluarkan data: %d \n. data).data). delay(500). di port C”. anda dapat menggunakan IC DAC 8 bit misalnya MC1408 secara langsung . //delay 0.5 detik } getch(). di port B”. Gambar Rangkaian DAC 8 bit .data).outportb (PB.

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->