📄 93c46.c
字号:
#include <reg52.h>
sbit CS = P2^7;
sbit SK = P2^6;
sbit DI = P2^5;
sbit DO = P2^4;
extern unsigned char ReadChar(unsigned char address);
extern void WriteChar(unsigned char address,unsigned char InData);
extern void ReadString(unsigned char *RamAddress,unsigned char RomAddress,unsigned char Number);
extern void WriteString(unsigned char *RamAddress,unsigned char RomAddress,unsigned char Number);
/*******************************************************************
写操作使能函数
函数原型:
void Ewen(void);
功能:
写操作使能。
参数:
无。
返回值:
无。
********************************************************************/
void Ewen(void)
{
unsigned char temp,InData;
CS = 0;
SK = 0;
CS = 1;
InData = 0x98; // 10011XXX
for(temp = 9;temp != 0;temp--)
{
DI = InData & 0x80;
SK = 1;
SK = 0;
InData <<= 1;
}
CS = 0;
}
/*******************************************************************
写操作禁止函数
函数原型:
void Ewds(void);
功能:
写操作禁止。
参数:
无。
返回值:
无。
********************************************************************/
void Ewds(void)
{
unsigned char temp,InData;
CS = 0;
SK = 0;
CS = 1;
InData = 0x80; // 10000XXX
for(temp = 9;temp != 0;temp--)
{
DI = InData & 0x80;
SK = 1;
SK = 0;
InData <<= 1;
}
CS = 0;
}
/*******************************************************************
读数据函数
函数原型:
void Read(unsigned char address);
功能:
读指定地址数据。
参数:
指定地址。
返回值:
读出的数据。
********************************************************************/
unsigned int Read(unsigned char address) {
unsigned char temp;
unsigned int result;
Ewen();
SK = 0;
DI = 1; // 110 A5-A0
CS = 0;
CS = 1;
SK = 1;
SK = 0; // 1
Address = address & 0x3f | 0x80;
for(temp = 8;temp != 0;temp--)
{ // 8
DI = address&0x80;
SK = 1;
SK = 0;
Address <<= 1;
}
DO = 1;
for(temp = 16;temp != 0;temp--)
{ // 16
SK = 1;
Result = (result<<1)|DO;
SK = 0;
}
CS = 0;
Ewds();
return(result);
}
/*******************************************************************
写数据函数
函数原型:
void Write(unsigned char address,unsigned int InData);
功能:
写指定的数据到指定的地址。
参数:
指定地址;
需要写入的数据。
返回值:
无。
********************************************************************/
void Write(unsigned char address,unsigned int InData)
{
unsigned char temp;
Ewen();
SK = 0;
DI = 1; // 101 A5-A0
CS = 0;
CS = 1;
SK = 1;
SK = 0; // 1
Address = address & 0x3f | 0x40;
for(temp = 8;temp != 0;temp--)
{ // 8
DI = address & 0x80;
SK = 1;
SK = 0;
Address <<= 1;
}
for(temp = 16;temp != 0;temp--)
{ // 16
DI = InData & 0x8000;
SK = 1;
SK = 0;
InData <<= 1;
}
CS = 0;
DO = 1;
CS = 1;
SK = 1;
while(DO == 0)
{// busy test
SK = 0;
SK = 1;
}
SK = 0;
CS = 0;
Ewds();
}
/*******************************************************************
擦除数据函数
函数原型:
void Erase(unsigned char address);
功能:
擦除指定地址的数据。
参数:
指定地址。
返回值:
无。
********************************************************************/
void Erase(unsigned char address) {
unsigned char temp;
Ewen();
SK = 0;
DI = 1; // 111 A5-A0
CS = 0;
CS = 1;
SK = 1;
SK = 0; // 1
Address |= 0xc0;
for(temp = 8;temp != 0;temp--)
{ // 8
DI = address & 0x80;
SK = 1;
SK = 0;
Address <<= 1;
}
CS = 0;
DO = 1;
CS = 1;
SK = 1;
while(DO == 0)
{
SK = 0;
SK = 1;
}
SK = 0;
CS = 0;
Ewds();
}
/*******************************************************************
擦除整个存储器数据函数(仅在电源电压VCC = 4.5V ~5.5V有效)
函数原型:
void Erase(void);
功能:
擦除整个存储器的数据。
参数:
无。
返回值:
无。
********************************************************************/
void Eral(void) {
unsigned char temp,InData;
Ewen();
CS = 0;
SK = 0;
CS = 1;
InData = 0x90; // 10010XXXX
for(temp = 9;temp != 0;temp--)
{ // 9
DI = InData & 0x80;
SK = 1;
SK = 0;
InData <<= 1;
}
CS = 0;
DO = 1;
CS = 1;
SK = 1;
while(DO == 0)
{
SK = 0;
SK = 1;
}
SK = 0;
CS = 0;
Ewds();
}
/*******************************************************************
写整个存储器函数(仅在电源电压VCC = 4.5V ~5.5V有效)
函数原型:
void Wral(unsigned int InData);
功能:
写整个存储器。
参数:
要写入的数据。
返回值:
无。
********************************************************************/
// Writes all memory locations. Valid only at VCC = 4.5V to 5.5V.
void Wral(unsigned int InData) {
unsigned char temp,address;
Ewen();
CS = 0;
SK = 0;
CS = 1;
Address = 0x88; // 10001XXXX
for(temp = 9;temp != 0;temp--)
{ // 9
DI = address & 0x80;
SK = 1;
SK = 0;
Address <<= 1;
}
for(temp = 16;temp != 0;temp--)
{ // 16
DI = InData & 0x8000;
SK = 1;
SK = 0;
InData <<= 1;
}
CS = 0;
DO = 1;
CS = 1;
SK = 1;
while(DO == 0)
{
SK = 0;
SK = 1;
}
SK = 0;
CS = 0;
Ewds();
}
/*******************************************************************
读单个字节函数函数
函数原型:
unsigned char ReadChar(unsigned char address);
功能:
读单个字节函数函数。
参数:
要读取的地址。
返回值:
读取到的数据。
********************************************************************/
unsigned char ReadChar(unsigned char address)
{
unsigned char temp = address >> 1;
if(address & 0x01) return((unsigned char)(Read(temp) >> 8));
else return((unsigned char)(Read(temp)));
}
/*******************************************************************
写单个字节函数函数
函数原型:
void WriteChar(unsigned char address,unsigned char InData);
功能:
读单个字节函数。
参数:
要写入的地址;
要写入的数据。
返回值:
无。
********************************************************************/
void WriteChar(unsigned char address,unsigned char InData)
{
unsigned char temp = address >> 1;
if(address & 0x01) Write(temp,(unsigned int)(Read(temp) & 0x00ff | (InData<<8)));
else Write(temp,(unsigned int)(Read(temp)&0xff00|InData));
}
/*******************************************************************
读字符串函数函数
函数原型:
void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned
char Number);
功能:
读一个字符串函数;
参数:
读取回的数据保存地址;
要读取的地址;
要读取数据的数量。
返回值:
无。
********************************************************************/
void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number)
{
while(Number != 0) {
*RamAddress = ReadChar(RomAddress);
RamAddress++;
RomAddress++;
Number--;
}
}
/*******************************************************************
写字符串函数函数
函数原型:
void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char
Number);
功能:
写一个字符串函数;
参数:
需要写入数据保存地址;
要写入数据的地址;
要写入数据的数量。
返回值:
无。
********************************************************************/
void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char
Number)
{
unsigned int temp;
if(Number == 0) return;
if(RomAddress & 0x01)
{
WriteChar(RomAddress,*RamAddress);
RamAddress++;
RomAddress++;
Number--;
}
if(Number == 0) return;
while(Number >> 1)
{
temp = *RamAddress;
RamAddress++;
Temp = temp |(*RamAddress)<< 8;
RamAddress++;
Write(RomAddress >> 1,temp);
RomAddress++;
RomAddress++;
Number--;
Number--;
}
if(Number) WriteChar(RomAddress,*RamAddress);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -