Ukratko o sabirnici
I2C (izgovara se Eye-Squared-See) je dvožicani serijski protokol kojeg je Philips razvio ranih 1980-ih godina. I2C (skracenica od Inter-Integrated Circuit) je dvosmjeran i razvijen je za jednostavnu i ucinkovitu kontrolu eksternih modula.
Prednosti I2C sabirnice
Potrebne su samo dvije žice
Multi-master sistem
Velike brzine prijenosa podataka (od 100 kbits/sec do 3.4 Mbits/sec)
Veliki broj uredaja koji se mogu spojiti na istu sabirnicu (7 bitno adresiranje)
C51 funkcija
Prvo je potrebno deklarirati pozive i pinove koji se koriste za I2C komunikaciju:
-
// deklaracija pinova za komunikaciju
-
#define SDATA P1_0 // Serial data
-
#define SCLK P1_1 // Serial clock
-
-
-
-
// deklaracija funkcija
-
-
void i2c_start (void); // Šalje I2C START naredbu
-
void i2c_stop (void); // Šalje I2C STOP naredbu
-
void i2c_write (unsigned char input_data); // Piše podatke na sabirnicu
-
unsigned char i2c_read (void); // Cita podatke sa sabirnice
-
Nakon toga se mogu pozivati sljedece funkcije:
-
void i2c_start (void)
-
{
-
SDATA = HIGH;
-
SCLK = HIGH;
-
SDATA = LOW;
-
SCLK = LOW;
-
}
-
-
void i2c_stop (void)
-
{
-
unsigned char input_var;
-
-
SCLK = LOW;
-
SDATA = LOW;
-
SCLK = HIGH;
-
SDATA = HIGH;
-
input_var = SDATA;
-
}
-
-
void i2c_write (unsigned char output_data)
-
{
-
unsigned char index;
-
-
for(index = 0; index < 8; index++)
-
{
-
-
SDATA = ((output_data & 0x80) ? 1 : 0);
-
output_data <<= 1;
-
SCLK = HIGH;
-
SCLK = LOW;
-
}
-
-
index = SDATA;
-
SCLK = HIGH;
-
SCLK = LOW;
-
}
-
-
unsigned char i2c_read (void)
-
{
-
unsigned char index, input_data;
-
-
index = SDATA;
-
-
input_data = 0x00;
-
for(index = 0; index < 8; index++)
-
{
-
input_data <<= 1;
-
SCLK = HIGH;
-
input_data |= SDATA;
-
SCLK = LOW;
-
}
-
-
return input_data;
-
}
Primjer upotrebe funkcije za upisivanje podatka (0x90) na I2C BUS.
-
i2c_start();
-
i2c_write(0x90);
-
i2c_stop();
|