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

📄 iic.c

📁 应用于ARM7单片机的UART源码,已通过调试
💻 C
字号:
#include "config.h"

#define BIT(x) (1 << x)
#define I2C_EN BIT(6)
#define I2C_STA BIT(5)
#define I2C_STO BIT(4)
#define I2C_SI BIT(3)
#define I2C_AA BIT(2)
#define EEPROM_WRITE 0xA0
#define EEPROM_READ 0xA1

/*********************************************************************************************************
** 函 数 名:void InitEEPROM(void) 
** 入口参数:无
** 出口参数:无
** 功能描述:iic初始化函数
********************************************************************************************************/
void InitEEPROM(void) 
{
	
	I2C0SCLH = (Fpclk/100000 + 1) / 2;//设置SCL高电平占空比
	I2C0SCLL = (Fpclk/100000) / 2;//设置SCL低电平占空比
	I2C0CONCLR = I2C_STA | I2C_STO | I2C_SI | I2C_AA;//设计清零寄存器
	I2C0CONSET = I2C_EN;//使能IIC接口,设置接口模式
}




/****************************************************
** 函 数 名:void AddressEEPROM(unsigned char ChipID, unsigned short Address) 
** 入口参数:ChipID - 芯片ID号
			 Address - EEPROM寄存器地址
** 出口参数:无
** 功能描述:设置访问的地址,EEPROM 芯片ID号已经固定为0
*******************************************************/
void AddressEEPROM(unsigned char ChipID, unsigned short Address) 
{
	volatile unsigned int s;
	do
	{
		I2C0CONSET = I2C_STA | I2C_SI; //设置进入主模式的起始条件
		I2C0CONCLR = I2C_SI; //发送起始条件
		s = I2C0CONSET;
		while (~ I2C0CONSET & I2C_SI)
		s= I2C0CONSET; //等待起始条件发送
		I2C0DAT = EEPROM_WRITE | (ChipID & 0x7) << 1; //设置芯片从地址
		I2C0CONCLR = I2C_STA | I2C_SI; //发送芯片从地址
		while (~ I2C0CONSET & I2C_SI); //等待芯片从地址发送
		s= I2C0STAT;
	}while ( I2C0STAT != 0x18); //如果EEPROM没有应答再次循环发送

	I2C0DAT = Address & 0xFF; //设置EEPROM存储地址
	I2C0CONCLR = I2C_SI; //发送EEPROM存储地址
	while (~ I2C0CONSET & I2C_SI); //等待发送完毕
} //AddressEEPROM


/****************************************************
** 函 数 名:void WriteEEPROM(unsigned char ChipID, unsigned short Address, unsigned char Data) 
** 入口参数:ChipID - 芯片ID号
			 Address - EEPROM寄存器地址
			 Data - 待写入的数据
** 出口参数:无
** 功能描述:向EEPROM写入数据
*******************************************************/
void WriteEEPROM(unsigned char ChipID, unsigned short Address, unsigned char Data) 
{
	AddressEEPROM(ChipID, Address);//设置要访问的地址
	I2C0DAT = Data; //设置将要发送的数据
	I2C0CONCLR = I2C_SI; //发送数据
	while (~ I2C0CONSET & I2C_SI); //等待发送结束
	I2C0CONSET = I2C_STO; //安装停止条件
	I2C0CONCLR = I2C_SI; //发送停止位
	while ( I2C0CONSET & I2C_STO); //等待停止位发送完毕
} 

/****************************************************
** 函 数 名:unsigned char ReadEEPROM (unsigned char ChipID)
** 入口参数:ChipID - 芯片ID号
			 Address - EEPROM寄存器地址
			
** 出口参数:返回读出的数据
** 功能描述:读EEPROM数据
*******************************************************/
unsigned char ReadEEPROM (unsigned char ChipID, unsigned short Address) 
{
	unsigned char Data;
	AddressEEPROM(ChipID, Address);//设置要访问的地址
	
	do {
		I2C0CONSET = I2C_STA | I2C_SI; //安装起始条件
		I2C0CONCLR = I2C_SI; //发送起始条件
		while (~ I2C0CONSET & I2C_SI); //等待起始条件发送完毕
		I2C0DAT = EEPROM_READ|(ChipID& 0x07)<<1; //设置芯片从地址
		I2C0CONCLR = I2C_STA | I2C_SI; //发送芯片从地址
		while (~ I2C0CONSET & I2C_SI); //等待芯片从地址发送
	} while ( I2C0STAT != 0x40); //如果没收到应答,重复发送

	I2C0CONCLR = I2C_SI; //开始读数据
	while (~ I2C0CONSET & I2C_SI); //等待接收数据
	Data = I2C0DAT;
	I2C0CONSET = I2C_STO; //安装停止条件
	I2C0CONCLR = I2C_SI; //发送停止位
	while ( I2C0CONSET & I2C_STO); //等待停止位发送完毕
	return Data; //返回所读的数据
}






⌨️ 快捷键说明

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