📄 rom.c
字号:
#include <reg51.h>
#include <intrins.h>
#include "at24c04.h"
#include "i2c.h"
void delay10ms(void)
{
uint i;
for(i=0;i<200;i++);
}
//启动信号
void start(void)
{
AT24C04_SCL=0;
nop();
AT24C04_SDA=1;
nop();
AT24C04_SCL=1;
nop();
AT24C04_SDA=0;
nop();
}
//停止信号
void stop(void)
{ AT24C04_SCL=0;
nop();
AT24C04_SDA=0;
AT24C04_SCL=1;
nop();
AT24C04_SDA=1;
nop();
}
//发应答信号
void ack(void)
{
AT24C04_SCL=0;
AT24C04_SDA=0;
AT24C04_SCL=1;
nop();
}
//发非应答信号
void no_ack(void)
{
AT24C04_SCL=0;
AT24C04_SDA=1;
AT24C04_SCL=1;
nop();
}
//写字节
bit write8bit(uchar input)
{
uchar i;
for(i=0;i<8;i++)
{
AT24C04_SCL=0;
input=input<<1;
AT24C04_SDA=CY;
nop();
nop();
AT24C04_SCL=1;
nop();
}
AT24C04_SCL=0;
nop();
AT24C04_SDA=1;
AT24C04_SCL=1;
nop();
CY=AT24C04_SDA;
return(CY);
}
//读字节
uchar read8bit(void)
{
uchar i,readdata;
for(i=0;i<8;i++)
{
AT24C04_SCL=0;
nop();
readdata=(readdata<<1)|AT24C04_SDA;
AT24C04_SCL=1;
}
return readdata;
}
//功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针
//nContent开头的往下内容。
void readflash(uchar *content,uchar address,uchar len) //顺序读
{
uchar i;
start(); //以随机读开始,提供开始地址
write8bit(WriteDeviceAddress);
write8bit(address);
start();
write8bit(ReadDeviceAddress);
for(i=0;i<len;i++)
{
*content=read8bit();
content++;
ack();
}
no_ack();
stop();
}
uchar readflash_byte()
{
uchar readdata;
start();
write8bit(ReadDeviceAddress);
readdata=read8bit();
ack();
stop();
return readdata;
}
//
bit Init_Flash ( unsigned int nPage ) // 8 Byte/1Page init 0xFF
{
unsigned char nLen;
unsigned char Addr;
nLen=16;
Addr=16 *nPage;
start();;
write8bit(WriteDeviceAddress);
write8bit(Addr);
for(;nLen!=0;nLen--)
{
if(write8bit(0xff)) break; //if Write8Bit() Return 1 Write Flase
}
stop();
delay10ms();
return(CY);
}
//功能:向EEPROM
void writeflash(uchar *content,uchar address,uchar len)
{
uchar i;
start();
write8bit(WriteDeviceAddress);
write8bit(address);
for(i=0;i<len;i++)
{
if(address%16==0)//该写下一页了
{
stop();
delay10ms();
start();
write8bit(WriteDeviceAddress);
write8bit(address);
}
write8bit(*content);
content++;
address++;
}
stop();
delay10ms();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -