đoạn chương trình dưới tôi đã dùng và chạy hoàn chỉnh bạn tham khảo nhé. cái này tôi chỉnh lại từ file 2464.c của CCS.
để viết vào 1 byte bạn gọi hàm: write_ext_eeprom(add,data);
để đọc ra 1 byte từ 24cxx gọi hàm data = read_ext_eeprom(add)
để 24cxx có địa chỉ nhận 0xa0 bạn cần nối chân A0,1,2 xuống GND.
lưu ý là ko chạy mô phỏng được nhé
chúc vui
Code:
#use i2c(master, fast, sda=EEPROM_SDA, scl=EEPROM_SCL)
////////////////////////////////////////////////////
void write_ext_eeprom(int16 add, BYTE data)
{
short int status;
i2c_start(); // bao hieu bat dau giao tiep i2c
i2c_write(0xa0); // dia chi thiet bi nhan
i2c_write(add>>8); // gui den dia chi cao cua thiet bi nhan (dia chi cot)
i2c_write(add); // gui den dia chi thap cua thiet bi nhan (dia chi hang)
i2c_write(data); // ghi data vao dia chi tren cua thiet bi nhan
i2c_stop(); // bao hieu ngung ghi
i2c_start(); // bao hieu bat dau giao tiep
status=i2c_write(0xa0); // kiem tra trang thai cua thiet bi nhan
while(status==1) // lap lai cho den khi thiet bi da nhan xong (No Ack)
{
i2c_start();
status=i2c_write(0xa0);
}
delay_us(10);
}
BYTE read_ext_eeprom(int16 add)
{
BYTE data;
i2c_start();
i2c_write(0xa0);
i2c_write(add>>8);
i2c_write(add);
i2c_start();
i2c_write(0xa1);
data=i2c_read(0); // No Ack
i2c_stop();
return(data);
}
////////////////// the end /////////////////////////