• Tidak ada hasil yang ditemukan

Program utama merupakan bagian yang dikerjakan saat mikrokontroler dicatu daya atau saat mikrokontroler direset. Program utama dimulai dengan proses inisialasi LCD, inisialisasi RTC, dan inisialisasi alamat data. Setelah proses inisialisasi selesai, pada LCD akan ditampilkan biaya beban untuk listrik rumah tangga 1300W sebagai total biaya awal. Langkah selanjutnya yaitu menghitung banyaknya putaran piringan KWh meter mekanik yang mana besar pemakaian energi listrik akan bertambah 1 KWh untuk setiap 1250 putaran. Nilai dari banyaknya pemakaian energi listrik akan ditampilkan ke LCD untuk setiap perubahannya. Setelah menerima data besar pemakaian energi listrik, selanjutnya program akan menghitung besar biaya pemakaian energi listrik dan menampilkan ke LCD. Langkah terakhir adalah menanyakan waktu. Jika waktu sudah 1 bulan, maka program akan menyimpan data jumlah dan besar biaya pemakaian energi listrik bulan tersebut dan memulai perhitungan baru untuk 1 bulan berikutnya (reset program). Diagram alir program utama alat penampil jumlah dan biaya pemakaian energi listrik pada KWh meter mekanik (analog) ditunjukkan pada gambar 3.9.

MULAI

INISIALISASI ALAMAT DATA, LCD, RTC

TAMPILKAN TOTAL BIAYA AWAL (BIAYA BEBAN)

COUNTER + 1 KWh + 1 RESET P3.4 = 1 COUNTER = 1250 1BULAN TAMPILKAN JUMLAH KWh KE LCD TAMPILKAN TOTAL BIAYA KE LCD Y T Y T Y T P3.4 = 0 T Y SIMPAN DATA HITUNG BIAYA PEMAKAIAN

3.2.2 Sub-routine Hitung Biaya Pemakaian

Proses ini akan diawali dengan menentukan jumlah KWh sekarang termasuk dalam blok 1, 2, atau 3. Jumlah KWh akan dikurangkan 21, dimana nilai 21 ini adalah nilai awal untuk blok 2. Jika hasil pengurangan bernilai negatif (cy=1), berarti jumlah KWh masih berada dalam perhitungan blok 1 (KWh<21). Jika hasil pengurangan bernilai positif (cy=0), berarti jumlah KWh tidak berada dalam perhitungan blok 1 tapi mungkin berada dalam perhitungan blok 2 atau blok 3. Untuk memastikan hal itu maka proses berikutnya adalah mengurangkan jumlah KWh dengan 61, dimana nilai 61 ini adalah nilai awal untuk blok 3. Jika hasil pengurangan bernilai negatif (cy=1), berarti jumlah KWh berada dalam perhitungan blok 2 (KWh<61). Jika hasil pengurangan bernilai positif (cy=0), berarti jumlah KWh tidak berada dalam perhitungan blok 2 tapi berada dalam perhitungan blok 3. Setelah mengetahui jumlah KWh termasuk dalam blok 1, 2, atau 3, maka proses berikutnya adalah melakukan proses aritmatika untuk menghitung biaya pemakaian listrik sesuai dengan jumlah KWh yang terpakai. Berikut adalah potongan program untuk sub-routine hitung biaya pemakaian dan diagram alir sub-routine hitung biaya pemakaian:

biaya:

mov a,kwh ; ambil data jumlah kwh subb a,#21 ; data jumlah kwh dikurang 21

jnb cy,hitblok2 ; lompat ke ‘hitblok2’ jika hasil pengurang bernilai positif (cy = 0), lanjutkan program jika cy = 1 mov dptr,#blok1 ; ambil data harga blok 1

lcall aritma ; hitung biaya ljmp balik

hitblok2:

mov a,kwh ; ambil data jumlah kwh subb a,#61 ; data jumlah kwh dikurang 61

positif (cy = 0), lanjutkan program jika cy = 1 mov dptr,#blok2 ; ambil data harga blok 2

lcall aritma ; hitung biaya ljmp balik

hitblok3:

mov a,kwh ; ambil data jumlah kwh mov dptr,#blok3 ; ambil data harga blok 3 lcall aritma ; hitung biaya

balik:

lcall ubah_ascii1 ; ubah bcd dan ascii untuk tampilan biaya total ret mulai Isi Alamat DPTR DPTR = Blok 1 KWh < 21 Panggil Sub-routine Proses Aritmatika (menghitung Biaya) selesai Isi Alamat DPTR DPTR = Blok 2 Isi Alamat DPTR DPTR = Blok 3 Ambil Data Variabel KWh KWh < 61 Panggil Sub-routine Proses Aritmatika (menghitung Biaya) Panggil Sub-routine Proses Aritmatika (menghitung Biaya) T Y Y T

Gambar 3.10. Diagram Alir Sub-routine hitung biaya pemakaian

3.2.3 Sub-routine Aritmetika

Proses aritmatika diawali dengan pengisian register 0 (R0) dengan data 3 desimal, maksudnya karena ada 3 data pada harga blok yang akan diambil. Masing – masing data itu adalah data satuan, data puluhan, dan data ratusan. Sebelumnya perlu diketahui bahwa data – data baik pada harga blok maupun pada biaya total, semua sudah dalam bentuk BCD. Untuk setiap proses penjumlahan

jika hasilnya lebih dari 1 digit decimal (menghasilkan puluhan), maka data puluhan dari hasil penjumlahan akan ditambahkan ke data berikutnya. Saat R0 = 3, maka akan dilakukan penjumlahan data satuan antara harga blok dan biaya total (saat kwh = 0, biaya total = biaya beban). Selanjutnya DPTR akan diisi dengan data puluhan harga blok dan isi R0 dikurang 1 (R0 = 2), maka data puluhan antara harga blok dan biaya total akan dijumlahkan. Saat R0 = 1 dan DPTR berisi data ratusan harga blok, maka data ratusan antara harga blok dan biaya total akan dijumlahkan.

Berikut adalah potongan program untuk sub-routine aritmatika dan diagram alir sub-routine aritmatika:

aritma:

mov r0,#3 ; isi R0 untuk proses pengambilan data ulang:

clr a

movc a,@a+dptr ; ambil data di DPTR

cjne r0,#3,puluhan1 ; R0=3? Jika YA ke proses berikutnya ; Jika TIDAK lompat ke ‘puluhan1’ lcall satuan

ljmp balik1 puluhan1:

cjne r0,#2,ratusan1 ; R0=2? Jika YA ke proses berikutnya ; Jika TIDAK lompat ke ‘ratusan1’ lcall puluhan

ljmp balik1 ratusan1:

lcall ratusan balik1:

inc dptr ; isi DPTR dengan data berikutnya (DPTR + 1) djnz r0,ulang ; R0=0? Jika YA ke proses berikutnya

; Jika TIDAK lompat ke ‘ulang’ ret

Gambar 3.11. Sub-routine Aritmetika

Kemudian pada sub-routine satuan, puluhan dan ratusan. Berikut adalah potongan program dan diagram alirnya:

satuan:

add a,r7 ; jumlahkan data satuan lcall cantik2

jnb cy,ambil1

mov r7,50h ; simpan data satuan ret

puluhan:

add a,r6 ; jumlahkan data puluhan lcall cantik2

jnb cy,ambil2

mov r6,50h ; simpan data puluhan ret

ratusan:

add a,r5 ; jumlahkan data ratusan lcall cantik2

jnb cy,ambil3

mov r5,50h ; simpan data ratusan ret

Jika cy = 1 berarti pengurangan menghasilkan carry. Dengan perintah JNB, maka lompat bila tidak bit (cy = 0). Pada sub-routine ini, alamat 50h digunakan sebagai alamat penyimpan hasil sementara. Sebagai contoh untuk menghitung harga 1 KWh, maka biaya beban akan ditambah harga blok 1 yang prosesnya sebagai berikut:

R7 = 0 (data satuan biaya beban), Acc = 5 (data satuan harga blok 1). R7 + Acc = 5 (hasil disimpan di Acc kemudian simpan sementara di 50h). Subb a,#10 (Acc – 10 desimal; hexa = 0A).

Hasil pengurangan menghasilkan cy = 1, maka R7 = 50h (data di 50h dipindahkan ke R7 sebagai data satuan).

R6 = 3, Acc = 8 R6 + Acc = 11

Subb a,#10 (hasil 1 simpan di Acc, kemudian disimpan di 50h), karena cy = 0 maka ambil data ratusan (R5 = 1) kemudian jumlahkan dengan hasil (1) dan kemudian dengan data ratusan harga blok 1 (3), hasil penjumlahan disimpan di Acc.

Subb a,#10 (5 – 10), menghasilkan cy =1; maka data di 50h (1) akan disimpan di R6 sebagai data satuan dan hasil pengurangan akan disimpan di R5 sebagai data ratusan yang mana data tersebut dipindahkan dulu dari Acc ke 50h, karena Acc akan digunakan untuk proses berikutnya (hitung data ribuan sampai ratusan ribu).

3.2.4 Diagram Alir Tampil LCD

3.2.4.1Inisialisasi LCD

Proses inisialisasi LCD merupakan proses pengiriman data ke LCD yang mana di dalam data tersebut diatur sedemikian rupa agar LCD dapat bekerja sesuai keinginan. Adapun program untuk inisialisasi LCD adalah sebagai berikut: init_lcd:

mov a,#3fh ; set LCD untuk 8 bit, 2 baris, 5 x 10 dot lcall tulis_perintah

lcall tulis_perintah

mov a,#0dh ; display ON, cursor OFF, blinking ON lcall tulis_perintah

mov a,#06h ; set mode (pergeseran_bertambah atau kekanan) lcall tulis_perintah

mov a,#01h ; clear display lcall tulis_perintah

mov a,#0ch ; display ON, cursor OFF, blinking OFF lcall tulis_perintah

ret

3.2.4.2Menampilkan Karakter pada LCD

Pada proses menampilkan karakter pada LCD, yang perlu diingat adalah membuat pin R/W dan RS berlogika ‘0’ untuk perintah pengiriman instruksi, dan membuat pin R/W berlogika ‘0’ dan pin RS berlogika ‘1’ untuk perintah pengiriman data.

3.2.5 Menjalankan Waktu (Real Time Clock) MULAI NAIKKAN DETIK NOLKAN DETIK MENIT = MENIT + 1 NOLKAN MENIT JAM = JAM + 1 NOLKAN JAM HARI = HARI + 1 DETIK = 60 ? MENIT = 60 ? JAM = 24 ? HARI = 30 ? RETURN T Y T Y Y T T Y

BAB IV

HASIL PENGAMATAN DAN PEMBAHASAN

Pada bab ini akan dibuktikan hasil perancangan dengan menampilkan beberapa hasil percobaan beserta analisanya.

Dokumen terkait