PDA

View Full Version : Hỏi về EEPROM 24c256


tomato2711
28-04-2011, 08:07 PM
Em đang làm giao tiếp pic16f877a với eeprom 24c256 bằng I2C, nhưng khi đọc datasheet cua con 24c256 thì thấy nó không cho biết dãy địa chỉ của eeprom, vậy mình muốn lưu mỗi lần 10byte (ví dụ 10 số) thì khi đọc lại thì sao nó biết mà trả data về cho con pic? Nhờ các bác tư vấn giúp em!

hawking1122
06-05-2011, 03:55 PM
Tớ đọc trong datasheet của nó phần 8.3 có nói đấy chứ, 24c256 có 256 Kbits = 32KBytes = 2^15 bytes, vậy địa chỉ của một word (8bit) dài 15 bit tử 0000 đến 7FFF.
Trong CCS có lệnh read_eeprom(address) đấy thôi.

dong08101991
11-12-2011, 09:48 PM
em dang lam giao tiep giua 16f877a voi 24c256 ghi va doc xuat ra cong com.nhung sao moi lan xuat ra thi no hien tren mang hinh la ff chu ko hien ra du lieu em ghi vao epprom.xim cac anh giup do?day la code em ghi
#include <16f877a.h>
#include <2402.c>
#fuses nowdt, noprotect, nolvp, xt, put
#use delay(clock = 4000000)
#use fast_io(b)
#use rs232 (baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7 )
#byte portb = 0x06
#bit b0 = portb.0
#bit b1 = portb.1
int8 x,b;
void ghi ();
void doc ();
void main()
{
set_tris_b(0b00000011);
init_ext_eeprom();
while (1) {
if (b0 == 0) {
ghi ();
}
else {
if (b1==0) {
doc ();}
else {}}
}}
void ghi()
{
loop:
if (b0 == 1) {
write_ext_eeprom(0x0a, 2);}
else {
goto loop;}
}
void doc()
{
loop1:
if (b1 == 1){
x = read_ext_eeprom(0x0a);
printf("data ghi: %x \r ",x );
}
else {
goto loop1;}
}

eunix
16-12-2011, 06:50 PM
Bạn tham khảo code cho 24256 tại đây.
24256 dùng địa chỉ 16bit, bạn nên dọc kỹ datasheet. khi kết nối eeprom vào bus i2c bạn cũng cần chú ý là 24256 sử dụng nhiều địa chỉ trong bus i2c, không chú ý có thể bị trùng địa chỉ gây ra lỗi.

http://www.ccsinfo.com/forum/viewtopic.php?t=17787