AVR ATtiny2313 memiliki EEPROM dengan kapasitas 128 byte dengan alamat akses 0-127 ($00-$7F). Untuk mengakses EEPROM terlebih dahulu harus mengetahui register-register EEPROM, yakni: EEAR – EEPROM Address Register, EEDR – EEPROM Data Register, dan EECR – EEPROM Control Register.
EEAR adalah register yang berfungsi menyimpan alamat EEPROM yang akan diakses. Untuk ATtiny2313, EEAR disebut juga EEARL (EEAR Low). Yup, hanya perlu 7 bit LSB saja (EEAR0..EEAR6) untuk mengakses seluruh alamat EEPROM ATtiny2313. Nilai awal EEAR setelah direset tidak didefinisikan, jadi EEAR perlu diisi dengan alamat EEPROM yang benar sebelum data pada EEPROM diakses (dibaca/ditulis/dihapus).
EEDR adalah register yang berfungsi menyimpan data yang akan ditulis ke EEPROM dan data yang dibaca dari EEPROM.
EECR adalah register yang berfungsi untuk mengontrol sinyal-sinyal kontrol untuk proses akses EEPROM. Pada tulisan ini hanya dibahas tentang bagaimana menulis data ke EEPROM dan bagaimana membaca data dari EEPROM. Oleh karena itu, hanya 3 bit LSB dari EECR saja yang akan dibahas yakni:
- Bit 2 – EEMPE (EEPROM Master Program Enable)
- Bit 1 – EEPE (EEPROM Program Enable)
- Bit 0 – EERE (EEPROM Read Enable)
- Letakkan alamat EEPROM yang dituju dalam register EEAR
- Letakkan data dalam register EEDR
- Cek apakah bit EEPE=0, jika tidak maka tunggu
- Set bit EEMPE
- Set bit EEPE
- Letakkan alamat EEPROM yang akan diakses dalam register EEAR
- Cek apakah bit EEPE=0, jika tidak maka tunggu
- Set bit EERE
- Baca data dari EEDR dan simpan di register
Contoh Program
; ***********************************************Catatan: Program di atas dibuat dengan asumsi bahwa program sama sekali tidak menggunakan fitur interupsi dalam program. Gunakan instruksi CLI dan SEI sebelum dan sesudah proses baca-tulis EEPROM agar segala sesuatunya berjalan mulus, hehehe…
; EEPROM.ASM
; Program contoh baca/tulis EEPROM pada ATtiny2313
; ***********************************************
.include “C:\MICROC~1\VMLAB\include\2313def.inc”
;Untuk AVR Studio 4, ganti include-nya dengan yang ini:
;.include “tn2313def.inc”
;Untuk VMLAB, ini diperlukan. Untuk AVR Studio 4 tidak.
.equ eepe = eewe
.equ eempe = eemwe
reset:
rjmp start
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06
reti ; Addr $07
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B
reti ; Addr $0C
reti ; Addr $0D
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
start:
;selalu diawali dengan pengesetan alamat stack
ldi r16, low (ramend)
out spl, r16
ldi r16, $54 ; data di R16
ldi r17, 0 ; alamat di R17
rcall EEPROM_write ; tulis $54 ke EEPROM alamat 0
ldi r16, $CA ; data di R16
ldi r17, 5 ; alamat di R17
rcall EEPROM_write ; tulis $CA ke EEPROM alamat 5
ser r16 ; R16 = $FF
ldi r17, 0 ; R17 = 0
rcall EEPROM_read ; Baca EEPROM alamat 0 dan simpan di R16
forever:
rjmp forever ; never ending jump
; Subrutin menulis data ke EEPROM dengan alamat 0-127
EEPROM_write:
sbic eecr, eepe ; apakah EEPE=0?
rjmp EEPROM_write ; tunggu jika EEPE=1
out EEAR, r17 ; set alamat EEPROM
out EEDR, r16 ; letakkan data di EEDR
sbi EECR, eempe ; set bit EEMPE
sbi EECR, eepe ; set bit EEPE
ret
; Subrutin membaca data dari EEPROM dengan alamat 0-127
EEPROM_read:
sbic eecr, eepe ; apakah EEPE=0?
rjmp EEPROM_read ; tunggu jika EEPE=1
out eear, r17 ; set alamat EEPROM
sbi eecr, eere ; set bit EERE
in r16, eedr ; copy data dari EEDR ke R16
ret
Berikut adalah cuplikan gambar Window Memori EEPROM dan Window Register dari VMLAB dan AVR Studio 4.
Window EEPROM VMLAB
Window Register VMLAB
Window EEPROM AVR Studio 4
Window Register AVR Studio 4
Ok. Selamat belajar!
Tidak ada komentar:
Posting Komentar