Ðề tài: Giao tiếp I2C
View Single Post
Old 14-09-2006, 12:34 PM   #13
hoanf
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 51
:
Alo

Chào các bạn!!
Mình gặp trục trặc khi đọc dữ liệu từ Slave về.
Đây là đoạn code sử dụng cho 2 con PIC 18F877A.

Master: Yêu cầu Slave nhận dữ liệu liên tục (cách nhau 500ms) và nó sẽ hiển thị giá trị nhận được lên Port_b. Dùng leds để quan sát.

Code:
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use Delay(Clock=4000000)

#define SLAVE_ADDRESS 0x10
#use i2c(master, sda=PIN_C4, scl=PIN_C3)

int8 read_I2C()
{
   int8 value;

   i2c_start();
   i2c_write(SLAVE_ADDRESS + 1);
   value = i2c_read();
   i2c_stop();
   return value;
}

void main()
{
   int8 value;

   set_tris_b(0x00);
   
   while(1){
      value = read_I2C();
      output_b(value);
      delay_ms(500);
   }
}
Slave: Truyền dữ liệu cho master và mỗi lần truyền thì giá trị cần truyền tăng lên 1 đơn vị.
Code:
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,NOLVP

#use delay(Clock=4000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10)

int8 value = 0x01;

#INT_SSP
void i2c_isr()
{
   int8 state;
   int8 address;
   state = i2c_isr_state();
   if(state >= 0x80){
      i2c_write(value);
      value++;
   }
}

void main()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_SSP);

   set_tris_b(0x00);
   while(1){
      output_b(value);      
   }
}

thay đổi nội dung bởi: hoanf, 15-09-2006 lúc 12:40 PM.
hoanf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn