文章插图
自己学习记录用,有些乱,
1、IIC,eeprom24c02驱动配置
本实验是基于EEPROM的24C02驱动配置的编程,主要记录一些编程的重点节点的理解:
1、IIC驱动配置:精准的时钟配置,计算每一步所需要的指令周期,相加是10us 。
2、IIC的起始信号配置,根据IIC的时序特性配置 。
3、IIC终止信号配置,根据IIC的时序特性配置 。
4、I2cSendByte(unsigned char dat): 通过I2C发送一个字节 。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定 。
5、I2cReadByte(),函数功能 : 使用I2c读取一个字节
6、void At24c02Write(unsigned char addr,unsigned char dat) 函数功能 :向 24c02的一个地址写入一个数据 。
发送写器件地址是根据24C02的电路特性和地址特性获得 。24C02是有E0,E1,E2寻址,根据下面两图片可知是8位寻址,因E0、E1、E2引脚接地,而是写所以,R/W位为零 。,即发送器件地址位0xa0,同理接收时,接收器件地址为0xa1.
7、unsigned char At24c02Read(unsigned char addr)函数功能 : 读取24c02的一个地址的一个数据
2、24C02或者24C16进行字节、页读取、页存取
- void i2cStart(void) //开始时序
- {
- SDA=1;
- SCL=1;
- _delay(2); //延时2μs
- SDA=0;
- _delay(2);
- SCL=0;
- }
- void i2cStop(void) //结束时序
- {
- SDA=0;
- _delay(2);
- SCL=1;
- _delay(2);
- SDA=1;
- }
- void i2cAck_MCU(void) //应答时序
- {
- SDA=0;
- _delay(2);
- SCL=1;
- _delay(2);
- SCL=0;
- _delay(2);
- SDA=1;
- _delay(4);
- }
- void i2cNoAck_MCU(void) //非应答时序
- {
- SDA=1;
- _delay(2);
- SCL=1;
- _delay(2);
- SCL=0;
- _delay(2);
- }
24C02就是有2Kbit = 2000/8 = 250个字节,24C16就是有16kbit = 2000个字节,24C02一页最多可以写入8个字节,因此可以分成32页,24C16一页最多可以写入16个字节,因此可以分成128页 。
1、字节写操作
void WriteByte_24LC16B(unsigned char input)
{
unsigned char bit_count;
for(bit_count=8;bit_count!=0;bit_count–)
{
_delay(2);
SDA=(_Bool)(input&0x80);
_delay(2);
SCL=1;
_delay(2);
SCL=0;
input=input<<1;
_delay(2);
}
SDA=1;
SDA_CTRL=1;//这里需要看自己使用的芯片设置SDA的IO口为输入状态,我用的是HT45F67芯片,SDA端口设置为输入状态,用于判断SDA是否接到主机的应答信号
_delay(2);
SCL=1;
_delay(2);
if(SDA == 1)
ack = 0;
else
ack = 1;
SCL=0;
SDA_CTRL=0; //此处根据自己所使用的芯片将SDA所在的Io口设置为输出状态
}
void Write_24LC16B(unsigned char Wdata,unsigned int RomAddress)
{
unsigned char block;
WriteDeviceAddress=0B10100000;
block=RomAddress/256;
RomAddress=RomAddress%256;
WriteDeviceAddress=WriteDeviceAddress|(block<<1);
i2cStart();
WriteByte_24LC16B(WriteDeviceAddress);
WriteByte_24LC16B((unsigned char)RomAddress);
WriteByte_24LC16B(Wdata);
i2cStop();
_delay(5500);
}
2、字节读操作
unsigned char ReadByte_24LC16B()
{
unsigned char bit_count,rbyte=0;
SDA=1;
SDA_CTRL=1;
_delay(10);
for(bit_count=8;bit_count!=0;bit_count–)
{
rbyte=rbyte<<1;
_delay(2);
SCL=1;
rbyte=rbyte|((unsigned char)(SDA));
_delay(2);
SCL=0;
_delay(2);
}
SDA_CTRL=0;
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- css基本选择符分享 css选择符有哪些
- rar文件破解器手机分享 rar文件破解器手机
- 自学编程基础知识 如何自学软件编程基础
- 化工pid图纸符号大全分享 化工pid图纸符号大全
- mysql安装教程分享 mysql的安装包在哪个文件
- 计算机编程的学习方法 计算机编程一般要学多久
- poe交换机监控连接图加讲解分享 poe交换机监控连接图加讲解
- redis使用教程pdf分享 redis使用教程pdf
- jmeter性能测试案例分享 jmeter性能测试案例
- c语言编程软件推荐 c语言开发软件有哪些