Anda di halaman 1dari 13

Konsep Komunikasi serial pada Komputer

Komunikasi serial ialah pengiriman data secara serial (data dikirim satu persatu secara berurutan), sehingga komunikasi serial jauh lebih lambat daripada komunikasi paralel.. Serial port lebih sulit ditangani karena peralatan yang dihubungkan ke serial port harus berkomunikasi dengan menggunakan transmisi serial, 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. Menggunakan hardware, hal ini bisa dilakukan oleh Universal Asyncronous Receiver Transmimeter (UART), 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, 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. Bandingkan dengan port paralel yang menggunakan level TTL berkisar dari 0 V untuk logika 0 dan +5 Volt untuk logika 1. Berikut contoh bentuk sinyal komunikasi serial . Umumnya sinyal serial diawali dengan start bit, data bit dan sebagai pengecekan data menggunakan parity bit serta ditutup dengan 2 stop bit. Level tengangan -3 V hingga +3 V dianggap sebagai undetermined region.

Gambar Bentuk sinyal serial Komunikasi melalui serial port adalah asinkron, yakni sinyal detak tidak dikirim bersama dengan data. Setiap word disinkronkan dengan start bit, dan sebuah clock internal di kedua sisi menjaga bagian data saat pewaktuan (timing).

Peralatan Komunikasi Serial


Hardware pada komunikasi serial port dibagi menjadi 2 (dua ) kelompok yaitu Data Communication Equipment (DCE) dan Data Terminal Equipment (DTE). Contoh dari DCE ialah modem, plotter, scanner dan lain lain sedangkan contoh dari DTE ialah terminal di komputer. Spesifikasi elektronik dari serial port merujuk pada Electronic Industry Association (EIA) : 1. Space (logika 0) ialah tegangan antara + 3 hingga +25 V. 2. Mark (logika 1) ialah tegangan antara 3 hingga 25 V. 3. Daerah antara + 3V hingga 3V tidak didefinisikan /tidak terpakai 4. Tegangan open circuit tidak boleh melebihi 25 V. 5. Arus hubungan singkat tidak boleh melebihi 500mA. Berikut tampilan port serial DB9 yang umum digunakan

Gambar 12.2 Port DB9 jantan

Gambar 12.3 Port DB9 betina

Konektor port serial terdiri dari 2 jenis, yaitu konektor 25 pin (DB25 dan 9 pin (DB9) yang berpasangan (jantan dan betina).Bentuk dari konektor DB-25 sama persis dengan port paralel.

Tabel Jenis Sinyal RS232 yang umum digunakan

Alamat Port dan IRQ


Alamat standar serial port adalah sebagaimana tampak dalam Tabel 12.2. Hal ini masih dengan catatan bahwa mungkin ada komputer yang memiliki alamat port dan IRQ yang berbeda dengan alarnat di bawah ini, misalnya pada komputer PS/2 yang menggunakan Micro Channel Bus.
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, dan sebaliknya sinyal dari peralatan kita harus dikonversikan ke logika RS-232 sebelum di-inputkan ke serial port. Konverter yang paling mudah digunakan adalah MAX-

232. Di dalam IC ini terdapat Charge Pump yang akan membangkitkan +10 Volt dan -10 Volt dari sumber +5 Volt tunggal. Dalam IC DIP (Dual In-line Package) 16 pin (8 pin x 2 baris) ini terdapat 2 buah transmiter dan 2 receiver.

Pemrograman Port Serial Komputer


Port serial sering digunakan untuk interfacing komputer dan mikrokontroler, karena kemampuan jarak pengiriman data dibandingkan port paralel. Berikut contoh program assembly untuk komunikasi serial antara 2 PC. Untuk komunikasi ini, anda cukup menghubungkan : 1. Pin TxD ke pin RxD computer lain 2. Pin RXD dihubungkan ke pin TxD komputer lain 3. RTS dan CTS dihubung singkat 4. DSR dan DTR dihubung singkat 5. GND dihubungkan ke GND komputer lain Listing Program 1. Komunikasi Serial antara 2 PC (SerialPC.asm)
TITLE Komunikasi data serial antara 2 PC .model small .stack .data Message db Komunikasi serial melalui Com2,4800,tanpa parity, 1 stop, 8 bit data.,0ah,0dh db key apa saja ditekan akan dikirim ke komputer lain ,0ah,0dh db Tekan ESC untuk keluar,$ .code main proc mov ax,@data mov,ds,ax mov ah,09 mov dx, offset message int 21h ;inisialisasi com2 mov ah,0 ;inisialisasi port com mov dx,1 ;com2 mov al,0c3h ;4800,tanpa parity,1 stop, 8 bit data int 14h ;mengcek key yang ditekan dan dikirim ke com2 untuk transfer data again: mov ah,01 ;cek key yang ditekan menggunakan int 16h, ah=01 int 16h ;jika ZF=1, tidak ada key yang ditekan jz next ;jika tidak ada key cek port port mov ah,0 ;ya, ada key yang ditekan, ambil ! int 16h ;kita harus menggunakan int 16h 2 kali, untuk keuda kalinya ;dengan ah=0 untuk mengambil karakter. al=ascii karakter yang ditekan cmp al,1bh ;apakah key ESC? Je exit ;ya exit Mov ah,1 ;tidak, kirim karakter ke com2 Mov dx,01 Int 14h ;cek com2 untuk melihat apakah ada karater, jika ada ambil dan tampilkan next: mov ah,03 ;ambil status com2 mov dx,01 int 14h and ah,01 ;ah mempunyai status com, mask seluruh bit kecuali D0 cmp ah,01 ;cek D0 untuk melihat jika ada sebuah karakter jne again ;tidak ada data, untuk memonitor keyboard mov ah,02 ;ya, com2 mempunyai data, ambil! Mov dx,01

Int 14h ;ambil Mov dl,al ;dan tampilkan menggunakan int 21h Mov ah,02 ;dl mempunyai karakter yang akan ditampilkan Int 21h Jmp again ;terus memonitor keyboard Exit: mov ah, 4ch ;keluar ke DOS Int 21h Main endp End

Anda juga dapat memprogram komunikasi serial antara 2 PC menggunakan C dengan lebih mudah . Berikut program komunikasi data serial menggunakan fungsi BIOSCOM. Listing Program 2. Komunikasi serial menggunakan C (SerialPC.c)
//Program komunikasi serial menggunakan fungsi bioscom //Dibuat oleh Widodo Budiharto //nilai port 0 untuk COM1, 1 untuk COM2 dan seterusnya. //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 // 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 110 baud 150 baud 0x40 300 baud 0x00 | 1 stop bit 0x60 600 baud 0x04 | 2 stop bits 0x80 1200 baud 0x00 | No parity 0xA0 2400 baud 0x08 | Odd parity 0xC0 4800 baud 0x18 | Even parity 0xE0 9600 baud

//Sebagai contoh, 0xEB //(0xE0|0x08|0x00|0x03) untuk abyte akan menset //port komunikasi ke 9600 baud, odd parity,1 stop bit, dan 8 bit data //bioscom menggunakan BIOS 0x14 interrupt. //Menyertakan header file yang dibutuhkan #include <bios.h> #include <conio.h> //definisi port #define COM1 0 #define DATA_READY 0x100 #define TRUE 1 #define FALSE 0 //definisi settings #define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00) int main(void) { int in, out, status, DONE = FALSE; bioscom(0, SETTINGS, COM1);//3 parameter dari bioscom cprintf("Komunikasi serial menggunakan BIOSCOM, tekan [ESC] untuk keluar \n"); while (!DONE) { status = bioscom(3, 0, COM1); if (status & DATA_READY) if ((out = bioscom(2, 0, COM1) & 0x7F) != 0) putch(out);

if (kbhit()) { if ((in = getch()) == '\x1B') DONE = TRUE; bioscom(1, in, COM1); } } return 0; }

Jika Anda ingin membuat aplikasi menggunakan bahasa Visual Basic .NET, berikut contohnya : Program Inisialisasi dan membuka port komunikasi Membuat instance Dim moRS232 as New Rs232() With moRs232 .Port = 1 'Menggunakan COM1 .BaudRate = 2400 ' baud rate sebesar 2400 .DataBit = 8 8 data bit .StopBit = Rs232.DataStopBit.StopBit_1 ' 1 Stop bit .Parity = Rs232.DataParity.Parity_None ' No Parity .Timeout = 500 ' 500 ms timeout End With 'inisialisasi dan membuka port moRS232.Open () Anda dapat menambahkan control dari jalur DTR/RTS setelah port dibuka moRS232.Dtr = True moRS232.Rts = True Mengirim data moRS232.TxData = txtTx.Text moRS232.Tx() Menerima Data moRS232.Rx(10) 'Ambil 10 byte dari buffer serial Dim sRead as String=moRs232.RxData Untuk informasi lebih lanjut mengenai kode diatas anda dapat mengunjungi http://www.codeworks.it/net/VBNetRs232.htm

Penerapan Port Serial Komputer


Berbagai aplikasi elektronika dapat berkomunikasi dengan port serial komputer. Program berikut akan menampilkan karakter ke LCD menggunakan port serial . IC MAX 232 ialah IC yang umum digunakan sebagai RS232 Converter, meskipun dapat anda gantikan dengan rangkaian transistor.

Gambar Interfacing LCD menggunakan Serial port

Listing Program Interfacing LCD dengan port Serial Komputer (LCDSerial.c) #include <dos.h> #include <stdio.h> #include <conio.h> #define PORT1 0x3F8 /* alamat port*/ /* Definisi alamat base port serial */ /* COM1 0x3F8 */ /* COM2 0x2F8 */ /* COM3 0x3E8 */ /* COM4 0x2E8 */ void main(void) { int c; int count; char init[] = { 0x0F, 0x01, 0x38 }; /* 0x0F - Init Display */ /* 0x01 - Clear Display */ /* 0x38 - Dual Line / 8 Bits */ outportb(PORT1 + 1 , 0x0); /* mematikan interupt - Port1 */ outportb(PORT1 + 3 , 0x80); /* SET DLAB ON */ outportb(PORT1 + 0 , 0x0C); /* Set Baud rate */ /* 0x06 = 19,200 BPS */ /* 0x0C = 9,600 BPS */ /* 0x18 = 4,800 BPS */ /* 0x30 = 2,400 BPS */ /* Set Baud rate - Divisor Latch High Byte */ outportb(PORT1 + 1 , 0x00); outportb(PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ outportb(PORT1 + 2 , 0xC7); /* FIFO Control Register */ outportb(PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */ /* Register Select (DTR) */ outportb(PORT1 + 4 , (inportb(PORT1 + 4) | 0x01));

/* 0 = Instruction Register */ for (count = 0; count < 3; count++) { outportb(PORT1, init[count]); /* kirim Init Data Bytes */ delay(20); /* delay untuk INIT */ } /* Register Select (DTR) */ /* 1 = Data Register */ outportb(PORT1 + 4 , (inportb(PORT1 + 4) & 0xFE)); printf("\nContoh program LCD Serial. Tekan ESC untuk keluar \n"); do { if (kbhit()){ c = getch(); outportb(PORT1, c); printf("%c",c); } } while (c !=27); }

Latihan:
1. Buat program yang dapat mengontrol stepper motor seperti gambar berikut :

Gambar Pengendali motor stepper dengan 89C2051 dan port serial 2. Buat program untuk komunikasi serial antara 2 komputer menggunakan bahasa C, namun mengkombinasikan dengan bahasa assembly sebagai berikut :

//Program komunikasi serial antara 2 PC //00H bios function (AL register)

//Register Dx 0->com1, 1->com2, 2->com3, 3->com4 //Konfigurasi: 9600 bd,no parity,2 stop bits dan 8 data bit //AL register value is 1 1 1 0 0 1 1 1 -> 0xE7 #include <stdio.h> #include <process.h> #include <conio.h> #include <dos.h> #include <bios.h> #define TRUE 1 #define PARAM 0xA7 #define COM1 0 #define COM2 1 void init_port(void); char state_port(void); void send_byte(unsigned char); unsigned char read_byte(void); void keyb(void); int tecla = 1; void main ( void ) { unsigned char read_com; unsigned char read_kb; clrscr(); init_port();
while(read_kb != 'c') { read_kb=getch(); send_byte(read_kb); read_com=read_byte(); if(read_com!=0){printf("%c",read_com);} } } void init_port() { union REGS regs; regs.h.ah = 0x00; regs.x.dx = COM2; regs.h.al = PARAM; int86( 0x14, &regs, &regs); } //mengembalikan keadaan port char state_port() { union REGS regs; regs.h.ah = 0x03; regs.x.dx = COM2; int86( 0x14, &regs, &regs); if(regs.h.ah & 0x80) printf("\t EXCEED TIME\n"); if(regs.h.ah & 0x40) printf("\t TSR EMPTY\n"); if(regs.h.ah & 0x20) printf("\t THR EMPTY\n"); if(regs.h.ah & 0x10) printf("\t INTERRUPTION\n"); if(regs.h.ah & 0x08) printf("\t THREAT ERROR\n"); if(regs.h.ah & 0x04) printf("\t PARITY ERROR\n");

if(regs.h.ah & 0x02) printf("\t OVERLOAD ERROR\n"); return (regs.h.ah); } //penanganan keyboard void keyb() { union u_type{int a;char b[3];}keystroke;char inkey=0; if(bioskey(1)==0) return; keystroke.a=bioskey(0); inkey=keystroke.b[1]; switch (inkey) { case 1: keyb=0; return; /*ESC*/ default: keyb=15; return; } } //kirim karakter ke port serial void send_byte(unsigned char byte) { union REGS regs; regs.h.ah = 0x01; regs.x.dx = COM2; regs.h.al = byte; int86( 0x14, &regs, &regs); if( regs.h.ah & 0x80) { printf("\t SENDING ERROR "); exit(1); } } //membaca sebuah karakter dari port serial unsigned char read_byte() { int x,a; union REGS regs; if((estate_port() & 0x01)) { regs.h.ah = 0x02; regs.x.dx = COM2; int86(0x14,&regs,&regs); if(regs.h.ah & 0x80) { printf("\t Penerimaan data error"); exit(1); } return(regs.h.al);} else { return(0);}}

Pengenalan PPI 8255


Programmable peripheral Interface (PP() 8255 ialah chip antarmuka 24 bit (3 port) yang dapat diprogram sesuai keinginan kita. PPI 8255 merupakan chip yang paling banyak digunakan untuk interfacing komputer yang dihubungkan ke port ISA komputer. Anda juga dapat memesan card PPI 8255 ini melalui Innovative Electronics dengan harga yang sangat terjangkau, karena umumnya hanya dibutuhkan 1 IC tambahan sebagai address decoder yaitu 74LS688 beserta jumper.

Gambar 14.1 ialah pin IC 8255, dimana perlu diingat bahwa pin gnd berada di pin 7 dan Vcc berada di pin ke 26.

Gambar 1Pin IC PPI 8255 Berikut penjelasan masing-masing pin : PA0-PA07 Ini ialah port A yang terdiri dari 8 bit , dapat diprogram sebagai input atau output dengan mode bidirectional input/output. PB0-PB7 Port B ini dapat deprogram sebagai input /output, tetapi tidak dapat digunakan sebagai port bidirectional. PC0-PC7 Port C ini dapat diprogram sebagaiinput/output. Bahkan dapat dipecah menjadi 2 yaitu CU( bit PC4PC7) dan CL (bit PC0-PC3) yang dapat diprogram sebagai input/output . RD dan WR Sinyal control aktif rendah ini dihubungkan ke 8255. Jika 8255 menggunakan desain peripheral I/O, IOR adan IOW dari system bus dihubungkan ke kedua pin ini. RESET Pin aktif tinggi ini digunakan untuk membersihkan control register. Ketika RESET diaktifkan, seluruh port diinisialisasi sebagai port input. Pada saat CS memilih chip, A0 dan A1 yang memilih port tertentu. 3 pin ini digunakan untuk mengakses port A, B atau C, atau control register sesuai Tabel Tabel Pemilihan port 8255 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, B dan C digunakan sebagai I/), perlu diset juga mode operasi dari port tersebut. Ada 4 mode operasi yang dimiliki 8255 yaitu : 1. Mode 0, ini ialah mode yang paling sederhana, dimana semua port dapat deprogram sebagai input/putput. Pada mode ini seluruh bit sebagai output atau input, tidak ada bit yang dapat dikontrol secara individual. 2. Mode 1, pada mode ini port A dan B dapat digunakan sebagai input atau output dengan kemampuan jabat tangan. Sinyal jabat tangan disediakan oleh bit-bit port C

3. 4.

Mode 2, port A dapat digunakan sebagai port bi-directional I/O dengan kemampuan jabat tangan dimana sinyalnya disediakan oleh port C. Port B dapat digunakan sebagai mode I/O sederhana atau mode 1 jabat tangan. Mode BSR ( bit set/reset ). Pada mode ini, hanya bit individual port C yang dapat diprogram

Berikut contoh bahasa assembly untuk membuat PPI 8255 dengan port A sebagai input dan Port B dan Port C sebagai output. PORTA EQU 50H PORTB EQU 51H PORTC EQU 52H CNTLREG EQU 53H MOV AL, 90H MOV CNTLREG,AL IN AL, PORTA OUT PORTB, AL OUT PORTC, AL Contoh berikut merupakan koneksi 8255 dengan sebuah printer . Program di bawah ini akan menampilkan pesan Selamat mencoba 8255,Menggunakan buku Saya $. Tanda $ menandakan akhir dari pesan 8255 Printer

PA PC7 D0-D7 STROBE ACL OBF ACK

Gambar 14.2 Rangkaian 8255 dengan Printer Listing Program Program menampilkan string ke printer (PrinterPPI.asm) DATA_SAYA DB Selamat mencoba 8255, CR, LF DB Menggunakan buku Saya, CR,LF, $ PA EQU 300H PB EQU 301H PC EQU 302H CWP EQU 303H LF EQU 0AH CR EQU 0DH Dari segmen kode : MOV AL, 10100000B ; control PA= out mode 1 MOV DX,CWP ;DX=303 CW port OUT DX, AL ; mengirim control word MOV AL, 00001101B ;PC6=1 untuk INT a OUT DX, AL ; menggunakan mode BSR MOV SI, OFFSET DATA_SAYA ;S1= data address

LAGI:

BACK:

OVER:

MOV AH, [SI] ; ambil sebuah karakter CMP AH, S ;apakah selesai? JZ OVER ; jika ya, keluar MOV DX, PC ;DX =302,alamat port C IN AL, DX ;ambil status byte dari port C AND, AL, 08 ;apakah INTRa tinggi JZ BACK ;jika tidak, tetpa mengecek MOV DX, PA ; jika ya, buat DX=300, port data MOV AL, AH ; dan OUT DX, AL ;kirim karakter ke printer INC SI ; naikkan data pinter JMP AGAIN ; tetap lakukan ; ke DOS

Gambar di bawah ini memperlihatkan koneksi port paralel dengan PPI 8255.

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

Gambar Bus ISA komputer

Berikut contoh program C untuk mengeluarkan data 0-255 di port B dan C, sedangkan port A sebagai input. Listing Program 2. Program Mengeluarkan data di PPI (PPI.C) //Menyertakan header file #include <stdio.h> #include <conio.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; int nilai; clrscr(); printf (Program PPI 8255\n) outportb (CW, 0x90);//port A input, port B dan C output //membuat looping data dari 0-255 for (data=0;data<=255;data++) { nilai=inportb (PA); printf (Data yang masuk di port A %d \n, nilai); outportb (PB, data);//mengeluarkan data di port B printf (Mengeluarkan data: %d \n, di port B,data); delay(500); //delay 0.5 detik outportb (PC, data);//mengeluarkan data di port C printf (Mengeluarkan data: %d \n, di port C,data); delay(500); //delay 0.5 detik } getch(); } Koneksi DAC di PPI 8255 Untuk koneksi ke DAC, anda dapat menggunakan IC DAC 8 bit misalnya MC1408 secara langsung .

Gambar Rangkaian DAC 8 bit