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

📄 main.c

📁 HY27UF081G2M海量存储器的驱动程序,是用51编写的,编程环境Keil-c
💻 C
字号:
#include<regsnd1.h>
#include <absacc.h>
#include <stdio.h>

/*硬件地址定义*/
#define WRITE_DATA 0x0884
#define WRITE_COM  0x0885
#define WRITE_ADD  0x0886
#define READ_DATA  0x0884

/*K9F1G08U0M指令集*/
#define READ A       0x00
#define READ B       0x01
#define	READID		0x90
#define	RESET		0xff
#define	PAGEPROGRAM	0x80
#define BLOCKERASE	0x60
#define	READSTATUS	0x70


#define SWAP1(x)  ((x)&0xff)
#define SWAP2(x)  (((x)>>9)&0xff)
#define SWAP3(x)  (((x)>>17)&0xff)
#define SWAP4(x)  (((x)>>25)&0x03)
sbit fRB=P5^0;
/*------------------------------------------------------------------------------
初始化
---------------------------------------------------------------------------------*/
void Init()
{
//初始化串行口

SCON = 0X52;
PCON = 0X80 ;
TMOD = 0X20;
TCON = 0x69;    
TH1=0Xf5;
TL1=0Xf5;

}
/*----------------------------------------------------------------------------
延时一些时间
------------------------------------------------------------------------------*/
void delay10ms(unsigned int x)
{
 unsigned int i;
 for(i=0;i<x;i++);
}
/*----------------------------------------------------------------------------
给K9F1G08U0M发送指令
------------------------------------------------------------------------------
--*/
void WriteCom(unsigned char i)
{ 
 XBYTE[WRITE_COM]=i; 
}
/*----------------------------------------------------------------------------
给K9F1G08U0M发送地址
------------------------------------------------------------------------------
--*/
void WriteAdd(unsigned char i)
{
 XBYTE[WRITE_ADD]=i;
}
/*----------------------------------------------------------------------------
给K9F1G08U0M发送数据
------------------------------------------------------------------------------
--*/
void WriteData(unsigned char i)
{
 XBYTE[WRITE_DATA]=i;
}
/*----------------------------------------------------------------------------
向K9F1G08U0M读取数据
------------------------------------------------------------------------------
--*/
unsigned char ReadData(void)
{
 return (XBYTE[READ_DATA]);
}


/*----------------------------------------------------------------------------
复位K9F1G08U0M
-----------------------------------------------------------------------------*/
void Reset(void)
{
 WriteCom(0xff);
}
/////////////
void print(unsigned char x)
{
 SBUF=x;
 while(!TI);
 TI=0;
 }
/*----------------------------------------------------------------------------
读取K9F1G08U0M的ID
-----------------------------------------------------------------------------*/
void ReadID(void)
{
 unsigned char x,y,z,u;
 WriteCom(0x90);
// WriteAdd(0x00);//////////////////
 x=ReadData();
 y=ReadData();
 z=ReadData();
 u=ReadData();
// print(x);
// print(y);
// print(z);
// print(u);
 printf("ID of K9F1G08U0M is %x,%x,%x,%x\n",x,y,z,u);
}
/*----------------------------------------------------------------------------
块擦除
-----------------------------------------------------------------------------*/
void BlockErase(unsigned long blockadd)
{
 unsigned char x;
 WriteCom(0x60);
// WriteAdd(SWAP1(blockadd));
 WriteAdd(SWAP2(blockadd));
 WriteAdd(SWAP3(blockadd));
 WriteAdd(SWAP4(blockadd));
 WriteCom(0xd0);
 while(!fRB);
 delay10ms(10000);
	WriteCom(0x70);//读状态命令
	x= ReadData();//读状态值
	
 if(x&0x01)printf("erase error!!!%x\n",x);	  
 else printf("erase completed!!%x\n",x);  
  
}
/*----------------------------------------------------------------------------
读地址0x--------的数据
-----------------------------------------------------------------------------*/
unsigned char Read(unsigned long add)
{
 unsigned char x;
 if(add&0x100)WriteCom(0x01);
 else WriteCom(0x00);
 WriteAdd(SWAP1(add));
 WriteAdd(SWAP2(add));
 WriteAdd(SWAP3(add));
 WriteAdd(SWAP4(add));
 WriteCom(0x30);
 while(!fRB);
 x=ReadData();
 return x;
}
/*----------------------------------------------------------------------------
向地址0x--------写数据
-----------------------------------------------------------------------------*/
void Write(unsigned long add,unsigned char d)
{
 unsigned char x;
 if(add&0x100)WriteCom(0x01);
 else WriteCom(0x00);
 WriteCom(0x80);
// delay10ms(1);
 WriteAdd(SWAP1(add));
 WriteAdd(SWAP2(add));
 WriteAdd(SWAP3(add));
 WriteAdd(SWAP4(add));
 WriteData(d);
 WriteCom(0x10);
 while(!fRB);
 delay10ms(10000);	
 WriteCom(0x70);
 x=ReadData();
 if(x&0x01)printf("write error!!!%x\n",x);
 else printf("write completed!!%x\n",x); 
}
main()
{
 unsigned char x=16;
 unsigned long add;
 Init();
 Reset();
 printf("K9F1G08U0M ready!!\n");
 ReadID();
 delay10ms(10000);
 BlockErase(0x00000000);
// Write(1,0x98);
// x=Read(1);
// printf("0x00000000=%x\n",x);
 
add=0x00000000;  
while((0x00000010-add))
{ 

 Write(add,0x01);
 add++;;
} 

delay10ms(10000); 
	 
add=0x00000000; 
while((0x00000010-add))
{ 
 x=Read(add);
 delay10ms(10000);
 printf("0x%lx=%x\n",add,x);
 add++;
}  
while(1);
}













⌨️ 快捷键说明

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