Delphi 7
By Taufik Adi Sanjaya (085743320570)
www.taufikadisanjaya.blogspot.com
Persembahan
Kata Pengantar
Penulis
PERSIAPAN AWAL
Software
Borland Delphi 7
Bascom AVR (Include CD Bundle)
Extreem Burner (Include CD Bundle)
Komponen SmallPort, komponen Comport (Include CD
Bundle)
Hardware
Personal Computer dengan System Operasi Windows , Microsoft
Windows 98, Microsoft Widows 2000 dan Windows XP(disarankan
XP SP 1,2,3) + minimal Procesor Intel Pentium 3, harus ada Port
Paralel /LPT/DB25 dan Port Serial/Com/DB 9
Rangkaian driver relay untuk control peralatan listrik 220 volt
( dapat di beli di www.taufikadisanjaya.blogspot.com )
Sistem Minimum Mikrokontroller AT Mega 16 atau AT Mega
8535 + RS 232 Converter ( dapat di beli di
www.taufikadisanjaya.blogspot.com )
Rangkaian sensor suhu ( dapat di beli di
www.taufikadisanjaya.blogspot.com )
Downloader (disarankan USB Downloader) ( dapat di beli di
www.taufikadisanjaya.blogspot.com )
BAGIAN I
PENGENALAN DELHI 7.0
IDE Delphi 7
Component Palette
Form Designer
CodeEditor
Object Inspector
code harus dijalankan, semisal event Form Create berarti source code
dijalankan ketika form dibuat.
Object TreeView
Komponen Delphi
File-file Delphi
BAGIAN II
PEMROGRAMAN PORT PARALEL
DENGAN DELPHI7.0
Port Paralel
Penggunaan utama Port paralel / LPT adalah untuk
menghubungkan printer ke komputer dan dirancang khusus untuk
tujuan ini. Sehingga sering juga disebut port printer . Konektor port
paralel pada PC adalah DB25.
Port Paralel / Port LPT meskipun sudah banyak ditinggalkan
penggunaanya, masih dipergunakan oleh sebagian kalangan yang
ingin mempelajari transmisi data secara parallel. Kalangan akademis
(pelajar dan mahasiswa) masih mempelajari komunikasi data parallel
sebagai saranaemanambah ilmu pengetahuan.
Standar IEEE 1284 (1994) mendefinisikan lima mode transfer
data untuk paralel port, yakni:
1) Compatibility Mode
2) Nibble Mode
3) Byte Mode
4) EPP
5) ECP
Reset
Dengan saluran ini printer kembali ke keadaan awal
Input Select
Pemilihan printer sebagai piranti DTE (Data Terminal
Equipment) berlangsung pada saluran sinyal ini.
Label1 Caption D0
Label2 Caption D1
Label3 Caption D2
Label4 Caption D3
Label5 Caption D4
Label6 Caption D5
Label7 Caption D6
Label8 Caption D7
value:=1;
edit2.Text:=inttostr(value);
button2.Caption:='Low';
end;
Button3 OnClick value:=strtoint(edit3.Text);
if value = 1 then
begin
value:=0;
button3.Caption:='High';
edit3.Text:=inttostr(value);
end
else
if value = 0 then
begin
value:=1;
edit3.Text:=inttostr(value);
button3.Caption:='Low';
end;
Button4 OnClick value:=strtoint(edit4.Text);
if value = 1 then
begin
value:=0;
button4.Caption:='High';
edit4.Text:=inttostr(value);
end
else
if value = 0 then
begin
value:=1;
edit4.Text:=inttostr(value);
button4.Caption:='Low';
end;
Button5 OnClick value:=strtoint(edit5.Text);
if value = 1 then
begin
value:=0;
button5.Caption:='High';
edit5.Text:=inttostr(value);
end
else
if value = 0 then
begin
value:=1;
edit5.Text:=inttostr(value);
button5.Caption:='Low';
end;
Button6 OnClick value:=strtoint(edit6.Text);
if value = 1 then
begin
value:=0;
button6.Caption:='High';
edit6.Text:=inttostr(value);
end
else
if value = 0 then
begin
value:=1;
edit6.Text:=inttostr(value);
button6.Caption:='Low';
end;
Button7 OnClick value:=strtoint(edit7.Text);
if value = 1 then
begin
value:=0;
button7.Caption:='High';
edit7.Text:=inttostr(value);
end
else
if value = 0 then
begin
value:=1;
edit7.Text:=inttostr(value);
button7.Caption:='Low';
end;
Button8 OnClick value:=strtoint(edit8.Text);
if value = 1 then
begin
value:=0;
button8.Caption:='High';
edit8.Text:=inttostr(value);
end
else
if value = 0 then
begin
value:=1;
edit8.Text:=inttostr(value);
button8.Caption:='Low';
end;
Button9 OnClick var
bit1,bit2,bit3,bit4,bit5,bit6,bit7,bit8,d
ec1,dec2,dec3,dec4,dec5,dec6,dec7,d
ec8,dec_tot:integer;
begin
bit1:= strtoint(Edit1.text);
if bit1=0 then dec1:=0 else
dec1:=1;
bit2:= strtoint(Edit2.text);
if bit2=0 then dec2:=0 else dec2:=2;
bit3:= strtoint(Edit3.text);
if bit3=0 then dec3:=0 else
dec3:=4;
bit4:= strtoint(Edit4.text);
if bit4=0 then dec4:=0 else
dec4:=8;
bit5:= strtoint(Edit5.text);
if bit5=0 then dec5:=0 else
dec5:=16;
bit6:= strtoint(Edit6.text);
if bit6=0 then dec6:=0 else
dec6:=32;
bit7:= strtoint(Edit7.text);
if bit7=0 then dec7:=0 else
dec7:=64;
bit8:= strtoint(Edit8.text);
if bit8=0 then dec8:=0 else
dec8:=128;
dec_tot:=dec1+dec2+dec3+dec4+dec
5+dec6+dec7+dec8;
edit10.Text:=inttostr(dec_tot);
:='D'+hexa;
if (str2 = '1110')then hexa
:='E'+hexa;
if (str2 = '1111')then hexa
:='F'+hexa;
Edit9.text :=hexa;
end;
Form1: TForm1;
Hasinya adalah sebagai berikut:
NB :
Set Bit dapat dilakukan dengan mengoperasikan logika OR kepada
data masuk dengan logika bernilai 1
Sebagai contoh
Data = 11111110 diperasikan dengan logika OR terhadap data
11111110 , maka
Menjadi 11111110 OR 11111111 hasilnya 1111 1111
Haslinya terjadi Set Bit terhadap data terakhir.
Clear Bit dapat dilakukan dengan mengoperasikan logika AND
kepada data masuk dengan logika bernilai 0
Sebagai contoh
Data = 11111111 diperasikan dengan logika AND , terhadap data
1111 1110 maka
Menjadi 11111111 or 11111110 hasilnya 11111110
EdLED7.Text:='OFF';
8 BtnMatiLED8 data :=SmPort1.ReadByte($378);
baru := data AND 127;
SmPort1.WriteByte($378,baru);
ShpLED8.Brush.Color := clBlack;
EdLED8.Text:='OFF';
9 BtnNyalaLED1 data := SmPort1.ReadByte($378);
baru := data or 1;
SmPort1.WriteByte($378,baru);
ShpLED1.Brush.Color := clRED;
edLED1.Text:='ON';
10 BtnNyalaLED2 data := SmPort1.ReadByte($378);
baru := data or 2;
SmPort1.WriteByte($378,baru);
ShpLED2.Brush.Color := clRED;
edLED2.Text:='ON';
11 BtnNyalaLED3 data := SmPort1.ReadByte($378);
baru := data or 4;
SmPort1.WriteByte($378,baru);
ShpLED3.Brush.Color := clRED;
edLED3.Text:='ON';
12 BtnNyalaLED4 data := SmPort1.ReadByte($378);
baru := data or 8;
SmPort1.WriteByte($378,baru);
ShpLED4.Brush.Color := clRED;
edLED4.Text:='ON';
13 BtnNyalaLED5 data := SmPort1.ReadByte($378);
baru := data or 16;
SmPort1.WriteByte($378,baru);
ShpLED5.Brush.Color := clRED;
edLED5.Text:='ON'
14 BtnNyalaLED6 data := SmPort1.ReadByte($378);
baru := data or 32;
SmPort1.WriteByte($378,baru);
ShpLED6.Brush.Color := clRED;
edLED6.Text:='ON';
15 BtnNyalaLED7 data := SmPort1.ReadByte($378);
baru := data or 64;
SmPort1.WriteByte($378,baru);
ShpLED7.Brush.Color := clRED;
edLED7.Text:='ON';
16 BtnNyalaLED8 data := SmPort1.ReadByte($378);
baru := data or 128;
SmPort1.WriteByte($378,baru);
ShpLED8.Brush.Color := clRED;
edLED8.Text:='ON';
17 BtnOpenPort SmPort1.Opened:=true;
18 BtnCloseProgram Close;
Green3.Brush.Color:=clBlack;
End;
if secon>5 then
begin
Red1.Brush.Color:=clRed;
Red2.Brush.Color:=clBlack;
Red3.Brush.Color:=clRed;
Yellow1.Brush.Color:=clBlack;
Yellow2.Brush.Color:=clYellow;
Yellow3.Brush.Color:=clYellow;
Green1.Brush.Color:=clBlack;
Green2.Brush.Color:=clBlack;
Green3.Brush.Color:=clBlack;
end;
Green2.Brush.Color:=clBlack;
Green3.Brush.Color:=clLime;
end;
Green1.Brush.Color:=clLime;
Green2.Brush.Color:=clBlack;
Green3.Brush.Color:=clBlack;
end;
if secon>19 then
begin
Red1.Brush.Color:=clBlack;
Red2.Brush.Color:=clRed;
Red3.Brush.Color:=clRed;
Yellow1.Brush.Color:=clYellow;
Yellow2.Brush.Color:=clYellow;
Yellow3.Brush.Color:=clBlack;
Green1.Brush.Color:=clBlack;
Green2.Brush.Color:=clBlack;
Green3.Brush.Color:=clBlack;
end;
if secon = 21 then
begin
secon :=0;
end;
Tabel. Konversi data yang akan dikirim ke port data pada Port Paralel
berdasarkan keadaan LED
Data
PIN PIN PI PIN PIN PIN PIN decima
PIN
N D3 D4 N D6 D7 D8 D9 l
D2
(R2 (R3 D5 (Y2 (Y3 (G1 (G2 dikirim
o (R1
(Y1 ke
) ) ) ) ) ) )
alamat
378 H
1 1 0 1 0 0 0 0 1 133
2 1 0 1 0 1 1 0 0 53
3 1 1 0 0 0 0 0 0 3
4 1 1 0 1 0 1 0 0 43
5 0 1 1 0 0 0 1 0 70
6 0 1 1 1 1 0 0 0 30
Keterangan : bit pertama adalah data pin D2 ( Least Significant Bit /
LSB), sedangkan bit ke-8 adalah data pin D9 (Most Significant Bit /
MSB), sehingga untuk mengubah biner ke decimal harus dibalik
urutannya. Semisal pada baris pertama keadaan LED nilainya : 1010
0001 menjadi 1000 0101 = 133
Tabel. Konversi data yang akan dikirim ke port control pada Port
Paralel berdasarkan keadaan LED
begin
Smallport1.WriteByte($378,133);
Smallport1.WriteByte($37A,0);
Red1.Brush.Color:=clRed;
Red2.Brush.Color:=clBlack;
Red3.Brush.Color:=clRed;
Yellow1.Brush.Color:=clBlack;
Yellow2.Brush.Color:=clYellow;
Yellow3.Brush.Color:=clYellow;
Green1.Brush.Color:=clBlack;
Green2.Brush.Color:=clBlack;
Green3.Brush.Color:=clBlack;
end;
lalukan hal yang sama untuk setiap source code yang ada!
Catatan :
Untuk ujicoba , Jangan langsung menghubungkan relay
driver ke tegangan 220 volt , namun biarkan relay driver
belum terhubung ke tegangan 220 volt, setelah anda
memahami prinsip kerja rangkaian relay driver , baru
anda dapat mengkoneksikannya ke tegangan 220 volt.
BAGIAN III
PEMROGRAMAN PORT SERIAL
DENGAN DELPHI7.0
Komunikasi serial
Jika pada port parallel data sekian bit dikirim secara bersama-
sama dalam 1 detak, pada port serial data dikirimkan satu per satu bit .
Kekurangan pengiriman data secara serial adalah lebih
kompleks/sulit dibandingkan dengan antarmuka melalui port parallel,
karena data dikirim tiap bit secara berurutan maka pengiriman data
berlangsung lebih lambat, namun hal ini dapat diatasi oleh tingginya
Baud rate pada pengiriman data.
Sedangakan kelebihannya adalah
1. Kabel untuk komunikasi serial bisa lebih panjang dibandingkan
dengan paralel; data-data dalam komunikasi serial dikirim-kan untuk
sebagai tegangan -3 s/d -25 volt dan untuk logika 0
logika 1 sebagai
tegangan +3 s/d +25 volt, dengan demikian tegangan dalam
komunikasi serial memiliki ayunan tegangan maksimum 50 volt,
sedangkan pada komunikasi paralel hanya 5 volt. Hal ini
menyebabkan gangguan pada kabel-kabel panjang lebih mudah diatasi
dibandingkan pada paralel;
2. Jumlah kabel serial lebih sedikit; Anda bisa menghubungkan dua
perangkat komputer yang berjauhan dengan hanya 3 kabel untuk
konfigurasi null modem, yaitu TxD (saluran kirim), RxD(saluran
terima) dan Ground, bayangkan jika digunakan teknik paralel akan
9. Arahkan ke C:\Program
Files\Borland\Delphi7\Lib\COMPORT kemudian buka file
CPortLib7.dpk
turunkan), maka Vout juga ikut berubah. Memang secara logika hal
ini sepertinya benar, tapi untuk instrumentasi hal ini tidaklah
diperkenankan.
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Suhuinadc1 As Word , Suhuinadc2 As Word , Suhuinadc3 As
Word , Suhuinadc4 As Word
Dim Suhu1 As Word , Suhu2 As Word , Suhu3 As Word , Suhu4 As
Word
Start Adc
Do
Suhuinadc1 = Getadc(0)
Suhu1 = Suhuinadc1 * 0.5
Suhuinadc2 = Getadc(1)
Suhu2 = Suhuinadc2 * 0.5
Suhuinadc3 = Getadc(2)
Suhu2 = Suhuinadc3 * 0.5
Suhuinadc4 = Getadc(3)
Suhu2 = Suhuinadc3 * 0.5
Print Suhu1 ; "A" ; Suhu2 ; "B" ; Suhu3 ; "C" ; Suhu4 ; "D"
Waitms 500
Loop
Penjelasan untuk masing-masing baris program di atas adalah
sebagai berikut:
Baris program
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600
Baris Program
Print Suhu1 ; "A" ; Suhu2 ; "B" ; Suhu3 ; "C" ; Suhu4 ; "D"
Merupakan baris program yang menunjukkan perintah untuk
menggabung mengirim data-data yang ada secara serial , namun
sebelum dikirim Suhu1 digabung dengan karakter A, Suhu2 digabung
dengan karakter B, Suhu3 digabung dengan karakter C, Suhu4
digabung dengan karakter D, sehingga jika data Suhu1, Suhu2, Suhu3,
dan Suhu4 masing-masing bernilai 40 data yang akan dikirim melalui
port serial adalah 40A40B40C40D.