PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 03-11-2012, 04:44 AM   #1
lab.cdt
Đệ 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...
lab.cdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:52 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam