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.
Important :
Library Routines
- I2C1_Init
- I2C1_Start
- I2C1_Repeated_Start
- I2C1_Is_Idle
- I2C1_Rd
- I2C1_Wr
- I2C1_Stop
I2C1_Init
Prototype | void I2C1_Init(const unsigned long clock); |
---|---|
Returns | Nothing. |
Description | Initializes I²C with desired clock (refer to device data sheet for correct values in respect with Fosc). Needs to be called before using other functions of I²C Library.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. |
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. |
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. |
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 ack is 0, otherwise it sends acknowledge. |
Requires | I²C must be configured before using this function. Also, START signal needs to be issued in order to use this function. |
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 data ) via I²C bus. |
Requires | I²C must be configured before using this function. Also, START signal needs to be issued in order to use this function. |
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. |
Example |
I2C1_Stop(); |
Code 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).
For more detail: Connect I²C with PIC