Untuk memahami bagaimana menggunakan RTC DS12C887, maka artikel yang ke-3 dibahas tentang contoh aplikasi sederhana, menampilkan data detik ke serangkaian 8 LED (mewakili 8-bit) yang terhubung ke P0.
Ini program selengkapnya…
CS BIT P1.3 ; CHIP SELECT
ALE BIT P1.2 ; ADDRESS LATCH EENABLE
WRITE BIT P1.1 ; WRITE PIN
READ BIT P1.0 ; READ PIN
PORTDATA EQU P2 ; AD0 S/D AD7 PADA RTC MELALUI P2 PADA UC
REGA EQU 10 ; ALAMAT REGISTER A
REGB EQU 11 ; ALAMAT REGISTER B
;
ORG 0H
CLR CS ; AKTIVKAN RTC DENGAN MENG-NOL-KAN CS, AKTIF RENDAH
CALL INIT_RTC ; LAKUKAN INISIALISASI RTC
START:
MOV PORTDATA,#00H ; 00H = ALAMAT DETIK PADA RTC
CLR ALE ; PENGUNCIAN ALAMAT 0-1-0
SETB ALE
CLR ALE
;
SETB WRITE ; SINYAL WRITE = 1
;
SETB READ
CLR READ ; SINYAL READ = 0
MOV A,PORTDATA ; BACA DATA DARI ALAMAT 00H = DETIK
SETB READ
;
MOV P0,A ; KIRIM DATA DETIK KE LED DI P0
SJMP START
;
INIT_RTC:
SETB READ ; LAKUKAN INISIALISASI PADA REGISTERA DI RTC
MOV PORTDATA,#REGA ; KIRIM ALAMAT REGISTER A
CLR ALE ; SEKUENS 0-1-0 PADA ALE
SETB ALE
CLR ALE
;
SETB WRITE ; INISIALISASI PENULISAN DATA
CLR WRITE
MOV PORTDATA,#20H ; TULISKAN 20H
SETB WRITE
;
MOV PORTDATA,#REGB ; INISIALISASI REGISTERB
CLR ALE
SETB ALE
CLR ALE
;
SETB WRITE
CLR WRITE
MOV PORTDATA,#02H ; TULISKAN DATA 02H
SETB WRITE
;
RET
;
END
Penjelasan
- Program diawali dengan mendefinisikan beberapa variabel yang berkaitan dengan rangkaian yang dibuat. Pin CS dihubungkan ke P1.3, pin AS atau ALE dihubungkan ke P1.2, pin R/W atau WRITE (karena kita menggunakan mode Pewaktuan Bus Intel, pin MOT Anda hubungkan ke GND), dan pin DS atau READ dihubungkan ke P1.0. Untuk pin AD0 s/d AD7 masing-masing dihubungkan ke P2.0 s/d P2.7:
CS BIT P1.3 ; CHIP SELECT
ALE BIT P1.2 ; ADDRESS LATCH EENABLE
WRITE BIT P1.1 ; WRITE PIN
READ BIT P1.0 ; READ PIN
PORTDATA EQU P2 ; AD0 S/D AD7 PADA RTC MELALUI P2 PADA UC
- Alamat untuk register A dan B (lihat kembali gambar ini) juga kita definisikan, masing-masing 10h dan 11h:
REGA EQU 10 ; ALAMAT REGISTER A
REGB EQU 11 ; ALAMAT REGISTER B
- Berikutnya, seperti biasa, inisialisasi alamat awal Assembly di 0h, diikuti dengan aktivasi RTC dengan membuat rendah pin CS (CLR CS), serta inisialisasi RTC dengan cara memanggil subturin INIT_RTC):
ORG 0H
CLR CS ; AKTIVKAN RTC DENGAN MENG-NOL-KAN CS, AKTIF RENDAH
CALL INIT_RTC ; LAKUKAN INISIALISASI RTC
- Pada subrutin INIT_RTC, diawali dengan membuat HIGH pin READ:
INIT_RTC:
SETB READ ; LAKUKAN INISIALISASI PADA REGISTERA DI RTC
- Kemudian dilakukan pengiriman alamat register A melalui P2 (PORTDATA):
MOV PORTDATA,#REGA ; KIRIM ALAMAT REGISTER A
- Agar alamat tersebut terkunci (latched) pada RTC DS12C887, maka jangan lupa dilakukan sekuens 0-1-0 pada ALE:
CLR ALE ; SEKUENS 0-1-0 PADA ALE
SETB ALE
CLR ALE
- Dilanjutkan dengan inisialisasi penulisan data ke Register A di dalam sekuens 1-0-1 pada pin WR atau WRITE, data yang ditulis adalah 20h, artinya (dalam biner = 0010 0000B) UIP=0, DV2, Dv1, Dv0 masing-masing 0, 1, dan 0, artinya osilator dalam kondisi di-ON-kan. RS3, RS2, Rs1, dan Rs0 semuanya 0, artinya tidak ada luaran pada SQW (tidak membutuhkan pulsa kotak) dan tidak ada interupsi secara periodik (perhatikan tabel ini):
SETB WRITE ; INISIALISASI PENULISAN DATA
CLR WRITE
MOV PORTDATA,#20H ; TULISKAN 20H
SETB WRITE
- Kemudian register B kita isi dengan data 02h (caranya sama seperti pada register A), artinya (perhatikan gambar ini) , SET=0 (register data dapat diupdate setiap detiknya), PIE=0 (tidak ada interupsi periodik), AIE=0 (tidak menggunakan interupsi alarm), UIE=0, SQWE=0 (tidak memebutuhkan luaran gelombang kotak), DM=0 (format BCD di register data), 24/12=1 (menggunakan format pewaktuan 24 jam), dan DSE=0 (tidak menggunakan fasilitas DayLight Saving):
MOV PORTDATA,#REGB ; INISIALISASI REGISTERB
CLR ALE
SETB ALE
CLR ALE
;
SETB WRITE
CLR WRITE
MOV PORTDATA,#02H ; TULISKAN DATA 02H
SETB WRITE
;
RET
- Selanjutnya adalah proses rutinitas membaca data detik yang kemudian ditampilkan pada tampilan 8 LED. Diawali dengan mengirim alamat data detik (00h, lihat gambar ini), diikuti dengan sekuens 0-1-0 pada ALE:
START:
MOV PORTDATA,#00H ; 00H = ALAMAT DETIK PADA RTC
CLR ALE ; PENGUNCIAN ALAMAT 0-1-0
SETB ALE
CLR ALE
- Kemudian persiapan pembacaan data detik, diawali dengan pin WRITE=HIGH, kemudian sekuensi 1-0-1 pada pin READ yang menandung pembacaan data detik
SETB WRITE ; SINYAL WRITE = 1
;
SETB READ
CLR READ ; SINYAL READ = 0
MOV A,PORTDATA ; BACA DATA DARI ALAMAT 00H = DETIK
SETB READ
- Hasil pembacaan ditampilkan pada LED di P0 (Port-0), dan diulang lagi dari awal (label START):
MOV P0,A ; KIRIM DATA DETIK KE LED DI P0
SJMP START
- Ada pertanyaan? Komentar?
Links:
- RTC DS12C887: Pendahuluan (klik)
- RTC DS12C887: Register Data dan Kontrol (klik)
- RTC DS12C887: Contoh Aplikasi (klik)
Semoga bermanfaat…