void X5045SpiOpen(void);//打开X5045片选
void X5045SpiClose(void);//关闭X5045片选
void X5045WriteEnable(void);//软件使能X5045写操作
void X5045WriteDisable(void);//软件禁止X5045写操作
unsigned char X5045SpiSend(unsigned char val);//X5045收发SPI协议
void X5045WriteByte(unsigned int addr unsigned char val);//写X5045一个字节
void X5045WriteWord(unsigned int addr unsigned int val);//写X5045一个字
unsigned char X5045ReadByte(unsigned int addr);//读X5045一个字节
unsigned int X5045ReadWord(unsigned int addr);//读X5045一个字
unsigned char X5045ReadStatus(void);//读X5045状态
void X5045WriteStatus(unsigned char val);//写X5045状态
void X5045WriteWait(void);//等待X5045写入完成
/*--------------------------------------
打开X5045片选
--------------------------------------*/
void X5045SpiOpen(void)
{
EEPROMCS = 1;//WDT
EEPROMSCK = 0;
EEPROMSIO = 1;//SO=SI=1 释放总线
EEPROMCS = 0;//WDT;打开X5045片选CS
}
/*--------------------------------------
关闭X5045片选
--------------------------------------*/
void X5045SpiClose(void)
{
EEPROMCS = 1;//关闭X5045片选CS
EEPROMSIO = 1;//SO=SI=1 释放总线
EEPROMSCK = 0;
}
/*--------------------------------------
软件使能X5045写操作
--------------------------------------*/
void X5045WriteEnable(void)
{
X5045SpiOpen();//打开X5045片选
EEPROMWP = 1;//硬件使能X5045写操作
X5045SpiSend(WREN);//发送使能X5045写命令
X5045SpiClose();//关闭X5045片选
}
/*--------------------------------------
软件禁止X5045写操作
--------------------------------------*/
void X5045WriteDisable(void)
{
X5045SpiOpen();//打开X5045片选
X5045SpiSend(WRDI);//发送禁止X5045写命令
EEPROMWP = 0;//硬件禁止X5045写操作
X5045SpiClose();//关闭X5045片选
}
/*--------------------------------------
X5045收发SPI协议
--------------------------------------*/
unsigned char X5045SpiSend(unsigned char val)
{
unsigned char i;
WDTRST = 0x1e;//89s52内狗
WDTRST = 0xe1;//89s52内狗
ACC = val;
for (i = 8; i > 0; i --)
{
CY = EEPROMSO;//取数据SO
_rlca_();//存数据ACC.0读数据ACC.7同时进行
EEPROMSI = CY;//送数据SI
EEPROMSCK = 1;//上升沿打入数据
_nop_();
EEPROMSCK = 0;//下降沿读入数据(首次为假动作)
}
return ACC;
}
/*--------------------------------------
写X5045一个字节
--------------------------------------*/
void X5045WriteByte(unsigned int addr unsigned char val)
{
unsigned char temp;
temp = WRITE;
if ((addr >> 8) & 0x01) temp |= 8;
X5045WriteEnable();//使能X5045写操作
X5045SpiOpen();//打开X5045片选
X5045SpiSend(temp);//发送X5045写命令及高位地址
X5045SpiSend(addr & 0xff);//发送X5045写低位地址
X5045SpiSend(val);//发送X5045写数据
X5045SpiClose();//关闭X5045片选
X5045WriteWait();//等待本次X5045写入完成
X5045WriteDisable();//禁止X5045写操作
}
/*--------------------------------------
写X5045一个字
--------------------------------------*/
void X5045WriteWord(unsigned int addr unsigned int val)
{
unsigned char temp;
temp = WRITE;
if ((addr >> 8) & 0x01) temp |= 8;
X5045WriteEnable();//使能X5045写操作
X5045SpiOpen();//打开X5045片选
X5045SpiSend(temp);//发送X5045写命令及高位地址
X5045SpiSend(addr & 0xff);//发送X5045写低位地址
X5045SpiSend(val & 0xff);//发送X5045写低位数据
X5045SpiSend(val >> 8);//发送X5045写高位数据
X5045SpiClose();//关闭X5045片选
X5045WriteWait();//等待本次X5045写入完成
X5045WriteDisable();//禁止X5045写操作
}
/*--------------------------------------
读X5045一个字节
--------------------------------------*/
unsigned char X5045ReadByte(unsigned int addr)
{
unsigned char val;
X5045SpiOpen();//打开X5045片选
val = READ;
if ((addr >> 8) & 0x01) val |= 8;
X5045SpiSend(val);//发送X5045读命令及高位地址
X5045SpiSend(addr & 0xff);//发送X5045读低位地址
val = X5045SpiSend(0xff);//接收X5045读数据
X5045SpiClose();//关闭X5045片选
return val;
}
/*--------------------------------------
读X5045一个字
--------------------------------------*/
unsigned int X5045ReadWord(unsigned int addr)
{
unsigned char val;
X5045SpiOpen();//打开X5045片选
val = READ;
if ((addr >> 8) & 0x01) val |= 8;
X5045SpiSend(val);//发送X5045读命令及高位地址
X5045SpiSend(addr & 0xff);//发送X5045读低位地址
val = X5045SpiSend(0xff);//接收X5045读低位数据
addr = X5045SpiSend(0xff);//接收X5045读高位数据
X5045SpiClose();//关闭X5045片选
addr <<= 8;
addr |= val;
return addr;
}
/*--------------------------------------
读X5045状态
--------------------------------------*/
unsigned char X5045ReadStatus(void)
{
unsigned char val;
X5045SpiOpen();//打开X5045片选
X5045SpiSend(RDSR);//发送读X5045状态命令
val = X5045SpiSend(0xff);//接收X5045状态数据
X5045SpiClose();//关闭X5045片选
return val;
}
/*--------------------------------------
写X5045状态
--------------------------------------*/
void X5045WriteStatus(unsigned char val)
{
X5045SpiOpen();//打开X5045片选
X5045SpiSend(WRSR);//发送写X5045状态命令
X5045SpiSend(val);//发送X5045状态数据
X5045SpiClose();//关闭X5045片选
}
/*--------------------------------------
等待X5045写入完成
--------------------------------------*/
void X5045WriteWait(void)
{
while (X5045ReadStatus() & WIP);//WIP=0 退出
上一篇:C51简单电子钟
下一篇:X5045的汇编读写程序
推荐阅读最新更新时间:2024-03-16 15:20
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- 高性能手机设计如何实现?手机高校评估研讨会为您揭晓答案!
- 观看安森美半导体高灵敏度触摸传感器应用视频,轻松答题赢好礼!
- 福禄克首款热成像万用表Fluke-279FC等你来尝鲜!晒心得享好礼喽!
- 直播已结束【大唐恩智浦具有阻抗检测功能的新能源锂电芯电池管理方案】
- 直播已结束【ST 宽禁带高性能碳化硅(SiC)与氮化镓(GaN)产品技术及不同应用案例分享】(9:30入场)
- 2021 Digi‑Key KOL 视频系列:新型智能曝光算法在人脸识别中的应用
- ADI & 世健 新基建系列第二期——储能 答题赢好礼!
- 【EEWORLD带你DIY】数字示波器V2.0火热进行中......
- 下载有礼!是德科技5G精选解决方案,帮您勘破 5G 迷宫!
- XDA曝光三星S10四款机型:代号beyond 有5G版本
- 外媒实测索尼Xperia XZ3续航:表现令人堪忧
- 10月发布没悬念:苹果新iPad Pro细节曝光
- 富士康旗下公司接力A股IPO,天钰科技预计10月下旬上市
- 韦尔股份拟收购芯能投资与芯力投资,再获北京豪威10.55%股
- 长江存储杨士宁:Xtacking™架构有三大技术突破,64层3D NAND将
- 基于CEVA最新一代图像和视觉DSP平台,酷芯微电子新一代Edge AI
- 紫光展锐南明凯:展锐5G芯片明年启动商业化,突破中高端市
- SK海力士从惠普和IDT公司购入多项专利,增强自身专利实力
- 高通CEO莫伦科夫:与苹果的专利纠纷已进入和解意愿加强阶