📄 x5045.c
字号:
#include "x5045.h"
#include "intrins.H"
//-----------读一字节------------------
unsigned char _r_byte(void)
{
unsigned char i,result;
result=0;
for(i=0;i<8;i++)
{
SCK=1;
SCK=0;
_nop_();
result=result<<1;
if(SO) result|=0X01;
_nop_();
}
return(result);
}
//--------------写一字节---------------
void _w_byte(unsigned char mdata)
{
unsigned char i;
// SCK=0;
_nop_();
for(i=0;i<8;i++)
{
SCK=0;
if(mdata & 0x80) SI=1;
else SI=0;
SCK=1;
_nop_();
mdata=mdata<<1;
}
}
//----------------清看门狗----------外部调用-----
void clr_wchdog(void)
{
CS=0;
CS=1;
}
//----------------写状态寄存器-----外部调用------
void write_status(unsigned char mcode)
{
CS=0;
_w_byte(WREN);
CS=1;
_nop_();
CS=0;
_w_byte(WRSR);
_w_byte(mcode);
_nop_();
CS=1;
}
//-----------读EEPROM----外部调用----------------
unsigned char read_byte(unsigned int address)
{
unsigned char result;
CS=0;
_nop_();
_w_byte((char)(address>255 ? (0x08|READ): READ)); //是否翻页
_w_byte((char)(address & 0x00ff));
result=_r_byte();
_nop_();
CS=1;
return(result);
wipchk(); //此处延时根据实际情况,如果不延时,可能会不正常
}
//-----------写EEPROM-----外部调用-------------
void write_byte(unsigned int address,unsigned char udata)
{
CS=0;
_w_byte(WREN);
CS=1;
_nop_();
CS=0;
_w_byte((unsigned char)(address>255 ? (0x08|WRITE): WRITE));
_w_byte((unsigned char)(address & 0x00ff));
_w_byte(udata);
_nop_();
CS=1;
wipchk(); //此处延时根据实际情况,如果不延时,可能会不正常
}
void wipchk(void) //reentrant //检查WIP位,判断是否写入完成
{
unsigned char Temp,TempCyc;
for(TempCyc=0;TempCyc<50;TempCyc++)
{
Temp = RSDR(); //读状态寄存器
if (Temp&0x01==0)
TempCyc = 50;
}
}
unsigned char RSDR(void) //读状态寄存器
{
unsigned char Temp;
SCK=0;
CS=0;
_w_byte(0x05); //发送05H读状态寄存器命令字
Temp = _r_byte(); //读状态寄存器值
SCK=0;
CS=1;
return Temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -