Anda di halaman 1dari 18

PC Interfacing

Pengenalan Komunikasi Serial


Pada prinsipnya, komunikasi serial ialah komunikasi dimana pengiriman data dilakukan
per bit, sehingga lebih lambat dibandingkan komunikasi parallel seperti pada port printer
yang mampu mengirim 8 bit sekaligus dalam sekali detak. Beberapa contoh komunikasi
serial ialah mouse, scanner dan system akuisisi data yang terhubung ke port
COM1/COM2.

Peralatan Komunikasi Serial


Devais 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.

Komunikasi serial membutuhkan port sebagai saluran data. Berikut tampilan port serial
DB9 yang umum digunakan sebagai port serial

Gambar Port DB9 jantan

Gambar 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. Umumnyua COM1 berada dialamat 3F8H, sedangkan COM2 dialamat
2F8H.

Tabel Jenis SInyal RS232 yang umum digunakan


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. Sering juga sebagai buffer serial digunakan chip DS275.
Untuk menghubungkan antara 2 buah PC, biasanya digunakan format null mode, dimana
pin TxD dihubungkan dengan RxD pasangan, pin Sinyal ground (5) dihubungkandengan
SG di pasangan, dan masing masing pin DTR, DSR dan CD dihubung singkat, dan pin
RTS dan CTS dihubung singkat di setiap devais.

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

Program 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.

Program Komunikasi serial menggunakan C (SerialC.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 |Sets the communications parameters to the value in abyte.
// 1 | Sends the character in abyte out over the communications line
// 2 | Receives a character from the communications line.
// 3 | Returns the current status of the communications port.

//abyte ialah kombinasi dari bit berikut

// 0x02 | 7 data bits 0x00 110 baud


// 0x03 | 8 data bits 0x20 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, menggunakan kelas Rs232,
berikut contohnya :

‘ Program Inisialisasi dan membuka port komunikasi


Private Sub btnOpenCom_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnOpenCom.Click
moRS232 = New Rs232() ‘buat ojek serial
Try
'// setup parameter koneksi
With moRS232
.Port = miComPort
.BaudRate = CInt(txtBaudrate.Text)
.DataBit = 8
.StopBit = Rs232.DataStopBit.StopBit_1
.Parity = Rs232.DataParity.Parity_None
.Timeout = CInt(txtTimeout.Text)
.WorkingMode = CType(IIf(chkOl.Checked, Rs232.Mode.Overlapped,
Rs232.Mode.NonOverlapped), Rs232.Mode)
btnAsyncTx.Enabled = (.WorkingMode = Rs232.Mode.Overlapped)
btnAsync.Enabled = (.WorkingMode = Rs232.Mode.Overlapped)
chkOl.Enabled = False
End With
'// inisialisasi port serial
moRS232.Open()
'// Set state of RTS / DTS
moRS232.Dtr = (chkDTR.CheckState = CheckState.Checked)
moRS232.Rts = (chkRTS.CheckState = CheckState.Checked)
Catch Ex As Exception
MessageBox.Show(Ex.Message, "Error koneksi ", MessageBoxButtons.OK)
Finally
btnCloseCom.Enabled = moRS232.IsOpen
btnOpenCom.Enabled = Not moRS232.IsOpen
btnTx.Enabled = moRS232.IsOpen
btnRx.Enabled = moRS232.IsOpen
btnCheck.Enabled = moRS232.IsOpen
End Try
End Sub

Untuk menulis data, gunakan fungsi-fungsi berikut ini :


Private Sub Kirim_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnTx.Click
‘gunakan fungsi write()
moRS232.Write(txtTx.Text)
'moRS232.Write(Chr() & Chr(3) & Chr(0) & Chr(0) & Chr(0) & Chr(16) & Chr(68) &
Chr(83))
' Bersihkan textbox
txtRx.Text = String.Empty
txtRx.Refresh()
lbHex.Items.Clear()
If chkAutorx.Checked Then Button1_Click(Nothing, Nothing)
End Sub
Untuk membaca data gunakan fungsi-fungsi Read dan InputStreamString seperti berikut
:

Try
‘gunakan fungsi Read()
moRS232.Read(CInt(txtBytes2Read.Text))
txtRx.Text = moRS232.InputStreamString
txtRx.ForeColor = Color.Black
txtRx.BackColor = Color.White
'// Fills listbox with hex values
Dim aBytes As Byte() = moRS232.InputStream
Dim iPnt As Int32
For iPnt = 0 To aBytes.Length - 1
lbHex.Items.Add(iPnt.ToString & ControlChars.Tab & String.Format("0x{0}",
aBytes(iPnt).ToString("X")))
Next
Catch Ex As Exception
txtRx.BackColor = Color.Red
txtRx.ForeColor = Color.White
txtRx.Text = "Terjadi error " & Ex.Message & " data fetched: " &
moRS232.InputStreamString
End Try

Gambar Program Komunikasi Serial VB .NET

Kita juga dapat menggunakan komponen yang sudah dibuat oleh suatu perusahaan,
misalnya PortController.Net yang terdapat pada CD Program, sehingga pemrograman
menjadi lebih mudah seperti contoh mebuka dan menulis ke suatu port serial berikut :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


MyBase.Load
myPortController.Open("COM1")
End Sub
Private Sub SendButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles SendButton.Click
myPortController.Write(SendText.Text)
SendText.Clear()
End Sub
Private Sub myPortController_OnDataReceived(ByVal sender As Object, ByVal e As
System.EventArgs) Handles myPortController.OnDataReceived
ReceiveText.AppendText(myPortController.Read())
End Sub

Jika hanya menggunakan bahasa Visual Basic 6, tempelkan kontrol MSComm1, dan
masukkan kode untuk menset MSComm1 dimana memperoleh input dari suatu combobox
berikut :

MsComm1.commPort=cmbPort.ListIndex +1
MsComm1.Settings=cmbbitspersecond.text
MSComm1.Handshaking=cmbFlowControl.LinstIndex
Interfacing Port Paralel
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 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 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, yaitu 1284 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 Pin Sinyal Arah In/out Register Hardware di
Centronics SPP 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 13 Select In Status
14 14 nAuto- In/Out Control Ya
Linefeed
15 32 nError / In Status
nFault
16 31 nInitialize In/Out Control
17 36 nSelect- In/Out Control Ya
Printer /
nSelect-In
18 - 25 19-30 Ground Gnd

Untuk mengeluluarkan data di port parallel, anda gunakan fungsi outport (8 bit ) dan
outportb(16 bit) sebagai berikut :

Program pengendali lampu led di port paralel(iopar.c)


#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
outport(0x378,0);//lampu led mati
sleep(5); //tunda 5 detik
outport(0x378,1); //lampu led hidup
sleep(5);
return 0;
}

Program 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. Pada Sistem Operasi Berbasis
Windows 2000 keatas, biasanya tidak bisa mengakses hardware secara langsung,
anda membutuhkan program pendukung misalnya Userport.

Gambar 9.1 Contoh aplikasi VB


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 Rangkaian LED ke port parallel

Gambar berikut contoh penggunakan port paralel untuk mengendalikan 5 buah 7 segment
menggunakan IC 74LS244 dan 75492, anda juga dapat kembangkan menggunakan dot
matrix 5x7. 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


Gambar Contoh aplikasi port paralel
Alamat Port
Port Paralel mempunyai 3 alamat seperti pada tabel 9.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
Alamat Penjelasan
3BCH - 3BFH 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.:
Program penerima data port paralel (paralel.c)
#include <stdio.h>
#include <dos.h>
#include <conio.h>
/*****************************************/
/*membaca input data dari port paralel */
/*****************************************/

int Read_Input()
{
int Byte;
Byte=inportb(0x378);
return Byte;
}
void main (void)
{
int PP_Input;
clrscr();
PP_Input = Read_Input();
printf("%d",PP_Input);
getch();}
Ketika BIOS mengeset alamat ke peralatan printer Anda, ia menyimpan alamat
pada lokasi tertentu di memory, seperti pada Tabel 9.3. 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 Fungsi


0000:0408 LPT1's Base Address
0000:040A LPT2's Base Address
0000:040C LPT3's Base Address
0000:040E LPT4's Base Address

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.

Program mencari alamat port paralel(Caripar.c)


#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++;
}

Aplikasi Port Paralel


Berikut contoh program C untuk mengontrol 8 buah alat melalui penekanan tombol
keyboard :

Program pengontrol menggunakan port parallel (Kontrolpar.c)


/*
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("Alat ke 1 terhubung ke D0 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.
Contoh aplikasi berikut akan mengukur suhu melalui port parallel dan sensor DS1722. Pin
SERMODE ialah Serial interface mode, sedangkan CE ialah Chip Enable seperti
penjelasan pada Tabel

Tabel No Pin dan Fungsi DS1722

No.
Nama Pin Keterangan
Pin
7 SERMODE Serial Interface Mode
2 CE Chip Enable
3 SCLK Serial Clock
5 SDO Serial Data Out
6 SDI Serial Data In
8 VDDA Analog supply voltage
Gambar Rangkaian sensor temperatur

Terlihat pada gambar, yang dibutuhkan hanya sinyal SCK, SDI dan SD0 untuk
mengirim data ke port parallel. An3315.pdf merupakan tutorial menulis program
bahasa C untuk 2 wire di port parallel.

Program Sensor Temperatur DS1722 (Ds1722.c)


// Sensor berbasis DS1722 di port Paralel
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <process.h>
#include <alloc.h>

#define VDD_ON 0x01 /* power to PIC through VDD_ON on pin 2 (D0) */


#define SCK 0x02 /* serial clock for SPI provided by PC */
#define PCSDO 0x04 /* serial data out from PC on Data bit 2 */
#define PCSDI 0x20 /* note this is on Status register (bit 1) */
#define SSOUT 0x40 /* =CE, active high, not low as for PIC SPI */
#define MCLR_HI 0x80 /* MCLR* on pin 9 (Data bit 7) normally high */
#define OPERATE VDD_ON | MCLR_HI /* normal operation of DS1722 */
/* adjust these to match the CPU speed */
#define DELTIME 10000 /* settling time after transfers */
#define SECDELA 10000000 /* to get about 1 s sampling */

void dodelay(long);
void outportd(unsigned char);
int dport,sport;

void main(void)
{
unsigned char LSB,transfer(unsigned char,unsigned char);
char MSB; /* note this is signed */
void outportd(unsigned char outbyte);
int i,j,it;
float T;

/* LPT1 port addresses */


if(!(dport = peek(0x40,0x08)))
{ printf("\n\n\nLPT1 not available... aborting\n\n\n"); exit(1); }
sport = dport + 1; /* status port address */
/* Initialize the Printer DATA Port for PIC operation */
/* includes putting SCK in the neutral 0 position: ~ is bitwise negation */
outportd(OPERATE&~SSOUT);

printf("hit key to stop list\n");


transfer(0x80,0xE8); /* initialize DS1722 */
for(j=0;j<20;j++)
{ if(kbhit()) break;
printf(" config %X: ",transfer(00,0)); dodelay(SECDELA);
printf(" LSB %X: ",LSB=transfer(0x01,0)); dodelay(SECDELA);
printf(" MSB %X: ",MSB=transfer(0x02,0)); dodelay(SECDELA);
printf("T=%10.4f\n",T=MSB+(float)LSB/256.);
} /* for loop */
}
unsigned char transfer(unsigned char outbyte,unsigned char outdata)
{ /* output address byte on Data2, data byte, getting inbyte on Status5 */
unsigned char outmask,inbyte,statusmask;
int ibit;
inbyte=0x00;
/* raise SSOUT for 2 byte transfer, SCK also in lowered neutral position */
outportd(OPERATE|SSOUT);
for(ibit=0;ibit<8;ibit++)
{ outportd(OPERATE|SCK|SSOUT);
outmask=outbyte&0x80; outbyte=outbyte<<1;
if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */
else outportd(OPERATE|SCK|SSOUT); /* of 0 on PCSDO */
if(outmask)outportd(OPERATE|PCSDO|SSOUT); /* lower clock SCK */
else outportd(OPERATE|SSOUT); /* retaining data */
}
for(ibit=0;ibit<8;ibit++) /* output outdata */
{ /* & input inbyte */
outportd(OPERATE|SCK|SSOUT); /* raise clock SCK */
outmask=outdata&0x80; outdata=outdata<<1;
if(outmask)outportd(OPERATE|SCK|PCSDO|SSOUT); /* output of 1 or */
else outportd(OPERATE|SCK|SSOUT); /* of 0 on PCSDO */
if(outmask)outportd(OPERATE|PCSDO|SSOUT); /* lower clock SCK */
else outportd(OPERATE|SSOUT); /* retaining data */
statusmask=inportb(sport); /* read status port*/
statusmask=statusmask&PCSDI; /* mask input line */
inbyte=inbyte<<1; inbyte=inbyte&0xFE; inbyte|=statusmask>>5;
}
/* lower SSOUT at end of 2 byte transfer, lower SCK to neutral position */
outportd(OPERATE&~SSOUT);
return inbyte;
}
void outportd(unsigned char outbyte)
{ dodelay(DELTIME); outportb(dport,outbyte); dodelay(DELTIME); }
void dodelay(long deltime)
{ long i; for(i=0; i<deltime; i++) ; }

Pada program diatas, program melakukan pendeteksian Port LPT1, lalu melakukan
inisialisasi DS1722 untuk membaca temperatur dan dikirim ke port LPTI1 dengan
delay tertentu.

Interfacing Port ISA


Gambar berikut merupakan format DAC yang umum, dimana input berupa 8 bit atau
lebih, dan outputnya berupa sinyal analog, yang biasanya diperoleh dari suatu
rangkaian op-amp

Gambar Blok diagram DAC standar

Ada 3 modus operasi pada PIO 8255 yang dapat dipilih melalui software yaitu :
 Mode 0 : basic input/output
 Mode 1 : strobed input/output
 Mode 2: bidirectional bus
Jika reset input mendapat input high, semua port akan diset ke mode input dimana
semua 24 jalur ditahan pada logika 1 oleh bus internal. PPI 8255 dapat dibuat
sebagai antarmuka DAC atau ADC. Untuk mencoba DAC yang terprogram paling
mudah menggunakan PPI 8255 dalam mode 0. Langkah-langkah:
 Pasang Card PPI 8255 ISA, anda juga dapat menggunakan Card PPI 8255
berbasiskan PCI
 Hubungkan DAC ke port A
 Hubungkan keluaran DAC ke Osiloskop
 Buat program berikut :

//Program Pembangkit sinyal Sinus berbasis 8255


#include <conio.h>
#include <stdio.h>
#include <math.h>
main()
{
printf (“======================”);
printf (“ Pembangkit sinyal sinus\n”);
outp (0x303, 0x80); //konfigurasi 8255
printf (“======================”);
unsigned char v1;
float Vout, magnitude; int a;
printf (“\n Tekan sembarang tombol untuk keluar\n”)
do
{
for (a=0;a<360;a++)
{
Vout =5.0 +5.0* sin ((3.14*a)/180));
magnitude=Vout*25.6;
v1=(char)magnitude;
delay(1);
outp(0x300,v1)
}
}
while (!kbhit());
return (0);
}

Program diatas akan membangkitkan sinyal sinus karena terdapat pembangkitan nilai
sinus pada rumus Vout =5.0 +5.0* sin ((3.14*a)/180)). Alamat yang digunakan ialah
300H, yang merupakan alamat standar port ISA untuk eksperimen.

Contoh berikut menerapkan PPI 8255 dengan V B 6.

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)
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()


End Sub
Out &H303, &H90
'End Sub

Private Sub Timer1_Timer()


Label3.Caption = Format(Date, "dd-mmm-yyyy")
Label4.Caption = Format(Time, "hh:mm:ss")
End Sub

Private Sub Timer2_Timer()


Label2.Text = Inp(&H300)
If x = 50 Then
Out &H301, &H1
End If
End Sub

USB (Universal Serial Bus)

Mengenal USB
USB ialah port yang sangat diandalkan saat ini dengan bentuknya yang kecil dan
kecepatan datanya yang tinggi. Anda dapat menghubungkan hingga 127 produk usb
dalam 1 komputer. USB versi 1.1 mendukung 2 kecepatan yaitu mode kecepatan penuh
12Mbits/s dan kecepatan rendah 1.5 Mbits/s. USB 2.0 mempunyai kecepatan 480Mbits/s
yang dikenal sebagai mode kecepatan tinggi.
Saat ini transfer data menggunakan port USB sudah semakin marak, port USB menjadi
pilihan utama karena ukuran yang ringkas dan kecepatan transfer data yang cukup
besar. Sebagai perbandingan, Bus PCI saat ini mendukung transfer data hingga 132
MB/s, dimana AGP (pada 66MHz) mendukung hingga 533 MB/s. AGP dapat melakukan
ini karena kemampuannya untuk mentransfer data pada ujung naik dan turun detak
66MHz.
Ada dua macam konektor USB : konektor A untuk hubungan ke host dan konektor B
untuk hubungan ke peranti USB . Secara fisik dapat dibedakan dengan mudah untuk
menghindari kesalahan pemasangan.

Konektor jenis A Konektor jenis B


Gambar Konektor USB

Untuk menghubungkan lebih luas seperti menghubungkan ke piranti berukuran kecil


layaknya seperti handphone, PDA, dan sebagainya. Dibuat untuk konektor mini-A dan
mini-AB. Semua jenis konektor USB di hubungkan dengan empat kabel sebagaimana
tabel berikut di bawah ini

Tabel Pengkabelan USB.


Pin Warna Kabel Fungsi
1 Merah VBus ( 5 volt )
2 Putih D-
3 Hijau D+
4 Hitam Ground

