Jumat, 03 Februari 2012

RTC DS12C887: Contoh Aplikasi

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)
  • 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), 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
 
 ( Selamat Mencoba....n terima kasih bpk Agfianto atas infonya......)

0 komentar: