View Single Post
Old 25-02-2009, 04:08 PM   #7
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
24cxx

đ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 /////////////////////////

thay đổi nội dung bởi: namqn, 25-02-2009 lúc 04:23 PM. Lý do: định dạng code
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn