单片机基础模块学习——AT24C02芯片

一、EEPROM芯片

ROMRAM
断电后数据保留断电后数据消失

因此,如果在断电后希望数据继续保留的话,就需要存储在EEPROM芯片中。

二、EEPROM芯片原理图

  • A0~A2与芯片地址相关连接到GND,为0
  • GND 接地,VCC 正电源 
  • WP——write protect写保护,连接到地,意味着可以被自由写入(连接到高电平无法被写入)
  •  scl,sda说明采用iic协议进行通信

前七位固定不变,最后一位是0或1,write是0,read是1

所以写入地址是:0xA0  读取地址是:0xA1

因为地址不同,所以都采用iic协议也不会有冲突。

AT24C02代表有2k内存

三、写入读取方式

1.写入方式

  1. start  开始信号
  2. DEVICE ADDRESS 地址
  3. R/W 低电平是写,高电平是读
  4. ACK 应答位
  5. WORD ADDRESS 写入的位置
  6. ACK 应答位
  7. DATA写入相关数据
  8. ACK 应答位
  9. STOP 终止

2.读取方式

  1.  start  开始信号
  2. DEVICE ADDRESS 设备地址
  3. R/W 低电平是写,高电平是读
  4. ACK 应答位
  5. WORD ADDRESS 读取的位置
  6. ACK 应答位
  7.  start  再次发送开始信号
  8. DEVICE ADDRESS 设备地址
  9. READ 进入读模式
  10. ACK 应答位
  11. DATA将指定地址上的数据返回回来
  12. NO ACK没有应答
  13. STOP 终止

四、开发板位置

五、模块代码

#include "iic.h"
#define DELAY_TIME	5

//
static void I2C_Delay(unsigned char n)
{
    do
    {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();		
    }
    while(n--);      	
}

//
void I2CStart(void)
{
    sda = 1;
    scl = 1;
	I2C_Delay(DELAY_TIME);
    sda = 0;
	I2C_Delay(DELAY_TIME);
    scl = 0;    
}

//
void I2CStop(void)
{
    sda = 0;
    scl = 1;
	I2C_Delay(DELAY_TIME);
    sda = 1;
	I2C_Delay(DELAY_TIME);
}

//
void I2CSendByte(unsigned char byt)
{
    unsigned char i;
	
    for(i=0; i<8; i++){
        scl = 0;
		I2C_Delay(DELAY_TIME);
        if(byt & 0x80){
            sda = 1;
        }
        else{
            sda = 0;
        }
		I2C_Delay(DELAY_TIME);
        scl = 1;
        byt <<= 1;
		I2C_Delay(DELAY_TIME);
    }
	
    scl = 0;  
}

//
unsigned char I2CReceiveByte(void)
{
	unsigned char da;
	unsigned char i;
	for(i=0;i<8;i++){   
		scl = 1;
		I2C_Delay(DELAY_TIME);
		da <<= 1;
		if(sda) 
			da |= 0x01;
		scl = 0;
		I2C_Delay(DELAY_TIME);
	}
	return da;    
}

//
unsigned char I2CWaitAck(void)
{
	unsigned char ackbit;
	
    scl = 1;
	I2C_Delay(DELAY_TIME);
    ackbit = sda; 
    scl = 0;
	I2C_Delay(DELAY_TIME);
	
	return ackbit;
}

//
void I2CSendAck(unsigned char ackbit)
{
    scl = 0;
    sda = ackbit; 
	I2C_Delay(DELAY_TIME);
    scl = 1;
	I2C_Delay(DELAY_TIME);
    scl = 0; 
	sda = 1;
	I2C_Delay(DELAY_TIME);
}

unsigned char PCF8591_ADC(void)
{
	unsigned char temp;
	
	/**********************写入**********************/
	I2CStart();//开始
	I2CSendByte(0x90);//发送写地址
	I2CWaitAck();//等待应答
	
	I2CSendByte(0x43);//发送光敏电阻控制位
	I2CWaitAck();//等待应答
	
	/**********************读取**********************/
	I2CStart();//开始
	I2CSendByte(0x91);//发送读地址
	I2CWaitAck();//等待应答
	
	temp=I2CReceiveByte();//接收
	I2CSendAck(1);//发送应答
	I2CStop();//终止通信
	
	return temp;
}

void PCF8591_DAC(unsigned char dat)
{
	I2CStart();//开始
	I2CSendByte(0x90);//发送写地址
	I2CWaitAck();//等待应答
	
	I2CSendByte(0x41);//发送光敏电阻控制位
	I2CWaitAck();//等待应答
	
	I2CSendByte(dat);//发送光敏电阻控制位
	I2CWaitAck();//等待应答
	I2CStop();
	  
}

void EEPROM_Read(unsigned char *pucRuf,unsigned char addr,unsigned char num)
{
	I2CStart();
	I2CSendByte(0xA0);//发送设备地址
	I2CWaitAck();//等待应答
	
	I2CSendByte(addr);//发送写入位置
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xA1);//发送读取地址
	I2CWaitAck();
	
	while(num--)
	{
		*pucRuf++= I2CReceiveByte();
		 if(num)
			 I2CSendAck(0);
		 else
			 I2CSendAck(1);
	}
	I2CStop();//终止通信	
}

void EEPROM_Write(unsigned char *pucRuf,unsigned char addr,unsigned char num)
{
	I2CStart();
	I2CSendByte(0xA0);//发送设备地址
	I2CWaitAck();//等待应答
	
	I2CSendByte(addr);//发送读取位置
	I2CWaitAck();
	
	while(num--)
	{
		I2CSendByte(*pucRuf++);
		I2CWaitAck();
		I2C_Delay(200);//加入延时,不至于导致总线过于繁忙,有助于总线稳定性
	}
	
	I2CStop();//终止通信	
}

Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值