⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ee25045.c

📁 X5045芯片的C51程序
💻 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 + -