?? 93c46.c
字號(hào):
#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);
/*******************************************************************
寫(xiě)操作使能函數(shù)
函數(shù)原型:
void Ewen(void);
功能:
寫(xiě)操作使能。
參數(shù):
無(wú)。
返回值:
無(wú)。
********************************************************************/
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;
}
/*******************************************************************
寫(xiě)操作禁止函數(shù)
函數(shù)原型:
void Ewds(void);
功能:
寫(xiě)操作禁止。
參數(shù):
無(wú)。
返回值:
無(wú)。
********************************************************************/
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;
}
/*******************************************************************
讀數(shù)據(jù)函數(shù)
函數(shù)原型:
void Read(unsigned char address);
功能:
讀指定地址數(shù)據(jù)。
參數(shù):
指定地址。
返回值:
讀出的數(shù)據(jù)。
********************************************************************/
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);
}
/*******************************************************************
寫(xiě)數(shù)據(jù)函數(shù)
函數(shù)原型:
void Write(unsigned char address,unsigned int InData);
功能:
寫(xiě)指定的數(shù)據(jù)到指定的地址。
參數(shù):
指定地址;
需要寫(xiě)入的數(shù)據(jù)。
返回值:
無(wú)。
********************************************************************/
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();
}
/*******************************************************************
擦除數(shù)據(jù)函數(shù)
函數(shù)原型:
void Erase(unsigned char address);
功能:
擦除指定地址的數(shù)據(jù)。
參數(shù):
指定地址。
返回值:
無(wú)。
********************************************************************/
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();
}
/*******************************************************************
擦除整個(gè)存儲(chǔ)器數(shù)據(jù)函數(shù)(僅在電源電壓VCC = 4.5V ~5.5V有效)
函數(shù)原型:
void Erase(void);
功能:
擦除整個(gè)存儲(chǔ)器的數(shù)據(jù)。
參數(shù):
無(wú)。
返回值:
無(wú)。
********************************************************************/
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();
}
/*******************************************************************
寫(xiě)整個(gè)存儲(chǔ)器函數(shù)(僅在電源電壓VCC = 4.5V ~5.5V有效)
函數(shù)原型:
void Wral(unsigned int InData);
功能:
寫(xiě)整個(gè)存儲(chǔ)器。
參數(shù):
要寫(xiě)入的數(shù)據(jù)。
返回值:
無(wú)。
********************************************************************/
// 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();
}
/*******************************************************************
讀單個(gè)字節(jié)函數(shù)函數(shù)
函數(shù)原型:
unsigned char ReadChar(unsigned char address);
功能:
讀單個(gè)字節(jié)函數(shù)函數(shù)。
參數(shù):
要讀取的地址。
返回值:
讀取到的數(shù)據(jù)。
********************************************************************/
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)));
}
/*******************************************************************
寫(xiě)單個(gè)字節(jié)函數(shù)函數(shù)
函數(shù)原型:
void WriteChar(unsigned char address,unsigned char InData);
功能:
讀單個(gè)字節(jié)函數(shù)。
參數(shù):
要寫(xiě)入的地址;
要寫(xiě)入的數(shù)據(jù)。
返回值:
無(wú)。
********************************************************************/
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));
}
/*******************************************************************
讀字符串函數(shù)函數(shù)
函數(shù)原型:
void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned
char Number);
功能:
讀一個(gè)字符串函數(shù);
參數(shù):
讀取回的數(shù)據(jù)保存地址;
要讀取的地址;
要讀取數(shù)據(jù)的數(shù)量。
返回值:
無(wú)。
********************************************************************/
void ReadString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char Number)
{
while(Number != 0) {
*RamAddress = ReadChar(RomAddress);
RamAddress++;
RomAddress++;
Number--;
}
}
/*******************************************************************
寫(xiě)字符串函數(shù)函數(shù)
函數(shù)原型:
void WriteString(unsigned char data *RamAddress,unsigned char RomAddress,unsigned char
Number);
功能:
寫(xiě)一個(gè)字符串函數(shù);
參數(shù):
需要寫(xiě)入數(shù)據(jù)保存地址;
要寫(xiě)入數(shù)據(jù)的地址;
要寫(xiě)入數(shù)據(jù)的數(shù)量。
返回值:
無(wú)。
********************************************************************/
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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -