I²C Library
The I²C full master MSSP module is available with a number of PIC MCU models. mikroC PRO for PIC provides library which supports the master I²C mode.

- Some MCUs have multiple I²C modules. In order to use the desired I²C library routine, simply change the number
1
in the prototype with the appropriate module number, i.e.I2C2_Init(100000);
Library Routines
I2C1_Init
Prototype |
void I2C1_Init(const unsigned long clock); |
---|---|
Returns |
Nothing. |
Description |
Initializes I²C with desired You don’t need to configure ports manually for using the module; library will take care of the initialization. |
Requires |
Library requires MSSP module. ![]() |
Example |
I2C1_Init(100000); |
I2C1_Start
Prototype |
unsigned short I2C1_Start(void); |
---|---|
Returns |
If there is no error, function returns 0. |
Description |
Determines if I²C bus is free and issues START signal. |
Requires |
I²C must be configured before using this function. See I2C1_Init. |
Example |
I2C1_Start(); |
I2C1_Repeated_Start
Prototype |
void I2C1_Repeated_Start(void); |
---|---|
Returns |
Nothing. |
Description |
Issues repeated START signal. |
Requires |
I²C must be configured before using this function. See I2C1_Init. |
Example |
I2C1_Repeated_Start(); |
I2C1_Is_Idle
Prototype |
unsigned short I2C1_Is_Idle(void); |
---|---|
Returns |
Returns 1 if I²C bus is free, otherwise returns 0. |
Description |
Tests if I²C bus is free. |
Requires |
I²C must be configured before using this function. See I2C1_Init. |
Example |
if (I2C1_Is_Idle()) {...} |
I2C1_Rd
Prototype |
unsigned short I2C1_Rd(unsigned short ack); |
---|---|
Returns |
Returns one byte from the slave. |
Description |
Reads one byte from the slave, and sends not acknowledge signal if parameter |
Requires |
I²C must be configured before using this function. See I2C1_Init. Also, START signal needs to be issued in order to use this function. See I2C1_Start. |
Example |
Read data and send not acknowledge signal: unsigned short take; ... take = I2C1_Rd(0); |
I2C1_Wr
Prototype |
unsigned short I2C1_Wr(unsigned short data_); |
---|---|
Returns |
Returns 0 if there were no errors. |
Description |
Sends data byte (parameter |
Requires |
I²C must be configured before using this function. See I2C1_Init. Also, START signal needs to be issued in order to use this function. See I2C1_Start. |
Example |
I2C1_Write(0xA3); |
I2C1_Stop
Prototype |
void I2C1_Stop(void); |
---|---|
Returns |
Nothing. |
Description |
Issues STOP signal. |
Requires |
I²C must be configured before using this function. See I2C1_Init. |
Example |
I2C1_Stop(); |
Library Example
This code demonstrates use of I²C library. PIC MCU is connected (SCL, SDA pins) to 24c02 EEPROM. Program sends data to EEPROM (data is written at address 2). Then, we read data via I²C from EEPROM and send its value to PORTB, to check if the cycle was successful (see the figure below how to interface 24c02 to PIC).
void main(){ ANSEL = 0; // Configure AN pins as digital I/O ANSELH = 0; PORTB = 0; TRISB = 0; // Configure PORTB as output I2C1_Init(100000); // initialize I2C communication I2C1_Start(); // issue I2C start signal I2C1_Wr(0xA2); // send byte via I2C (device address + W) I2C1_Wr(2); // send byte (address of EEPROM location) I2C1_Wr(0xAA); // send data (data to be written) I2C1_Stop(); // issue I2C stop signal Delay_100ms(); I2C1_Start(); // issue I2C start signal I2C1_Wr(0xA2); // send byte via I2C (device address + W) I2C1_Wr(2); // send byte (data address) I2C1_Repeated_Start(); // issue I2C signal repeated start I2C1_Wr(0xA3); // send byte (device address + R) PORTB = I2C1_Rd(0u); // Read the data (NO acknowledge) I2C1_Stop(); // issue I2C stop signal }
HW Connection
Interfacing 24c02 to PIC via I²C
What do you think about this topic ? Send us feedback!