ตัว Xport ซื้อมาจากที่ไหนครับ
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menu
//------------------------------------------------------------------------------------//
// Program : Library for i2c bus
// Description : Library for i2c bus
// Frequency : Crystal 20 MHz
// Filename : i2c.h
// C compiler : Hitech C Compiler
//------------------------------------------------------------------------------------//
#ifndef _I2C_H_
#define _I2C_H_
#include <pic.h> // Include header file for MCU
#define ACK 1 // Macro for used acknowledge in i2c_read function
#define NACK 0 // Macro for not used acknowledge in i2c_read function
//----------------------------------------------------------------------------//
//---------------------- Function i2c start condition -----------------------//
//----------------------------------------------------------------------------//
void i2c_start()
{
SEN = 1; // Start I2C
while(!SSPIF); // Wait for start complete
SSPIF = 0; // Clear flag
}
//----------------------------------------------------------------------------//
//---------------------- Function i2c stop condition -----------------------//
//----------------------------------------------------------------------------//
void i2c_stop()
{
PEN = 1; // Stop I2C
while(!SSPIF); // Wait for stop complete
SSPIF = 0; // Clear flag
}
//----------------------------------------------------------------------------//
//---------------------- Function i2c write data ----------------------------//
//----------------------------------------------------------------------------//
char i2c_write(unsigned char dat)
{
SSPBUF = dat; // Send data
while(!SSPIF); // Wait for send data complete
SSPIF = 0; // Clear flag
if(ACKSTAT) // Check ACK signal from slave
{
i2c_stop(); // When slave not connected
return(2);
}
else
{
return(1); // When slave connected
}
}
//----------------------------------------------------------------------------//
//---------------------- Function i2c read data -----------------------------//
//----------------------------------------------------------------------------//
unsigned char i2c_read(char check)
{
unsigned char dat; // Keep data
RCEN = 1; // Recive enable
while(!SSPIF); // Wait for receive complete
SSPIF = 0; // Clear flag
dat = SSPBUF; // Get data
if(check==NACK) // Generate NACK signal?
ACKDT = 1; // Generate NACK signal
else // Case Generate ACK signal
ACKDT = 0; // Generate ACK signal
ACKEN = 1; // ACK enable
while(!SSPIF); // Wait for ACK complete
SSPIF = 0; // Clear flag
return(dat); // Return data
}
//----------------------------------------------------------------------------//
//---------------------- Function initial module i2c ------------------------//
//----------------------------------------------------------------------------//
void i2c_init()
{
TRISC3 = 1; // Ensure set SCL input mode // เปลี่ยนเป็น TRISC5 = 1;
TRISC4 = 1; // Ensure set SDA input mode // เปลี่ยนเป็น TRISC4 = 1;
SSPADD = 49; // Set SCL clock 100kHz
SMP = 1; // Standart mode
SSPCON = 0x08; // I2C master mode
SSPEN = 1; // Enable SSP module
}
#endif