52937128 Interfacing

download 52937128 Interfacing

of 49

Transcript of 52937128 Interfacing

  • 7/27/2019 52937128 Interfacing

    1/49

    Interfacing Port Paralel Komputer, Serial dan PPI 8255

    Pengenalan Port Paralel

    Port paralel ialah port data di komputer untuk mentransmisi 8 bit datadalam 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 tahun1981. 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 dapatmenerima 4 bit (nibble) pada arah

    yang mundur, misalnya dari alat ke computer.

    Mode byte menggunakan fitur bi-directional parallel untuk

  • 7/27/2019 52937128 Interfacing

    2/49

  • 7/27/2019 52937128 Interfacing

    3/49

    3. Siklus tulis data (data write)

    4. siklus tulis alamat (address write)

    Siklus data digunakan untuk mentrasfer data antara host dan peripheral. Siklus alamat digunakan untuk mengirimkan alamat,

    saluran (channel) atau informasi perintah dan control.

    Berikut ialah tabel nama pin dari konekter DB25 dan Centronics

    dengan jumlah konektor 34. DB25 ialah konektor yang umum

    digunakan di computer sebagai port paralel , sedangkan konektor

    Centronics umum ditemukan di printer. IEEE 1284 ialah standar yang

    menentukan 3 konektor berbeda yang dapat digunakan dengan port

    paralel, yaitu1284 tipe A ialah konektor DB25 yang dapat ditemukan

    di hampir semua komputer, 1284 tipe B ialah konektor Centronics 36

    pin yang umum ditemukan di printer, IEEE 1284 type C ialah

    konektor 36 pin seperti Centronics, tetapi ukurannya lebih kecil dan

    lebih memuaskan.

    Tabel Nama pin dari konektor parallel port DB 25 dan Centronics

    Pin

    DB25

    Pin

    Centronics

    SPP Signal Arah In/out Register Hardware

    di invert1 1 nStrobe In/Out Control Ya2 2 Data 0 Out Data

    3 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 Data

  • 7/27/2019 52937128 Interfacing

    4/49

    9 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-

    Linefeed

    In/Out Control Ya

    15 32 nError /

    nFault

    In Status

    16 31 nInitialize In/Out Control17 36 nSelect-

    Printer /

    nSelect-In

    In/Out Control Ya

    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 menggunakan bahasa C untuk pengendali lampu led di port paralel

    #include

    #include

    #include

    int main()

    {

    outport(0x378,0);//lampu led mati

    sleep(1); //tunda 1 detik

  • 7/27/2019 52937128 Interfacing

    5/49

    outport(0x378,1); //lampu led hidup

    sleep(1);

    return 0;

    }

    //Program menggunakan bahasa Visual C++ untuk pengendali lampu led di port

    paralel

    #include

    #include

    #include

    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.

  • 7/27/2019 52937128 Interfacing

    6/49

    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

  • 7/27/2019 52937128 Interfacing

    7/49

  • 7/27/2019 52937128 Interfacing

    8/49

    Centronics

    Centronics ialah standar transfer data dari komputer ke

    printer .Berikut diagram dari protokol Centronics yang telah

    disederhanakan.

    Data dikirim ke pin 2 hingga 7. Komputer akan mengecek

    apakah printer sibuk. Jika printer sibuk , maka line busy haruslah

    berlogika 0. Program lalu mengeluarka nsinyal strobe, menunggu

    sekitar 1uS, dan menonaktifkan sinyal strobe . Data dibaca oleh

    printer/peripheral pada saat ujung strobe. Pada model

    port Extended , Anda akan memperoleh Mode Centronics yang

    cepat Fast Centronics Mode , dimana mengizinkan hardware

  • 7/27/2019 52937128 Interfacing

    9/49

    melakukan seluruh handshaking. Yang harus dilakukan oleh program

    ialah menulsi data ke port I/O. Hardware akan mengecek apakah

    printer sibuk, akan mengeluarkan sinyal strobe. Mode ini umumnya

    tidak mengecek sinyal nAck .

    Alamat Port

    Port Paralel mempunyai 3 alamat seperti pada tabel 6.2 . 3BCH

    ialah alamat dasar yang diperkenalkan sejak munculnya port

    Paralel pada kartu video yang kemudian tidak digunakan lagi . LPT1

    ialah line printer dengan alamat 378h, lalu LPT2 dengan alamat 278Hmeskipun 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 dikartu video, tidak mendukung

    alamat ECP378H - 37FH Alamat untuk LPT 1278H - 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.

  • 7/27/2019 52937128 Interfacing

    10/49

    Berikut contoh program menerima data dari

    port paralel , dimana base alamatnya ialah 379H.:

    #include

    #include

    #include

    /*****************************************/

    /*membaca input data dari port paralel */

    /*****************************************/

    int Read_Input()

    {int Byte;

    Byte=inportb(0x379);

    return Byte;}

    void main (void)

    {int PP_Input;

    clrscr();PP_Input = Read_Input;

    printf("%d",var);

    getch();}

    Ketika BIOS mengeset alamat ke peralatan printer

    Anda, ia menyimpan alamat pada lokasi tertentu di memory, seperti

    pada Tabel . Alamat 0000:040E pada BIOS Data Area mungkin

    digunakan sebagai Extended Bios Data Area di PS/2 dan BIOS yang

    lebih baru .

    Tabel Alamat LPT di BIOS Data Area

  • 7/27/2019 52937128 Interfacing

    11/49

    Alamat Awal Fungsi0000:0408 LPT1's Base Address0000:040A LPT2's Base Address0000:040C LPT3's Base Address0000:040E LPT4's Base Address (Note 1)

    Tabel diatas menampilkan alamat dimana kita dapat mencari

    alamat port printer pada BIOS Data Area. Tiap alamat membutuhkan

    2 byte. Kode berikut ialah contoh program pencarian alamat port

    printer di komputer Anda.

    #include

    #include

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

  • 7/27/2019 52937128 Interfacing

    12/49

    }

    Port Bi-direksional

    Diagram di bawah ini menampilkan register data

    port paralel menggunakan keluarga IC 74LS, meskipun sekarang

    sudah ada IC ASIC (Application Specific Integrated Circuits).

    Gambar Rangkaian Port Bi-direksional

    Port non bi-direksional dibuat menggunakan 74LS374. port bi-

    direksional menggunakan bit control 5 yang dihubungkan ke 74LS374

    sehingga keluarannya dapat dimatikan. Pada saat port paralel ini kita

    set seperti ini, maka data yang kita tulis ke register data paralel port

    tidak akan sampai ke DB25 karena 374 dalam keadaan tidak menghantar.

    Menggunakan Port Paralel untuk 8 bit input

  • 7/27/2019 52937128 Interfacing

    13/49

    Jika paralel port anda tidak mendukung mode bi-direksional,

    Anda dapat memasukkan maksimum 9 bit pada 1 waktu. Untuk

    melakukan ini anda dapat menggunakan 5 input line dari port Status

    dan 4 input (open collector) dari port control. Dengan skema sepertigambar 6.3, 4 bit register status difungsikan sebagai 4 bit MSB

    pertama . Register control menjadi 4 bit LSB terakhir. Pin Busy ialah

    MSB dari semuanya dan LSB 4 bit pertama ialah Select. Untuk mode

    nibble, akan diabca 8 bit dengan menngunakan parallel port tanpa

    mengubahnya ke dalam modus balik, artinya tanpa memerlukan

    pengesetan bit ke 5 dari register control . Mode ini diperkenalkan oleh

    Hewlett Packard sebelum IBM memperkenalkan port paralel yang

    bidireksional.

    Gambar Rangkaian input 8 bit di port paralel

    Berikut contoh program C untuk mengontrol 8 buah alat melalui

    penekanan tombol keyboard :

  • 7/27/2019 52937128 Interfacing

    14/49

    /* Program untuk mengontrol peralatan menggunakan

    port paralel . Alat dikontrol dengan menekan tombol 1-8 di keyboard.

    */ #include

    #include

    #include

    #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);

  • 7/27/2019 52937128 Interfacing

    15/49

    printf("Nilai dalam format hex telah dikirim ke port:");

    key=getch();

    switch(key){

    case '1': //jika kita menekan 1 di keyboardgotoxy(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);

  • 7/27/2019 52937128 Interfacing

    16/49

    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);

  • 7/27/2019 52937128 Interfacing

    17/49

    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

  • 7/27/2019 52937128 Interfacing

    18/49

    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.

  • 7/27/2019 52937128 Interfacing

    19/49

    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

  • 7/27/2019 52937128 Interfacing

    20/49

  • 7/27/2019 52937128 Interfacing

    21/49

    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 dicomputer 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

  • 7/27/2019 52937128 Interfacing

    22/49

    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 dengankisaran 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).

  • 7/27/2019 52937128 Interfacing

    23/49

    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

  • 7/27/2019 52937128 Interfacing

    24/49

    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 Alamat IRQCOM 1 3F8 4

  • 7/27/2019 52937128 Interfacing

    25/49

    COM 2 2F8 3COM

    33E8 4

    COM 4 2E8 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

  • 7/27/2019 52937128 Interfacing

    26/49

    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 ;com2mov 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

  • 7/27/2019 52937128 Interfacing

    27/49

    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 keudakalinya

    ;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 ditampilkanInt 21h

    Jmp again ;terus memonitor keyboard

    Exit: mov ah, 4ch ;keluar ke DOS

    Int 21h

  • 7/27/2019 52937128 Interfacing

    28/49

    Main endp

    End

    Anda juga dapat memprogram komunikasi serial antara 2 PCmenggunakan 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 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

  • 7/27/2019 52937128 Interfacing

    29/49

    // 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

    #include

    //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 bioscomcprintf("Komunikasi serial menggunakan BIOSCOM, tekan [ESC] untuk

    keluar \n");

    while (!DONE)

    {

  • 7/27/2019 52937128 Interfacing

    30/49

    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

  • 7/27/2019 52937128 Interfacing

    31/49

    .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 gantikandengan rangkaian transistor.

    http://www.codeworks.it/net/VBNetRs232.htmhttp://www.codeworks.it/net/VBNetRs232.htm
  • 7/27/2019 52937128 Interfacing

    32/49

  • 7/27/2019 52937128 Interfacing

    33/49

    {

    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 */

    }

  • 7/27/2019 52937128 Interfacing

    34/49

    /* 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 :

  • 7/27/2019 52937128 Interfacing

    35/49

    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

    #include

    #include

    #include

    #include

  • 7/27/2019 52937128 Interfacing

    36/49

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

    }

  • 7/27/2019 52937128 Interfacing

    37/49

    }

    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()

  • 7/27/2019 52937128 Interfacing

    38/49

    {

    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);

    }

    }

  • 7/27/2019 52937128 Interfacing

    39/49

    //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() 8255ialah 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

  • 7/27/2019 52937128 Interfacing

    40/49

    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 1 Pin 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 bi-directional input/output.

    PB0-PB7

    Port B ini dapat deprogram sebagai input /output, tetapi tidak dapat

    digunakan sebagai port bi-directional.

    PC0-PC7

  • 7/27/2019 52937128 Interfacing

    41/49

    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. 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* A1 A0 Yang

    dipilih0 0 0 Port A0 0 1 Port B0 1 0 Port C0 1 1 Control

    register 1 x X 8255

    tidak

    dipilih

  • 7/27/2019 52937128 Interfacing

    42/49

    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. 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 modeI/O sederhana atau mode 1 jabat tangan.

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

  • 7/27/2019 52937128 Interfacing

    43/49

    PORTC EQU 52H

    CNTLREG EQU 53H

    MOV AL, 90HMOV 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 Printe

    r

  • 7/27/2019 52937128 Interfacing

    44/49

    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

  • 7/27/2019 52937128 Interfacing

    45/49

    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

  • 7/27/2019 52937128 Interfacing

    46/49

    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

  • 7/27/2019 52937128 Interfacing

    47/49

    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

    #include

    //mendefinisikan konstanta

    //symbol 0x menandakan address komputer

    #define PA 0x300 //port A di alamat 300H

  • 7/27/2019 52937128 Interfacing

    48/49

  • 7/27/2019 52937128 Interfacing

    49/49

    Untuk koneksi ke DAC, anda dapat menggunakan IC DAC 8

    bit misalnya MC1408 secara langsung .

    Gambar Rangkaian DAC 8 bit