📄 x25045.c
字号:
/*
;-----------------------------------------
;程序文件名称:25045.C
;软件标题:25045操作标准子程序集
;软件说明:25045串行EEPROM 驱动
;程序最后修改时间: 2007-11-02 20:10
;-----------------------------------------
;原作者: 张 鑫
;程序修改人:张 鑫
;版本号: V1.0.0
;-----------------------------------------
*/
#include <zx.h>
//typedef unsigned char uchar;
//typedef unsigned int uint;
/*
Status register(状态寄存器),他的意义在于第5,第4位为WDI1,WDI0代表DOG的时间,00为1.4秒,01为600毫秒,10为200毫秒,
11为disabled第3位和第2位为BL1,BL0,是写保护设置位,00为无保护,01为保护180-1FF,10为保护100-1FF,11为保护000-1FF.
第1位为WEL,当他为1时代表已经"写使能"设置了,现在可以写了,只读位.第0位为WIP,当他为1时代表正在进行写操作,是只读.
*/
/* 25045芯片的指令定义 */
#define WREN 0x06 //写使能指令。
#define WRDI 0x04 //写复位指令。
#define RDSR 0x05 //读状态寄存器指令。
#define WRSR 0x01 //写状态寄存器指令。
#define READ0 0x03 //读低位数据前导指令。
#define READ1 0x0b //读高位数据前导指令。
#define WRITE0 0x02 //写低位数据前导指令。
#define WRITE1 0x0a //写高位数据前导指令。
/*以下各个管脚,需要根据实际连接情况来定义*/
sbit SO = P1^2;/*25045输出*/
sbit SI = P1^4;/*25045输入*/
sbit SK = P1^5;/*25045时钟*/
sbit CS = P1^3;/*25045片选*/
sbit WP = P1^0;/*25045写保护*/
//*********************************************
//函数功能:读一个字节数据。
//入口: 无。
//出口: 返回一个字节数据。
//*********************************************
uchar Read8()
{
bit bData;
uchar cloop;
uchar cData;
for(cloop=0;cloop<8;cloop++)
{
SK=1;
SK=0;
bData=SO;
cData<<=1;
if( bData )
cData|=0x01;
}
return cData;
}
//*********************************************
//函数功能:写一个字节数据。
//入口: 给出一个字节数据。
//出口: 无。
//*********************************************
void Write8( uchar cData )
{
uchar cloop;
for(cloop=0;cloop<8;cloop++)
{
if ((cData&0x80)==0)
SI=0;
else
SI=1;
SK=0;
SK=1;
cData<<=1;
}
}
//*********************************************
//函数功能:读状态寄存器。
//入口: 无。
//出口: 返回状态寄存器状态。
//*********************************************
uchar ReadSR() //
{
uchar cData;
CS=0;
Write8(RDSR);
cData=Read8();
CS=1;
return cData;
}
//*********************************************
//函数功能:写状态寄存器。
//入口: 给出状态寄存器状态。
//出口: 正确写入返回0,没有写入返回1。
//*********************************************
uchar WriteSR( uchar cData )
{
uchar cTemp;
cTemp=ReadSR();
if((cTemp&0x01)==1)
return 0;
CS=0;
Write8(WREN);
CS=1;
CS=0;
Write8(WRSR);
Write8(cData);
CS=1;
return 1;
}
//*********************************************
//函数功能:复位看门狗。
//入口:
//出口:
//*********************************************
void RST_WDog()
{
CS=0;
CS=0;
CS=1;
CS=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -