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

📄 i2c_demo.c

📁 一个非常好的SPI程序,希望大家会喜欢这个程序.
💻 C
字号:
// ***************   I2C driver Demo V 1.0   *************
// ***           Written By P. Fletcher-Jones          ***
// ***                Written on 16/11/01			   ***
// ***                 Last MOD 21/11/01			   ***
// *******************************************************

#include <iom103.h>
#include <MACROS.h>

#include <DC_Defines.h>

#include "I2C.h"



void EEPROM_Write(unsigned char, unsigned char, unsigned char);
unsigned char EEPROM_Read(unsigned char, unsigned char);


// **************************************************************** //
// ***                     Init_I2C();							*** //
// *** This routine will setup the I2C port direction registers *** //
// **************************************************************** //

// ***************************************************************** //
// ***                     I2C_Start();	 		  		 	   	 *** //
// *** This routine will set the I2C start condition on the bus, *** //
// *** All commands must be preceded by a START condition 		 *** //
// ***************************************************************** //

// ***************************************************************** //
// ***                     I2C_Stop();	 		  		 	   	 *** //
// *** This routine will set the I2C stop condition on the bus,  *** //
// *** All commands must end with a STOP condition 		         *** //
// ***************************************************************** //

// *********************************************************************** //
// ***                Write_I2C_Control(0x0A,0,0);	  		  	       *** //
// *** This routine will write the I2C device code, the device address *** //
// *** setup on the hardware pins A0,A1 & A2, and also the W/R bit     *** //
// *** So for an external EEPROM, such as the 24LC04B you would need   *** //
// *** a device code of 1010 (0x0A),   	  	  		  	  			   *** //
// *** hardware address 0 (if pins A0,A1 & A2 are left unconnected,    *** //
// *** and the last parameter is R/W. Write is active low			   *** //
// *********************************************************************** //

// *********************************************************************** //
// ***                          I2C_Ackn();							   *** //
// *** This routine will clock the ACK bit from the I2C slave device   *** //
// *** it will return TRUE for a fail, and FALSE for a correct ACK bit *** //
// *********************************************************************** //

// ************************************************************** //
// ***                     Write_I2C_Byte();				  *** //
// *** This routine will clock a byte to the slave I2C device *** //
// ************************************************************** //

// ************************************************************************** //
// ***                       Read_I2C_Byte();					          *** //
// *** This routine will read and return a byte from the I2C slave device *** //
// ************************************************************************** //



// *********************************************************************** //
// ***                 Example of using Imagecraft I2C driver          *** //
// ***              to write to an external 8 bit address EEPROM       *** //
// *** H_ADD is the hardware address set on the device A0,A1 & A2 pins *** //
// *** M_ADD is the devices internal memory address                    *** //
// *** Data is user data to be writen 								   *** //
// *********************************************************************** //

void EEPROM_Write(unsigned char H_ADD, unsigned char M_ADD, unsigned char Data)
{
 I2C_Start();			   			   // Set I2C start condition

 Write_I2C_Control(0x0A,H_ADD,0);	   // Send the EEPROM control Byte

 Write_I2C_Byte(M_ADD);				   // Send the EEPROM internal Address
  
 Write_I2C_Byte(Data);				   // Send the EEPROM Data
 
 I2C_Stop();	  					   // Set I2C Stop condition
}



// *********************************************************************** //
// ***              Example of using Imagecraft I2C driver             *** //
// ***            to Read an external 8 bit address EEPROM             *** //
// *** H_ADD is the hardware address set on the device A0,A1 & A2 pins *** //
// *** M_ADD is the devices internal memory address                    *** //
// *** Data is user data to be writen 								   *** //
// *********************************************************************** //

unsigned char EEPROM_Read(unsigned char H_ADD, unsigned char M_ADD)
{
 unsigned char Temp;			   		// Temp RAM for EEPROM Read
 
 I2C_Start();			   			   // Set I2C start condition

 Write_I2C_Control(0x0A,H_ADD,0);	   // Send the EEPROM control Byte
 									   // Dummy write to set address

 Write_I2C_Byte(M_ADD);				   // Send the EEPROM internal Address
 
 I2C_Start();			   			   // Set I2C start condition
 
 Write_I2C_Control(0x0A,H_ADD,1);	   // Send the EEPROM control Byte
 
 Temp = Read_I2C_Byte();			   // Read data from EEPROM
 
 I2C_Stop();	  					   // Set I2C Stop condition

 return Temp;						   // Return data from EEPROM
}










void main (void)
{
 unsigned long c;			  // Temp Ram used for write delay
 
 DDRB = 0xFF;  	 			  // Set Port B to Outputs

 Init_I2C();	   			  // Setup the hardware port

 EEPROM_Write(0,1,0x0f);	  // Write to device 0, memory address 1, Data 0xAA			
 
 for(c=0;c<1000;c++);		  // Delay for EEPROM Write
 
 PORTB = EEPROM_Read(0,1);	  // Read device 0, memory address 1
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -