MCP9808
/********************************************************************
*
*
*
*
*
Function Name:
Return Value:
Parameters:
i2c_write
Status byte for WCOL detection.
Single data byte for I2C2 bus.
This routine writes a single byte to the
I2C2 bus.
Description:
********************************************************************/
unsigned char i2c_write( unsigned char i2cWriteData ) {
PIR1bits.SSPIF = 0; // clear interrupt
while ( SSPSTATbits.BF ) ; // wait for idle condition
SSPBUF = i2cWriteData;
ted)
// Load SSPBUF with i2cWriteData (the value to be transmit-
while (!PIR1bits.SSPIF) ; // wait for a flag to be set
PIR1bits.SSPIF = 0; // clear flag
return ( !SSPCON2bits.ACKSTAT ); // function returns '1' if transmission is acknowledged
}
/********************************************************************
*
*
*
*
Function Name:
Return Value:
Parameters:
i2c_read
contents of SSP2BUF register
ack = 1 and nak = 0
Description:
Read a byte from I2C bus and ACK/NAK device
********************************************************************/
unsigned char i2c_read( unsigned char ack ) {
unsigned char i2cReadData;
PIR1bits.SSPIF = 0;// clear interrupt
while ( SSPSTATbits.BF ) ; // wait for idle condition
SSPCON2bits.RCEN = 1;
// enable receive mode
while (!PIR1bits.SSPIF) ; // wait for a flag to be set
PIR1bits.SSPIF = 0;// clear flag
i2cReadData = SSPBUF;
if ( ack ) {
// Read SSPBUF and put it in i2cReadData
// if ack=1
SSPCON2bits.ACKDT = 0; //
} else {
SSPCON2bits.ACKDT = 1; //
then transmit an Acknowledge
otherwise transmit a Not Acknowledge
}
SSPCON2bits.ACKEN = 1;
// send acknowledge sequence
while (!PIR1bits.SSPIF) ; // wait for a flag to be set
PIR1bits.SSPIF = 0;// clear flag
return( i2cReadData );
// return the value read from SSPBUF
}
© 2011 Microchip Technology Inc.
DS25095A-page 47