• Tidak ada hasil yang ditemukan

BAB IV HASIL DAN PEMBAHASAN

4.2 Pengamatan Sistem

4.2.4 Pengamatan Sistem RTC

Cara pembacaan detik, menit,jam, hari, tanggal, bulan dan tahun adalah dengan mengatur register-register yang ada pada RTC. Sebelum melakukan pembacaan data-data tersebut di atas, terlebih dahulu RTC diinisialisasi. Berikut adalah penggalan program yang dipergunakan untuk mengaktifkan atau menginisialisasi RTC DS12887.

1. INIT_RTC: MOV A,#00100000B 2. MOV DPTR,#REG_A 3. MOVX @DPTR,A 4. MOV A,#00010010B 5. MOV DPTR,#REG_B 6. MOVX @DPTR,A 7. RET

Pada proses inisialisasi RTC ini, register A berada pada alamat 000AH dan akan diisikan dengan data 00100000B. Hal ini berarti bahwa RS0 sampai RS3 = ‘0000’, DV0 sampai DV2 = ‘010’ dan UIP = ‘0’. Kombinasi DV0,DV1,DV2 = 010 pada register A adalah untuk mengaktifkan osilator. Untuk register B berada pada alamat 000BH dan akan diisikan dengan data 00010010B. Hal ini berarti DSE = ‘0’, 24/12 = ‘1’, DM = ‘0’, SQWE = ‘0’, UIE = ‘1’, AIE = ‘0’, PIE = 0 dan SET = ‘0’. Data yang diisikan ke register ini adalah untuk mempersiapkan RTC pada mode data BCD dan sistem pewaktuan berdasarkan 24 jam.

1. READ_RTC: MOV DPTR,#DETIK

2. MOX A,@DPTR 3. MOV DATA_DETIK,A 4. MOV DPTR,#MENIT 5. MOVX A,@DPTR 6. MOV DATA_MENIT,A 7. MOV DPTR,#HOURS 8. MOVX A,@DPTR 9. MOV DATA_HOURS,A 10. MOV DPTR,#DAY 11. MOVX A,@DPTR 12. MOV DATA_DAY,A 13. MOV DPTR,#DATE 14. MOVX A,@DPTR 15. MOV DATA_DATE,A 16. MOV DPTR,#BULAN 17. MOVX A,@DPTR 18. MOV DATA_BULAN,A 19. MOV DPTR,#TAHUN 20. MOVX A,@DPTR 21. MOV DATA_TAHUN,A 22. RET

Potongan program diatas (READ_ RTC) adalah untuk membaca register-register pewaktuan di RTC. Seperti untuk membaca data detik, terlebih dahulu DPTR diisikan dengan alamat detik (0000H) kemudian memindahkan data yang berada di alamat detik ke penampung sementara (Accumulator). Setelah data

dipindahkan kemudian dipindahkan lagi ke DATA_DETIK untuk diproses atau ditampilkan ke unit penampil nantinya. Cara pembacaan data detik ini sama saja dengan pembacaan data untuk menit, jam, hari, tanggal, bulan dan tahun.

4.2.4.2. Subrutin Pengesetan (UPDATE) Pewaktuan

Untuk melakukan pengesetan (UPDATE) RTC sesuai dengan data-data waktu yang diinginkan maka register A pada RTC harus diubah terlebih dahulu. Pengubahan ini dilakukan dengan pengesetan bit UIP pada register A seperti pada potongan program UPDATE pada baris pertama kemudian mengeset data-data pewaktuan sesuai dengan yang diinginkan.

1. UPDATE: MOV A,#10000000B 2. MOV DPTR,#REG_A

3. MOVX @DPTR,A

4. RET

Setelah dilakukan pengesetan, maka data-data pengesetan tersebut disimpan kembali ke alamat register-register pewaktu RTC. Seperti pada potongan program UPDATE_RTC, pada baris pertama data jam (DATA_HOURS) dipindahkan terlebih dahulu ke akumulator kemudian data akumulator disimpan ke alamat register jam (0004H). Proses untuk register-register yang lain dilakukan dengan cara yang sama.

1. UPDATE_RTC: MOV A,DATA_HOURS

2. MOV DPTR,#HOURS

3. MOVX @DPTR,A

4. MOV A,DATA_MENIT

5. MOV DPTR,#MENIT

7. MOV A,DATA_DAY 8. MOV DPTR,#DAY 9. MOVX @DPTR,A 10. MOV A,DATA_DATE 11. MOV DPTR,#DATE 12. MOVX @DPTR,A 13. MOV A,DATA_BULAN 14. MOV DPTR,#BULAN 15. MOVX @DPTR,A 16. MOV A,DATA_TAHUN 17. MOV DPTR,#TAHUN 18. MOVX @DPTR,A 19. RET

4.2.4.3. Subrutin Pengesetan Data Menit

Pada bagian ini, tidak dilakukan pengesetan ulang terhadap data detik. Penulis hanya melakukan pengesetan data menit, jam, hari, tanggal, bulan dan tahun. Potongan program pengesetan data menit dapat dilihat di bawah ini dan akan terlaksana apabila tombol tanda pagar (#) di tekan untuk pengesetan data menit. Untuk pengesetan data menit, terlebih dahulu dilakukan UPDATE seperti yang sudah dijelaskan sebelumnya, kemudian DATA_MENIT dinaikan satu bit sampai data yang diinginkan tercapai. DATA_MENIT menit akan berulang terus dari 00 sampai 59 apabila tanda pagar ditekan terus. Setelah proses pengesetan, akan dilakukan tunda waktu kemudian data-data hasil pengesetan disimpan kembali ke register-register pewaktuan (UPDATE_RTC) kemudian RTC diinisialisasi kembali.

1. SET_MENIT: LCALL UPDATE

2. INC DATA_MENIT

3. MOV R6,DATA_MENIT

4. SET_MENIT_1: CJNE R6,#0AH,SET_MENIT_2

5. MOV DATA_MENIT,#10H

6. LJMP OUT_SET_MENIT

7. SET_MENIT_2: CJNE R6,#1AH,SET_MENIT_3

8. MOV DATA_MENIT,#20H

9. LJMP OUT_SET_MENIT

11. MOV DATA_MENIT,#30H

12. LJMP OUT_SET_MENIT

13. SET_MENIT_4: CJNE R6,#3AH,SET_MENIT_5

14. MOV DATA_MENIT,#40H

15. LJMP OUT_SET_MENIT

16. SET_MENIT_5: CJNE R6,#4AH,SET_MENIT_6

17. MOV DATA_MENIT,#50H

18. LJMP OUT_SET_MENIT

19. SET_MENIT_6: CJNE R6,#5AH,OUT_SET_MENIT

20. MOV DATA_MENIT,#00H

21. OUT_SET_MENIT: LCALL DELAY_BENTAR

22. LCALL UPDATE_RTC

23. LCALL INIT_RTC

24. RET

4.2.4.4. Subrutin Pengesetan Data Jam

Potongan program di bawah ini adalah untuk pengesetan data jam. Pengesetan data jam dilakukan dengan penekanan tomol tanda bintang (*) pada keypad. Cara pengesetan data jam sama saja dengan cara pengesetan pada data menit. Yang membedakannya adalah pada pengesetan jam ini, data jam berada antara 00 sampai 23. Apabila sudah mencapai 23 maka data jam akan kembali ke 00. Pengesetan data jam ini juga menggunakan tunda waktu dan hasil pengesetan tetap disimpan pada register-register pewaktu kemudian RTC diinisialisasi .

1. SET_JAM: LCALL UPDATE 2. INC DATA_HOURS 3. MOV R6,DATA_HOURS 4. CJNE R6,#17H,SET_JAM_1 5. MOV DATA_HOURS,#00H 6. LJMP OUT_SET_JAM

7. SET_JAM_1: CJNE R6,#0AH,SET_JAM_2 8. MOV DATA_HOURS,#10H

9. SET_JAM_2: CJNE R6,#1AH,OUT_SET_JAM 10. MOV DATA_HOURS,#20H

11. OUT_SET_JAM: LCALL DELAY_BENTAR 12. LCALL UPDATE_RTC

13. LCALL INIT_RTC

4.2.4.5. Subrutin Pengesetan Data Hari

Untuk pengesetan data hari dilakukan dengan menekan tombol 1 pada keypad. Pengesetan data hari ini dimulai dari hari Minggu (Minggu =1) dan dilanjutkan dengan hari selanjutnya sampai hari Sabtu. Dengan demikian data hari berada antara 1-7 dan ketika penjumlahan satu bit pada potongan program baris ke dua mencapai 8, maka data hari akan di reset (hari = 1) atau DATA_DAY = 1.

1. SET_HARI: LCALL UPDATE 2. INC DATA_DAY 3. MOV R6,DATA_DAY 4. CJNE R6,#08H,SET_HARI_1 5. MOV DATA_DAY,#01H 6. SET_HARI_1: LCALL DELAY_BENTAR 7. LCALL UPDATE_RTC

8. LCALL INIT_RTC

9. RET

4.2.4.6. Subrutin Pengesetan Data Tanggal

Penanggalan dalam tiap bulan adalah berbeda-beda, dengan demikian pada pengesetan data tanggal ini digunakan data tanggal yang paling tinggi (Tanggal 31) sebagai batas perulangan (01 – 31). Pengesetan data tanggal dilakukan penekanan tombol 2 pada keypad dan hasil penekanan tombol ini akan menambahkan 1 bit pada data tanggal (DATA_DATE). Bila tombol 2 pada keypad ditekan secara terus-menerus maka data tanggal akan berubah sesuai dengan batasan tanggal dalam satu bulan. Tunda waktu dan penyimpanan ke alamat register tanggal serta inisialisasi RTC tetap dilakukan seperti pada program-program pengesetan data sebelumnya.

1. SET_TANGGAL: LCALL UPDATE 2. INC DATA_DATE 3. MOV R6,DATA_DATE

4. SET_TANGGAL_1: CJNE R6,#0AH,SET_TANGGAL_2 5. MOV DATA_DATE,#10H

6. LJMP OUT_SET_TGL

7. SET_TANGGAL_2: CJNE R6,#1AH,SET_TANGGAL_3 8. MOV DATA_DATE,#20H

9. LJMP OUT_SET_TGL

10. SET_TANGGAL_3: CJNE R6,#2AH,SET_TANGGAL_4 11. MOV DATA_DATE,#30H

12. LJMP OUT_SET_TGL

13. SET_TANGGAL_4: CJNE R6,#32H,OUT_SET_TGL 14. MOV DATA_DATE,#01H 15. OUT_SET_TGL: LCALL DELAY_BENTAR 16. LCALL UPDATE_RTC

17. LCALL INIT_RTC

18. RET

4.2.4.7. Subrutin Pengesetan Data Bulan

Pengesetan data bulan dilakukan dengan penekanan tombol 3 pada keypad. Data bulan akan bertambah satu bit (01 – 12) bila tombol ini ditekan satu kali dan bila tombol ini ditekan terus menerus dan data bulan mencapai 12 (Desember) maka data bulan akan kembali ke 01 atau bulan Januari. Data data bulan ini dikodekan dengan nama-nama bulan yang sebenarnya. Pengkodean dimulai dari 01 – 12 dengan Januari - Desember. Data bulan yang sudah dilakukan pengesetan disimpan kembali ke register bulan serta dilakukan penundaan waktu dan inisialisasi RTC.

1. SET_BULAN: LCALL UPDATE

2. INC DATA_BULAN

3. MOV R6,DATA_BULAN 4. SET_BULAN_1: CJNE R6,#0AH,SET_BULAN_2 5. MOV DATA_BULAN,#10H 6. LJMP OUT_SET_BULAN

7. SET_BULAN_2: CJNE R6,#13H,OUT_SET_BULAN 8. MOV DATA_BULAN,#01H

9. OUT_SET_BULAN: LCALL DELAY_BENTAR

10. LCALL UPDATE_RTC

11. LCALL INIT_RTC

4.2.4.8. Subrutin Pengesetan Data Tahun

Untuk data tahun, hanya ditampilkan data tahun dua digit terakhir dari data tahun yang sebenarnya (00 sampai 19). Pengesetan data tahun ini dilakukan dengan penekanan tombol 4 pada keypad. Data tahun ini tidak diikut sertakan dalam pemrograman data waktu ON dan OFF relay yang diprogram. Dengan demikian, disini ditampilkan data tahun secara real time seperti pada penampilan data detik.

1. SET_TAHUN: LCALL UPDATE 2. INC DATA_TAHUN 3. MOV R6,DATA_TAHUN

4. SET_TAHUN_1: CJNE R6,#0AH,SET_TAHUN_2 5. MOV DATA_TAHUN,#10H

6. LJMP OUT_SET_TAHUN

7. SET_TAHUN_2: CJNE R6,#1AH,OUT_SET_TAHUN 8. MOV DATA_TAHUN,#01H

9. OUT_SET_TAHUN: LCALL DELAY_BENTAR 10. LCALL UPDATE_RTC 11. LCALL INIT_RTC

12. RET

Karena RTC tidak dapat digunakan, maka dicoba dengan membuat suatu sistem pewaktuan dari mikrokontroler. Pada bagian ini, program yang digunakan untuk pembacaan data waktu dan program pewaktuan tiap Output adalah sama dengan pada saat menggunakan RTC. Perbedaannya adalah pada bagian ini, data waktu terlebih dahulu ditentukan dan disimpan, kemudian di-rolling sehingga menyerupai sebuah sistem pewaktuan (jam, menit, detik, hari, tanggal, bulan dan tahun).

4.2.5. Pengamatan Sistem Pewaktuan Mikrokontroler

Dokumen terkait