📄 93c46.c
字号:
#include <reg51.h>
#include <intrins.h>
#define UCHAR unsigned char
#define UINT unsigned int
#define NOP() _nop_()
#define NOP_2() {NOP();NOP();}
#define NOP_5() {NOP_2();NOP_2();NOP();}
sbit LED=P2^7;
sbit AT93C46_CS=P2^0;
sbit AT93C46_CLK=P2^1;
sbit AT93C46_DI=P2^2;
sbit AT93C46_DO=P2^3;
#define OPCODE_READ 0x80
#define OPCODE_WRITE 0x40
#define OPCODE_ERASE 0xC0
#define OPCODE_EWEN 0x30
#define OPCODE_EWDS 0x00
#define OPCODE_ERAL 0x20
#define OPCODE_WRAL 0x10
UINT AT93C46_READ(UCHAR ADDRESS)
{
UCHAR i;
UCHAR Command;
UINT ReadData;
AT93C46_CS=0;
AT93C46_CLK=0;
AT93C46_DI=1;
AT93C46_CS=1;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command=OPCODE_READ+ADDRESS;
for(i=0;i<8;i++)
{
if(Command&0x80)
AT93C46_DI=1;
else
AT93C46_DI=0;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command<<=1;
}
ReadData=0;
for(i=0;i<16;i++)
{
ReadData<<=1;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
AT93C46_DO=1;
if(AT93C46_DO)
ReadData++;
}
AT93C46_CS=0;
return ReadData;
}
void AT93C46_WRITE(UCHAR ADDRESS,UINT DAT)
{
UCHAR i;
UCHAR Command;
AT93C46_CS=0;
AT93C46_CLK=0;
AT93C46_DI=1;
AT93C46_CS=1;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command=OPCODE_WRITE+ADDRESS;
for(i=0;i<8;i++)
{
if(Command&0x80)
AT93C46_DI=1;
else
AT93C46_DI=0;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command<<=1;
}
for(i=0;i<16;i++)
{
if(DAT&0x8000)
AT93C46_DI=1;
else
AT93C46_DI=0;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
DAT<<=1;
}
AT93C46_CS=0;
NOP_5();
AT93C46_CS=1;
AT93C46_DO=1;
while(!AT93C46_DO);
AT93C46_CS=0;
}
void AT93C46_ERASE(UCHAR ADDRESS)
{
UCHAR i;
UCHAR Command;
AT93C46_CS=0;
AT93C46_CLK=0;
AT93C46_DI=1;
AT93C46_CS=1;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command=OPCODE_ERASE+ADDRESS;
for(i=0;i<8;i++)
{
if(Command&0x80)
AT93C46_DI=1;
else
AT93C46_DI=0;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command<<=1;
}
AT93C46_CS=0;
NOP_5();
AT93C46_CS=1;
AT93C46_DO=1;
while(!AT93C46_DO);
AT93C46_CS=0;
}
void AT93C46_EWENDIS(bit EWFlag)
{
UCHAR i;
UCHAR Command;
AT93C46_CS=0;
AT93C46_CLK=0;
AT93C46_DI=1;
AT93C46_CS=1;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
if(EWFlag)
Command=OPCODE_EWEN;
else
Command=OPCODE_EWDS;
for(i=0;i<8;i++)
{
if(Command&0x80)
AT93C46_DI=1;
else
AT93C46_DI=0;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command<<=1;
}
AT93C46_CS=0;
}
void AT93C46_ERASEALL(void)
{
UCHAR i;
UCHAR Command;
AT93C46_CS=0;
AT93C46_CLK=0;
AT93C46_DI=1;
AT93C46_CS=1;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command=OPCODE_ERAL;
for(i=0;i<8;i++)
{
if(Command&0x80)
AT93C46_DI=1;
else
AT93C46_DI=0;
AT93C46_CLK=1;
NOP_5();
AT93C46_CLK=0;
Command<<=1;
}
AT93C46_CS=0;
NOP_5();
AT93C46_CS=1;
AT93C46_DO=1;
while(!AT93C46_DO);
AT93C46_CS=0;
}
void main(void)
{
UINT i,j=10;
while(j--)
{
LED=0;
for(i=0;i<5000;i++);
LED=1;
for(i=0;i<3000;i++);
}
AT93C46_EWENDIS(1);
AT93C46_ERASEALL();
AT93C46_ERASE(1);
AT93C46_WRITE(1,0x5656);
if(AT93C46_READ(1)==0x5656)
LED=0;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -