一、基础原理剖析
先前的实验中我们都是通过程序设计语言去调用串口、定时器、引脚等硬件设备进行从0到有的功能实现,所有的指令以及数据均来自程序设计语言,而没有想计算机一样将一些必要数据存入存储器中。
IIC总线是我们嵌入式板子上进行数据传输的主要通道,因此如果我们了解其中内部原理,便可以实现数据存储功能以及实时时间获取的功能。
我们今天首先介绍EEPROM的使用方法。
(具体原理以及内核操作会在寒假进行系统化剖析)
二、环境创建
在比赛资源包中官方已经给我们提供了IIC总线例程,我们可以直接去选择调用:
选择现有的工作环境进行复制(配置好LED、KEY、LCD的任意环境均可),重命名为EEPROM
将例程文件复制到相应文件夹中
打开keil,加入对应的.c文件,随后编译
三、函数书写
以下函数均写入i2c_hal.c文件中
1.向EEPROM中写入数据
//EEPROM的写操作
void EEPROM_Write(unsigned char *pucBuf, unsigned char ucAddr, unsigned char ucNum)
{
I2CStart();
I2CSendByte(0xa0);//写标志
I2CWaitAck();
I2CSendByte(ucAddr);//送到的目标地址
I2CWaitAck();
while(ucNum--)
{
I2CSendByte(*pucBuf++);//不断发送buffer中的数据进入存储器
I2CWaitAck();
}
I2CStop();
delay1(500);//短暂延时
}
相关功能函数均位于该.c文件中
2.从EEPROM里读出数据
//EEPROM的读操作
void EEPROM_Read(unsigned char *pucBuf, unsigned char ucAddr, unsigned char ucNum)
{
I2CStart();
I2CSendByte(0xa0);//先要写数据
I2CWaitAck();
I2CSendByte(ucAddr);//指令送到的目标地址
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1);//读数据的指令
I2CWaitAck();
while(ucNum--)
{
*pucBuf++ = I2CReceiveByte();//不断从存储器中读数据进入buffer
if(ucNum)
I2CSendAck();
else
I2CSendNotAck();
}
I2CStop();
}