⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p18_i2c.c

📁 PIC18系列单片机
💻 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 + -