Post on 24-Jan-2023
Interfacing Port Paralel Komputer, Serial dan PPI
8255
Pengenalan Port Paralel
Port paralel ialah port data di komputer untuk mentransmisi 8 bitdata dalam sekali detak. Standar port paralel yang baru ialah IEEE1284 dimana dikeluarkan tahun 1994. Standar ini mendefinisikan 5mode 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 driverdan peralatan yang baru yang kompatibel dengan peralatan lainnyaserta standar paralel port sebelumnya (SPP) yangn diluncurkan tahun1981. Mode Compatibilitas, nibble dan byte digunakan sebagaistandar perangkat keras yang tersedia di port paralel orisinaldimana EPP dan ECP membutuhkan tambahan hardware dimana dapatberjalan dengan kecepatan yang lebih tinggi. Mode kompatibilitasatau (“Mode Centronics” ) hanya dapat mengirimkan data pada arahmaju pada kecepatan 50 kbytes per detik hingga 150 kbytes per detik.Untuk menerima data, anda harus mengubah mode menjadi mode nibbleatau byte. Mode nibble dapat menerima 4 bit (nibble) pada arah yangmundur, misalnya dari alat ke computer. Mode byte menggunakan fiturbi-directional parallel untuk menerima 1 byte (8 bit) data pada arahmundur. IRQ (Interrupt Request ) pada port paralel biasanya padaIRQ5 atau IRQ7.
Port paralel Extend dan Enhanced menggunakan hardware tambahan untukmembangkitkan dan mengatur handshaking. Untuk mengeluarkan 1 byte keprinter menggunakan mode kompatibilitas, software harus :
1. menulis byte ke data port
2. cek untuk melihat apakah printer sibuk, jika sibuk, iatidak akan menerima data, sehingga data yang telah ditulisakan hilang.
3. buat strobe (pin 1) rendah. Ini memberitahukan printerbahwa data yang benar telah berada di line data
4. buat strobe tinggi lagi setelah menunggu sekitar 5mikrodetik setelah membuat strobe low.
Hal ini membatasi kecepatan data. Sedangkan EPP dan ECP mengizinkanhardware 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 jugamempunyai kelebihan menggunakan saluran DMA dan buffer FIFO, jadidata dapat digeser tanpa menggunakan instruksi I/O.
Protokol EPP mempunyai 4 macam siklus transfer dta yangberbeda 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 danperipheral. Siklus alamat digunakan untuk mengirimkan alamat,saluran (channel) atau informasi perintah dan control.
Berikut ialah tabel nama pin dari konekter DB25 dan Centronicsdengan jumlah konektor 34. DB25 ialah konektor yang umum digunakandi computer sebagai port paralel , sedangkan konektor Centronicsumum ditemukan di printer. IEEE 1284 ialah standar yang menentukan3 konektor berbeda yang dapat digunakan dengan port paralel,yaitu1284 tipe A ialah konektor DB25 yang dapat ditemukan di hampirsemua komputer, 1284 tipe B ialah konektor Centronics 36 pin yangumum ditemukan di printer, IEEE 1284 type C ialah konektor 36 pinseperti Centronics, tetapi ukurannya lebih kecil dan lebihmemuaskan.
Tabel Nama pin dari konektor parallel port DB 25 dan Centronics
PinDB25
PinCentronic
s
SPP Signal Arah In/out
Register
Hardwaredi invert
1 1 nStrobe In/Out Control Ya2 2 Data 0 Out Data3 3 Data 1 Out Data4 4 Data 2 Out Data5 5 Data 3 Out Data6 6 Data 4 Out Data7 7 Data 5 Out Data8 8 Data 6 Out Data9 9 Data 7 Out Data10 10 nAck In Status11 11 Busy In Status Ya12 12 Paper-
Out /Paper-End
In Status
13 13 Select In Status14 14 nAuto-
LinefeedIn/Out Control Ya
15 32 nError /nFault
In Status
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 gunakanfungsi 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 matisleep(1); //tunda 1 detikoutport(0x378,1); //lampu led hidupsleep(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 harusmengimport file inpout32.dll ke direktori c:\windows, c:\windows\system dan default direktori program anda untuk memastikan file inidapat ditemukan , file .dll ini dapat Anda temukan diwidodo.com/downloads/downloads.html.
Berikut contoh kodenya :
Private Declare Function Inp Lib "inpout32.dll" _Alias "Inp32" (ByVal PortAddress As Integer) As IntegerPrivate 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 = 888Out Port1, 1End Sub
Private Sub Command2_Click()Port1 = 888Out Port1, 0End Sub
Gambar berikut contoh penggunakan port paralel untuk mengendalikan 5buah 7 segment menggunakan IC 74LS244 dan 75492. Perlu diketahuibahwa port control di port paralel menggunakan jenis open kolektor,dimana jika diukur dnegan voltmeter, maka output port control akanselalu bernilai tinggi (5V). Yang dibutuhkan di sini ialahkecerdikan anda di dalam membuat program , jika dilihat dari gambar,7 segment membutuhkan 7 input yang berasal dari 74LS244. Sedangkanuntuk memilih 7 segment mana yang aktif Anda cukup memberikan pulsake pin IC 75492 yang sesuai.
Alamat port paralel umumnya 378H, Jika anda menggunakanbahasa Pascal untuk mengeluarkan data ke port paralel berikut contohkodenya :
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 alamatport anda definisikan sebagai berikut
#define PORT 0x378
Centronics
Centronics ialah standar transfer data dari komputer keprinter .Berikut diagram dari protokol ‘Centronics’ yang telahdisederhanakan.
Data dikirim ke pin 2 hingga 7. Komputer akan mengecek apakahprinter sibuk. Jika printer sibuk , maka line busy haruslahberlogika 0. Program lalu mengeluarka nsinyal strobe, menunggusekitar 1uS, dan menonaktifkan sinyal strobe . Data dibaca olehprinter/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. Yangharus dilakukan oleh program ialah menulsi data ke port I/O. Hardware akan mengecek apakah printer sibuk, akan mengeluarkansinyal 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 portParalel pada kartu video yang kemudian tidak digunakan lagi . LPT1ialah line printer dengan alamat 378h, lalu LPT2 dengan alamat 278Hmeskipun alamat ini dapat dirubah. Saat ini, alamat 378H dan 278Humumnya digunakan sebagai alamat port Paralel .
Tabel Alamat port paralel
Alamat Penjelasan3BCH - 3BFH Digunakan untuk paralel port di
kartu video, tidak mendukung alamat ECP
378H - 37FH Alamat untuk LPT 1278H - 27FH Alamat untuk LPT 2
Ketika komputer dihidupkan, BIOS (Basic Input/Output System) akanmenentukan jumlah port yang anda miliki dan mengeset nama LPT1, LPT2& LPT3 ke masing-masing port tersebut. BIOS pertama kali mencarialamat 3BCH. Jika parallel port ditemukan di sana,BIOS akan mengesetdengan 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, iamenyimpan alamat pada lokasi tertentu di memory, seperti pada Tabel.Alamat 0000:040E pada BIOS Data Area mungkin digunakan sebagaiExtended Bios Data Area di PS/2 dan BIOS yang lebih baru .
Tabel Alamat LPT di BIOS Data Area
Alamat Awal Fungsi0000:0408 LPT1's Base Address0000:040A LPT2's Base Address
0000:040C LPT3's Base Address0000:040E LPT4's Base Address (Note
1)
Tabel diatas menampilkan alamat dimana kita dapat mencarialamat port printer pada BIOS Data Area. Tiap alamat membutuhkan 2byte. Kode berikut ialah contoh program pencarian alamat portprinter 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 74LS374sehingga keluarannya dapat dimatikan. Pada saat port paralel inikita set seperti ini, maka data yang kita tulis ke register dataparalel port tidak akan sampai ke DB25 karena ‘374 dalam keadaantidak 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 melakukanini anda dapat menggunakan 5 input line dari port Status dan 4 input(open collector) dari port control. Dengan skema seperti gambar 6.3, 4bit register status difungsikan sebagai 4 bit MSB pertama . Registercontrol menjadi 4 bit LSB terakhir. Pin Busy ialah MSB dari semuanyadan LSB 4 bit pertama ialah Select. Untuk mode nibble, akan diabca 8bit dengan menngunakan parallel port tanpa mengubahnya ke dalammodus balik, artinya tanpa memerlukan pengesetan bit ke 5 dariregister control . Mode ini diperkenalkan oleh Hewlett Packardsebelum IBM memperkenalkan port paralel yang bidireksional.
Gambar Rangkaian input 8 bit di port paralel
Berikut contoh program C untuk mengontrol 8 buah alat melaluipenekanan tombol keyboard :
/* Program untuk mengontrol peralatan menggunakan port paralel . Alat dikontrol denganmenekan 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 paralelketika user menekan tombol keyboard menggunakan fungsi case, danmenggunakan fungsi outportb untuk mengendalikan port . Fungsigotoxy untuk menempatkan string pada posisi x dan y yang telahditentukan, serta fungsi break untuk berhenti, berikut potongoankodenya :
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 padaport parallel, gunakan perintah debug sebagai berikut :
Gambar Menggunakan perintah debug untuk melihat alamat LPT1
Dari gambar diatas terlihat LPT1 diset dialamat 378H dan ada alamatlainnya 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 //alamat ofset control parallel
mov al,$36 //isi dengan 36 {0010 0100} aktifkan pin no.3 ADC 804
out dx,al
pop dx
end;
begin
asm
push dx
mov dx,$37A //alamat ofset control parallel
mov al,$37 //isi dengan 37 {0010 0101} strobe (enable ADC Output)
out dx,al
pop dx
end;
begin
asm
push dx
mov dx,$378 //alamat dasar parallel
in al,dx // baca input Parallel port
mov data,al
pop dx
end;
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 ;cetak pilihan karakter
MOV DX,0 ;pilih LPT1
MOV AL, 41H ;kode ASCII untuk ‘A’
INT 17H ; panggil BIOS
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 registerUART 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 sinyalkomunikasi serial . Umumnya sinyal serial diawali denganstart 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 sebuahclock internal di kedua sisi menjaga bagian data saatpewaktuan (timing).
Peralatan Komunikasi Serial
Hardware pada komunikasi serial port dibagimenjadi 2 (dua ) kelompok yaitu Data CommunicationEquipment (DCE) dan Data Terminal Equipment (DTE).Contoh dari DCE ialah modem, plotter, scanner dan lainlain sedangkan contoh dari DTE ialah terminal dikomputer. Spesifikasi elektronik dari serial portmerujuk 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, yaitukonektor 25 pin (DB25 dan 9 pin (DB9) yang berpasangan(jantan dan betina).Bentuk dari konektor DB-25 samapersis dengan port paralel.
Tabel Jenis Sinyal RS232 yang umum digunakan
Alamat Port dan IRQ
Alamat standar serial port adalah sebagaimanatampak dalam Tabel 12.2. Hal ini masih dengan catatanbahwa mungkin ada komputer yang memiliki alamat port danIRQ yang berbeda dengan alarnat di bawah ini, misalnyapada komputer PS/2 yang menggunakan Micro Channel Bus.
Tabel Alamat dan IRQ port serial
Nama Alamat IRQ
COM 1 3F8 4
COM 2 2F8 3
COM 3 3E8 4
COM 4 2E8 3
Konverter Logika RS-232
Jika peralatan yang kita gunakanmenggunakan logika TTL maka sinyal serial port haruskita konversikan dahulu ke pulsa TTL sebelum kitagunakan, dan sebaliknya sinyal dari peralatan kita harusdikonversikan ke logika RS-232 sebelum di-inputkan keserial port. Konverter yang paling mudah digunakanadalah MAX-232. Di dalam IC ini terdapat Charge Pumpyang akan membangkitkan +10 Volt dan -10 Volt darisumber +5 Volt tunggal. Dalam IC DIP (Dual In-line Package)16 pin (8 pin x 2 baris) ini terdapat 2 buah transmiterdan 2 receiver.
Pemrograman Port Serial Komputer
Port serial sering digunakan untuk interfacingkomputer dan mikrokontroler, karena kemampuan jarakpengiriman data dibandingkan port paralel. Berikutcontoh program assembly untuk komunikasi serial antara2 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, 1stop, 8 bit
data.’,0ah,0dh
db ‘key apa saja ditekan akan dikirim ke komputerlain ‘,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 serialantara 2 PC menggunakan C dengan lebih mudah . Berikutprogram komunikasi data serial menggunakan fungsiBIOSCOM.
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 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 bahasaVisual 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 portmoRS232.Open () ’Anda dapat menambahkan control dari jalur DTR/RTS setelah port dibuka
moRS232.Dtr = TruemoRS232.Rts = True
‘Mengirim data
moRS232.TxData = txtTx.TextmoRS232.Tx()
‘Menerima DatamoRS232.Rx(10) 'Ambil 10 byte dari buffer serial
Dim sRead as String=moRs232.RxData
Untuk informasi lebih lanjut mengenai kode diatas andadapat mengunjungihttp://www.codeworks.it/net/VBNetRs232.htm
Penerapan Port Serial Komputer
Berbagai aplikasi elektronika dapat berkomunikasidengan port serial komputer. Program berikut akanmenampilkan karakter ke LCD menggunakan port serial . ICMAX 232 ialah IC yang umum digunakan sebagai RS232Converter, meskipun dapat anda gantikan dengan rangkaiantransistor.
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 antara2 komputer menggunakan bahasa C, namunmengkombinasikan dengan bahasa assembly sebagaiberikut :
//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, ®s, ®s);}//mengembalikan keadaan portchar state_port(){union REGS regs;regs.h.ah = 0x03;regs.x.dx = COM2;int86( 0x14, ®s, ®s);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 keyboardvoid 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 serialvoid send_byte(unsigned char byte){union REGS regs;regs.h.ah = 0x01;regs.x.dx = COM2;regs.h.al = byte;int86( 0x14, ®s, ®s);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,®s,®s);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 24bit (3 port) yang dapat diprogram sesuai keinginan kita. PPI 8255merupakan chip yang paling banyak digunakan untuk interfacingkomputer yang dihubungkan ke port ISA komputer. Anda juga dapatmemesan card PPI 8255 ini melalui Innovative Electronics denganharga yang sangat terjangkau, karena umumnya hanya dibutuhkan 1 ICtambahan sebagai address decoder yaitu 74LS688 beserta jumper.
Gambar 14.1 ialah pin IC 8255, dimana perlu diingat bahwa pingnd 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 sebagaiinput atau output dengan mode bi-directional input/output.
PB0-PB7
Port B ini dapat deprogram sebagai input /output, tetapi tidak dapatdigunakan sebagai port bi-directional.
PC0-PC7
Port C ini dapat diprogram sebagaiinput/output. Bahkan dapat dipecahmenjadi 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. Jika8255 menggunakan desain peripheral I/O, IOR adan IOW dari system busdihubungkan 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. 3pin ini digunakan untuk mengakses port A, B atau C, atau controlregister sesuai Tabel
Tabel Pemilihan port 8255
CS* A1 A0 Yangdipilih
0 0 0 PortA
0 0 1 PortB
0 1 0 PortC
0 1 1 Control register
1 x X 8255tidak dipilih
Mode Pemilihan dari 8255
Pada saat port A, B dan C digunakan sebagai I/), perlu diset jugamode operasi dari port tersebut. Ada 4 mode operasi yang dimiliki8255 yaitu :
1. Mode 0, ini ialah mode yang paling sederhana, dimana semuaport dapat deprogram sebagai input/putput. Pada mode iniseluruh bit sebagai output atau input, tidak ada bit yangdapat dikontrol secara individual.
2. Mode 1, pada mode ini port A dan B dapat digunakan sebagaiinput atau output dengan kemampuan jabat tangan. Sinyal jabattangan disediakan oleh bit-bit port C
3. Mode 2, port A dapat digunakan sebagai port bi-directionalI/O dengan kemampuan jabat tangan dimana sinyalnyadisediakan oleh port C. Port B dapat digunakan sebagai modeI/O sederhana atau mode 1 jabat tangan.
4. Mode BSR ( bit set/reset ). Pada mode ini, hanya bitindividual 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 mencoba8255,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=1untuk INT a
OUT DX, AL ; menggunakan mode BSR
MOV SI, OFFSET DATA_SAYA ;S1= data address
LAGI: MOV AH, [SI] ; ambil sebuah karakter
CMP AH, ‘S’ ;apakah selesai?
JZ OVER ; jika ya, keluar
MOV DX, PC ;DX =302,alamat port C
BACK: 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
OVER: … ; 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. Untukmemprogram Bus ISA yang akan berfungsi mengendalikan Kartu PPI (PPICard) menggunakan bahasa C/C++,, kita menggunakan fungsi outportuntuk 8 bit data dan outportb untuk 16 bit data. Berikut tampilanBus ISA
Gambar Bus ISA komputer
Berikut contoh program C untuk mengeluarkan data 0-255 diport 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);