8.051 berinteraksi dengan 24c08

C

CosaNostra

Guest
hanya ingin tahu apakah saya dapat menghubungkan SCL sda dan pin untuk setiap pin dari mc atau ada pin tertentu yang saya harus menghubungkan pin ini

kedua saya ingin tahu kapan memori 24c08 selesai melakukannya atau melakukan restart secara otomatis saya harus melakukan sesuatu untuk menghapus memori

dan terakhir ketika writting memori eksternal perlu untuk memberikan alamat setiap kali atau apakah peningkatan memori secara otomatis

 
Setiap microcntroller umum I / O pin akan melakukan ..tambahkan pullups eksternal ..

Anda tidak perlu menghapus memori ini, menulis data baru akan menimpa data lama ..

Tentukan alamat byte pertama dan melanjutkan menulis satu blok data (Page Mode) ..maks panjang adalah 16 (1 15) ..lihat Byte Menulis dan Page Write di:
http://www.rennes.supelec.fr/ren/fi/elec/ftp/docs/i2c/24c16.pdf

Salam,
IanP

 
jadi apa tentang hal SCL isnt it somsort sebuah jam dan bisa u plz semacam memberi saya contoh rangkaian

 
jadi jika memori sudah penuh apakah itu datang kembali ke alamat pertama secara otomatis atau tidak saya perlu membuatnya kembali ke alamat pertama diri saya

 
Quote:

Setelah menerima data setiap kata, maka IS24CXX

segera merespons dengan SDA Akui on line,

dan ketiga lebih rendah (24C01/24C02) atau empat lebih rendah (24C04 /

24C08/24C16) order alamat word data bit secara internalbertambah dengan satu, sementara urutan bit yang lebih tinggi dari dataIf the master device
alamat kata tetap konstan.

Jika perangkat master

harus mengirimkan lebih dari N 1 (N = 7 untuk 24C01 / 2 dan

N = 15 untuk 24C04/08/16) kata-kata, sebelum mengeluarkan STOPkondisi, counter alamat akan berguling, danOnce all N 1
data tertulis sebelumnya akan ditimpa.

Setelah semua N 1

(N = 7 untuk 24C01 / 2 dan N = 15 untuk 24C04/08/16) byte adalah

diterima dan kondisi STOP telah dikirim oleh

Master, siklus pemrograman internal dimulai.

 
bagaimana dengan psen dan bir dan semua yang mereka dilakukan

 
Quote:

bagaimana dengan psen dan bir dan semua yang mereka dilakukan
 
Halaman ini berisi interfacing 8.051 dan 24cxxx EEPROM:

http://mcu-programming.blogspot.com/2006/09/eeproms-interfacing.html

Ini dapat membantu sedikit.

 
Berikut ini adalah file ASM interface serial 24C08 memori

NAMA Control_AT24Cxx

; Koleksi rutinitas ini memungkinkan mikrokontroler AT89C2051 untuk membaca
Dan menulis serial keluarga AT24Cxx CMOS EEPROMS.Versi ini
; Kode ini hanya kompatibel dengan AT89C2051 karena lokasi
; Buffer data dan menumpuk dalam RAM.Kode dapat dimodifikasi untuk bekerja dengan
; AT89C1051 dengan memindahkan atau mengubah ukuran buffer dan stack untuk sesuai dengan
; Jumlah RAM yang lebih kecil tersedia dalam AT89C1051.Perhatikan bahwa minimum
; Ukuran buffer ditentukan oleh ukuran halaman AT24Cxx.
;
; Semua lima perangkat AT24Cxx operasi yang didukung.Byte Tulis, Current
; Alamat Membaca dan Random Baca dilaksanakan oleh fungsi WRITE_BYTE,
; READ_CURRENT dan READ_RANDOM, masing-masing.Halaman Menulis dan Sequential Read
; Adalah contoh khusus dari fungsi WRITE_BLOCK dan READ_BLOCK, masing-masing.
; WRITE_BLOCK dan proses READ_BLOCK dari satu byte ke jumlah byte
; Dalam sebuah halaman dan mentransfer data antara RAM AT24Cxx dan buffer.
;
; Kode mendukung banyak perangkat AT24Cxx per bus, masing-masing dengan unik
; Alamat ditentukan oleh kabel-kabel dari pin alamat (A0, A1, A2).Itu
; Tiga-bit alamat programmable dilewatkan ke WRITE_BYTE, READ_CURRENT,
; READ_RANDOM, WRITE_BLOCK dan fungsi READ_BLOCK, di mana digabungkan
; Dengan alamat tetap AT24Cxx (FADDR) dan digunakan untuk alamat perangkat di
; Bus.Mengacu pada data keluarga AT24Cxx lembar untuk informasi tambahan
; Perangkat pengalamatan.
;
; Fungsi BYTE_FILL, VERIFY_BYTE_FILL, PAGE_FILL dan VERIFY_PAGE_FILL adalah
; Artefak dari proses debug dan melayani untuk menggambarkan penggunaan
; Perangkat fungsi membaca dan menulis dengan AT24C64.Untuk memodifikasi kode untuk
; Berbeda AT24Cxx anggota keluarga, cukup mendefinisikan kembali nilai-nilai UKURAN
; (Jumlah byte per perangkat) dan PSIZE (jumlah byte per halaman).
; Untuk mengubah nilai mengisi, mendefinisikan kembali MENGISI.Untuk mengubah programmable bagian
; Dari alamat perangkat, PADDR mendefinisikan kembali ke nilai dari nol sampai tujuh.
;
; Kode memenuhi semua persyaratan waktu keluarga AT24Cxx jika dilaksanakan oleh
; AT89Cx051 mikrokontroler dengan clock 12 MHz.Kode modifikasi mungkin akan
; Diperlukan jika jam lebih cepat digantikan.FADDR EQU 0a0h; AT24Cxx alamat tetap EEPROMs
PADDR EQU 0; diprogram alamat (0 .. 7)
UKURAN EQU 2000h; byte per AT24C64
PSIZE EQU 32; byte per halaman untuk AT24C64
SL EQU 55h; contoh nilai isi

; Daftar definisi.

indeks EQU r0; buffer pointer
kount EQU r1; byte count mendaftar
zdata EQU r1; register data
addr_lo EQU r2; 2-byte alamat mendaftar
addr_hi EQU r3;

; Microcontroller AT24Cxx serial koneksi ke jalur bus.

SCL BIT p1.2; serial clock
SDA BIT p1.3; data serialDSEG AT 20H

ORG 40H
buffer: DS PSIZE; penyimpanan untuk membaca / menulis data

ORG 60H; tumpukan asal
stack: DS 20H; stack kedalamanCSEG

ORG 0000H; power on / reset vektor
jmp on_reset

ORG 0003H; 0 vektor interupsi eksternal
Réti; undefined

ORG 000BH; timer 0 overflow vektor
Réti; undefined

ORG 0013H; 1 vektor interupsi eksternal
Réti; undefined

ORG 001BH; timer 1 overflow vektor
Réti; undefined

ORG 0023H; serial I / O menyela vektor
Réti; undefined

ORG 0080H; kode mulai ruang
MENGGUNAKAN 0; mendaftar nol bank
on_reset:
mov sp, # (stack-1); menginisialisasi stack pointer

; Inisialisasi serial bus AT24Cxx baris.

setb SDA; tinggi
setb SCL; tinggipanggilan byte_fill
jc kesalahan

panggilan verify_byte_fill
jc kesalahan

panggilan page_fill
jc kesalahan

panggilan verify_page_fill
jc kesalahan

kesalahan:
jmp $byte_fill:

; Isi setiap byte dalam sebuah AT24Cxx dengan nilai yang sama.
; Writes satu alamat pada satu waktu (modus halaman tidak digunakan).
; Pengembalian CY diatur menulis menunjukkan timeout.
; Destroys A, B, DPTR, XDATA, ADDR_HI: ADDR_LO.

mov zdata, # MENGISI; mengatur data mengisi
mov dptr, # 0; inisialisasi pointer alamat
x51:
mov addr_lo, dpl; mengatur alamat
mov addr_hi, DPH;

mov b, # 120; coba counter
x52:
mov a, # PADDR; alamat programmable
panggilan write_byte; mencoba untuk menulis
jnc x53; melompat jika menulis OK

djnz b, x52; coba lagi
setb c; set timeout error bendera
jmp x54; keluar
x53:
inc dptr; muka pointer alamat
; Mov a, dpl; memeriksa byte rendah
; Cjne a, # (LOW SIZE), x51; lompat jika tidak terakhir
mov a, DPH; memeriksa byte tinggi
cjne a, # (HIGH SIZE), x51; lompat jika tidak terakhir
CLR c; kesesatan yang nyata bendera
x54:
retverify_byte_fill:

; Verifikasi bahwa semua byte dalam mengisi AT24Cxx cocok dengan nilai.
; Dibaca dan memverifikasi satu byte pada suatu waktu (modus halaman tidak digunakan).
; Melakukan fungsi Dibaca Acak untuk menginisialisasi internal
; Alamat counter dan memeriksa isi alamat pertama.
; Kemudian melakukan beberapa fungsi Dibaca Alamat Sekarang untuk langkah
; Melalui addressess tersisa.
; Pengembalian CY ditetapkan untuk menunjukkan timeout membaca atau membandingkan gagal.
; Destroys A, B, DPTR.

mov dptr, # 0; alamat inisialisasi pointer / counter
mov addr_lo, dpl; mengatur alamat
mov addr_hi, DPH;

mov b, # 120; coba counter
x81:
mov a, # PADDR; alamat programmable
panggilan read_random; mencoba untuk membaca
jnc x82; melompat jika membaca OK

djnz b, x81; coba lagi
jmp x86; menetapkan bendera dan keluar error
x82:
cjne a, # MENGISI, x86; melompat jika membandingkan kesalahan
jmp x85; melakukan tersisa alamat
x83:
mov a, # PADDR
panggilan read_current
jc x87; melompat jika membaca gagal

cjne a, # MENGISI, x86; melompat jika membandingkan kesalahan
x85:
inc dptr; muka pointer alamat
mov a, DPH; memeriksa byte tinggi
cjne a, # (HIGH SIZE), x83; lompat jika tidak terakhir
CLR c; kesesatan yang nyata bendera
jmp x87; keluar
x86:
setb c; mengatur flag kesalahan
x87:
retpage_fill:

; Isi setiap byte dalam sebuah AT24Cxx dengan nilai yang sama.
; Writes satu halaman pada satu waktu.
; Pengembalian CY diatur menulis menunjukkan timeout.
; Destroys A, B, DPTR, KOUNT, INDEX, ADDR_HI: ADDR_LO.

; Pertama mengisi buffer.

mov b, # PSIZE; byte per halaman
mov index, # buffer; menunjuk ke buffer
x61:
mov @ indeks, # MENGISI; memasukkan nilai mengisi buffer
inc index; muka pointer
djnz b, x61; byte berikutnya

; Salin buffer untuk perangkat, satu halaman pada satu waktu.

mov dptr, # 0; inisialisasi pointer alamat
x62:
mov addr_lo, dpl; mengatur alamat
mov addr_hi, DPH;
mov kount, # PSIZE; byte per halaman

mov b, # 120; coba counter
x63:
mov a, # PADDR; alamat programmable
panggilan write_block; mencoba untuk menulis
jnc x64; melompat jika menulis OK

djnz b, x63; coba lagi
setb c; set timeout error bendera
jmp x66; keluar
x64:
; Tambahkan ke alamat ukuran halaman pointer.

mov a, dpl; mendapatkan byte rendah
menambahkan, # PSIZE; menambah ukuran halaman
mov dpl, a; menyimpan byte rendah
jnc x65; melompat jika byte tinggi tidak terpengaruh
inc DPH; peningkatan byte tinggi
x65:
; Cjne a, # (LOW SIZE), x62; lompat jika tidak byte rendah terakhir
mov a, DPH; memeriksa byte tinggi
cjne a, # (HIGH SIZE), x62; lompat jika tidak terakhir
CLR c; kesesatan yang nyata bendera
x66:
retverify_page_fill:

; Verifikasi bahwa semua byte dalam mengisi AT24Cxx cocok dengan nilai.
; Dibaca dan memverifikasi satu halaman pada satu waktu.
; Pengembalian CY ditetapkan untuk menunjukkan timeout membaca atau membandingkan gagal.
; Destroys A, B, DPTR, KOUNT, INDEX, ADDR_HI: ADDR_LO.

; Perangkat Salin halaman ke buffer.

mov dptr, # 0; inisialisasi pointer alamat
x71:
mov addr_lo, dpl; mengatur alamat
mov addr_hi, DPH;
mov kount, # PSIZE; byte per halaman

mov b, # 120; coba counter
x72:
mov a, # PADDR; alamat programmable
panggilan read_block; mencoba untuk membaca
jnc x74; melompat jika membaca OK

djnz b, x72; coba lagi
x73:
setb c; mengatur flag kesalahan
jmp x77; keluar
x74:
; Verifikasi buffer isinya.

mov b, # PSIZE; byte per halaman
mov index, # buffer; menunjuk ke buffer
x75:
cjne @ indeks, # MENGISI, x73; melompat jika membandingkan gagal
inc index; muka pointer
djnz b, x75; byte berikutnya

; Tambahkan ke alamat ukuran halaman pointer.

mov a, dpl; mendapatkan byte rendah
menambahkan, # PSIZE; menambah ukuran halaman
mov dpl, a; menyimpan byte rendah
jnc x76; melompat jika byte tinggi tidak terpengaruh
inc DPH; peningkatan byte tinggi
x76:
; Cjne a, # (LOW SIZE), x71; lompat jika tidak byte rendah terakhir
mov a, DPH; memeriksa byte tinggi
cjne a, # (HIGH SIZE), x71; lompat jika tidak terakhir
CLR c; kesesatan yang nyata bendera
x77:
retwrite_block:

; Write dari satu byte ke satu halaman data ke AT24Cxx.
; Disebut dengan alamat diprogram dalam A, alamat byte pertama
; Dalam pasangan mendaftar ADDR_HI: ADDR_LO, data dalam PENYANGGA, byte count
; Di KOUNT mendaftar.
; Apakah menulis tidak menunggu siklus untuk melengkapi.
; Pengembalian CY diatur untuk menunjukkan bahwa bus tidak tersedia
; Atau bahwa perangkat yang ditujukan tidak mengakui.
; Destroys A, KOUNT, INDEX.

panggilan dimulai
jc X38; batalkan jika bus tidak tersedia

rl a; diprogram bit alamat 3:1
ORL a, # FADDR; menambahkan alamat tetap
CLR acc.0; menentukan operasi menulis
panggilan berteriak; mengirim alamat perangkat
jc x37; batalkan jika tidak mengakui

mov a, addr_hi; mengirim alamat byte tinggi
panggilan berteriak;
jc x37; batalkan jika tidak mengakui

mov a, addr_lo; mengirim alamat byte rendah
panggilan berteriak;
jc x37; batalkan jika tidak mengakui

mov index, # buffer; menunjuk ke buffer
x36:
mov a, @ indeks; memperoleh data
panggilan berteriak; mengirim data
jc x37; batalkan jika tidak mengakui

inc index; muka pointer buffer
djnz kount, x36; byte berikutnya
CLR c; kesesatan yang nyata bendera
x37:
panggilan berhenti
X38:
retread_block:

; Baca dari satu byte ke satu halaman data dari AT24Cxx.
; Melakukan Random Baca yang diperluas menjadi Sequential Read
; Ketika lebih dari satu byte yang dibaca.Dipanggil dengan alamat programmable
; Dalam A, alamat byte pertama dalam pasangan mendaftar ADDR_HI: ADDR_LO,
; Byte menghitung dalam KOUNT mendaftar.
; Pengembalian data dalam BUFFER.Pengembalian CY diatur untuk menunjukkan bahwa bus
; Tidak tersedia atau bahwa perangkat yang ditujukan tidak mengakui.
; Destroys A, KOUNT, INDEX.

; Kirim bodoh menulis perintah untuk alamat byte pertama.

panggilan dimulai
jc x35; batalkan jika bus tidak tersedia

rl a; diprogram bit alamat 3:1
ORL a, # FADDR; menambahkan alamat tetap
mov index, sebuah; menyimpan salinan alamat perangkat
CLR acc.0; menentukan operasi menulis
panggilan berteriak; mengirim alamat perangkat
jc x34; batalkan jika tidak mengakui

mov a, addr_hi; mengirim alamat byte tinggi
panggilan berteriak;
jc x34; batalkan jika tidak mengakui

mov a, addr_lo; mengirim alamat byte rendah
panggilan berteriak;
jc x34; batalkan jika tidak mengakui

; Kirim perintah membaca dan menerima data.

panggilan dimulai; kedua mulai untuk membaca
jc x34; batalkan jika bus tidak tersedia

mov a, index; mendapatkan alamat perangkat
setb acc.0; menentukan operasi baca
panggilan berteriak; mengirim alamat perangkat
jc x34; batalkan jika tidak mengakui

mov index, # buffer; menunjuk ke buffer
X31:
panggilan tulang kering; menerima data byte
mov @ indeks, sebuah; menyimpan data

cjne kount, # 1, x32; lompat jika tidak byte terakhir
panggilan NAK; tidak mengakui byte terakhir
jmp X33; dilakukan
x32:
panggilan ACK; mengakui byte
inc index; muka pointer buffer
djnz kount, X31; byte berikutnya
X33:
CLR c; kesesatan yang nyata bendera
x34:
panggilan berhenti
x35:
retwrite_byte:

; AT24Cxx Byte Write fungsi.
; Disebut dengan alamat diprogram dalam A, byte alamat di
; Mendaftarkan pasangan ADDR_HI: ADDR_LO, data dalam XDATA mendaftar.
; Apakah menulis tidak menunggu siklus untuk melengkapi.
; Pengembalian CY diatur untuk menunjukkan bahwa bus tidak tersedia
; Atau bahwa perangkat yang ditujukan tidak mengakui.
; Destroys A.

panggilan dimulai
jc x49; batalkan jika bus tidak tersedia

rl a; diprogram bit alamat 3:1
ORL a, # FADDR; menambahkan alamat tetap
CLR acc.0; menentukan operasi menulis
panggilan berteriak; mengirim alamat perangkat
jc X48; batalkan jika tidak mengakui

mov a, addr_hi; mengirim alamat byte tinggi
panggilan berteriak;
jc X48; batalkan jika tidak mengakui

mov a, addr_lo; mengirim alamat byte rendah
panggilan berteriak;
jc X48; batalkan jika tidak mengakui

mov a, zdata; memperoleh data
panggilan berteriak; mengirim data
jc X48; batalkan jika tidak mengakui

CLR c; kesesatan yang nyata bendera
X48:
panggilan berhenti
x49:
retread_current:

; AT24Cxx Baca Alamat Sekarang fungsi.
; Disebut dengan alamat diprogram dalam A. Pengembalian data dalam A.
; Pengembalian CY diatur untuk menunjukkan bahwa bus tidak tersedia
; Atau bahwa perangkat yang ditujukan tidak mengakui.

panggilan dimulai
jc x45; batalkan jika bus tidak tersedia

rl a; diprogram bit alamat 3:1
ORL a, # FADDR; menambahkan alamat tetap
setb acc.0; menentukan operasi baca
panggilan berteriak; mengirim alamat perangkat
jc x44; batalkan jika tidak mengakui

panggilan tulang kering; menerima data byte
panggilan NAK; tidak mengakui byte
CLR c; kesesatan yang nyata bendera
x44:
panggilan berhenti
x45:
retread_random:

; AT24Cxx Baca Acak fungsi.
; Disebut dengan alamat diprogram dalam A, byte alamat di
; Mendaftarkan pasangan ADDR_HI: ADDR_LO.Kembali data dalam A.
; Pengembalian CY diatur untuk menunjukkan bahwa bus tidak tersedia
; Atau bahwa perangkat yang ditujukan tidak mengakui.

push b
mov b, a; menyimpan salinan alamat programmable

; Kirim bodoh menulis perintah untuk mengatur alamat internal.

panggilan dimulai
jc x47; batalkan jika bus tidak tersedia

rl a; diprogram bit alamat 3:1
ORL a, # FADDR; menambahkan alamat tetap
CLR acc.0; menentukan operasi menulis
panggilan berteriak; mengirim alamat perangkat
jc x46; batalkan jika tidak mengakui

mov a, addr_hi; mengirim alamat byte tinggi
panggilan berteriak;
jc x46; batalkan jika tidak mengakui

mov a, addr_lo; mengirim alamat byte rendah
panggilan berteriak;
jc x46; batalkan jika tidak mengakui

; Panggil Baca Alamat Sekarang fungsi.

mov a, b; mendapatkan alamat programmable
panggilan read_current
jmp x47; keluar
x46:
panggilan berhenti
x47:
pop b
retmulai:

; Kirim START, didefinisikan sebagai tinggi ke rendah SDA dengan SCL tinggi.
; Kembali dengan SCL, SDA rendah.
; Pengembalian CY mengatur jika bus tidak tersedia.

setb SDA
setb SCL

; Verifikasi bus tersedia.

jnb SDA, x40; melompat jika tidak tinggi
jnb SCL, x40; melompat jika tidak tinggi

nop; menegakkan setup keterlambatan dan penundaan siklus
CLR SDA
nop; menegakkan terus menunda
nop;
nop;
nop;
nop;
CLR SCL

CLR c; kesesatan yang nyata bendera
jmp x41
x40:
setb c; mengatur flag kesalahan
x41:
retstop:

; Kirim STOP, didefinisikan sebagai rendah ke tinggi dengan SCL SDA tinggi.
; SCL diharapkan pada entri rendah.Kembali dengan SCL, SDA tinggi.

CLR SDA
nop; menegakkan rendah dan data SCL setup
nop
setb SCL
nop; menegakkan penundaan setup
nop;
nop;
nop;
nop;
setb SDA
retberteriak

; Shift sebuah byte ke AT24Cxx, bit yang paling signifikan pertama.
; SCL, SDA diharapkan pada entri rendah.Kembali dengan SCL rendah.
; Dipanggil dengan data untuk dikirim dalam A.
; Pengembalian CY diatur ke mengindikasikan kegagalan oleh budak untuk mengakui.
; Destroys A.

push b
mov b, # 8; bit counter
x42:
RLC a; bergerak sedikit ke CY
mov SDA, c; bit output
nop; menegakkan rendah dan data SCL setup
setb SCL; menaikkan clock
nop; menegakkan SCL tinggi
nop;
nop;
nop;
CLR SCL; drop jam
djnz b, x42; bit berikutnya

setb SDA; rilis SDA untuk ACK
nop; menegakkan SCL rendah dan TAA
nop;
setb SCL; meningkatkan clock ACK
nop; menegakkan SCL tinggi
nop;
nop;
nop;
mov c, SDA; mendapatkan bit ACK
CLR SCL; drop ACK jam

pop b
retshin:

; Shift dalam byte dari AT24Cxx, bit yang paling signifikan pertama.
; SCL diharapkan pada entri rendah.Kembali dengan SCL rendah.
; Pengembalian byte data yang diterima dalam A.

setb SDA; membuat sebuah input SDA

push b
mov b, # 8; bit count
x43:
nop; menegakkan rendah dan data SCL setup
nop;
nop;
setb SCL; menaikkan clock
nop; menegakkan SCL tinggi
nop;
mov c, SDA; bit input
RLC a; bergerak sedikit ke dalam byte
CLR SCL; drop jam
djnz b, x43; bit berikutnya

pop b
retACK:

; Jam mengeluarkan mengakui sedikit (rendah).
; SCL diharapkan pada entri rendah.Kembali dengan SCL, SDA rendah.

CLR SDA; ACK bit
nop; menegakkan rendah dan data SCL setup
nop;
setb SCL; menaikkan clock
nop; menegakkan SCL tinggi
nop;
nop;
nop;
CLR SCL; drop jam
retNAK:

; Jam keluar mengakui negatif bit (tinggi).
; SCL diharapkan pada entri rendah.Kembali dengan SCL rendah, SDA tinggi.

setb SDA; NAK sedikit
nop; menegakkan rendah dan data SCL setup
nop;
setb SCL; menaikkan clock
nop; menegakkan SCL tinggi
nop;
nop;
nop;
CLR SCL; drop jam
retENDMaaf, tapi Anda harus login untuk melihat lampiran

 

Welcome to EDABoard.com

Sponsor

Back
Top