📄 p18_i2c.c
字号:
#include "..\include.h"
//#include <pic.h>
#define I2C_TIMEOUT 60//15//(OSC_CLOCK/4)
void I2C2_Init( void )
{
TRISD5=1;
TRISD6=1;
// Slew rate control enable for high speed mode(400kHz)
SSP2CON1=0x28; //SSPEN=1 and SSPM3:SSPM0=1000
SSP2ADD= 0x28; //4Mhz cystall,
Delay10Us(1);
}
void I2C2_Start( void )
{
unsigned int i;
SEN2 = 1; // initiate bus start condition
for ( i=I2C_TIMEOUT; i; i-- ) { // this is about 1ms timeout
if ( SSP2IF )
break;
}
SSP2IF=0;
}
void I2C2_Stop( void )
{
unsigned int i;
PEN2 = 1;
for ( i=I2C_TIMEOUT; i; i-- ) { // this is about 1ms timeout
if ( SSP2IF )
break;
}
SSP2IF = 0;
}
unsigned char I2C2_ReadAck( void )
{
unsigned int i;
for ( i=I2C_TIMEOUT; i; i-- ) { // this is about 1ms timeout
if ( !ACKSTAT2 ) {
return 1;
}
}
return 0;
}
void I2C2_SendByte( unsigned char u8_data )
{
unsigned int i;
SSP2BUF = u8_data;
// I2C2_ReadAck();
for ( i=I2C_TIMEOUT; i; i-- ) { // this is about 1ms timeout
if ( SSP2IF ) {
break;
}
}
SSP2IF = 0;
I2C2_ReadAck();
SSP2IF = 0;
}
unsigned char I2C2_GetByte( void )
{
unsigned int i;
RCEN2 = 1;
for ( i=I2C_TIMEOUT; i; i-- ) { // this is about 1ms timeout
if ( BF2 ) {
break;
}
}
SSP2IF = 0;
return SSP2BUF;
}
void I2C2_SendACK( void )
{
unsigned int i;
ACKEN2 = 1;
for ( i=I2C_TIMEOUT; i; i-- ) { // this is about 1ms timeout
if ( ACKEN2 == 0 ) {
break;
}
}
SSP2IF = 0;
}
void I2C2_SendNotACK( void )
{
ACKDT2 = 1;
I2C2_SendACK();
}
void RestartI2C( void )
{
RSEN2 = 1; // initiate bus restart condition
while(!SSP2IF); // Completed the action when the SSPIF is Hi.
SSP2IF=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -