📄 i2c.h
字号:
/*============== ⒀ Port Initialize Routine ⑿ =========================================
** Filename : I2C.H
** PIC I2C Routine
** (c) Copyright WOORY⑩ Industrial Company Limited. 1991-2004
================================================================================*/
/*============== ⒀ I2C Initialize Routine ⑿ =========================================*/
void I2C_Initialize(void)
{
SSPCON1 = 0B00101000; // I2C Master Mode Enable
SSPSTAT = 0B10000000; // Slew rate = 100KHz and 1MHz Mode
SSPADD = 0B00001001; // I2C Speed = Fosc / (4x(SSPADD +1)) = 400KHz
SSPCON2 = 0B00000000; // I2C Data Transfer Leady
return;
}
/*============== ⒀ I2C Wait Routine ⑿ =============================================*/
void I2C_Wait(void)
{
while(!(PIR1 & 0x08)); // Check PIR1 in SSPIF Bit
PIR1 &= 0B11110111; // Clear PIR1 in SSPIF Bit
return;
}
/*============== ⒀ I2C Start Condition Routine ⑿ ====================================*/
void I2C_Start(void)
{
SSPCON2 |= 0x01; // Generate START Condition(SEN = 1)
I2C_Wait(); // Wait for data to arrive
return;
}
/*============== ⒀ I2C Stop Condition Routine ⑿ ====================================*/
void I2C_Stop(void)
{
SSPCON2 |= 0x04; // Generate START Condition(PEN = 1)
I2C_Wait(); // Wait for data to arrive
return;
}
/*============== ⒀ I2C ACK Output Routine ⑿ =======================================*/
void I2C_Ack(void)
{
SSPCON2 &= 0B11011111; // ACK Data to Send is 0 (ACKDT = 0)
SSPCON2 |= 0x10; // Send ACK Data Now (ACKEN = 1)
I2C_Wait(); // Wait for Data to Arrive
return;
}
/*============== ⒀ I2C ACK Read Routine ⑿ ========================================*/
unsigned char I2C_Read_Ack(void) //Check ACK Status ACKSTAT bit
{
if(SSPCON2 & 0x40)return(1);
else return(0);
}
/*============== ⒀ I2C ReStart Condition Routine ⑿ ==================================*/
void I2C_Restart(void)
{
SSPCON2 |= 0x02; // Generate Restart Condition bit RSEN
I2C_Wait(); // Wait for data to arrive
return;
}
/*============== ⒀ I2C Initialize Routine Routine ⑿ ===================================*/
void I2C_Nak(void)
{
SSPCON2 |= 0x20; // ACK Data to Send is 1 (ACKDT = 1)
SSPCON2 |= 0x10; // Send ACK Data Now (ACKEN = 1)
I2C_Wait(); // Wait for data to arrive
return;
}
/*============== ⒀ I2C Initialize Routine Routine ⑿ ===================================*/
void I2C_Transmit(unsigned char Data)
{
SSPBUF = Data; // Load DATA to send
I2C_Wait(); // Wait for data to arrive
return;
}
/*============== ⒀ I2C Initialize Routine Routine ⑿ ===================================*/
unsigned char I2C_Receive(void)
{
SSPCON2 |= 0x08; // Enable I2C receiver
I2C_Wait(); // Wait for data to arrive
return(SSPBUF);
}
/*============== ⒀ End of System Main Control Routine ⑿ ==============================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -