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

📄 e25045.c

📁 矿工定位系统单端
💻 C
字号:
#include <reg52.h>

#include "e25045.h"
sbit CS			= P1^0;			//EEPROM及看门狗片选
sbit SI			= P3^5;			//串行数据输入
sbit SCK		= P3^4;			//串行时钟
sbit SO			= P3^3;			//串行数据输出




/***********************************************************************
*    I2c BUS Related       sbit SCL= P1^0;  sbit SDA  = P1^1;          *
***********************************************************************/
void	Delay5(void)        	// 5 us
{	unsigned char idata i; for(i=0;i<100;i++);
}
//******************************************************
void Watch_dog(void)
{
    CS=1;
    CS=0;
    Delay5(); 
    CS=1;
}
//初始化X25043/25045
/********************************************************************************
 _______________________________
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |   BL1		BL0            WD1  WD0
 --------------------------------    0     0     None     0	 0  1.4Seconds
| x | x |WD1|WD0|BL1|BL0|WEL|WIP|    0     1   180--1FF   0    1  600Milliseconds
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     1     0   100--1FF   1    0  200Milliseconds
                                 	 1     1   000--1FF   1    1  Disabled
*********************************************************************************/
void Init_X25045(unsigned char STATUS)
{
	CS=0;
	SO=1;
	SCK=0;
	SI=0;
	Wrsr_Cmd(STATUS);
}

//设置写使能锁
void Wren_Cmd(void)
{
	SCK=0;
	CS=0;
	OutByte(WREN_INST);
	SCK=0;
	CS = 1;
}

//读状态寄存器
unsigned char Rdsr_Cmd(void)
{
	unsigned char RetCode;
	SCK = 0;
	CS = 0;
	OutByte(RDSR_INST);
	RetCode = InByte();
	SCK = 0;
	CS  = 1;
	return RetCode;
}

//写状态寄存器
/*******************************************
 ___________________________________________
| X | X | WD1 | WD0 | BL1 | BL0 | WEL | WIP |
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					0			0(1400)	0			0(None)
					0			1(600)	0			1($180-$1FF)
					1			0(200)	1			0($100-$1FF)
					1			1	Disa	1			1($000-$1FF)
********************************************/

void Wrsr_Cmd(unsigned char STATUS)
{
	if((Rdsr_Cmd()&0x01)==1) return;
	CS = 0;
	Wren_Cmd();
	SCK = 0;
	CS = 1;
	CS = 0;
  OutByte(WRSR_INST);
	OutByte(STATUS);
	SCK = 0;
	CS  = 1;
	//Wip_Poll();
}

//写一个字节
void Byte_Write(unsigned int Addr,unsigned char wbyte)
{
	unsigned char data HAddr,LAddr,Temp;
	while((Rdsr_Cmd()&0x01)==1);
	CS = 0;
	Wren_Cmd();
	SCK = 0;
	CS = 1;
	CS = 0;
	LAddr = (unsigned char)Addr;
	HAddr = Addr>>8;
	Temp = (WRITE_INST&0xF7)|((HAddr<<3)&0x08);
	OutByte(Temp);
	OutByte(LAddr);
	OutByte(wbyte);
	SCK = 0;
	CS  = 1;
	//Wip_Poll();
}

//读一个字节
unsigned char Byte_read(unsigned int Addr)
{
	unsigned char data HAddr,LAddr,Temp;
	while((Rdsr_Cmd()&0x01)==1); 
	SCK = 0;
	CS = 0;
	LAddr = (unsigned char)Addr;
	HAddr = Addr>>8;
	Temp = (READ_INST&0xF7)|((HAddr<<3)&0x08);
	OutByte(Temp);
	OutByte(LAddr);
	Temp = InByte();
	SCK= 0;
	CS  = 1;
 	//Wip_Poll();
	return Temp;
}


/*****************************************************************/
//对串行FLASH进行读校验
/*******************************************************************/
unsigned char ByteRead_Check (unsigned int addrR)
{
  unsigned char TempVar,TempVar1,TempVar2;
  TempVar2=0;
  TempVar=Byte_read(addrR);
  do
  {
 		TempVar1=Byte_read(addrR);
  	if(TempVar==TempVar1)
  	   {
    	TempVar2++;
		}
  	else 
		{  
			TempVar2=0;
	    TempVar=TempVar1;		
		}
  }
  while(TempVar2<=3);
  return(TempVar);  
}
/************************************************/
//对串行FLASH进行写校验
/*************************************************************/
void ByteWrite_Check (unsigned int addrW ,unsigned char VarTemp)
{
	Byte_Write(addrW,VarTemp);    
  while(VarTemp!=Byte_read(addrW))
		Byte_Write(addrW,VarTemp);    	
}

//送一个字节到EEPROM
void	OutByte(unsigned char b)
{
	unsigned char i;
	unsigned char bb=0x80;
	for(i=0;i<8;i++)
	{
		//SCK=0;
		SI=b&bb;
		bb>>=1;
		SCK=0;
		Delay5();
		SCK=1;
		Delay5();
	}	
}

//从EEPROM接收一个字节
unsigned char InByte(void)
{
	unsigned char i;
	unsigned char b=0;
	for(i=0;i<8;i++)
	{
		Delay5();
		SCK=1;
		SCK=0;
		Delay5();
		b=2*b+(unsigned char)SO;
	}
	return b;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -