POMPA AIR OTOMATIS

Untuk Beli Produk Silahkan Kunjungi WWW.BELJAMOTOMATIS.COM

Prinsip kerja alat ini adalah akan melakukan proses pengaktifan dan penonaktifan keluaran pompa air yang berjumlah 3 titik. Prosesnya yaitu dengan cara menyimpan waktu aktif dan waktu tidak aktif masing – masing pompa air ke dalam RAM internal IC pewaktu RTC. IC pewaktu ini digunakan untuk menghasilkan perubahan waktu yang akurat, jika ingin membuat sendiri sistem pewaktu menggunakan mikrokontroler sebenarnya dapat dilakukan. Akan tetapi timer yang dihasilkan akan berkurang akurasinya, karena sistem pewaktu mikrokontroler akan terpengaruh oleh subrutin – subrutin seperti delay (waktu tunda) dan pemanggilan ke subrutin lainnya seperti menampilkan data ke LCD serta proses scanning tombol (push button) ataupun pada saat pengaktifan pompa air. Oleh karena itu pada alat ini memerlukan IC pewaktu yang akan bekerja sendiri setelah nilai waktu diatur melalui program, dan otomatis data waktunya akan terperbaharui sesuai standar pewaktu.
Mikrokontroler AT89S52 digunakan untuk mengambil data pada RTC dengan cara seperti mengakses memori eksternal, variable waktu jam, menit, dan yang lainnya sudah otomatis tersimpan pada alamat RAM RTC DS12C887. Nilai ini dapat sewaktu – waktu diambil oleh mikrokontroler, tentu saja mengambilnya secara bergantian pada setiap alamat RAM internal RTC dan pada alamat RAM berikutnya. Setiap 1 byte RAM internal RTC mewakili satu waktu, misal jam memerlukan 1 byte, menit 1 byte, dan detik 1 byte. Memori RTC yang digunakan untuk menyimpan waktu standar tidak banyak yaitu 15 byte untuk sistem pewaktu dan kontrol register, sedangkan sisanya yaitu 113 byte dapat digunakan secara bebas. Sisa ruang memori inilah yang digunakan untuk menyimpan data waktu aktif dan non aktif ke-tiga pompa air. Data waktu ini disimpan pada RTC agar tidak hilang meskipun catu daya dimatikan karena di dalam IC RTC ini terdapat baterai yang menurut datasheet baterai tersebut dapat bertahan sampai jangka waktu 10 tahun. Jika data waktu aktif dan non aktif pompa disimpan pada RAM internal mikrokontroler, maka pada saat catu daya dimatikan isi nilai RAM internal mikrokontroler akan acak sehingga data waktunya tidak akurat.
Mikrokontroler juga yang membaca pada saat scanning 4 buah tombol masukan yang diperlukan pada saat pengaturan jam kalender, serta pada pengaturan waktu aktif dan non aktif pompa air. Proses scanning tombol ini akan dilakukan secara bergantian dari 4 buah tombol masukan, namun prosesnya scanning sangat cepat sekali yaitu berkisar 1 – 2 µs pada tiap tombolnya sehingga mikrokontroler dapat dengan cepat pula membedakan tombol mana yang lebih dahulu ditekan. Cara membedakan tombol yang ditekan yaitu mendeteksi port tombol yang berlogika ‘0’, sedangkan yang tidak ditekan akan berlogika ‘1’. Keluaran port mikrokontroler digunakan juga untuk mengaktifkan / menonaktifkan 3 buah pompa air, port yang dipakai berjumlah 3 buah. Port mikrokontroler ini tidak dapat langsung mengendalikan relai yang memerlukan catu daya 12 volt dan arus berkisar 35 mA, sehingga dipakai IC ULN2003 yang dihubungkan ke keluaran mikrokontroler. Menurut datasheet IC ULN2003 dapat bekerja maksimal sampai tegangan 50 volt, sedangkan penyerapan arus pada setiap keluarannya mencapai 500 mA. IC ini dikontrol melalui kaki masukannya, dan standar pengontrolannya yaitu 5 volt TTL sehingga dapat langsung dihubungkan dengan port mikrokontroler yang juga berstandar TTL 5 volt. Sedangkan untuk sistem penampil LCD menggunakan LCD jenis LMB162AFC yang memiliki 2 baris dan setiap barisnya dapat menampilkan 16 karakter atau sering disebut LCD 2 x 16. Pengambilan data melalui port mikrokontroler menggunakan sistem data 8 bit, dan memerlukan 2 buah port tambahan untuk kontrol enable dan register select LCD sehingga keseluruhan port untuk mengendalikan LCD adalah 10 port.
Berikut ini adalah hasil perancangan sistem Pewaktu Pompa Air Otomatis Berbasis Mikrokontroler AT89S52 yang dapat dilihat pada Gambar 4.1.

Cara setting

Cara Setting pompa

Rangkaian Keseluruhan

Listing Program

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Program Timer Pompa
; RTC DS 12C887
; Mikrokontroler AT89S52
; LCD M1632
; Push Button = 4
; Output Relai = 3
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
K_next bit p3.1
K_menu bit p3.0
K_up bit p3.3
K_down bit p3.2

LCD_rs bit p1.1
LCD_cs bit p1.0

RTC_cs bit p3.5

Pompa_1 bit p2.0
Pompa_2 bit p2.1
Pompa_3 bit p2.2

jam_rtc equ 20h
menit_rtc equ 21h

Jam_pompa1_on equ 22h
menit_pompa1_on equ 23h
jam_pompa1_off equ 24h
menit_pompa1_off equ 25h

Jam_pompa2_on equ 26h
menit_pompa2_on equ 27h
jam_pompa2_off equ 28h
menit_pompa2_off equ 29h

Jam_pompa3_on equ 2ah
menit_pompa3_on equ 2bh
jam_pompa3_off equ 2ch
menit_pompa3_off equ 2dh

Del1 equ 60h
Del2 equ 61h
Tmp equ 63h
Dech equ 66h
DecL equ 67h
Almcount equ 68h
Tmp1 equ 6ch
Detik_lama equ 6dh
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Memori RTC
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Secon equ 0
Minute equ 2
Hour equ 4
Day_week equ 6
Day_month equ 7
Month equ 8
Year equ 9
Reg_a equ 10
Reg_b equ 11

menit_pompa_1_on equ 20
jam_pompa_1_on equ 21
menit_pompa_1_off equ 22
jam_pompa_1_off equ 23

menit_pompa_2_on equ 24
jam_pompa_2_on equ 25
menit_pompa_2_off equ 26
jam_pompa_2_off equ 27

menit_pompa_3_on equ 28h
jam_pompa_3_on equ 29h
menit_pompa_3_off equ 2ah
jam_pompa_3_off equ 2bh

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Program utama
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
org 0h

Mulai:
mov p2,#00h
call inisialisasi_lcd
call inisialisasi_rtc

mov dptr,#judul
call tulis_lcd
call tunda_long
call tunda_long
call tunda_long
mov p2,#00h

Ulang:
mov detik_lama,a
call display
Dtk:
mov dptr,#secon
clr rtc_cs
movx a,@dptr
setb rtc_cs
cjne a,detik_lama,ulang

scan_1:
call scan_pompa_1_on
scan_2:
call scan_pompa_1_off
scan_3:
call scan_pompa_2_on
scan_4:
call scan_pompa_2_off
scan_5:
call scan_pompa_3_on
scan_6:
call scan_pompa_3_off

mov detik_lama,a
call display

jb k_menu,dtk
call setting_pilihan
jmp ulang
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Tampilan utama LCD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Display:
mov a,#80h
call write_inst
T_hari:
mov dptr,#day_week
clr rtc_cs
movx a,@dptr
setb rtc_cs
mov dptr,#hari
dec a
mov b,#6
mul ab
mov tmp,#6
mov tmp1,a
T_hari_2:
mov a,tmp1
movc a,@a+dptr
call write_data
inc dptr
djnz tmp,T_hari_2
mov a,#20h
call write_data
mov a,#088h
call write_inst
T_jam:
mov dptr,#hour
call ambil_data_rtc
mov a,#’:’
call write_data
T_menit:
mov dptr,#minute
call ambil_data_rtc
mov a,#’:’
call write_data
T_detik:
mov dptr,#secon
call ambil_data_rtc
T_tanggal:
mov a,#0c0h
call write_inst
mov dptr,#day_month
call ambil_data_rtc
mov a,#’ ‘
call write_data
T_bulan:
mov dptr,#month
clr rtc_cs
movx a,@dptr
setb rtc_cs
mov dptr,#bulan
dec a
mov b,#8
mul ab
mov tmp,#8
mov tmp1,a
T_bulan_2:
mov a,tmp1
movc a,@a+dptr
call write_data
inc dptr
djnz tmp,T_bulan_2
mov a,#20h
call write_data
mov a,#0ceh
call write_inst
T_tahun:
mov dptr,#year
call ambil_data_rtc
mov p0,#0ffh
exit0:
ret
disp_set:
mov a,#0cah
call write_inst
call ambil_data_rtc
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Scan waktu pompa
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_pompa_1_on:
mov dptr,#hour
call ambil_rtc_desimal
mov jam_rtc,tmp
mov dptr,#minute
call ambil_rtc_desimal
mov menit_rtc,tmp
mov dptr,#jam_pompa_1_on
call ambil_rtc_desimal
mov jam_pompa1_on,tmp
mov dptr,#menit_pompa_1_on
call ambil_rtc_desimal
mov menit_pompa1_on,tmp

scan_jam_pompa1_on:
clr a
mov a,jam_rtc
cjne a,jam_pompa1_on,keluar_1a_on
call scan_menit_pompa1_on
keluar_1a_on:
ret
scan_menit_pompa1_on:
clr a
mov a,menit_rtc
cjne a,menit_pompa1_on,keluar_1b_on
setb pompa_1
ret
keluar_1b_on:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_pompa_1_off:
mov dptr,#jam_pompa_1_off
call ambil_rtc_desimal
mov jam_pompa1_off,tmp
mov dptr,#menit_pompa_1_off
call ambil_rtc_desimal
mov menit_pompa1_off,tmp

scan_jam_pompa1_off:
clr a
mov a,jam_rtc
cjne a,jam_pompa1_off,keluar_1a_off
call scan_menit_pompa1_off
keluar_1a_off:
ret
scan_menit_pompa1_off:
clr a
mov a,menit_rtc
cjne a,menit_pompa1_off,keluar_2b_off
clr pompa_1
ret
keluar_2b_off:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_pompa_2_on:
mov dptr,#jam_pompa_2_on
call ambil_rtc_desimal
mov jam_pompa2_on,tmp
mov dptr,#menit_pompa_2_on
call ambil_rtc_desimal
mov menit_pompa2_on,tmp

scan_jam_pompa2_on:
clr a
mov a,jam_rtc
cjne a,jam_pompa2_on,keluar_2a_on
call scan_menit_pompa2_on
keluar_2a_on:
ret
scan_menit_pompa2_on:
clr a
mov a,menit_rtc
cjne a,menit_pompa2_on,keluar_2b_on
setb pompa_2
ret
keluar_2b_on:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_pompa_2_off:
mov dptr,#jam_pompa_2_off
call ambil_rtc_desimal
mov jam_pompa2_off,tmp
mov dptr,#menit_pompa_2_off
call ambil_rtc_desimal
mov menit_pompa2_off,tmp

scan_jam_pompa2_off:
clr a
mov a,jam_rtc
cjne a,jam_pompa2_off,keluar_2a_off
call scan_menit_pompa2_off
keluar_2a_off:
ret
scan_menit_pompa2_off:
clr a
mov a,menit_rtc
cjne a,menit_pompa2_off,keluar_2c_off
clr pompa_2
ret
keluar_2c_off:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_pompa_3_on:
mov dptr,#jam_pompa_3_on
call ambil_rtc_desimal
mov jam_pompa3_on,tmp
mov dptr,#menit_pompa_3_on
call ambil_rtc_desimal
mov menit_pompa3_on,tmp

scan_jam_pompa3_on:
clr a
mov a,jam_rtc
cjne a,jam_pompa3_on,keluar_3a_on
call scan_menit_pompa3_on
keluar_3a_on:
ret
scan_menit_pompa3_on:
clr a
mov a,menit_rtc
cjne a,menit_pompa3_on,keluar_3b_on
setb pompa_3
ret
keluar_3b_on:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_pompa_3_off:
mov dptr,#jam_pompa_3_off
call ambil_rtc_desimal
mov jam_pompa3_off,tmp
mov dptr,#menit_pompa_3_off
call ambil_rtc_desimal
mov menit_pompa3_off,tmp

scan_jam_pompa3_off:
clr a
mov a,jam_rtc
cjne a,jam_pompa3_off,keluar_3a_off
call scan_menit_pompa3_off
keluar_3a_off:
ret
scan_menit_pompa3_off:
clr a
mov a,menit_rtc
cjne a,menit_pompa3_off,keluar_3c_off
clr pompa_3
ret
keluar_3c_off:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Settingan tombol pilihan
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_pilihan:
mov dptr,#rtc0
call tulis_lcd
pilihan_set_jam:
mov tmp1,#50
jb k_up,pilihan_set_timer
bounce_p1a:
jnb k_up,$
djnz tmp1,bounce_p1a
call tunda_long
call setting_1
ret
pilihan_set_timer:
mov tmp1,#50
jb k_down,keluar_pilihan
bounce_p1b:
jnb k_down,$
djnz tmp1,bounce_p1b
call tunda_long
call setting_timer
ret
keluar_pilihan:
jb k_next,pilihan_set_jam
jmp setting_7
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Settingan tombol timer
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
setting_timer:
mov almcount,#0
mov dptr,#pom1
call tulis_lcd
mov dptr,#jam_pompa_1_on
mov tmp1,#50
bounce_t1a:
jnb k_menu,$
djnz tmp1,bounce_t1a
Setting_t1a:
call disp_set
cekset_t1a:
jb k_next,cekset_t2a
inc almcount
jnb k_next,$
jmp setting_t2
cekset_t2a:
jb k_up,cekset_t3a
mov p0,#0ffh
call up_jam
jmp setting_t1a
cekset_t3a:
jb k_down,cekset_t4a
mov p0,#0ffh
call down_jam
jmp setting_t1a
cekset_t4a:
mov tmp1,#0
bounce_t1b:
jb k_next,setting_t1a
djnz tmp1,bounce_t1b
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t2:
jnb k_next,$
mov dptr,#pom2
call tulis_lcd
mov dptr,#menit_pompa_1_on
Setting_t2a:
call disp_set
cekset_t1b:
jb k_next,cekset_t2b
inc almcount
jnb k_next,$
jmp setting_t3
cekset_t2b:
jb k_up,cekset_t3b
mov p0,#0ffh
call up_menit
jmp setting_t2a
cekset_t3b:
jb k_down,setting_t2a
mov p0,#0ffh
call down_menit
jmp setting_t2a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t3:
jnb k_next,$
mov dptr,#pom3
call tulis_lcd
mov dptr,#jam_pompa_1_off
Setting_t3a:
call disp_set
cekset_t1c:
jb k_next,cekset_t2c
inc almcount
jnb k_next,$
jmp setting_t4
cekset_t2c:
jb k_up,cekset_t3c
mov p0,#0ffh
call up_jam
jmp setting_t3a
cekset_t3c:
jb k_down,setting_t3a
mov p0,#0ffh
call down_jam
jmp setting_t3a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t4:
jnb k_next,$
mov dptr,#pom4
call tulis_lcd
mov dptr,#menit_pompa_1_off
Setting_t4a:
call disp_set
cekset_t1d:
jb k_next,cekset_t2d
inc almcount
jnb k_next,$
jmp setting_t5
cekset_t2d:
jb k_up,cekset_t3d
mov p0,#0ffh
call up_menit
jmp setting_t4a
cekset_t3d:
jb k_down,setting_t4a
mov p0,#0ffh
call down_menit
jmp setting_t4a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t5:
jnb k_next,$
mov dptr,#pom5
call tulis_lcd
mov dptr,#jam_pompa_2_on
Setting_t5a:
call disp_set
cekset_t1e:
jb k_next,cekset_t2e
inc almcount
jnb k_next,$
jmp setting_t6
cekset_t2e:
jb k_up,cekset_t3e
mov p0,#0ffh
call up_jam
jmp setting_t5a
cekset_t3e:
jb k_down,setting_t5a
mov p0,#0ffh
call down_jam
jmp setting_t5a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t6:
jnb k_next,$
mov dptr,#pom6
call tulis_lcd
mov dptr,#menit_pompa_2_on
Setting_t6a:
call disp_set
cekset_t1f:
jb k_next,cekset_t2f
inc almcount
jnb k_next,$
jmp setting_t7
cekset_t2f:
jb k_up,cekset_t3f
mov p0,#0ffh
call up_menit
jmp setting_t6a
cekset_t3f:
jb k_down,setting_t6a
mov p0,#0ffh
call down_menit
jmp setting_t6a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t7:
jnb k_next,$
mov dptr,#pom7
call tulis_lcd
mov dptr,#jam_pompa_2_off
Setting_t7a:
call disp_set
cekset_t1g:
jb k_next,cekset_t2g
inc almcount
jnb k_next,$
jmp setting_t8
cekset_t2g:
jb k_up,cekset_t3g
mov p0,#0ffh
call up_jam
jmp setting_t7a
cekset_t3g:
jb k_down,setting_t7a
mov p0,#0ffh
call down_jam
jmp setting_t7a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t8:
jnb k_next,$
mov dptr,#pom8
call tulis_lcd
mov dptr,#menit_pompa_2_off
Setting_t8a:
call disp_set
cekset_t1h:
jb k_next,cekset_t2h
inc almcount
jnb k_next,$
jmp setting_t9
cekset_t2h:
jb k_up,cekset_t3h
mov p0,#0ffh
call up_menit
jmp setting_t8a
cekset_t3h:
jb k_down,setting_t8a
mov p0,#0ffh
call down_menit
jmp setting_t8a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t9:
jnb k_next,$
mov dptr,#pom9
call tulis_lcd
mov dptr,#jam_pompa_3_on
Setting_t9a:
call disp_set
cekset_t1i:
jb k_next,cekset_t2i
inc almcount
jnb k_next,$
jmp setting_ta
cekset_t2i:
jb k_up,cekset_t3i
mov p0,#0ffh
call up_jam
jmp setting_t9a
cekset_t3i:
jb k_down,setting_t9a
mov p0,#0ffh
call down_jam
jmp setting_t9a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_ta:
jnb k_next,$
mov dptr,#poma
call tulis_lcd
mov dptr,#menit_pompa_3_on
Setting_taa:
call disp_set
cekset_t1j:
jb k_next,cekset_t2j
inc almcount
jnb k_next,$
jmp setting_tb
cekset_t2j:
jb k_up,cekset_t3j
mov p0,#0ffh
call up_menit
jmp setting_taa
cekset_t3j:
jb k_down,setting_taa
mov p0,#0ffh
call down_menit
jmp setting_taa
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_tb:
jnb k_next,$
mov dptr,#pomb
call tulis_lcd
mov dptr,#jam_pompa_3_off
Setting_tba:
call disp_set
cekset_t1k:
jb k_next,cekset_t2k
inc almcount
jnb k_next,$
jmp setting_tc
cekset_t2k:
jb k_up,cekset_t3k
mov p0,#0ffh
call up_jam
jmp setting_tba
cekset_t3k:
jb k_down,setting_tba
mov p0,#0ffh
call down_jam
jmp setting_tba
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_tc:
jnb k_next,$
mov dptr,#pomc
call tulis_lcd
mov dptr,#menit_pompa_3_off
Setting_tca:
call disp_set
cekset_t1l:
jb k_next,cekset_t2l
inc almcount
jnb k_next,$
jmp setting_7
cekset_t2l:
jb k_up,cekset_t3l
mov p0,#0ffh
call up_menit
jmp setting_tca
cekset_t3l:
jb k_down,setting_tca
mov p0,#0ffh
call down_menit
jmp setting_tca
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Settingan tombol jam dan kalender
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_1:
mov almcount,#0
mov dptr,#rtc1
call tulis_lcd
mov dptr,#hour
mov tmp1,#50
bounce_1a:
jnb k_menu,$
djnz tmp1,bounce_1a
Setting_1a:
call disp_set
cekset_1a:
jb k_next,cekset_2a
inc almcount
jnb k_next,$
jmp setting_2
cekset_2a:
jb k_up,cekset_3a
mov p0,#0ffh
call up_jam
jmp setting_1a
cekset_3a:
jb k_down,cekset_4a
mov p0,#0ffh
call down_jam
jmp setting_1a
cekset_4a:
mov tmp1,#0
bounce_1b:
jb k_next,setting_1a
djnz tmp1,bounce_1b
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_2:
jnb k_next,$
mov dptr,#rtc2
call tulis_lcd
mov dptr,#minute
Setting_2a:
call disp_set
cekset_1b:
jb k_next,cekset_2b
inc almcount
jnb k_next,$
jmp setting_3
cekset_2b:
jb k_up,cekset_3b
mov p0,#0ffh
call up_menit
jmp setting_2a
cekset_3b:
jb k_down,setting_2a
mov p0,#0ffh
call down_menit
jmp setting_2a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_3:
jnb k_next,$
mov dptr,#rtc3
call tulis_lcd
setting_3a:
mov a,#0c8h
call write_inst
mov dptr,#day_week
clr rtc_cs
movx a,@dptr
setb rtc_cs
mov dptr,#hari
dec a
mov b,#6
mul ab
mov tmp,#6
mov tmp1,a
Setting_3b:
mov a,tmp1
movc a,@a+dptr
call write_data
inc dptr
djnz tmp,setting_3b
cekset_1c:
mov dptr,#day_week
jb k_next,cekset_2c
inc almcount
jnb k_next,$
jmp setting_4
cekset_2c:
jb k_up,cekset_3c
mov p0,#0ffh
call up_day
jmp setting_3a
cekset_3c:
jb k_down,cekset_1c
mov p0,#0ffh
call down_day
jmp setting_3a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_4:
jnb k_next,$
mov dptr,#rtc4
call tulis_lcd
mov dptr,#day_month
Setting_4a:
call disp_set
cekset_1d:
jb k_next,cekset_2d
inc almcount
jnb k_next,$
jmp setting_5
cekset_2d:
jb k_up,cekset_3d
mov p0,#0ffh
call up_day_month
jmp setting_4a
cekset_3d:
jb k_down,setting_4a
mov p0,#0ffh
call down_day_month
jmp setting_4a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_5:
jnb k_next,$
mov dptr,#rtc5
call tulis_lcd
setting_5a:
mov a,#0c7h
call write_inst
mov dptr,#month
clr rtc_cs
movx a,@dptr
setb rtc_cs
mov dptr,#bulan
dec a
mov b,#8
mul ab
mov tmp,#8
mov tmp1,a
Setting_5b:
mov a,tmp1
movc a,@a+dptr
call write_data
inc dptr
djnz tmp,setting_5b
cekset_1e:
mov dptr,#month
jb k_next,cekset_2e
inc almcount
jnb k_next,$
jmp setting_6
cekset_2e:
jb k_up,cekset_3e
mov p0,#0ffh
call up_month
jmp setting_5a
cekset_3e:
jb k_down,cekset_1e
mov p0,#0ffh
call down_month
jmp setting_5a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_6:
jnb k_next,$
mov dptr,#rtc6
call tulis_lcd
mov dptr,#year
Setting_6a:
mov a,#0cch
call write_inst
call ambil_data_rtc
cekset_1f:
jb k_next,cekset_2f
inc almcount
jnb k_next,$
jmp setting_7
cekset_2f:
jb k_up,cekset_3f
mov p0,#0ffh
call up_year
jmp setting_6a
cekset_3f:
jb k_down,setting_6a
mov p0,#0ffh
call down_year
jmp setting_6a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_7:
mov tmp1,#25
bounce_7a:
jnb k_next,$
djnz tmp1,bounce_7a
bounce_7b:
jnb k_menu,$
djnz tmp1,bounce_7b
mov dptr,#waktu
call tulis_lcd
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Baca rtc up rtc down dan tulis rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Baca_rtc_up:
mov r7,#25
Bounce_up:
jb k_up,exit
djnz r7,bounce_up
baca_up:
clr rtc_cs
movx a,@dptr
setb rtc_cs
inc a
ret
Baca_rtc_down:
mov r7,#25
baca_down:
jb k_down,exit
djnz r7,baca_down
clr rtc_cs
movx a,@dptr
setb rtc_cs
dec a
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Tulis_rtc:
clr rtc_cs
movx @dptr,a
setb rtc_cs
Tunggu_tombol_dilepas:
ca:
mov r7,#25
cc:
jnb k_up,ca
jnb k_down,ca
djnz r7,cc
exit:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi menit
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_menit:
call baca_rtc_up
cjne a,#59,cek_59
cek_59:
jc belum_59
clr a
belum_59:
jmp tulis_rtc

Down_menit:
call baca_rtc_down
cjne a,#0ffh,m_255
mov a,#59
m_255:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi jam
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_jam:
call baca_rtc_up
cjne a,#24,cek_24
cek_24:
jc belum_24
clr a
belum_24:
jmp tulis_rtc

Down_jam:
call baca_rtc_down
cjne a,#0ffh,j_255
mov a,#23
j_255:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi hari dlm seminggu
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_day:
call baca_rtc_up
cjne a,#8,cek_7
cek_7:
jc belum_7
clr a
inc a
belum_7:
jmp tulis_rtc

Down_day:
call baca_rtc_down
jnz bukan_0_day
mov a,#7
bukan_0_day:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi hari dlm sebulan
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_day_month:
call baca_rtc_up
cjne a,#32,cek_31
cek_31:
jc belum_31
clr a
inc a
belum_31:
jmp tulis_rtc

Down_day_month:
call baca_rtc_down
jnz bukan_0_daymonth
mov a,#31
bukan_0_daymonth:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi bulan
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_month:
call baca_rtc_up
cjne a,#13,cek_12
cek_12:
jc belum_12
clr a
inc a
belum_12:
jmp tulis_rtc

Down_month:
call baca_rtc_down
jnz bukan_0_month
mov a,#12
bukan_0_month:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi tahun
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_year:
call baca_rtc_up
cjne a,#100,cek_99
cek_99:
jc belum_99
clr a
belum_99:
jmp tulis_rtc

Down_year:
call baca_rtc_down
cjne a,#0ffh,y_255
mov a,#99
y_255:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; inisialisasi LCD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Inisialisasi_LCD:
mov a,#03fh
call write_inst
call write_inst
mov a,#0dh
call write_inst
mov a,#06h
call write_inst
mov a,#01h
call write_inst
mov a,#0ch
call write_inst
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; inisialisasi RTC
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Inisialisasi_rtc:
clr rtc_cs
; reg a = UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0
; REG B = SET PIE AIE UIE SQWE DM 24/12 DSE
mov r0,#reg_a
mov a,#00101111b
movx @r0,a
inc r0
mov a,#00001110b
movx @r0,a
clr a
setb rtc_cs
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Ambil data rtc dan tulis ke lcd
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Ambil_data_rtc:
clr rtc_cs
movx a,@dptr
setb rtc_cs
mov decl,a
call hextodec
mov tmp,a
swap a
anl a,#0fh
orl a,#30h
call write_data
mov a,tmp
anl a,#0fh
orl a,#30h
call write_data
ret
Ambil_rtc_desimal:
clr rtc_cs
movx a,@dptr
setb rtc_cs
mov decl,a
call hextodec
mov tmp,a
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin menulis instruksi ke lcd
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
write_inst:
clr lcd_rs
setb lcd_cs
mov p0,a
wrdt:
clr lcd_cs
setb lcd_cs
call delay
mov p0,#0ffh
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin menulis data ke lcd
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
write_data:
setb lcd_rs
setb lcd_cs
trsa:
mov p0,a
jmp wrdt
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; tulis 16 char di baris lcd atas
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Tulis_lcd_atas:
mov a,#80h
tlcdb:
mov r3,#16
call write_inst
tulis1:
clr a
movc a,@a+dptr
call write_data
inc dptr
djnz r3,tulis1
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; tulis 16 char di baris lcd bawah
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Tulis_lcd_bawah:
mov a,#0c0h
jmp tlcdb
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; tulis 32 char di baris lcd
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Tulis_lcd:
call tulis_lcd_atas
call tulis_lcd_bawah
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; konversi heksa ke desimal
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
hextodec:
mov psw,#0
clr c
mov dech,#0
mov a,decl
swap a
anl a,#0fh ;00001111
mov tmp,a
jz sudah_ditambah
clr a
tambah_16:
add a,#16h ;22 d
da a
mov r2,a
clr a
addc a,dech
mov dech,a
mov a,r2
djnz tmp,tambah_16
sudah_ditambah:
mov tmp,a
mov a,decl
anl a,#0fh
da a
add a,tmp
da a
mov decl,a
; desimal hanya di bawah 100
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin delay
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
delay:
mov del1,#5
delay1:
mov del2,#0
djnz del2,$
djnz del1,delay1
ret
ldelay:
mov del1,#0
call delay1
call delay1
ret
TUNDA_LONG:
MOV R5,#010H
JJz:
CALL TUNDAan
DJNZ R5,JJz
RET
TUNDAan:
MOV R7,#100
LD11:
DJNZ R6,$
DJNZ R7,LD11
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Data
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Judul:db ‘Timer Pompa Air ‘,’Seno.W 02510008 ‘
Waktu:db ‘ ‘,’ 20 ‘

Rtc0: db ‘Up ~ Set Waktu’,’Down ~ Set Pompa’
Rtc1: db ‘ Set 1 ‘,’Jam = [ ] ‘
Rtc2: db ‘ Set 2 ‘,’Menit = [ ] ‘
Rtc3: db ‘ Set 3 ‘,’Hari = [ ]’
Rtc4: db ‘ Set 4 ‘,’Tanggal= [ ] ‘
Rtc5: db ‘ Set 5 ‘,’Bulan=[ ]’
Rtc6: db ‘ Set 6 ‘,’Tahun = [20 ] ‘

Pom1: db ‘ Pompa 1 on ‘,’ Jam = [ ] ‘
Pom2: db ‘ Pompa 1 on ‘,’ Menit = [ ] ‘
Pom3: db ‘ Pompa 1 off ‘,’ Jam = [ ] ‘
Pom4: db ‘ Pompa 1 off ‘,’ Menit = [ ] ‘

Pom5: db ‘ Pompa 2 on ‘,’ Jam = [ ] ‘
Pom6: db ‘ Pompa 2 on ‘,’ Menit = [ ] ‘
Pom7: db ‘ Pompa 2 off ‘,’ Jam = [ ] ‘
Pom8: db ‘ Pompa 2 off ‘,’ Menit = [ ] ‘

Pom9: db ‘ Pompa 3 on ‘,’ Jam = [ ] ‘
Poma: db ‘ Pompa 3 on ‘,’ Menit = [ ] ‘
Pomb: db ‘ Pompa 3 off ‘,’ Jam = [ ] ‘
Pomc: db ‘ Pompa 3 off ‘,’ Menit = [ ] ‘

Hari: db ‘Minggu’
db ‘Senin ‘
db ‘Selasa’
db ‘Rabu ‘
db ‘Kamis ‘
db ‘Jumat ‘
db ‘Sabtu ‘

Bulan: db ‘Januari ‘
db ‘Februari’
db ‘Maret ‘
db ‘April ‘
db ‘Mei ‘
db ‘Juni ‘
db ‘Juli ‘
db ‘Agustus ‘
db ‘Sptember’
db ‘Oktober ‘
db ‘November’
db ‘Desember’
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
END

One thought on “POMPA AIR OTOMATIS

  1. Terima Kasih tutorial nya, sangat membantu.
    saya punya masalah dengan alat ini mas, ketika saya setting waktu hidup pompa 1 misal jam 12:00 dan mati jam 14:00. pada saat listrik menyala pada rentang waktu tersebut, alat ini bekerja normal. tapi pada saat listrik mati, dan hidup misal jam 12:10 maka alat ini tidak bekerja. masalah nya dmana ya mas?
    mohon pencerahan nya, Terima Kasih

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s