X5045和X5043的读写程序
扫描二维码
随时随地手机看文章
//---------------------------------
//x5045子程序
//---------------------------------
void RESWDI(void) //复位看门狗(喂狗)
{
CS = 0;
CS = 1;
}
void WREN(void) //写使能锁存
{
SCK=0;
CS=0;
OUTByte(0x06); //发送06H写使能命令字
SCK=0;
CS=1;
}
void WRDI(void) //写使能复位(禁止写)
{
SCK=0;
CS=0;
OUTByte(0x04); //发送04H写禁止命令字
SCK=0;
CS=1;
}
void WRSR(void) //写状态寄存器
{
SCK=0;
CS=0;
OUTByte(0x01); //发送01H写寄存器命令字
OUTByte(0x20); //发送寄存器值BL0,BL1为0没写保护,WD0=0 WD1=1看门狗复位时间为200ms
SCK=0;
CS=1;
WIPCHK(); //判断是否写入
}
unsigned char RSDR(void) //读状态寄存器
{
unsigned char Temp;
SCK=0;
CS=0;
OUTByte(0x05); //发送05H读状态寄存器命令字
Temp = INPUTByte(); //读状态寄存器值
SCK=0;
CS=1;
return Temp;
}
void WIPCHK(void) //reentrant //检查WIP位,判断是否写入完成
{
unsigned char Temp,TempCyc;
for(TempCyc=0;TempCyc<50;TempCyc++)
{
Temp = RSDR(); //读状态寄存器
if (Temp&0x01==0)
TempCyc = 50;
}
}
void OUTByte(unsigned char Byte) //输出一个定节
{
unsigned char TempCyc;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
SCK = 0;
SI = Byte & 0x80;
Byte = Byte<<1; //右移
SCK = 1;
}
SI=0; //使SI处于确定的状态
}
unsigned char INPUTByte(void) //输入一个字节
{
unsigned char Temp=0, TempCyc;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
Temp = Temp<<1; //右移
SCK = 0;
if (SO)
Temp = Temp|0x01; //SO为1,则最低位为1
SCK = 1;
}
return Temp;
}
unsigned char ReadByte(unsigned char ADD) //读地址中的数据这里不做先导字处理,只能读00-FFH
{
unsigned char Temp;
SCK=0;
CS=0;
OUTByte(0x3); //发送读指令03H 如要支持000-FFF则要把高位地址左移3位再为03H相或
OUTByte(ADD); //发送低位地址
Temp = INPUTByte();
SCK=0;
CS=1;
return Temp;
}
void WriteByte(unsigned char Byte,ADD) //向地址写入数据这里同样不做先导字处理,只能写00-FFH
{
SCK=0;
CS=0;
OUTByte(0x2); //发送写指令02H 如要支持000-FFF则要把高位地址左移2位再为02H相或
OUTByte(ADD); //发送低位地址
OUTByte(Byte); //发送数据
SCK=0;
CS=1;
WIPCHK(); //判断是否写入
}