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

📄 x5045.c

📁 X5045 C51读写程序
💻 C
字号:
/* x5045的读写程序 用c51写的 */

#include <at89x51.h>

typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;


sbit CS=P1^0; /*片选 */
sbit SO=P1^4; /*数据输出 */
sbit SK=P1^2; /* 时钟 */
sbit SI=P1^3; /* 数据输入*/ 

//uchar code WREN=0x06;
//uchar code WRDI=0x04;
//uchar code RDSR=0x05;
//uchar code WRSR=0x01;
//uchar code READ0=0x03;
//uchar code READ1=0x0b;
//uchar code WRITE0=0x02;
//uchar code WRITE1=0x0a;
//uchar code MAX_POLL=0x99;
 /* Maximum number of polls*/
 /*最大写过程时间,确定5045的最大的写入过程的时间*/


extern void clrdog(void);
extern void Write_e(uchar *p1,uint ADDR,uchar N);
extern void Read_e(uint ADDR,uchar *p1,uchar N);
extern uchar WriteSR(uchar cData);

void WRITE1B(uchar cData,uint cAddress);
uchar READ1B(uint cAddress);
uchar ReadSR();
void Write8(uchar cData);
uchar Read8(void);
void Wait_wstop(void);



void Write_e(uchar *p1,uint ADDR,uchar N)
{
	uchar datat;
	while(N)
	{
		datat=*p1;
		WRITE1B(datat,ADDR);
		p1++;
		ADDR++;
		N--;
	}
}
 

void Read_e(uint ADDR,uchar *p1,uchar N)
{
	while(N)
	{
		*p1=READ1B(ADDR);
		p1++;
		ADDR++;
		N--;
	}
}

void WRITE1B(uchar cData,uint cAddress)
/* 写入一个字节,cData为写入的数,cAddress为写入地址*/
{
	CS=0;
	Write8(0x06);
	CS=1;
	CS=0;
	if(cAddress>=2048) 
		Write8(0x0a);
	else	
		Write8(0x02);
	Write8((uchar)(cAddress));
	Write8(cData);
	SK=0;
	CS=1;
	Wait_wstop();
}

uchar READ1B(uint cAddress)
/* 读入一个字节,cAddress为读入地址,bRegion为页 */
{
	uchar cData;
	CS=0;
	if(cAddress>=2048) 
		Write8(0x0b);
	else	
		Write8(0x03);
	Write8((uchar)(cAddress));
	cData=Read8();
	CS=1;
	return cData;
}

unsigned char 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(0x05);
	cData=Read8();
	CS=1;
	return cData;
}

uchar WriteSR(uchar cData)
{
	uchar cTemp;
	cTemp=ReadSR();
	if((cTemp&0x01)==1)
		return 0;
	CS=0;
	Write8(0x06);
	CS=1;
	CS=0;
	Write8(0x01);
	Write8(cData);
	CS=1;
	return 1;
}

/*检测写入的过程是否结束*/
void Wait_wstop(void)
{
 uchar aa,my_flag;
 for (aa=1;aa<=0x99;aa++)
 {
  my_flag=ReadSR();
  if ((my_flag&0x01)==0) 
      	aa=0x99;/*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等待直到达到最大记数值*/
 }
}

void clrdog(void)
{
	CS=0;
	CS=1;
}

⌨️ 快捷键说明

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