📄 main.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 + -