TUGAS AKHIR
Diajukan untuk memenuhi salah satu syarat mencapai gelar Ahli Madya
Program Diploma III Ilmu Komputer
Ari wibowo
M3307004
HALAMAN PERSETUJUAN
SISTEM MONITORING KELEMBABAN DAN SUHU RUANG BERBASIS
MIKROKONTROLLER AT89S51 DENGAN ANTAR MUKA PORT
SERIAL
Disusun oleh :
Ari wibowo
M3307004
Pembimbing Utama
HALAMAN PENGESAHAN
Ari wibowo
M3307004
Dibimbing oleh :
1. Penguji 1
2. Penguji 2
3. Penguji 3
Dewan penguji
Darsono, S.Si, M.Si
(
NIP. 19700727 199702 1 001
Fendi Aji Purnomo, S.Si
(
NIDN. 0626098402
Hartatik, M.Stat
(
NIDN. 0703057802
)
)
)
Disahkan oleh :
a.n Dekan MIPA UNS
Pembantu Dekan I
ABSTRAK
Kata Kunci : AT89S51, Monitoring Suhu dan Kelembaban, Sensor SHT75, Port
Serial
ABSTRACT
PERSEMBAHAN
Kubersembahkan
Untuk keluargaku
Untuk kekasih hatiku
Untuk teman-temanku
Untuk semuanya saja
KATA PENGANTAR
Ilmu
Darsono,S.Si,M.Si
selaku
dosen
pembimbing
yang
telah
beliau-beliau maka laporan ini tidak akan mendapat hasil yang baik. Semoga
tugas akhir ini dapat menjadi manfaat bagi semua pihak.
Wassalamualaikum Wr.Wb.
Surakarta , Juni 2010
Penulis
7
DAFTAR ISI
DAFTAR GAMBAR
10
DAFTAR TABEL
11
BAB 1
PENDAHULUAN
ukur
mempunyai banyak
kelemahan, selain tidak dapat diaplikasikan dengan alat kontrol lainya, juga
12
memiliki respon yang sangat lambat sehingga tidak cocok untuk pelaksanaan
proses produksi.
Dengan melihat latar belakang diatas, maka dibuat sebuah alat ukur
kelembaban dan suhu digital. Alat ini dapat mengukur dan menampilkan hasil
pengukuran suhu sekaligus kelembaban.
13
1.5. Manfaat
Memberikan informasi kepada pembaca
Sensor SHT75
Mikrokontroller AT89S51
Port Serial
Visual basic
14
: Pendahuluan
Berisi tentang latar belakang masalah, perumusan masalah,
batasan masalah, tujuan, manfaat, metodologi penulisan dan
sistematika penulisan
BAB II
: Landasan Teori
Berisi tentang tinjauan pustaka. Teori-teori yang disajikan
hanyalah teori-teori yang mendukung tugas akhir.
BAB III
BAB IV
BAB V
: Penutup
Berisi tentang kesimpulan dan saran yang diperoleh dari
pembuatan tugas akhir.
15
BAB II
LANDASAN TEORI
udara (gr/m3 )
-8
2,74
-4
3,66
4,84
6, 33
8,21
12
10, 57
16
13, 50
20
17,12
24
21,54
28
26,93
32
33,45
36
41,82
16
Pada tabel 2.1 terlihat bahwa pada suhu udara 32oC, udara jenuh
mengandung maksimum 33,45 gr/m3, dan pada suhu 200C, udara jenuh
mengandung maksimum 17,12 gr/m3 . jadi pada suhu rendah, kandungan uap air
maksimum diudara lebih sedikit. Sedangkan pada suhu tinggi, kandungan uap air
maksimum diudara lebih banyak.
Kelembaban (humidity) ada dua macam yaitu kelembaban mutlak dan
kelembaban relatif atau nisbi. Kelembaban mutlak adalah bilangan menyatakan
massa uap air (dalam gram) yang terkandung dalam 1 m3 udara. Sebagai contoh,
jika 1 m3 udara mengandung 5 gram uap air, maka kelembaban mutlak udara
adalah 5 gr/m3. Kelembaban relatif adalah bilangan persen yang menunjukan
perbandingan antara massa uap air yang ada di udara dan massa uap air yang
dikandung udara jenuh pada tekanan dan suhu yang sama.
17
secara
serial.
(AT89S51,
18
Vcc
Memberikan tegangan supplay.
GND
Sebagai ground terhadap sumber.
Port 0
Port 0 dapat berfungsi sebagai I/O biasa, low order multiplex
address/data, atau menerima kode byte pada saat Flash Programming.
Port 0 merupakan port I/O 8 bit dua arah. Pada saat sebagai port keluaran
masing masing pinnya dapat menangani 8 input TTL. Saat 1 detik
dimasukkan ke port 0, maka port ini akan berfungsi sebagai input dengan
impedansi tinggi. Pada saat sebagai low order multiplex address/data port
ini akan mempunyai internal pull up dan pada saat Flash Programming
diperlukan external pull up terutama pada saat verifikasi program.
Port 1
Port 1 dapat berfungsi sebagai I/O biasa, low order multiplex
address/data, atau menerima kode byte pada saat pemrograman Flash dan
verifikasi. Saat logika 1 dituliskan pada pin port 1, maka akan ditarik naik
oleh internal pull up dan dapat berfungsi sebagai masukan. Pin 0 dan 1
pada port 1 dapat berfungsi sebagai timer/counter 2 masukan external
count (P1.0/T2) dan timer/counter 2 trigger (P1.1/T2EX).
Port 1
merupakan port I/O 8 bit dua arah dengan internal pull up. Pada saat
sebagai port keluaran masing masing masukannya dapat menangani 4
input TTL.
-
Port 2
Merupakan port I/O 8 bit dua arah dengan internal pull up. Pada saat
sebagai port keluaran masingmasing pinnya dapat menangani 4 input
TTL. Saat logika 1 dimasukkan pada pin dari port 2, maka akan di pull up
oleh internal pull up dan dapat berfungsi sebagai masukan. Port 2
mengeluarkan high-order address byte selama mengambil dari eksternal
19
Port 3
Merupakan port I/O 8 bit dua arah dengan internal pull up. Pada saat
sebagai port keluaran masing masing pinnya dapat menangani 4 input
TTL. Port 3 juga menerima kode byte saat pemrograman flash dan
verifikasi. Selain itu, port 3 juga dapat bekerja sebagai fungsi fungsi
khusus pada AT89C51, yaitu :
Tabel 2.2. Fungsi pin-pin Port 3
Pena Port
Fungsi
P3.0
P3.1
P3.2
P3.3
P3.4
T0 ( Timer 0 )
P3.5
T1 ( Timer 1 )
P3.6
P3.7
RST
Masukan Reset tinggi pada pin selama 2 siklus mesin ketika osilator
menjalankan reset peralatan.
ALE / PROG
Address Latch Enable mengeluarkan pulsa untuk byte rendah pada alamat
selama mengakses memori eksternal. Pin ini juga sebagai input pulsa
program ( PROG ) selama memprogram flash.
PSEN
20
PSEN (Program Store Enable ) adalah read strobe untuk memori program
eksternal. Ketika AT89S51 mengeksekusi kode dari memori program
eksternal. PSEN diaktifkan 2 X tiap siklus mesin.
-
EA / Vpp
Eksternal Access Enable harus dihubungkan dengan ground agar peralatan
dapat mengambil kode dari memori program eksternal dimulai pada lokasi
0000H sampai alamat FFFFH, catatan jika lock bit 1 diprogram, EA akan
menjadi pengunci internal pada reset. EA harus dipasang ke VCC untuk
mengeksekusi program internal.
XTAL 1
Masukan untuk penguat osilator pembalik dan masukan untuk rangkaian
operasi detak internal.
XTAL 2
Keluaran dari penguat osilator pembalik.
(Nugroho, Budi , 2006)
secara Direct
addressing. Untuk MCS-51 yang mempunyai 256 Byte internal data memori
alamat 80H FFH hanya dapat diacces secara Indirect.
21
pada saat
22
Accumulator (Acc / A)
Register Acc / A adalah
23
25
(2.1)
(2.2)
2.4 Dioda
26
Sebuah
dioda
biasanya
dianggap
sebagai
alat yang
2.5 Kapasitor
Kondensator
menyimpan energi di
(Capasitor)
dalam medan
adalah
listrik,
suatu alat
yang dapat
Farad.
(1791-1867).
kemampuan
dibanding
alat
untuk menyimpan
komponen
suatu muatan
listrik
yang
tidak menggunakan bahasa Inggris masih mengacu pada perkataan bahasa Italia
"condensatore", seperti bahasa Perancis condensateur, Indonesia dan Jerman
Kondensator atau Spanyol Condensador.
27
komponen
elektronika
yang
terdiri dari
28
tiga
2.7 IC LM7805
2.8 LCD 16 X 2
Display
induksi
LCD
2x16
berfungsi
sebagai
penampil
nilai
kuat
pada alat ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut
sebagai LCD Character
sebagai berikut:
29
Fungsi dari masing masing pin pada LCD adalah pin pertama dan kedua
merupakan pin untuk tegangan suplay sebesar 5 volt, untuk pin ketiga harus
ditambahkan resistor variabel 4K7 atau 5K ke pin ini sebagai pengatur kontras
tampilan yang diinginkan.
Pin keempat berfungsi untuk memasukkan input command atau input data,
jika ingin memasukkan input command maka pin 4 diberikan logic low (0), dan
jika ingin memasukkan input data maka pin 4 diberikan logic high (1).
Fungsi pin kelima untuk read atau write, jika diinginkan untuk membaca
karakter data atau status informasi dari register (read) maka harus diberi masukan
high (1), begitu pula sebaliknya untuk menuliskan karakter data (write) maka
harus diberi masukan low (0). Pada pin ini dapat dihubungkan ke ground bila
tidak diinginkan pembacaan dari LCD dan hanya dapat digunakan untuk
mentransfer data ke LCD.
30
Dalam setiap proses transfer data serial, RS232 memerlukan sebuah Data
Terminal Equipment (DTE) dan Data Communication Equipment (DCE) pada
masing-masing terminal. Pengiriman data dilakukan secara bit per bit. Kecepatan
transfer data harus sama antara pengirim dan penerima, jika tidak sama akan
terjadi overflow. Kecepatan transmisi transfer data sering disebut dengan
baudrate. Panjang data bit yang sering digunakan diantaranya adalah 4,5,6,7, dan
8 bit.
Pada komunikasi data serial pada dasarnya yang dikirimkan adalah
tegangan dan kemudian dibaca dalam bit. Besar level teganganya adalah antara 25 volt sampai dengan +25volt. Untuk bit dengan logika 1 maka besar level
teganganya adalah antara
-3 volt sampai -25 volt, sedangkan untuk bit dengan logika 0 maka besar level
tegangannya antara +3 volt sampai +25 volt.
pemrograman
yang
digunakan
untuk
memprogram
IC
ADD A,7FH
pengalamatan langsung
ADD A@RO
ADD A,R7
pengalamatan register
32
ADD A,#35H
pengalamatan immediate
dialamati dan ruang SFR dapat mendukung hingga 128 bit yang dapat
dialamati lainnya. Semua jalur port juga merupakan bit yang dapat
dialamati dan masing-masing dapat diperlakukan sebagai port bit
tunggal yang terpisah. Instruksi-instruksi yang mengakses bit-bit ini
tidak hanya di percabangan bersyarat saja, namun lengkap meliputi
instruksi-intruksi pemindahan data (mov), set, clear, komplemen, OR,
dan AND.
f. Instruksi lompatan bersyarat
Instruksi pengetesan bit akan dilewati jika alamat bit set (JC,JB,JBC)
atau jika alamat bit tidak diset (JNC dan JNB). Semua bit PSW adalah
pengalamatan langsung, jadi parity bit atau flag yang digunakan secara
umum dapat juga digunakan sebagai bit instruksi set.
g. Instruksi lompatan
Ada beberapa jenis variasi instruksi : SJMP, LJMP, dan AJMP. Instruksi
SJMP mempunyai ukuran 2 byte, instruksi LJMP mempunyai ukuran 3
byte dan instruksi AJMP mempunyai ukuran 2 byte.
Dalam melakukan pembuatan program pada mikrokontroler AT89S51, ada
beberapa jenis pengalamatan yang biasa digunakan, yaitu:
1. Mode Pengalamatan Langsung (Direct Addressing Mode)
Mode pengalamatan ini digunakan untuk menunjuk data yang berada di
suatu lokasi memori dengan cara menyebut lokasi (alamat) memori tempat
data tersebut berada, misalnya: MOV A, 50H. Instruksi ini menyatakan
bahwa data yang berada pada alamat 50H disalin ke akumulator A.
2. Mode Pengalamatan Segera (Immediate Addressing Mode)
Mode pengalamatan segera digunakan untuk pemindahan data konstan
atau menggunakan konstanta, yaitu data yang menyatu dengan instruksi.
Contoh dari instruksi ini adalah MOV A, #40H. Instruksi ini mempunyai
arti bahwa data sebesar 40H disalin ke akumulator A.
3. Mode Pengalamatan Tidak Langsung (Indirect Addressing Mode)
Mode pengalamatan ini digunakan untuk mengakses data yang berada
didalam memori namun lokasi memori tersebut tidak disebut secara
34
A (1 byte).
35
BAB III
DESAIN DAN PERANCANGAN
Sensor
SHT75
Keluaran
Mikrokontroller
AT89S51
Display
LCD
komputer
Pada blok pertama terdapat blok masukan. Dimana pada blok ini terdapat
sensor suhu sekaligus kelembaban yang menggunakan IC SHT75 sebagai
sensornya. Sensor ini dipilih karena memiliki banyak kelebihan, untuk
pengukuran suhu dan kelembaban hanya dibutuhkan satu sensor yang telah
terkalibrasi. Sedangkan mikrokontroller yang berfungsi sebagai otak dari sistem
pengukuran ini menggunakan AT89S51.
Pada blok yang terakhir terdapat blok keluaran. Pada blok ini terdapat
display LCD dan Komputer. LCD berfungsi sebagai display dari monitoring suhu
dan kelembaban. Sedangkan komputer berfungsi untuk menyimpan hasil
pembacaan suhu dan kelembaban dalam bentuk database. Selain meyimpan hasil
pengukuran komputer juga berfungsi untuk mengatur pengukuran dalam setiap
beberapa waktu sekali.
36
37
3.2.2 Sensor
Sensor yang digunakan adalah SHT75 buatan SENSIRION yang
menggunakan komunikasi 2-wire interface. Sensor ini memiliki dua fungsi, yaitu
sebagai sensor temperatur dan sensor kelembaban. Sensor ini memiliki tingkat
kepresisian yang baik sehingga layak digunakan dalam sistem pengukuran ini.
Pada sensor ini terdapat 4 buah pin yaitu VCC, GND, DATA, dan SCK.
38
3.3.5 LCD 16 x 2
Untuk menampilkan hasil pembacaan temperatur dan kelembaban dari
sensor digunakan LCD (Liquid Crystal Display) dengan ukuran 16x2. Koneksi
LCD ke port mikrokontroler dapat dilihat pada gambar di baha ini.
41
bit
p0.4
rw bit
p0.5
en bit
p0.6
lcd equ
p0
sckl bit
p1.0
dtl bit
p1.3
csuhu
equ
00000011b
chumi
equ
00000101b
crst
equ
00011110b
listing program diatas merupakan pendeklarasian pin pin dari LCD. Selain
pendeklarasian pin LCD program diatas juga mendeklarasikan pin dari sensor
SHT75. LCD ditempatkan pada port 0, rs dihubungkan dengan p0.4, rw
dihubungkan dengan p0.5 dan en dihubungkan dengan p0.4. kaki dari sensor yaitu
sck dihubungkan dengan port 1 sedangkan data dihubungkan dengan p1.3
cseg at 0h
jmp start
23h
jb
jnb
ri,$
mov
a,sbuf
cjne
call
ukur
( serial bufer)
43
call
hitung
call
kirim
clr
tr0
xser: reti
start: mov
tmod,#21h
mov
th1,#0fdh
;9600 bps
setb
tr1
mov
scon,#50h
;serial mode 1
setb
ea
;enable interupt
setb
et0
;timer0
setb
es
;serial
call
d11ms
call
rst11x
;reset sth11x
call
d11ms
call
initlcd
;initialaisasi LCD
call
line1
;baris 1
mov
dptr,#tb1
;temperatur
call
ctkrom
call
line2
;baris 2
mov
dptr,#tb2
;kelembaban
call
ctkrom
44
mov
dtime,#20
setb
tr0
jmp
listing program diatas merupakan inisiasi dari timer,serial dan reset sensor
dan merupakan program utama untuk membaca sensor sht75
kirim: clr
mov
sbuf,temp
jnb
ti,$
clr
ti
mov
sbuf,hum
jnb
ti,$
clr
ti
ret
45
Gambar 3.9 Tampilan antar muka sistem monitoring kelembaban dan suhu
46
'Run/Stop
Command1.Caption = "Run"
Command2.Enabled = True
Command3.Enabled = True
End If
End Sub
Listing program diatas digunakan untuk menjalankan program. Interval timer
diambil dari value text1(0) dikalikan 60 kemudian ditambah dengan value text1(1)
kali 1000. Button run akan berubah menjadi STOP sedangkan button DATA
BARU dan button Cetak tidak aktif. Apabila timernya bernilai false maka button
STOP akan menjadi RUN dan button DATA BARU dan button CETAK aktif.
Private Sub MSComm1_OnComm()
xx = MSComm1.Input
On Error GoTo errhand
Text2(0).Text = Asc(Left(xx, 1))
Text2(1).Text = Asc(Right(xx, 1))
With Adodc1.Recordset
.AddNew
!tanggal = Date
!jam = Time
!suhu = Val(Text2(0).Text)
!humid = Val(Text2(1).Text)
.Update
End With
Adodc1.Recordset.Requery
Adodc1.Recordset.MoveLast
errhand:
Exit Sub
End Sub
48
BAB IV
IMPLEMENTASI DAN ANALISIS
tampilan
kelembaban pada komputer yang dibuat pada program visual basic, dan
aplikasi ini dilengkapi dengan database data report. Pada pengolahan
mikrokontroler menghasilkan dua macam data yaitu kelembaban dan suhu yang
ditampilkan pada aplikasi monitoring. Kedua data ini akan disimpan pada
database, yang kemudian diproses untuk dihitung nilainya dan ditampilkan
kembali pada tabel monitoring. Aplikasi ini dapat digunakan untuk berkalikali
percobaan, dan kemudian hasil dari percobaan percobaan tersebut dapat dicetak.
Pengoperasian alat dilakukan dengan menekan tombol Run terlebih
dahulu, sehingga pengukuran suhu dan kelembaban akan berjalan secara otomatis.
49
Untuk mengetahui perubahan nilai pengukuran suhu dan kelembaban dapat diatur
selang waktu yang dibutuhkan pada bagian sampling. Pengukuran akan berhenti
apabila tombol STOP ditekan dan hasil pengukuran akan ditampilkan pada bagian
tabel yang isinya antara lain tanggal, jam, suhu dan kelembaban. Untuk mencetak
hasil pengukuran tekan tombol cetak, sedangkan tombol Data Baru digunakan
untuk menghapus atau membersihkan data hasil pengukuran lama yang berada
ditabel.
50
51
Data suhu dan kelembaban hasil bacaan sensor ditampilkan dengan angka
dengan satuan C dan %. Data yang ditampilkan pada Frame Actual Value akan
berubah setiap menit. Hal ini karena mikrokontroler diset untuk meminta data
bacaan dari sensor dan mengirimkanya ke port serial dengan jeda waktu 1 menit
pada setiap loop-nya. Nilai suhu dan kelembaban yang ditampilkan merupakan
nilai actual pada saat itu.
Data suhu dan kelembaban yang masuk ke port serial akan ditampilkan
pada properti Text1 dan Text2 kemudian disimpan dalam file data.mdb. data juga
akan ditampilkan pada Datagrid dalam bentuk tabel. Tabel yang ditampilkan pada
datagrid dapat disimpan dalam database bawaan visual basic. Sebelumnya
tombol STOP harus ditekan terlebih dahulu untuk dapat mengaktifkan tombol
tombol cetak. Setelah menekan tombol cetak maka akan muncul kotak save as
untuk member nama file dan menentukan lokasi penyimpanan file. File yang
disimpan akan memiliki ekstensi *.html atau *.txt.
52
Jam
Suhu
Kelembaban
24/06/2010
15:02:09
31
70
24/06/2010
15:03:09
31
70
24/06/2010
15:04:09
32
85
24/06/2010
15:05:09
31
71
24/06/2010
15:06:10
31
70
24/06/2010
15:07:10
31
70
24/06/2010
15:08:10
31
71
24/06/2010
15:09:10
31
70
24/06/2010
15:10:31
31
71
24/06/2010
15:11:31
31
70
24/06/2010
15:12:31
31
71
53
BAB V
PENUTUP
5.1 Kesimpulan
Dari hasil pengujian dan pengukuran dapat disimpulkan sebagai berikut :
1. Sistem yang telah dibuat dapat melakukan pengukuran
suhu dan
5.2 Saran
Berdasarkan penelitian yang telah dilakukan terhadap alat, maka untuk
pengembangan selanjutnya penulis menyarankan agar:
1. Melakukan proses kalibrasi terhadap sensor yang digunakan sehingga hasil
pengukuran sensor dapat dibuktikan keakuratannya.
2. Menggunakan
komunikasi
nirkabel
(wireless) untuk
komunikasi
54
DAFTAR PUSTAKA
55
Lampiran 1
Script assembly mokrokontroller
;Pengukur suhu dan kelembaban dengan SHT75X
;SHT11X (Temperature & Humidity sensor)
;humidity = sensor * 0.04 (12 bit) = sensor / 25
;temperatur = sensor * 0.01 - 40 (14 bit) = sensor / 100
$mod51
;port 1 : LCD 4bit interface
Rs
bit
p0.4
Rw
bit
p0.5
En
bit
p0.6
Lcd
equ
p0 ;d4-d7 bit p100-p0.3
Sckl
Dtl
Csuhu
Chumi
Crst
bit
bit
equ
equ
equ
p1.0
p1.3
00000011b
00000101b
00011110b
Dseg at 40h
hasil0
hasil1
temp
temp0
temp1
hum
hum0
hum1
dtime
:
:
:
:
:
:
:
:
:
1
1
1
1
1
1
1
1
1
ds
ds
ds
ds
ds
ds
ds
ds
ds
;awal program
;-----------------cseg at 0h
jmp start
;timer 0 interupt
;---------------mov th0,#high(-50000) (timer nol diset 50 mili detik)
mov tl0,#low(-50000) (timer nol diset 50 milidetik)
djnz dtime,xtim0
mov dtime,#20
call
ukur
call
hitung
call
kirim
xtim0: reti
56
;Serial interrupt
;--------------org
23h
jb
ti,xser
jnb
ri,$
mov a,sbuf
clr
ri
cjne a,#255,xser
call
ukur
call
hitung
call
kirim
clr
tr0
xser: reti
;seting timer,serial & rst sht11
;-----------------------start: mov tmod,#21h
;timer 0 mode 1 (16 bit), timer 1 mode 2
mov th1,#0fdh
;9600 bps
setb tr1
mov scon,#50h
;serial mode 1 (serial control
mov ip,#10h
;serial high
setb ea
;enable interupt
setb et0
;timer0
setb es
;serial
call
d11ms
;tunggu sht siap
call
rst11x
;reset sth11x
call
d11ms
;tunggu > 11ms
call
call
mov
call
call
mov
call
mov
setb
jmp
initlcd
line1
dptr,#tb1
ctkrom
line2
dptr,#tb2
ctkrom
dtime,#20
tr0
$
;initialisasi LCD
;baris 1
;temperatur
;baris 2
;kelembaban
;===========
;SUB PROGRAM
;===========
;Kirim serial
;-----------kirim: clr
ti
mov sbuf,temp
57
jnb
clr
mov
jnb
clr
mov
jnb
clr
ret
ti,$
ti
sbuf,hum
ti,$
ti
sbuf,#255
ti,$
ti
betul1: mov
mov
div
push
mov
call
pop
add
call
mov
add
call
ret
temp,a
b,#10
ab
acc
a,#12
line1a
acc
a,#30h
cetak
a,b
a,#30h
cetak
;kolom ke 11
nop
nop
nop
setb
nop
nop
nop
nop
setb
nop
nop
nop
nop
clr
nop
nop
nop
nop
mov
lcmd: rlc
mov
call
djnz
setb
jb
call
rlc
cjne
ret
ljtz: jb
nop
nop
nop
call
mov
call
call
mov
call
call
setb
ret
;clock pulsa
;----------clock: setb
sckl
;clk 1
dtl
;data 1
sckl
;clk 0
b,#8
a
dtl,c
clock
b,lcmd
dtl
dtl,$
clock
a
a,#crst,ljtz
dtl,ljtz ;$
;end start
;command = 8 bit pada acc
;cary <-- cmd bit (msb first)
;data line <-- cary
;clock
;ulang 8x
;idle dtl=1
;tunggu ack sht
;cmd=crst
;exit
;tunggu pengukuran selesai
baca
hasil1,a
ack
baca
hasil0,a
ack
clock
sckl
sckl
;clock high
60
nop
nop
nop
nop
nop
clr
sckl
;clock Low
nop
nop
ret
;baca hasil pengukuran per 8 bit
;------------------------------baca: mov b,#8
lbaca: mov c,dtl
;data line --> cary
rlc
a
;simpan ke acc
call
clock
;sebanyak 8 bit
djnz b,lbaca
ret
;Acknowledge
;----------ack: clr
dtl
nop
nop
nop
nop
call
clock
nop
nop
nop
nop
setb dtl
ret
;delay > 11 ms
;----------d11ms: mov r7,#25
dl1: mov r6,#0
djnz r6,$
djnz r7,dl1
ret
;delay 330 ms
;-----------dl330: mov r3,#25
td1: call
d11ms
djnz
r3,td1
ret
61
add
mov
call
call
ret
a,#40h
lcd,a
clk
d100
;kolom ke a
b
b,a
a
a,#0fh
a,#060h
lcd,a
clk
;simpan a
;ambil high nible
;rs=1, rw=0,en=1 ,0 = a
;kirim ke lcd
;aktifkan enable
63
mov
swap
anl
orl
mov
call
call
pop
ret
a,b
a
a,#0fh
a,#060h
lcd,a
clk
d100
b
;clock enable
clk:
clr
en
nop
nop
setb en
RET
;wait 100uS
;enable = 0
;enable = 1
;delay 100uS
d100: mov r7,#50
djnz r7,$
ret
tb1:
tb2:
db 'Temperatur: XX',0dfh,'C',13
db 'Kelembaban: xx %',13
64
;*****************************************
;***** Multi Byte Arithmatic routine *****
;*****************************************
$mod51
DSEG
SizeX equ 2
;32 bit! 'menunjukan perkalian aritmatik 2byte/16 bit
;***** Byte Ordering : LS Byte .... MS Byte
Operand:
Pembagi:
HasilBagi:
SisaBagi:
DS
DS
DS
DS
Pengali
HasilKali
EQU Pembagi
EQU HasilBagi
CSEG
;
; ***** Multi Byte divider
;
Pembagian:
MOV R0,#HasilBagi
ACALL
HapusNilai
MOV R0,#SisaBagi
ACALL
HapusNilai
;
MOV R3,#SizeX*8
LoopPembagian:
CLR C
MOV R0,#Operand
ACALL
GeserKiri1X
MOV R0,#SisaBagi
ACALL
GeserKiri1X
;
MOV R0,#SisaBagi
MOV R1,#Pembagi
ACALL
Perbandingan
;SisaBagi-Pembagi?
JC
JanganDikurangi
;SisaBagi<Pembagi, skip!
;
MOV R0,#SisaBagi
MOV R1,#Pembagi
ACALL
Pengurangan
;SisaBagi:=SisaBagi-Pembagi
JanganDikurangi:
CPL C
MOV R0,#HasilBagi
;Simpan hasil
65
ACALL
GeserKiri1X
DJNZ R3,LoopPembagian
RET
GeserKiri1X:
MOV R2,#SizeX
LeftShift:
MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R2,LeftShift
RET
;
; ***** Multi Byte Multiplier
;
Perkalian:
MOV R0,#HasilKali
ACALL
HapusNilai
;
MOV R3,#SizeX*8
LoopPerkalian:
CLR C
MOV R0,#Pengali+SizeX-1
MOV R2,#SizeX
GeserKanan:
MOV A,@R0
RRC A
MOV @R0,A
DEC R0
DJNZ R2,GeserKanan
JNC
JanganDitambah
MOV R0,#HasilKali
MOV R1,#Operand
ACALL
Penambahan
JanganDitambah:
CLR C
MOV R0,#Operand
ACALL
GeserKiri1X
DJNZ R3,LoopPerkalian
RET
;
; ***** Multi Byte Adder
;
66
Penambahan:
CLR C
MOV R2,#SizeX
LoopPenambahan:
MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,LoopPenambahan
RET
;
; ***** Multi Byte Comparator
;
Perbandingan:
CLR C
MOV R2,#SizeX
LoopPerbandingan:
MOV A,@R0
SUBB A,@R1
INC R1
INC R0
DJNZ R2,LoopPerbandingan
RET
;
; ***** Multi Byte Substractor
;
Pengurangan:
CLR C
MOV R2,#SizeX
LoopPengurangan:
MOV A,@R0
SUBB A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,LoopPengurangan
RET
;
; ***** Multi Byte Eraser
;
HapusNilai:
MOV R2,#SizeX
LoopHapus:
MOV @R0,#0
INC R0
67
DJNZ R2,LoopHapus
RET
;
; ***** Multi Byte Copier
;
Copy:
MOV R2,#SizeX
LoopCopy:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,LoopCopy
RET
end
68
Lampiran 2
Script Visual Basic
Dim yy As String
Private Sub Adodc1_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
Adodc1.Caption = "Data Suhu dan Kelembaban " &
Adodc1.Recordset.AbsolutePosition & "/" & Adodc1.Recordset.RecordCount
End Sub
Private Sub Command1_Click() 'Run/Stop
Timer1.Interval = (Val(Text1(0).Text) * 60 + Val(Text1(1).Text)) * 1000
If Timer1.Enabled = False Then
Timer1.Enabled = True
Command1.Caption = "Stop"
Command2.Enabled = False
Command3.Enabled = False
Else
Timer1.Enabled = False
Command1.Caption = "Run"
Command2.Enabled = True
Command3.Enabled = True
End If
End Sub
Private Sub Command2_Click() 'data baru
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF
Adodc1.Recordset.Delete
'Adodc1.Refresh
Adodc1.Recordset.MoveNext
Loop
Adodc1.Recordset.Requery
End Sub
Private Sub Command3_Click() 'cetak
Form1.Enabled = False
DataEnvironment1.rsCommand1.Open
DataEnvironment1.rsCommand1.Requery
DataReport1.Show
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
MSComm1.PortOpen = True
69
Text1(0).Text = 99 - VScroll2.Value
Text1(1).Text = 59 - VScroll1.Value
Text2(0).Text = ""
Text2(1).Text = ""
VScroll1.Max = 58
VScroll1.Min = 0
VScroll2.Max = 99
VScroll2.Min = 0
VScroll1.Value = 58
VScroll2.Value = 99
Label1(5).Caption = Chr(176) & "C"
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As
Integer)
MSComm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
On Error GoTo errhand
xx = MSComm1.Input
If Asc(xx) = 255 Then
Text2(0).Text = Asc(Left(yy, 1))
Text2(1).Text = Asc(Right(yy, 1))
yy = ""
With Adodc1.Recordset
.AddNew
!tanggal = Date
!jam = Time
!suhu = Val(Text2(0).Text)
!humid = Val(Text2(1).Text)
.Update
End With
Adodc1.Recordset.Requery
Adodc1.Recordset.MoveLast
Else
yy = yy & xx
End If
errhand:
Exit Sub
End Sub
Private Sub Timer1_Timer()
MSComm1.Output = Chr(255)
Shape1.FillColor = vbYellow
xx = Timer
70
71