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 20-06-2009, 04:18 PM   #1
rien
Đệ tử 1 túi
 
Tham gia ngày: Sep 2008
Bài gửi: 13
:
Smile I2C truyền và nhận nhiều byte dữ liệu.

Chào các bạn,
Mình có đọc các bài viết về I2c Trên diễn đàn nhưng đa số chỉ truyền nhận 1 byte, hoặc truyền nhiều byte nhưng phải start và stop nhiều lần. Sau khi mày mò, mình đã truyền được nhiều byte. Dưới đây là đoạn code đọc 2 byte của Master
Code:
int16 read_I2C_2byte( int8 slave_addr)
{
   int16 result;
   int8 low, high;
   i2c_start();
   i2c_write(slave_addr+1);
   high= i2c_read(1);
   low= i2c_read(0);
   i2c_stop();
   result = make16(high, low);
   return result;
}
đoạn code write 2 byte của Master
Code:
void write_I2C_2byte(int8 byte1, int8 byte2, int8 slave_addr)
{
   i2c_start();
   i2c_write(slave_addr);
   i2c_write(byte1);
   i2c_write(byte2);   
   i2c_stop();
}
Đoạn code interrupt của Slave
Code:
#INT_SSP
void i2c_isr()
{
   int8 state;
   state = i2c_isr_state();
   if(state<0x80)
   {
      if (state == 1)
      byte1= I2C_read(1);
      if (state == 2)
      byte2= I2C_read(1);
   }
   
   if(state >= 0x80)
   {
      if (state == 0x80)
         I2C_write(high);
      if (state == 0x81)
         I2C_write(low);
   }
   clear_interrupt(INT_SSP);
}
Hàm i2c_isr_state(); sẽ trả về giá trị 0 khi Slave nhận được byte địa chỉ, trả về giá trị 1 khi nhận được byte thứ nhất, trả về giá trị 2 khi nhận được byte thứ 2,...

Hàm i2c_isr_state(); sẽ trả về giá trị 0x80 khi Slave truyền byte thứ nhất, trả về giá trị 0x81 khi Slave truyền byte thứ hai,...

Các đoạn code trên có thể được điều chỉnh để truyền hoặc nhận tối đa 127 byte chỉ với 1 lần Start và 1 lần Stop.

Đây là những gì mình đọc, suy nghĩ và kiểm chứng trên mạch thật. Mong các bạn đóng góp ý kiến để hoàn thiện nó.

thay đổi nội dung bởi: rien, 22-06-2009 lúc 05:21 PM.
rien 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à 05:01 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