Prinsip Kerja Alat
Prinsip kerja alat Alarm Pengingat Waktu Minum Obat Menggunakan RTC DS12C887 Berbasis Mikrokontroler AT89S52 ini adalah mikrokontroler sebagai bagian pemroses selalu melihat keadaan 4 ruangan memori pada memori RTC yang mewakili 4 jenis obat, pada tiap ruangan ini berisi 4 buah jadwal alarm yaitu.
- Alarm obat 1×1 sehari.
- Alarm obat 1×2 sehari.
- Alarm obat 1×3 sehari.
- Alarm obat 1×4 sehari.
Pada bagian pengaturan dapat memilih jenis obat mana yang akan diaktifkan dan juga memilih jadwal alarm obat dari ke empat pilihan dalam sehari. Sedangkan untuk 4 waktu bunyi alarm telah ditentukan melalui pemrograman flash PEROM mikrokontroler sehingga pengguna tidak dapat mengubahnya kecuali lewat pemrograman IC mikrokontroler. Empat waktu yang telah diisikan ke dalam memori IC mikrokontroler tersebut adalah sebagai berikut.
- 1×1 pada pukul 08.00
- 1×2 pada pukul 14.00
- 1×3 pada pukul 20.00
- 1×4 pada pukul 02.00
-
Berikut ini adalah Gambar 4.1 alat Alarm Pengingat Waktu Minum Obat Menggunakan RTC DS12C887 Berbasis Mikrokontroler AT89S52 yang selesai dirakit.

IC Pewaktu RTC DS12C887
Real Time Clock atau biasa disebut dengan RTC adalah sebuah komponen elektronik yang didalamnya berisi jam elektronik yang tidak pernah berhenti bekerja kecuali register diisi kode OFF. Komponen ini menyimpan waktu mulai dari detik hingga tahun, dan selalu diperbaharui setiap saat secara otomatis, nilai informasi waktu disimpan di dalam sebuah RAM dengan alamat yang telah ditentukan. Karena disimpan di dalam sebuah RAM dengan alamat yang sudah ditentukan, maka pengguna dapat mengambil datanya dengan sebuah mikrokontroler, dan hubungannya dengan mikrokontroler sebagai komponen memori eksternal. Jadi dalam hal ini mengakses data memori eksternal dan mengakses data RTC adalah sama caranya. Berikut ini adalah Gambar 3.2 menyambungkan RTC ke mikrokontroler.
Gambar 3.2 Menyambungkan RTC ke port mikrokontroler
Di samping itu karena data waktu yang disimpan tidak banyak, maka sisa ruang memori yang disediakan RTC, bisa digunakan untuk menyimpan data secara aman, data tersebut tidak akan hilang meskipun catu daya dimatikan sampai jangka waktu sekitar 10 tahun (seumur baterai yang ada di dalam RTC).
Sistem Minimum Mikrokontroler AT89S52
Mikrokontroler merupakan komponen utama yang mengendalikan seluruh sistem. Mikrokontroler yang digunakan pada penelitian ini adalah mikrokontroler keluaran Atmel dengan seri AT89S52. Seri ini merupakan varian baru dari keluarga AT89C51 yang mengalami perubahan prosedur pengisian program. Pada seri ini memiliki fasilitas ISP (In System Programming) yang tidak dimiliki pada seri sebelumnya. Fasilitas ini memungkinkan pengubahan isi program walaupun sistem sedang berjalan. Pada penelitian ini sistem minimum disajikan pada Gambar 3.3.

Tombol Masukan
Tombol masukan ini terdiri dari 4 buah tombol (push on) yang dihubungkan ke port 3.0 – port 3.3 mikrokontroler. Ke-empat tombol ini akan mewakili tombol MENU, tombol UP, tombol DOWN, dan tombol NEXT. Tombol – tombol ini akan berfungsi saat setting jam, hari, tanggal, bulan, dan tahun pada RTC. Juga akan berfungsi pada saat pengisian waktu membunyikan alarm minum obat pada setiap harinya. Berikut ini adalah Gambar 3.4 penyambungan tombol ke port mikrokontroler.

Penampil LCD
LCD merupakan penampil yang digunakan untuk memberikan informasi bagi pengguna alat. LCD ada yang mempunyai satu baris dan ada yang dua baris, LCD satu baris disebut LCD 1 x 16 dan LCD dua baris biasa disebut LCD 2 x 16, 16 menunjukkan banyaknya karakter yang dapat ditampilkan dalam setiap baris. Pada sistem ini digunakan sebagai penampil waktu normal dan waktu pengaturan bunyi alarm pada setiap harinya.
Pada Gambar 3.5 merupakan antarmuka LCD 2×16 dengan menggunakan mode antarmuka 8 bit. Berikut beberapa hal yang perlu diperhatikan adalah LCD selalu berada pada kondisi tulis (write), dengan menghubungkan pin R/W ke Ground. Hal ini dimaksudkan agar LCD tersebut tidak pernah mengeluarkan data (kondisi baca) yang mana data tersebut akan bertabrakan dengan data komponen lain di jalur bus.

Rangkaian Penggerak Speaker
Rangkaian penggerak speaker menggunakan transistor jenis PNP (A733), pada dasarnya speaker dihubungkan ke tegangan Vcc (dengan batasan arus oleh resistor 47 Ω). Karena adanya transistor, maka speaker mendapatkan arus atau tidaknya tergantung dari kondisi transistor saat itu. Jika transistor ON (karena ada arus low pada basis, dengan pemberian logika ’0’), maka speaker mandapatkan tegangan Vcc, namun sebaliknya jika transistor OFF speaker juga akan OFF.
Jika keadaan ON dan OFF ini diberikan secara periodik, maka akan timbul suatu gelombang (gelombang kotak) dengan frekuensi tertentu (berdasarkan periode gelombang). Dengan demikian program yang dibuat harus bisa membangkitkan gelombang kotak pada port mikrokontroler. Berikut ini adalah Gambar 3.6 rangkaian penggerak speaker yang masukannya dari port mikrokontroler.

