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

📄 93c66.c

📁 93C66/EEPROM存储芯片驱动程序应用
💻 C
字号:
//存储芯片93C66驱动程序
#include "reg51.h"
#include "intrins.h"


typedef    unsigned char     Byte;
typedef    unsigned int      Word;
typedef    unsigned long     Dword;	  
typedef	   bit 		     Bool ;


sbit CS_PIN = P1^0;
sbit XSCK_PIN = P1^1;
sbit XSDO_PIN = P1^2;
sbit XSDI_PIN = P1^3;
Bool Fg_Timeout;

void DelayX1ms(Byte count)
{
	Byte i, j, k;
	for(i=0; i<count; i++)
		for(j=0; j<40; j++)
			for(k=0; k<120; k++)
			;
}

void Xbus_Delay(void)
{
	Byte i;
	for(i=0; i<10; i++)
		;
}



void WR_3wire(Byte value)
{
	Byte i;
	for(i=0; i<8; i++)
	{
		if(value&0x08)
		{
			XSDO_PIN = 1;
		}
		else
		{
			XSDO_PIN = 0;
		}
		XSCK_PIN = 1;
		Xbus_Delay();
		XSCK_PIN = 0;
		Xbus_Delay();
	}
}

void Ewds_ROM(void)
{
	CS_PIN = 1;
	WR_3wire(0x04);
	WR_3wire(0x00);
	CS_PIN = 0;
}

void Write_ROM(Byte adr, Byte value);
{
	CS_PIN = 1;
	WR_3wire(0x05);
	WR_3wire(adr);
	WR_3wire(value);
	CS_PIN = 0;
	XSCK_PIN = 0;
	XSDO_PIN = 0;
	DelayX1ms(10);
	if(XSDI_PIN == 0)	//if always DO ="0"
	{
		;				//indicate is still progress
	}
}

void Erase_ROM(Byte adr);
{
	CS_PIN = 1;
	WR_3wire(0x07);
	WR_3wire(adr);
	CS_PIN = 0;
	XSCK_PIN = 0;
	XSDO_PIN = 0;
	DelayX1ms(10);
	if(XSDI_PIN == 0)	//if always DO ="0"
	{
		;				//indicate is still progress
	}

}

void Erase_ROM1(Byte adr);
{
	Word i;
	CS_PIN = 1;
	WR_3wire(0x07);
	WR_3wire(adr);
	CS_PIN = 0;
	XSCK_PIN = 0;
	XSDO_PIN = 0;
	DelayX1ms(10);
	Fg_Timeout = 1;
	for(i=0; i<1000; i++)
	{
		if(XSDI_PIN != 0)
		{
				Fg_Timeout = 0;
				break;
		}
	}
}

void Ewen_ROM(void)
{
	CS_PIN = 1;
	WR_3wire(0x04);
	WR_3wire(0xc0);
	CS_PIN = 0;
	Xbus_Delay();
}

void Eep_WriteData(Byte adr, Byte value)
{
		CS_PIN = 1;
		Ewen_ROM();
		Erase_ROM(adr);
		Write_ROM(adr, value);
		Ewds_ROM();
		CS_PIN = 0;
		XSCK_PIN = 0;
}



//测试写入128个数据
void Push_Eeprom93c66(void)
{
	Byte adr, value = 0;
	for(adr=0; adr<128; adr++)
	{
		CS_PIN = 1;
		Eep_WriteData(adr, value);
		CS_PIN = 0;
		XSCK_PIN = 0;
		value++;
	}
}

Byte ReceiveByte(void)
{
	Byte i;
	Byte value = 0;
	//Receive byte (MSB first)
	for(i=0; i<8; i++)
	{
		XSCK_PIN = 1;
		Xbus_Delay();
		XSCK_PIN = 0;
		value << 1;
		if(XSDI_PIN)
		{
			value |= 0x01;
		}
	}
	Xbus_Delay();
	return value;
}

//将93c66内地址数据读出来
Byte ReadROM(Byte adr)
{
	Byte value;
	XSCK_PIN = 0;
	XSDO_PIN = 0;
	WR_3wire(0x06);
	WR_3wire(adr);
	WR_3wire(0x04);
	WR_3wire(0xc0);
	value = ReceiveByte();
	return value;
}
//测试将93c66内128个数据读出来
void Pop_Eeprom93c66(void)
{
	Byte adr;
	Byte *Buff;
	for(adr=0; adr<128; adr++)
	{
		CS_PIN = 1;
		Buff = ReadROM(adr);
		CS_PIN = 0;
		XSCK_PIN = 0;
	}
}

⌨️ 快捷键说明

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