📄 i2c_demo.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 + -