03-11-2012, 04:44 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: May 2012
Bài gửi: 19
: |
Giao tiep I2C voi PIC 16f877a
Chào các cậu. Tớ đang tự học CCS C và đến phần giao tiếp I2C. Tớ đã đọc code mẫu trong help của CCS C và đã đọc code mẫu của các bạn hoanf và ha trong topic I2C nhưng tớ chưa hiểu lắm. Ý tưởng ban đầu của tớ đơn giản chỉ là truyền một byte (chỉ 1 byte và 1 lần) từ con mater xuống con slave.
//////////////////////////////////////////////////////////////////////////////////////////////// //dùng PIC 16f877a //////////// //các đoạn khai báo ban đầu tương tự như các bài hướng dẫn trên diễn đàn//////////// //nên tớ không viết lại (vì admin có yêu cầu là chỉ post phần thắc mắc và ý tưởng)//// //////////////////////////////////////////////////////////////////////////////////////////////// //code cho con mater: #define slave_address 0x10 #use i2c(master, sda=PIN_C4, scl=PIN_C3) void write_I2C(int8 value) { i2c_start();//mater tao tin hieu start i2c_write(slave_addr);//Gửi địa chỉ và bít hướng R/W = 0 (Mode write) đến Slave i2c_write(value);//Gửi dữ liệu byte thứ nhất i2c_stop();// Master tạo tín hiệu Stop } void main() { int8 a = 0xFF; write_I2C(a); } //code cho slave #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10) int8 value; #INT_SSP void i2c_isr() { int8 state; state = i2c_isr_state(); if(state == 0) i2c_read(); else if(state < 0x80) value = i2c_read(); } void main() { enable_interrupts(GLOBAL); enable_interrupts(INT_SSP); set_tris_b(0); output_b(value); } Khi tớ mô phỏng trên protues thì 8 con led ở portB của con slave ko sáng cùng lúc (giá trị tại các pin của portB ở con slave là mức cao thì led sáng) mà nó chớp tắt như là tớ truyền liên tục một byte xuống từ con master với giá trị khởi tạo là " a = 0x01 " và cứ mỗi lần truyền thì a tăng lên 1 đơn vị (giá trị tiếp theo của a là " a = 0x02 " và cứ thế..) đến khi " a = 0xFF" (8 con sáng cùng 1 lúc) thì nó lại tắt và bắt đầu lại từ đầu. Tớ suy nghĩ nhiều lần mà không hiểu dc, vì tớ chỉ truyền 1 lần thì con slave chỉ nhận 1 lần chứ. Như vậy thì 8 con led ở con slave sáng đồng thời và giữ nguyên...nhưng ở đây thì nó lại chớp tắt như trên. Mong các cậu biết giải thích hộ tớ. Tớ gửi lời cảm ơn và lời chúc sứ khỏe đến các cậu.. ..thân... |
|
|