InNeedOfHelp
Full Member level 3
- Joined
- Dec 5, 2012
- Messages
- 169
- Helped
- 1
- Reputation
- 2
- Reaction score
- 1
- Trophy points
- 1,298
- Activity points
- 2,205
Code:
#define TC74_READ 0x9B
#define TC74_WRITE 0x9A
void i2c_Init(void)
{
// Initialise I2C MSSP
// Master 100KHz
TRISCbits.TRISC3=1; // set SCL and SDA pins as inputs
TRISCbits.TRISC4=1;
SSPCON1 = 0b00101000 ; // I2C enabled, Master mode
//SSPCON2 = 0x00;
// I2C Master mode, clock = FOSC/(4 * (SSPADD + 1))
SSPADD = 9; // 100Khz @ 4Mhz Fosc
SSPSTATbits.SMP =1; // Slew rate disabled
}
// i2c_Wait - wait for I2C transfer to finish
void i2c_Wait(void)
{
while ( ( SSPCON2 & 0x1F ) || ( SSPSTAT & 0x04 ) );
}
// i2c_Start - Start I2C communication
void i2c_Start(void)
{
i2c_Wait();
SSPCON2bits.SEN=1;
}
// i2c_Restart - Re-Start I2C communication
void i2c_Restart(void)
{
i2c_Wait();
SSPCON2bits.RSEN=1;
}
// i2c_Stop - Stop I2C communication
void i2c_Stop(void)
{
i2c_Wait();
SSPCON2bits.PEN=1;
}
// i2c_Write - Sends one byte of data
void i2c_Write(unsigned char data)
{
i2c_Wait();
SSPBUF = data;
}
// i2c_Address - Sends Slave Address and Read/Write mode
// mode is either I2C_WRITE or I2C_READ
void i2c_Address(unsigned char address, unsigned char mode)
{
unsigned char l_address;
l_address=address<<1;
l_address+=mode;
i2c_Wait();
SSPBUF = l_address;
}
// i2c_Read - Reads a byte from Slave device
unsigned char i2c_Read(unsigned char ack)
{
// Read data from slave
// ack should be 1 if there is going to be more data read
// ack should be 0 if this is the last byte of data read
unsigned char i2cReadData;
i2c_Wait();
SSPCON2bits.RCEN=1;
i2c_Wait();
i2cReadData = SSPBUF;
i2c_Wait();
if ( ack )
SSPCON2bits.ACKDT=0; // Ack
else
SSPCON2bits.ACKDT=1; // NAck
SSPCON2bits.ACKEN=1; // send acknowledge sequence
return( i2cReadData );
}
hi guys,
i need some help here doing I2C initialization.. can anyone help me please..
im using c-18 compiler using pic18f4520
Last edited: