Sabtu, 04 Februari 2012

Pengujian LCD karakter 2X16 dengan Program Sederhana menggunakan Bahasa Program Assembly



Ngomong-ngomongin mikro jadi inget masa lalu nih saya. Pertama kali saya mencoba LCD 2x16 dengan program Assembly. Langsung aja deh tanpa basa basi yg terlalu panjaaaaang....panjang kaya punya saya yg banyak di sukai bidadari didunia...hehehe..(celana panjang maksudnya)..hehehe. Saya punya contoh program sederhananya nih untuk ngetes LCD berjalan dengan baik atau tidak....mudah-mudahan bermanfaat ye...??

Pengujian LCD karakter 2x16 dengan cara pembuatan perangkat lunak terlebih dahulu untuk Menampilkan Data ke LCD Karakter 2x16. Hal ini dijalankan dengan mengirimkan inisialisasi dan mengkonfigurasikan sejumlah instruksi ke LCD. Antara lain: pengaturan lebar data interface 8 bit atau 4 bit data bus, pemilihan ukuran font karakter 5x8 atau 5x11 dan lain-lain, dengan instruksi sebagai berikut.

Init_lcd:
                mov r1,#00000001b           ;Display clear
                call write_inst ;
                mov r1,#00111000b           ;Function set,
                                                                ;Data 8 bit,2 line font 5x8
                call write_inst ;
                mov r1,#00001100b           ;Display on,
                                                             ;cursor off,cursor blink off
                call write_inst
                mov r1,#00000111b           ;Entry mode, Set increment
                call write_inst
                 ret
           ;
Pada pembuatan perangkat lunak ini akan menuliskan kalimat ”GUNAWAN AMSARI ELEKTRO” yang akan ditampilkan pada layar LCD Karakter dengan menggunakan look up table dan dilakukan proses geser ke kiri atau kekanan sesuai dengan keinginan kita hanya merubah sedikit programnya aja c...dibagian : mov        R1,#geserL ;R1 = GeserLeft.

contoh hasilnya seperti ini :



Untuk melakukan pembuatan perangkat lunak ini harus melakukan beberapa langkah sebagai berikut:
1.       Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V
2.       Hubungkan modul Mikrokontroler Trainer dengan power supply +5V.
3.      Hubungkan modul Mikrokontroler Trainer dengan rangkaian programmer
4.      Buka Program MCS-51, sebagai editor dan compiler program
5.      Ketik program berikut ini:

$mod52
;
;
DataLCD               equ         30h
geserL                   equ         00011011b ; 0 0 0 1 S/C R/L X X
geserR                   equ         00011111b ; 0 0 0 1 S/C R/L X X
;
org          0h
ljmp        startprogram
;;;;;;;;;;;;;;;;;;;;;;SUBROUTINES;;;;;;;;;;;;;;;;;;;;;;;;;;;
startprogram:      
                                call          init_LCD
                                call          write_char
                                call          geser
                                sjmp       startprogram
                                ret

geser:
                               mov        R6,#34         ;R6 = 34; geser sebanyak 34 karakter
lagi:                        mov        R1,#geserL ;R1 = GeserLeft
                               call          write_inst
                               call          delay
                               djnz        R6,lagi       ;R6=R6-1, jika R6 ? 0 maka lompat ke lagi
                ;
write_char:
                mov        dptr,#word1 ;DPTR = [ address word1 ]
                mov        r3,#35            ;R3=40,number character to be display
                mov        r1,#80h          ;R1=80h,address DDRAM start position
                call          write_inst

           ;
write1:clr               a ; A = 0
           movc           a,@a+dptr  ; A = [A+ DPTR]
           mov             r1,A             ; R1 = A
           inc                dptr             ; DPTR = DPTR +1
           call               write_data  ;
           djnz             r3,write1       ; R3 = R3-1,
           ret
           ;
Init_lcd:
                Mov       r1,#00000001b    ;Display clear
                call          write_inst           ;
                mov        r1,#00111000b    ;Function set,
                                                             ;Data 8 bit,2 line font 5x8
                Call         write_inst ;
                mov        r1,#00001100b    ;Display on,
                                                              ;cursor off,cursor blink off
                Call         write_inst
                Mov       r1,#00000111b    ;Entry mode, Set increment
                Call         write_inst
           ret
           ;
Write_inst:
           Clr                P3.6                 ; RS = P3.6= 0, write mode instruction
           Mov            P0,R1               ; D7 s/d D0 = P0 = R1
           Setb             P3.7                 ; EN = 1 = P3.7
           Call              delay               ; call delay time
           Clr                P3.7                 ; EN = 0 = P3.7
           ret
           ;
Write_data:
           Setb             P3.6                 ; RS = P3.6 = 1, write mode data
           Mov            P0,R1               ; D7 s/d D0 = P0 = R1
           Setb             P3.7                 ; EN = 1 = P3.7
           Call              delay               ; call delay time
           Clr                P3.7                 ; EN = 0 = P3.7
           ret
;
word1:   DB 'GUNAWAN AMSARI ELEKTRO'               
;
Delay:                    push       06h
                               push       07h
                               mov        r6,#080h
LDel:                      mov        r7,#0ffh
                               djnz         r7,$
                               djnz         r6,LDel
                               pop         07h
                               pop         06h
                               ret
                               end

Kalau mau coba silahkan tinggal copy aja. Kalau mau merubah tulisan tinggal edit bagian yang bertulisan GUNAWAN AMSARI ELEKTRO nya.

Semoga Bermanfaat...
READ MORE - Pengujian LCD karakter 2X16 dengan Program Sederhana menggunakan Bahasa Program Assembly

Jumat, 03 Februari 2012

RTC DS12C887: Pendahuluan

Real Time Clock merupakan suatu chip (IC) yang memiliki fungsi sebagai penyimpan waktu dan tanggal. Artikel ini membahas sebuah IC RTC yaitu DS12C887 yang memiliki register yg dapat menyimpan data detik, menit, jam, tanggal, bulan dan tahun. RTC ini memiliki 128 lokasi RAM yang terdiri dari 15 byte untuk data waktu serta kontrol, dan 113 byte sebagai RAM umum.

RTC DS 12C887 menggunakan bus yang termultipleks untuk menghemat pin. Timing yang digunakan untuk mengakses RTC dapat menggunakan intel timing atau motorola timing. RTC ini juga dilengkapi dengan pin IRQ untuk kemudahan dalam proses.
Detil dari RTC DS12C887
Berikut ini gambar pin-pin dari RTC DS 12C887, jumlah total pin-nya sebanyak 13 buah :
Gambar 1 Pin RTC DS 12C887
Gambar 2 Diagram Blok DS12C887
Terlihat dari diagram blok tersebut bahwa RTC terbagi menjadi beberapa bagian utama dengan kontrol maupun I/O untuk operasinya.
Berikut ini keterangan dari fungsi masing-masing pin…
  • AD0-AD7 - Multiplexed Address/Data Bus
  • NC - No Connect (tidak dihubungkan kemana-mana)
  • MOT - Pemilih tipe bus
  • CS - Masukan RTC Chip Select
  • AS - Address Strobe (ALE)
  • R/W - Masukan Read/Write
  • DS - Data Strobe
  • RESET - Masukan Reset
  • IRQ - Luaran Permintaan Interupsi
  • SQW - Luaran Gelombang Kotak
  • VCC - +5 Volt Main Supply
  • GND - Ground
Penjelasan singkat dari masing-masing pin RTC DS12C887 sebagai berikut :
  1. AD0 - AD7 (Adrress/Data bus yang ter-multipleks dan dwi-arah)Bus yang ter-multipleks akan menghemat penggunaan pin karena informasi alamat dan data menggunakan jalur sinyal yang sama. Siklus bus pertama digunakan untuk jalur alamat, dan siklus bus kedua digunakan untuk jalur data (bergantian antara alamat dan data). Intinya, kirim alamat melalui AD0-AD7 kemudian lakukan penguncian alamat menggunakan siklus 0-1-0 pada AS/ALE, kemudian dilanjutkan dengan proses pembacaan atau penulisan data ke alamat tersebut. RTC menghasilkan luaran 8 bit data pada saat pin DS dan RD diberi pulsa. Bus akan menjadi berimpedansi tinggi saat pulsa LOW diberikan pada pin DS (motorola) atau pulsa HIGH diberikan pada pin RD (intel).
  2. MOT (Mode Select)Pin MOT memberikan kebebasan untuk memilih dua tipe bus. Ketika pin ini dihubungkan dengan VCC, maka pewaktuan bus Motorolla yang dipilih, sedangkan ketika dihubungkan ke ground atau dibiarkan (tak dihubungkan) maka pewaktuan bus Intel yang dipilih. Pin ini memiliki pull down internal sekitar 20 kOhm.
  3. CS (Chip Select Input)Intinya, CS digunakan untuk aktivasi IC RTC DS12C887, Anda bisa menghubungkan CS ke GND supaya selalu aktif, atau bisa melalui salah satu pin dari mikrokontroler yang digunakan, jika ada beberapa piranti pada modul aplikasi Anda, sehingga kita bisa melakukan aktivasi secara manual di dalam program. Saat Vcc berada dibawah 4.25 volt, maka DS12C887, secara internal, akan menahan akses siklus bus dengan cara menon-aktifkan masukan CS. Aksi ini akan melindungi data jam real time dan isi dari RAM selama terjadi gangguan tegangan.
  4. AS (Address Strobe)Perubahan dari 0 ke 1 pada AS digunakan untuk menghapus alamat sebelumnya. Sedangkan perubahan dari 1 ke 0 akan menyebabkan jalur AD0-AD7 dianggap sebagai alamat memori DS12C887. Perintah akses (apakah baca atau tulis) harus dikirim bersamaan dengan proses ini.
  5. R/W (Read/Write Input)Pin R/W memiliki 2 mode operasi.
    1. MOT dihubungkan ke Vcc, Pewaktuan bus Motorola
      • R/W=HIGH dan DS=HIGH, maka terjadi siklus baca.
      • R/W=LOW dan DS=HIGH, maka terjadi siklus tulis.
    2. MOT dihubungkan ke GND, Pewaktuan Bus Intel
      • R/W aktif LOW, diberi nama WR = WE (write enable) pada RAM-RAM umum.
  6. DS (Data Strobe atau Masukan Baca)Pin DS/RD memiliki 2 mode operasi.
    1. MOT dihubungkan ke Vcc, Pewaktuan bus Motorola
      • DS digunakan sebagai Data strobe,
      • Berkaitan dengan proses baca/tulis
    2. MOT dihubungkan ke GND, Pewaktuan Bus Intel
      • DS/RD aktif LOW sebagai pin RD sama seperti pada RAM-RAM umum
  7. RESET (Reset Input)Pin RESET tidak berpengaruh terhadap jam, kalender atau RAM. Pada saat penyalaan RTC, pin RESET dapat dijaga LOW untuk beberapa saat untuk menstabilkan catu daya. Lamanya waktu pin RESET diberikan low tergantung dari aplikasi yang digunakan. Akan tetapi jika reset digunakan saat power up (penyalaan), waktu RESET dijaga low harus melebihi 200 ms untuk meyakinkan bahwa timer internal dari RTC untuk penyalaan telah cukup.
  8. IRQ (Interrupt Request Output)Pin IRQ adalah keluaran active low dari RTC 12C887 yang digunakan sebagai masukan interupsi pada prosessor. Keluaran IRQ tetap low selama bit status menyebabkan interupsi terjadi dan bit yang berhubungan yaitu interrupt-enable di-set. Untuk menghapus interupsi biasanya dilakukan dengan membaca register C. Pin RESET juga menghapus interupsi yang dilakukan atau yang belum terjadi (pending). Ketika tidak terjadi interupt maka level IRQ berada pada kondisi high impedance. Beberapa peralatan interupsi dapat dihubungkan dengan IRQ bus. Bus IRQ adalah keluaran open drain dan memerlukan tambahan resistor pull-up.
  9. SQW (Square Wave Output)Pin SQW dapat mengeluarkan sinyal kotak, dari satu sampai 13 pembagian yang disediakan oleh 15 buah tingkat pembagi (divider) internal dari RTC. Frekuensi dari SQW dapat dipilih dengan memprogram register A seperti pada tabel. Sinyal SQW dapat dihidupkan dan dimatikan dengan mengatur bit SQWE pada register B. Sinyal SQW tidak hidup ketika VCC dibawah 4,25 volt.
  10. GND, Vcc
    Merupakan pin untuk atu daya RTC. Vcc diberikan input +5volt. Ketika tegangan 5 volt diberikan dalam batas yang normal, RTC bebas diakses dan data dapat ditulis atau dibaca. Sedangkan ketika Vcc dibawah 4.25 volt, maka proses baca dan tulis tidak dapat dilakukan. Akan tetapi, proses pewaktu (timekeeping) tetap dilakukan oleh RTC tanpa dipengaruhi oleh tegangan masukan yang rendah. Saat Vcc turun dibawah 3 volt, catu daya untuk RAM dan pewaktu dipindahkan ke internal lithium batery yang terdapat pada RTC. Fungsi pewaktu dari RTC memiliki akurasi ± 1 menit per bulan pada suhu 250 C walaupun tanpa adanya catu pada Vcc.
Links:
  • RTC DS12C887: Pendahuluan (klik)
  • RTC DS12C887: Register Data dan Kontrol (klik)
  • RTC DS12C887: Contoh Aplikasi (klik)
READ MORE - RTC DS12C887: Pendahuluan

RTC DS12C887: Register Data dan Kontrol

DS12C887 mempunyai 14 buah register yang terdiri dari 4 Register Kontrol dan 10 Register Data. Register Data sendiri terpisah menjadi register waktu dan Register Alarm sebagaimana ditunjukkan pada gambar 1. Setelah Register-register Kontrol diinisialisasi, maka data waktu ataupun alarm dapat dibaca atau ditulisi dengan cara mengakses register-register data yang bersangkutan.


Gambar 1. Pemetaan alamat pada RTC DS12C887
Register-register Kontrol
DS12C887 memiliki empat register kontrol yang bisa diakses sepanjang waktu, meskipun selama siklus pembaharuan (update cycle).
  • UIP : Bit ini digunakan untuk memantau Flag Update In Progress (UIP). Jika bit ini bernilai 1, maka Update Transfer akan segera muncul, namun bila bit ini bernilai 0, maka Update transfer hanya akan muncul setelah 244 uDetik kemudian.
  • DV0, DV1, DV2 : Ketiga bit ini berfungsi untuk mengatur osilator ON atau OFF, dan me-RESET hitung mundur. Kofigurasi 010 digunakan untuk mengatur osilator ON, konfigurasi 11x digunakan untuk mengatur agar perhitungan mundur ditahan.
  • RS0, RS1, RS2 dan RS3 : Bit-bit ini digunakan untuk memilih 15 tingkat pembagi frekwensi yang dapat digunakan untuk membangkitkan sinyal luaran pada pin SQW atau Interupsi periodik. Tabel berikut menunjukkan berbagai macam kemungkinan frekuensi luaran SQW dan laju Interupsi Preiodik berdasar nilai-nilai RS0, RS1, RS2, dan RS3.
  • SET : Apabila bit ini bernilai 0, maka register data dapat diupdate setiap detiknya, namun apabila bit ini bernilai 1, maka register data tidak dapat diupdate. Bit ini tidak akan berpengaruh terhadap kondisi RESET.
  • PIE : Periodic Interrupt Enable, merupakan sebuah bit baca/tulis yang membolehkan bit PF atau Periodic Interrupt Flag pada Register C meng-nol-kan pin luaran IRQ. Jika PIE = 1, maka interupsi periodik akan dihasilkan dengan meng-nol-kan pin luaran IRQ dengan laju yang ditentukan oleh RS0 s/d RS2 (lihat penjelasan sebelumnya).
  • AIE : Alarm Interrupt Enable, bit yang membuat bit Alarm Flag dapat membangkitkan kondisi LOW pada pin IRQ. Kondisi RESET akan mengubah bit ini menjadi clear atau bernilai 0.
  • UIE : Update Ended Interrupt Enable, bit yang membuat bit Update End Flag (UF) dapat membangkitkan kondisi LOW pada pin IRQ. Kondisi RESET atau logika 1 pada bit SET akan membuat bit ini berubah menjadi clear (bernilai 0).
  • SQWE : Apabila bit ini bernilai 1, maka gelombang kotak dengan frekwensi yang ditentukan oleh pembagi frekwensi pada RS0 s/d RS3 akan dihasilakn melalui pin SQW.
  • DM : DM = 1 untuk mode binary dan DM = 0 untuk data BCD pada Register Data.
  • 24/12: Apabila bit ini bernilai 1, maka waktu berjalan berdasarkan 24 jam dan sebaliknya bila bit ini bernilai 0, maka waktu berjalan berdasarkan 12 jam.
  • DSE : Daylight Saving Enable, apabila bit ini bernilai 1, maka akan terjadi proses update pada saat 1:59:59 AM menjadi 3:00:00 AM pada Hari Minggu pertama bulan April dan saat 1:59:59 AM menjadi 1:00:00 AM pada Hari Minggu terakhir Bulan Oktober.
  • IRQF : Interrupt Request Flag, bit ini akan bernilai 1 apabila salah satu dari bit PF, AF dan UF juga bernilai 1.
  • PF : Periodic Interrupt Flag, bit ini akan bernilai 1 secara periodik (tergantung bit RS0 s/d RS3). Apabila bit PIE aktif, maka kondisi SET pada bit PF akan membangkitkan kondisi LOW pada pin IRQ. Bit ini akan bernilai 0 saat pembacaan pada Register C atau kondisi RESET.
  • AF : Alarm Interrupt Flag, bit ini akan bernilai 1 saat waktu sekarang cocok dengan waktu yang diatur pada alarm. Apabila bit AIE aktif, maka kondisi SET pada bit AF akan membangkitkan kondisi LOW pada pin IRQ. Bit ini akan bernilai 0 saat pembacaan pada Register C atau kondisi RESET.
  • UF: Update Ended Interrupt Flag, bit ini siklus update. Apabila bit UIE aktif maka kondisi SET pada bit ini akan membangkitkan kondisi LOW pada pin IRQ. Bit ini akan bernilai 0 (Clear) saat pembacaan pada Register C atau kondisi RESET
  • VRT: Bit The Valid RAM and Time ini merupakan indikator kondisi baterai yang terhubungkan ke pin Vbat. Bit ini tidak bisa ditulisi, dan seharusnya bernilai 1 terus saat dibaca. Jika terjadi nilai 0, artinya terjadi pelemahan arus/tegangan pada baterai, dan simpanan data RTC dan RAM menjadi dipertanyakan. Bit ini tidak dipengaruhi RESET.
READ MORE - RTC DS12C887: Register Data dan Kontrol

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......)
READ MORE - RTC DS12C887: Contoh Aplikasi