使用AT24C02芯片做51单片机的外存储器,并且要求最多存储5000这个数字,求代码
时间: 2023-07-15 10:11:14 浏览: 80
191-存储AT24C02(51单片机C语言实例Proteus仿真和代码)
5星 · 资源好评率100%
以下是使用AT24C02芯片做51单片机的外存储器,最多存储5000这个数字的代码:
```c
#include <reg52.h>
#include <intrins.h>
#define SDA P1_1 // SDA引脚连接P1.1口
#define SCL P1_0 // SCL引脚连接P1.0口
sbit WP = P2^7; // WP引脚连接P2.7口
sbit SDA_OUT = P1^1; // SDA口输出模式
sbit SDA_IN = P1^1; // SDA口输入模式
void I2C_Start(void);
void I2C_Stop(void);
bit I2C_SendByte(unsigned char dat);
unsigned char I2C_ReadByte(void);
void AT24C02_Write(unsigned char addr, unsigned char dat);
unsigned char AT24C02_Read(unsigned char addr);
void main()
{
unsigned int num = 5000;
unsigned char high_byte, low_byte;
high_byte = num / 256; // 分解高8位
low_byte = num % 256; // 分解低8位
AT24C02_Write(0x00, high_byte); // 将高8位写入AT24C02
AT24C02_Write(0x01, low_byte); // 将低8位写入AT24C02
while (1)
{
high_byte = AT24C02_Read(0x00); // 从AT24C02中读取高8位
low_byte = AT24C02_Read(0x01); // 从AT24C02中读取低8位
num = high_byte * 256 + low_byte; // 合成数字
if (num == 5000)
{
// 进行相应的操作
}
}
}
void I2C_Delay(void) // I2C总线延时函数
{
unsigned char i;
for (i = 0; i < 100; i++);
}
void I2C_Start(void) // I2C总线起始信号函数
{
SDA_OUT = 1;
I2C_Delay();
SCL = 1;
I2C_Delay();
SDA_OUT = 0;
I2C_Delay();
SCL = 0;
I2C_Delay();
}
void I2C_Stop(void) // I2C总线停止信号函数
{
SDA_OUT = 0;
I2C_Delay();
SCL = 1;
I2C_Delay();
SDA_OUT = 1;
I2C_Delay();
}
bit I2C_SendByte(unsigned char dat) // I2C总线发送数据函数
{
unsigned char i;
bit ack;
for (i = 0; i < 8; i++)
{
if (dat & 0x80)
SDA_OUT = 1;
else
SDA_OUT = 0;
dat <<= 1;
I2C_Delay();
SCL = 1;
I2C_Delay();
SCL = 0;
I2C_Delay();
}
SDA_OUT = 1;
I2C_Delay();
SCL = 1;
I2C_Delay();
ack = SDA_IN;
SCL = 0;
I2C_Delay();
return ack;
}
unsigned char I2C_ReadByte(void) // I2C总线读取数据函数
{
unsigned char i, dat = 0;
for (i = 0; i < 8; i++)
{
dat <<= 1;
SCL = 1;
I2C_Delay();
if (SDA_IN)
dat |= 0x01;
SCL = 0;
I2C_Delay();
}
return dat;
}
void AT24C02_Write(unsigned char addr, unsigned char dat) // AT24C02芯片写入数据函数
{
I2C_Start();
I2C_SendByte(0xA0);
I2C_SendByte(addr);
I2C_SendByte(dat);
I2C_Stop();
}
unsigned char AT24C02_Read(unsigned char addr) // AT24C02芯片读取数据函数
{
unsigned char dat;
I2C_Start();
I2C_SendByte(0xA0);
I2C_SendByte(addr);
I2C_Start();
I2C_SendByte(0xA1);
dat = I2C_ReadByte();
I2C_Stop();
return dat;
}
```
注意:以上代码仅供参考,具体实现还需要根据具体的硬件电路和AT24C02芯片的规格书进行调整和优化。
阅读全文