📄 x5045.txt
字号:
#include <REG52.H>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_();_nop_();
void dely(uint y);
//-----------x25045指令-----------------//
#define WREN 0x06 //写允许
#define WRDI 0x04 //写禁止
#define RDSR 0x05 //读状态寄存器
#define WRSR 0x01 //写状态寄存器
#define READ 0x03 //读书据
#define WRITE 0x02 //写数据
//-----------SPI通讯接口-----------------//
sbit SI=P1^7;
sbit SCK=P1^6;
sbit SO=P1^5;
sbit CS=P1^4;
//--------------写一字节---------------
void write_byte(uchar mdata)
{
uchar i;
SCK=0;
nop();
for(i=0;i<8;i++)
{
if(mdata & 0x80) SI=1;
else SI=0;
SCK=1;
mdata=mdata<<1;
SCK=0;
nop();
}
}
//-----------读一字节------------------
uchar read_byte(void)
{
uchar i,result;
result=0;
for(i=0;i<8;i++)
{
SCK=1;
result=result<<1;
if(SO) result|=0X01;
SCK=0;
nop();
}
return(result);
}
//----------------清看门狗----------外部调用-----
void clr_wchdog(void)
{
CS=0;
_nop_();
CS=1;
}
//----------------写状态寄存器-----外部调用------
void wreg_5045(uchar mcode)
{
CS=0;
write_byte(WREN);
CS=1;
nop();
CS=0;
write_byte(WRSR);
write_byte(mcode);
nop();
CS=1;
dely(10);
}
//-----------读EEPROM----外部调用----------------
uchar r5045(uint address)
{
uchar result;
CS=0;
nop();
write_byte((char)(address>255 ? (0x08|READ): READ)); //是否翻页
write_byte((char)(address & 0x00ff));
result=read_byte();
nop();
CS=1;
return(result);
dely(20); //此处延时根据实际情况,如果不延时,可能会不正常
}
//-----------写EEPROM-----外部调用-------------
void w5045(uint address,uchar udata)
{
CS=0;
write_byte(WREN);
CS=1;
nop();
CS=0;
write_byte((uchar)(address>255 ? (0x08|WRITE): WRITE));
write_byte((uchar)(address & 0x00ff));
write_byte(udata);
nop();
CS=1;
dely(20); //此处延时根据实际情况,如果不延时,可能会不正常
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -