18
Computer Interface Programming Eka Maulana, ST. MT. M.Eng. Electrical Engineering Department Brawijaya University

Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Embed Size (px)

Citation preview

Page 1: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Computer Interface Programming

Eka Maulana, ST. MT. M.Eng.

Electrical Engineering Department

Brawijaya University

Page 2: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Contents

Hardware Requirement

Communication Methods

Software Design

Register & Addressing

Virtual Communication

Programming

Page 3: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

System Requirement

Speed / data transfer rate

Portabilitas

Cost

accurate

Harmless

Page 4: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Diversity of I/O Divices

Page 5: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Communication Methods

Parallel

+ easy programming

+ simple setup (minimum hardware)

Serial

+ opt. distance

+ minimum cost

USB

+ multiple devices

+ high speed data transfer

Page 6: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Port Register & Addressing

Register Control

- Write

- Port controller

Register Status

- Read

- Communication Status

Register Data

- Write/ Read

- Data Receive/ Transmit buffering

Page 7: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Line Control Register (Serial) #1

Page 8: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

LCR (Serial) #2

7 6 5 4 3 2 1 0

Page 9: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Line Control Register (add+3)

Page 10: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Port Addressing

Serial

COM1 3F8

COM2 2F8

COM3 3E8

COM4 2E8

Parallel

LPT1 378

LPT2 278

Page 11: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Addressing Register Serial

Addr + 0 (Data Register)

Addr + 1 (Register Interupt)

Addr +2 (Interupt Identify Register/ Status)

Addr +3 (Control Register)

Addr + 4 (Modem Control Register)

Addr +5 (Status Register)

Addr +6 (Modem Status Register)

Parallel

Data, Status, Control (respectively)

Page 12: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Software Design

HARDWARE

OPERATING SYSTEM

DRIVER

Kernel System

Application

Page 13: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Virtual Communication

HARDWARE

OPERATING SYSTEM

DRIVER

VIRTUAL PORT Application

Redirector Process,

Addressed by level-Kernel Driver

A B

Page 14: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Commands> C/C++

Outportb(addr, data);

Inportb(addr);

> Delphi (Inpout32.dll)

out32(addr, data);

inp32(addr);

> VB

MSComm2.output=data

Data=MSComm1.input

Page 15: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Programming

Serial (Simple Command)

Dim sInput as String

While (True)

DoEvents

sInput = MSComm1.Input

If (Len(sInput) > 0) Then

MSComm2.Output = sInput

End If

Wend

Page 16: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

Example C (#1)

#include <stdio.h>

#include <dos.h>

unsigned char i, In_data, IMR, MCR, IIR;

int addr;

void main(void)

{

addr=0x2f8;

/* set baud rate */

outportb(addr+3,inportb(addr+3)||0x80);

outportb(addr,0x0c);

outportb(addr+1,0x00);

Page 17: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

/* set communication parameter */ outportb(addr+3,0x1b);

/* set interrupt enable register */ outportb(addr+1,0x01);

/* set out1, out2, and internal loopback */ MCR=0x1b; outportb(addr+4,MCR); delay(100);

for (i='a';i<='d';i++) { In_data='@'; outportb(addr,i); delay(1000);

C (#2)

Page 18: Computer Interface Programming - Universitas Brawijaya · Computer Interface Programming Eka Maulana, ... Serial Addr + 0 (Data Register) ... > Delphi (Inpout32.dll) out32(addr, data);

C (#3)

/* get Interrupt Identification register */

IIR=inportb(addr+2)&0x07;

In_data=inportb(addr);

printf("received %c %d\n",In_data,IIR);

}

exit(0);

}