Fungsi USB
Suatu piranti USB dapat dikatakan sebagai sebuah alat transceiver( pengirim sekaligus
penerima ) Baik host maupun USB itu sendiri. Sebuah istilah baru di perkenalkan,
yakni USB function yang maksudnya adalah peralatan USB yang memilki kemampuan
khusus. Seperti printer, scanner, modem, dan lain-lainnya.

Data dikirim secara serial, maka piranti USB harus mampu menangani gelombang
kontinyu. Gelombang ini di hubungkan langsung ke pin data USB dari sebuah sumber
tegangan dengan impedansi output 39. Sumber tegangan rangkaian terbuka untuk
keperluan ini ada pada kemungkinan terburuk dari adanya overshoot dan undershoot.
Pada koneksi USB dengan kecepatan 12 MHz digunakan kabel twisted-pair yang
terlindung dengan impedansi 90 kurang lebih 15% dan delay maksimumnya
26ns.Sedang impedansi pada drivernya harus antara 28 hingga 44. Jika di ukur, arus
yang masuk dan keluar piranti USB V1.1 tidak boleh melebihi 10,71 VOH mA. Tegangan
logika yang di masukan ke D+ dan D- tidak boleh melebihi 0.3 VOH untuk logika rendah
dan juga harus turun sebesar 0.7 VOH untuk logika tinggi.
Karena ada piranti USB yang berkomunikasi pada kecepatan rendah 1.5 MHz, maka
kombinasi kabel dan piranti USB harus mengandung kapasitas tunggal dengan nilai
200pF hingga 450pF di pin D+ dan D-. Perambatan delay pada kabel kecepatan rendah
harus kurang dari 18 ns. Data sinyal yang naik turun diukur dari 10% hingga 90% dari
sinyal,dengan toleransi 10%. Waktu untuk ini dari 4ns hingga 20ns, tergantung kecepatan
USB yang digunakan.
Sudah saatnya anda membangun aplikasi menggunakan port USB. Jika anda
ingin membangun sistem elektronika berbasis port USB, dapat menggunakan
chip FTDI atau modul FTDI, antara lain :
 FT2232C , IC USB UART/FIFO

FT2232L -

Gambar Chip FT2232C

IC ini mempunyai fitur :


 Single chip USB <=> asynchronous serial data transfer
 Full handshaking & modem interface signals
 UART interface mendukung 7/8 data bits, 1/2 stop bits dan
Odd/Even/Mark/Space/No Parity
 Data transfer rate 300 Baud => 3M Baud (TTL)
 Data transfer rate 300 Baud => 1M Baud (RS232)
 Data transfer rate 300 Baud => 3M Baud (RS422/RS485)
 384 Byte Rx buffer/128 Byte Tx buffer for high data throughput
 Rx buffer timeout dapat disesuaikan
 Dukungan built-in untuk event characters dan kondisi line break
 Auto transmit buffer control untuk RS485
 Mendukung USB suspend/resume through SLEEP# and RI# pins
 Mendukung daya tinggi USB bus powered devices melalui pin PWREN#
 Integrated level converter dan UART dan sinyal control untuk interfacing ke
logika 5V dan 3.3V
 Kompatibel USB 1.1 dan USB 2.0
 EEPROM programmable on-board melalui USB

 FT245BM, IC USB FIFO kecepatan tinggi


IC ini memiliki fitur yang mirip dengan IC TF2232C, untuk aplikasi Modem, PC, instrumentasi dan lain
0lainnya berbasis USB.

Selain dapat membeli chip tersebut, kita dapat juga membeli modul-modul DIP
menggunakan chip FTDI, antara lain DLP-2232M, yaitu modul
menggunakan FT2232C3rd generation Dual USB UART/FIFO

Gambar DLP-2232M
Versi lainnya seperti DLP-USB245M ialah modul ekonomis menggunakan chip
FT245BM sebagai USB FIFO. Modul ini memiliki chip pendukung antara lain 93C46
EEPROM untuk kustomisasi OEM. Beberapa chip dan model lainnya dapat anda miliki
dari produk FTDI.

Gambar DLP-USB245M

Demikianlah penjabaran dari sistem bus dan penerapannya. Semoga Anda dapat
mengembangkan berbagai aplikasi yang berhubungan dengan Bus Komputer.

LATIHAN :

1. Buat rangkaian pengendali relay dari port paralel dan PPI 8255 menggunakan
transistor 2N3904 dan 2N3053. Input berlogika tinggi dari keluaran port paralel
akan mengaktifkan transistor 2N3904 dan arus diperkuat oleh 2N3053.
Rangkaiannya sebagai berikut:

Gambar Rangkaian driver relay

Anda mungkin juga menyukai