Perancangan Perangkat Lunak Mikrokontroler AT89S52
Sebelum melakukan permrograman alat, maka diperlukan rancangan perangkat lunak mikrokontroler. Rancangan perangkat lunak (diagram alir) ini diperlukan untuk memudahkan pada saat pemrograman. Berikut ini adalah Gambar 3.8 diagram alir alat Alarm Pengingat Waktu Minum Obat Menggunakan RTC DS12C887 Berbasis Mikrokontroler AT89S52.
Listing Program
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Program Alarm Obat
; RTC DS 12C887
; Mikrokontroler AT89S52
; LCD M1632
; Push Button = 4
; Output Speaker = 1
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
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
Speaker bit p2.0
Nada_1 Equ -1000
Nada_2 Equ -655
Nada_3 Equ -500
memori_1 equ 20H
memori_1x1 bit 20H.0
memori_1x2 bit 20H.1
memori_1x3 bit 20H.2
memori_1x4 bit 20H.3
memori_2 equ 21H
memori_2x1 bit 21H.0
memori_2x2 bit 21H.1
memori_2x3 bit 21H.2
memori_2x4 bit 21H.3
memori_3 equ 22H
memori_3x1 bit 22H.0
memori_3x2 bit 22H.1
memori_3x3 bit 22H.2
memori_3x4 bit 22H.3
memori_4 equ 23H
memori_4x1 bit 23H.0
memori_4x2 bit 23H.1
memori_4x3 bit 23H.2
memori_4x4 bit 23H.3
bebas equ 25H
Del1 equ 30h
Del2 equ 31h
Tmp equ 33h
Dech equ 36h
DecL equ 37h
Almcount equ 38h
Tmp1 equ 3ch
Detik_lama equ 3dh
jam_rtc equ 50h
menit_rtc equ 51h
detik_rtc equ 52h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 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
RTC_menit_obat1 equ 20
RTC_jam_obat1 equ 21
RTC_menit_obat2 equ 22
RTC_jam_obat2 equ 23
RTC_menit_obat3 equ 24
RTC_jam_obat3 equ 25
RTC_menit_obat4 equ 26
RTC_jam_obat4 equ 27
aktif_Obat_1 equ 30H
aktif_Obat_2 equ 31H
aktif_Obat_3 equ 32H
aktif_Obat_4 equ 33H
Alamat_obat_1 equ 40H
Alamat_obat_2 equ 41H
Alamat_obat_3 equ 42H
Alamat_obat_4 equ 43H
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Program utama
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
org 0h
restart:
mov tmod,#01H
mov memori_1,#0ffh
mov memori_2,#0ffh
mov memori_3,#0ffh
mov memori_4,#0ffh
Mulai: call inisialisasi_lcd
call inisialisasi_rtc
mov dptr,#judul
call tulis_lcd
call tunda_long
call nada_alarm_1
mov dptr,#waktu
call tulis_lcd
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
call scaning_memori_1
call scaning_memori_2
call scaning_memori_3
call scaning_memori_4
ulangan:
mov detik_lama,a
call display
jb k_menu,dtk
call setting_pilihan
jmp ulang
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scaning_memori_1:
mov dptr,#Alamat_obat_1
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,keluar_1
mov dptr,#aktif_Obat_1
call ambil_rtc_desimal
mov a,tmp
cjne a,#1,lanjut_1_1x2
call scan_obat_1_1x1
call reseter
ret
lanjut_1_1x2:
cjne a,#02,lanjut_1_1x3
call scan_obat_1_1x1
call scan_obat_1_1x3
call reseter
ret
lanjut_1_1x3:
cjne a,#03,lanjut_1_1x4
call scan_obat_1_1x1
call scan_obat_1_1x2
call scan_obat_1_1x3
call reseter
ret
lanjut_1_1x4:
cjne a,#04,keluar_1
call scan_obat_1_1x1
call scan_obat_1_1x2
call scan_obat_1_1x3
call scan_obat_1_1x4
call reseter
keluar_1:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scaning_memori_2:
mov dptr,#Alamat_obat_2
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,keluar_2
mov dptr,#aktif_Obat_2
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,lanjut_2_1x2
call scan_obat_2_1x1
call reseter
ret
lanjut_2_1x2:
cjne a,#02,lanjut_2_1x3
call scan_obat_2_1x1
call scan_obat_2_1x3
call reseter
ret
lanjut_2_1x3:
cjne a,#03,lanjut_2_1x4
call scan_obat_2_1x1
call scan_obat_2_1x2
call scan_obat_2_1x3
call reseter
ret
lanjut_2_1x4:
cjne a,#04,keluar_2
call scan_obat_2_1x1
call scan_obat_2_1x2
call scan_obat_2_1x3
call scan_obat_2_1x4
call reseter
keluar_2:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scaning_memori_3:
mov dptr,#Alamat_obat_3
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,keluar_3
mov dptr,#aktif_Obat_3
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,lanjut_3_1x2
call scan_obat_3_1x1
call reseter
ret
lanjut_3_1x2:
cjne a,#02,lanjut_3_1x3
call scan_obat_3_1x1
call scan_obat_3_1x3
call reseter
ret
lanjut_3_1x3:
cjne a,#03,lanjut_3_1x4
call scan_obat_3_1x1
call scan_obat_3_1x2
call scan_obat_3_1x3
call reseter
ret
lanjut_3_1x4:
cjne a,#04,keluar_3
call scan_obat_3_1x1
call scan_obat_3_1x2
call scan_obat_3_1x3
call scan_obat_3_1x4
call reseter
keluar_3:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scaning_memori_4:
mov dptr,#Alamat_obat_4
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,keluar_4
mov dptr,#aktif_Obat_4
call ambil_rtc_desimal
mov a,tmp
cjne a,#01,lanjut_4_1x2
call scan_obat_4_1x1
call reseter
ret
lanjut_4_1x2:
cjne a,#02,lanjut_4_1x3
call scan_obat_4_1x1
call scan_obat_4_1x3
call reseter
ret
lanjut_4_1x3:
cjne a,#03,lanjut_4_1x4
call scan_obat_4_1x1
call scan_obat_4_1x2
call scan_obat_4_1x3
call reseter
ret
lanjut_4_1x4:
cjne a,#04,keluar_4
call scan_obat_4_1x1
call scan_obat_4_1x2
call scan_obat_4_1x3
call scan_obat_4_1x4
call reseter
keluar_4:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Scan waktu Alarm Obat
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_obat_1_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,keluar_1_1x1
mov a,menit_rtc
cjne a,#00,keluar_1_1x1
jb memori_1x1,alarm_1_1x1
jmp keluar_1_1x1
alarm_1_1x1:
call tampilan_obat_1_1x1
call alarm_mulai
jb k_menu,cek_alarm_1_1x1
jnb K_menu,$
jmp berhenti_1_1x1
cek_alarm_1_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,alarm_1_1x1
mov a,menit_rtc
cjne a,#01,alarm_1_1x1
setb memori_1x1
jmp matikan_1_1x1
berhenti_1_1x1:
clr memori_1x1
matikan_1_1x1:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_1_1x1:
ret
scan_obat_1_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,keluar_1_1x2
mov a,menit_rtc
cjne a,#00,keluar_1_1x2
jb memori_1x2,alarm_1_1x2
jmp keluar_1_1x2
alarm_1_1x2:
call tampilan_obat_1_1x2
call alarm_mulai
jb k_menu,cek_alarm_1_1x2
jnb K_menu,$
jmp berhenti_1_1x2
cek_alarm_1_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,alarm_1_1x2
mov a,menit_rtc
cjne a,#01,alarm_1_1x2
setb memori_1x2
jmp matikan_1_1x2
berhenti_1_1x2:
clr memori_1x2
matikan_1_1x2:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_1_1x2:
ret
scan_obat_1_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,keluar_1_1x3
mov a,menit_rtc
cjne a,#00,keluar_1_1x3
jb memori_1x3,alarm_1_1x3
jmp keluar_1_1x3
alarm_1_1x3:
call tampilan_obat_1_1x3
call alarm_mulai
jb k_menu,cek_alarm_1_1x3
jnb K_menu,$
jmp berhenti_1_1x3
cek_alarm_1_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,alarm_1_1x3
mov a,menit_rtc
cjne a,#01,alarm_1_1x3
setb memori_1x3
jmp matikan_1_1x3
berhenti_1_1x3:
clr memori_1x3
matikan_1_1x3:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_1_1x3:
ret
scan_obat_1_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,keluar_1_1x4
mov a,menit_rtc
cjne a,#00,keluar_1_1x4
jb memori_1x4,alarm_1_1x4
jmp keluar_1_1x4
alarm_1_1x4:
call tampilan_obat_1_1x4
call alarm_mulai
jb k_menu,cek_alarm_1_1x4
jnb K_menu,$
jmp berhenti_1_1x4
cek_alarm_1_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,alarm_1_1x4
mov a,menit_rtc
cjne a,#01,alarm_1_1x4
setb memori_1x4
jmp matikan_1_1x4
berhenti_1_1x4:
clr memori_1x4
matikan_1_1x4:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_1_1x4:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_obat_2_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,keluar_2_1x1
mov a,menit_rtc
cjne a,#02,keluar_2_1x1
jb memori_2x1,alarm_2_1x1
jmp keluar_2_1x1
alarm_2_1x1:
call tampilan_obat_2_1x1
call alarm_mulai
jb k_menu,cek_alarm_2_1x1
jnb K_menu,$
jmp berhenti_2_1x1
cek_alarm_2_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,alarm_2_1x1
mov a,menit_rtc
cjne a,#03,alarm_2_1x1
setb memori_2x1
jmp matikan_2_1x1
berhenti_2_1x1:
clr memori_2x1
matikan_2_1x1:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_2_1x1:
ret
scan_obat_2_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,keluar_2_1x2
mov a,menit_rtc
cjne a,#02,keluar_2_1x2
jb memori_2x2,alarm_2_1x2
jmp keluar_2_1x2
alarm_2_1x2:
call tampilan_obat_2_1x2
call alarm_mulai
jb k_menu,cek_alarm_2_1x2
jnb K_menu,$
jmp berhenti_2_1x2
cek_alarm_2_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,alarm_2_1x2
mov a,menit_rtc
cjne a,#03,alarm_2_1x2
setb memori_2x2
jmp matikan_2_1x2
berhenti_2_1x2:
clr memori_2x2
matikan_2_1x2:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_2_1x2:
ret
scan_obat_2_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,keluar_2_1x3
mov a,menit_rtc
cjne a,#02,keluar_2_1x3
jb memori_2x3,alarm_2_1x3
jmp keluar_2_1x3
alarm_2_1x3:
call tampilan_obat_2_1x3
call alarm_mulai
jb k_menu,cek_alarm_2_1x3
jnb K_menu,$
jmp berhenti_2_1x3
cek_alarm_2_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,alarm_2_1x3
mov a,menit_rtc
cjne a,#03,alarm_2_1x3
setb memori_2x3
jmp matikan_2_1x3
berhenti_2_1x3:
clr memori_2x3
matikan_2_1x3:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_2_1x3:
ret
scan_obat_2_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,keluar_2_1x4
mov a,menit_rtc
cjne a,#02,keluar_2_1x4
jb memori_2x4,alarm_2_1x4
jmp keluar_2_1x4
alarm_2_1x4:
call tampilan_obat_2_1x4
call alarm_mulai
jb k_menu,cek_alarm_2_1x4
jnb K_menu,$
jmp berhenti_2_1x4
cek_alarm_2_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,alarm_2_1x4
mov a,menit_rtc
cjne a,#03,alarm_2_1x4
setb memori_2x4
jmp matikan_2_1x4
berhenti_2_1x4:
clr memori_2x4
matikan_2_1x4:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_2_1x4:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_obat_3_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,keluar_3_1x1
mov a,menit_rtc
cjne a,#04,keluar_3_1x1
jb memori_3x1,alarm_3_1x1
jmp keluar_3_1x1
alarm_3_1x1:
call tampilan_obat_3_1x1
call alarm_mulai
jb k_menu,cek_alarm_3_1x1
jnb K_menu,$
jmp berhenti_3_1x1
cek_alarm_3_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,alarm_3_1x1
mov a,menit_rtc
cjne a,#05,alarm_3_1x1
setb memori_3x1
jmp matikan_3_1x1
berhenti_3_1x1:
clr memori_3x1
matikan_3_1x1:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_3_1x1:
ret
scan_obat_3_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,keluar_3_1x2
mov a,menit_rtc
cjne a,#04,keluar_3_1x2
jb memori_3x2,alarm_3_1x2
jmp keluar_3_1x2
alarm_3_1x2:
call tampilan_obat_3_1x2
call alarm_mulai
jb k_menu,cek_alarm_3_1x2
jnb K_menu,$
jmp berhenti_3_1x2
cek_alarm_3_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,alarm_3_1x2
mov a,menit_rtc
cjne a,#05,alarm_3_1x2
setb memori_3x2
jmp matikan_3_1x2
berhenti_3_1x2:
clr memori_3x2
matikan_3_1x2:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_3_1x2:
ret
scan_obat_3_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,keluar_3_1x3
mov a,menit_rtc
cjne a,#04,keluar_3_1x3
jb memori_3x3,alarm_3_1x3
jmp keluar_3_1x3
alarm_3_1x3:
call tampilan_obat_3_1x3
call alarm_mulai
jb k_menu,cek_alarm_3_1x3
jnb K_menu,$
jmp berhenti_3_1x3
cek_alarm_3_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,alarm_3_1x3
mov a,menit_rtc
cjne a,#05,alarm_3_1x3
setb memori_3x3
jmp matikan_3_1x3
berhenti_3_1x3:
clr memori_3x3
matikan_3_1x3:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_3_1x3:
ret
scan_obat_3_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,keluar_3_1x4
mov a,menit_rtc
cjne a,#04,keluar_3_1x4
jb memori_3x4,alarm_3_1x4
jmp keluar_3_1x4
alarm_3_1x4:
call tampilan_obat_3_1x4
call alarm_mulai
jb k_menu,cek_alarm_3_1x4
jnb K_menu,$
jmp berhenti_3_1x4
cek_alarm_3_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,alarm_3_1x4
mov a,menit_rtc
cjne a,#05,alarm_3_1x4
setb memori_3x4
jmp matikan_3_1x4
berhenti_3_1x4:
clr memori_3x4
matikan_3_1x4:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_3_1x4:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
scan_obat_4_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,keluar_4_1x1
mov a,menit_rtc
cjne a,#06,keluar_4_1x1
jb memori_4x1,alarm_4_1x1
jmp keluar_4_1x1
alarm_4_1x1:
call tampilan_obat_4_1x1
call alarm_mulai
jb k_menu,cek_alarm_4_1x1
jnb K_menu,$
jmp berhenti_4_1x1
cek_alarm_4_1x1:
call ambil_waktu
mov a,jam_rtc
cjne a,#08,alarm_4_1x1
mov a,menit_rtc
cjne a,#07,alarm_4_1x1
setb memori_4x1
jmp matikan_4_1x1
berhenti_4_1x1:
clr memori_4x1
matikan_4_1x1:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_4_1x1:
ret
scan_obat_4_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,keluar_4_1x2
mov a,menit_rtc
cjne a,#06,keluar_4_1x2
jb memori_4x2,alarm_4_1x2
jmp keluar_4_1x2
alarm_4_1x2:
call tampilan_obat_4_1x2
call alarm_mulai
jb k_menu,cek_alarm_4_1x2
jnb K_menu,$
jmp berhenti_4_1x2
cek_alarm_4_1x2:
call ambil_waktu
mov a,jam_rtc
cjne a,#14,alarm_4_1x2
mov a,menit_rtc
cjne a,#07,alarm_4_1x2
setb memori_4x2
jmp matikan_4_1x2
berhenti_4_1x2:
clr memori_4x2
matikan_4_1x2:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_4_1x2:
ret
scan_obat_4_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,keluar_4_1x3
mov a,menit_rtc
cjne a,#06,keluar_4_1x3
jb memori_4x3,alarm_4_1x3
jmp keluar_4_1x3
alarm_4_1x3:
call tampilan_obat_4_1x3
call alarm_mulai
jb k_menu,cek_alarm_4_1x3
jnb K_menu,$
jmp berhenti_4_1x3
cek_alarm_4_1x3:
call ambil_waktu
mov a,jam_rtc
cjne a,#20,alarm_4_1x3
mov a,menit_rtc
cjne a,#07,alarm_4_1x3
setb memori_4x3
jmp matikan_4_1x3
berhenti_4_1x3:
clr memori_4x3
matikan_4_1x3:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_4_1x3:
ret
scan_obat_4_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,keluar_4_1x4
mov a,menit_rtc
cjne a,#06,keluar_4_1x4
jb memori_4x4,alarm_4_1x4
jmp keluar_4_1x4
alarm_4_1x4:
call tampilan_obat_4_1x4
call alarm_mulai
jb k_menu,cek_alarm_4_1x4
jnb K_menu,$
jmp berhenti_4_1x4
cek_alarm_4_1x4:
call ambil_waktu
mov a,jam_rtc
cjne a,#02,alarm_4_1x4
mov a,menit_rtc
cjne a,#07,alarm_4_1x4
setb memori_4x4
jmp matikan_4_1x4
berhenti_4_1x4:
clr memori_4x4
matikan_4_1x4:
clr speaker
mov dptr,#waktu
call tulis_lcd
ret
keluar_4_1x4:
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
tampilan_obat_1_1x1:
mov dptr,#alarm_obat1_1
call tulis_lcd
ret
tampilan_obat_1_1x2:
mov dptr,#alarm_obat1_2
call tulis_lcd
ret
tampilan_obat_1_1x3:
mov dptr,#alarm_obat1_3
call tulis_lcd
ret
tampilan_obat_1_1x4:
mov dptr,#alarm_obat1_4
call tulis_lcd
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
tampilan_obat_2_1x1:
mov dptr,#alarm_obat2_1
call tulis_lcd
ret
tampilan_obat_2_1x2:
mov dptr,#alarm_obat2_2
call tulis_lcd
ret
tampilan_obat_2_1x3:
mov dptr,#alarm_obat2_3
call tulis_lcd
ret
tampilan_obat_2_1x4:
mov dptr,#alarm_obat2_4
call tulis_lcd
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
tampilan_obat_3_1x1:
mov dptr,#alarm_obat3_1
call tulis_lcd
ret
tampilan_obat_3_1x2:
mov dptr,#alarm_obat3_2
call tulis_lcd
ret
tampilan_obat_3_1x3:
mov dptr,#alarm_obat3_3
call tulis_lcd
ret
tampilan_obat_3_1x4:
mov dptr,#alarm_obat3_4
call tulis_lcd
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
tampilan_obat_4_1x1:
mov dptr,#alarm_obat4_1
call tulis_lcd
ret
tampilan_obat_4_1x2:
mov dptr,#alarm_obat4_2
call tulis_lcd
ret
tampilan_obat_4_1x3:
mov dptr,#alarm_obat4_3
call tulis_lcd
ret
tampilan_obat_4_1x4:
mov dptr,#alarm_obat4_4
call tulis_lcd
ret
reseter:
call ambil_waktu
mov a,jam_rtc
cjne a,#0,keluar
mov a,menit_rtc
cjne a,#0,keluar
mov memori_1,#0ffh
mov memori_2,#0ffh
mov memori_3,#0ffh
mov memori_4,#0ffh
keluar: ret
alarm_mulai:
call nada_alarm_1
call nada_alarm_2
call nada_alarm_3
ret
ambil_waktu:
mov dptr,#hour
call ambil_rtc_desimal
mov jam_rtc,tmp
mov dptr,#minute
call ambil_rtc_desimal
mov menit_rtc,tmp
ret
ambil_detik:
mov dptr,#secon
call ambil_rtc_desimal
mov detik_rtc,tmp
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Nada alarm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
nada_alarm_1:
mov bebas,#0
mulai_nada_1:
mov th0,#high nada_1
mov tl0,#high nada_1
setb tr0
jnb tf0,$
clr tr0
clr tf0
cpl speaker
djnz bebas,mulai_nada_1
ret
nada_alarm_2:
mov bebas,#0
mulai_nada_2:
mov th0,#high nada_2
mov tl0,#high nada_2
setb tr0
jnb tf0,$
clr tr0
clr tf0
cpl speaker
djnz bebas,mulai_nada_2
ret
nada_alarm_3:
mov bebas,#0
mulai_nada_3:
mov th0,#high nada_3
mov tl0,#high nada_3
setb tr0
jnb tf0,$
clr tr0
clr tf0
cpl speaker
djnz bebas,mulai_nada_3
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 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
disp_setting:
mov a,#0c1h
call write_inst
call ambil_data_rtc
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Settingan tombol pilihan
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_pilihan:
mov dptr,#rtc0
call tulis_lcd
pilihan_set_jam:
mov tmp1,#0
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,#0
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 alarm obat
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
setting_timer:
mov almcount,#0
mov dptr,#Obat_aktif_1
call tulis_lcd
mov dptr,#Alamat_obat_1
mov tmp1,#0
bou_t1a:
jnb k_menu,$
djnz tmp1,bou_t1a
Setting_t1a:
call disp_setting
set_t1a:
jb k_next,set_t2a
inc almcount
jnb k_next,$
jmp Setting_t2
set_t2a:
jb k_up,set_t3a
mov p0,#0ffh
call up_aktif
jmp setting_t1a
set_t3a:
jb k_down,set_t4a
mov p0,#0ffh
call down_aktif
jmp setting_t1a
set_t4a:
mov tmp1,#0
bou_t1b:
jb k_next,setting_t1a
djnz tmp1,bou_t1b
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t2:
jnb k_next,$
mov dptr,#obat_jenis_1
call tulis_lcd
mov dptr,#aktif_Obat_1
Setting_t2a:
call disp_setting
set_t1b:
jb k_next,set_t2b
inc almcount
jnb k_next,$
jmp setting_t3
set_t2b:
jb k_up,set_t3b
mov p0,#0ffh
call up_jenis
jmp setting_t2a
set_t3b:
jb k_down,setting_t2a
mov p0,#0ffh
call down_jenis
jmp setting_t2a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t3:
jnb k_next,$
mov dptr,#Obat_aktif_2
call tulis_lcd
mov dptr,#Alamat_obat_2
Setting_t3a:
call disp_setting
set_t1c:
jb k_next,set_t2c
inc almcount
jnb k_next,$
jmp setting_t4
set_t2c:
jb k_up,set_t3c
mov p0,#0ffh
call up_aktif
jmp setting_t3a
set_t3c:
jb k_down,setting_t3a
mov p0,#0ffh
call down_aktif
jmp setting_t3a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t4:
jnb k_next,$
mov dptr,#obat_jenis_2
call tulis_lcd
mov dptr,#aktif_Obat_2
Setting_t4a:
call disp_setting
set_t1d:
jb k_next,set_t2d
inc almcount
jnb k_next,$
jmp setting_t5
set_t2d:
jb k_up,set_t3d
mov p0,#0ffh
call up_jenis
jmp setting_t4a
set_t3d:
jb k_down,setting_t4a
mov p0,#0ffh
call down_jenis
jmp setting_t4a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t5:
jnb k_next,$
mov dptr,#Obat_aktif_3
call tulis_lcd
mov dptr,#Alamat_obat_3
Setting_t5a:
call disp_setting
set_t1e:
jb k_next,set_t2e
inc almcount
jnb k_next,$
jmp setting_t6
set_t2e:
jb k_up,set_t3e
mov p0,#0ffh
call up_aktif
jmp setting_t5a
set_t3e:
jb k_down,setting_t5a
mov p0,#0ffh
call down_aktif
jmp setting_t5a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t6:
jnb k_next,$
mov dptr,#obat_jenis_3
call tulis_lcd
mov dptr,#aktif_Obat_3
Setting_t6a:
call disp_setting
set_t1f:
jb k_next,set_t2f
inc almcount
jnb k_next,$
jmp setting_t7
set_t2f:
jb k_up,set_t3f
mov p0,#0ffh
call up_jenis
jmp setting_t6a
set_t3f:
jb k_down,setting_t6a
mov p0,#0ffh
call down_jenis
jmp setting_t6a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t7:
jnb k_next,$
mov dptr,#Obat_aktif_4
call tulis_lcd
mov dptr,#Alamat_obat_4
Setting_t7a:
call disp_setting
set_t1g:
jb k_next,set_t2g
inc almcount
jnb k_next,$
jmp setting_t8
set_t2g:
jb k_up,set_t3g
mov p0,#0ffh
call up_aktif
jmp setting_t7a
set_t3g:
jb k_down,setting_t7a
mov p0,#0ffh
call down_aktif
jmp setting_t7a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_t8:
jnb k_next,$
mov dptr,#obat_jenis_4
call tulis_lcd
mov dptr,#aktif_Obat_4
Setting_t8a:
call disp_setting
set_t1h:
jb k_next,set_t2h
inc almcount
jnb k_next,$
jmp setting_7
set_t2h:
jb k_up,set_t3h
mov p0,#0ffh
call up_jenis
jmp setting_t8a
set_t3h:
jb k_down,setting_t8a
mov p0,#0ffh
call down_jenis
jmp setting_t8a
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Settingan tombol jam dan kalender
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Setting_1:
mov almcount,#0
mov dptr,#rtc1
call tulis_lcd
mov dptr,#hour
mov tmp1,#0
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,#0
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 waktu aktif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_aktif:
call baca_rtc_up
cjne a,#02,cek_01
cek_01:
jc belum_01
clr a
belum_01:
jmp tulis_rtc
Down_aktif:
call baca_rtc_down
cjne a,#0ffh,aktif_255
mov a,#01
aktif_255:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Rutin tambah & kurangi jenis obat
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Up_jenis:
call baca_rtc_up
cjne a,#05,cek_04
cek_04:
jc belum_04
clr a
belum_04:
jmp tulis_rtc
Down_jenis:
call baca_rtc_down
cjne a,#0ffh,jenis_255
mov a,#04
jenis_255:
jmp tulis_rtc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 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 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 ‘ Alarm Pengingat’,'~Efqi Voluntoro~’
alarm_obat1_1:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 1 ‘
alarm_obat1_2:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 1 ‘
alarm_obat1_3:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 1 ‘
alarm_obat1_4:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 1 ‘
alarm_obat2_1:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 2 ‘
alarm_obat2_2:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 2 ‘
alarm_obat2_3:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 2 ‘
alarm_obat2_4:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 2 ‘
alarm_obat3_1:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 3 ‘
alarm_obat3_2:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 3 ‘
alarm_obat3_3:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 3 ‘
alarm_obat3_4:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 3 ‘
alarm_obat4_1:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 4 ‘
alarm_obat4_2:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 4 ‘
alarm_obat4_3:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 4 ‘
alarm_obat4_4:db ‘ Alarm Berbunyi ‘,’ Obat Jenis 4 ‘
Waktu:db ‘ ‘,’ 20 ‘
Rtc0: db ‘Up ~Atur Waktu’,'Down ~Atur Alarm’
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 ] ‘
obat_aktif_1:db ‘Obat 1 00 = Non ‘,’[ ] 01 = Aktf’
obat_aktif_2:db ‘Obat 2 00 = Non ‘,’[ ] 01 = Aktf’
obat_aktif_3:db ‘Obat 3 00 = Non ‘,’[ ] 01 = Aktf’
obat_aktif_4:db ‘Obat 4 00 = Non ‘,’[ ] 01 = Aktf’
obat_jenis_1:db ‘Jdwl x1=01,x2=02′,’[ ] x3=03,x4=04′
obat_jenis_2:db ‘Jdwl x1=01,x2=02′,’[ ] x3=03,x4=04′
obat_jenis_3:db ‘Jdwl x1=01,x2=02′,’[ ] x3=03,x4=04′
obat_jenis_4:db ‘Jdwl x1=01,x2=02′,’[ ] x3=03,x4=04′
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