📄 ee25045.c
字号:
/*******************************
Ee25045的读写程序
*******************************/
#include <reg51.h>
#include <intrins.h>
#define DOGK 10 //0x10 // 600mS
//-------------------------------------
sbit Sck=P1^2;
sbit Cs=P1^0;
sbit Si=P1^3;
sbit So=P1^1;
//******************************
extern void WIP_POLL(void);
/***********************************************
输出数据
************************************************/
void OutByte(unsigned char Dat)
{
unsigned char i=8;
while (i--)
{
Sck=0;
Si=0;
if ((Dat & 0x80)==0x80) Si=1;
Dat <<=1;
Sck=1;
}
}
/**************************************************
读入数据
***************************************************/
unsigned char InByte(void)
{
unsigned char i=8,j=0;
while (i--)
{
Sck=1;
j <<=1;
Sck=0;
if (So) j++;
}
return j;
}
//-----------------------------------------------
//写复位
//-----------------------------------------------
void WR_RES (void)
{
Sck=0;
Cs=1;
Sck=1;
}
//-----------------------------------------------
//写入命令
//-----------------------------------------------
void WR_CMD (unsigned char COMMAND)
{
Sck=0;
Cs=0;
OutByte(COMMAND);
WR_RES();
}
//-----------------------------------------------
//写使能
//-----------------------------------------------
void WREN_CMD (void)
{
WR_CMD(6);
}
//-----------------------------------------------
//写入禁止
//-----------------------------------------------
void WRDI_CMD (void)
{
WR_CMD(4);
}
//-----------------------------------------------
//写特殊寄存器
//-----------------------------------------------
void WRSR_CMD (void)
{
WREN_CMD();
Sck=0;
Cs=0;
OutByte(1);
OutByte(DOGK);
Sck=0;
Cs=1;
WIP_POLL();
WRDI_CMD();
}
//------------------------------------------------
//读特殊寄存器
//------------------------------------------------
unsigned char RDSR_CMD (void)
{
unsigned char i;
Sck=0;Cs=0;
OutByte(5);
i=InByte();
WR_RES();
return i;
}
//--------------------------------------------------
//写完查询
//--------------------------------------------------
void WIP_POLL (void)
{
unsigned char i=190;
while (i--)
{
if ((0x01 & RDSR_CMD())==0 ) break;
}
}
//----------------------------------------------------
//写入初始化
//----------------------------------------------------
void EeAdrInt(unsigned char Dat,unsigned int AdrEe)
{
if (AdrEe>255) Dat |=0x08;
Cs=0; //2004-11-19
OutByte(Dat);
OutByte((unsigned char)AdrEe);
}
//----------------------------------------------------
//写入数据
//----------------------------------------------------
void WriteEe25(unsigned int AdrEe,unsigned char *pDat,unsigned char Long)
{
while(Long--){
WREN_CMD();
EeAdrInt(2,AdrEe++);
OutByte(*pDat++);
Sck=0;Cs=1;
WIP_POLL();
WRDI_CMD();
}
}
//----------------------------------------------------
//读出数据
//----------------------------------------------------
void ReadEe25(unsigned int AdrEe,unsigned char *pDat,unsigned char Long)
{
while(Long--){
Sck=0;Cs=0;
EeAdrInt(3,AdrEe++);
*pDat++=InByte();
WR_RES();
}
}
//---------------------------------------------------------
//清除看门狗
//---------------------------------------------------------
void ClrDog (void)
{
Cs=0;
_nop_();
_nop_();
Cs=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -