X5045和X5043的讀寫程序
//---------------------------------
//x5045子程序
//---------------------------------
void RESWDI(void) //復(fù)位看門狗(喂狗)
{
CS = 0;
CS = 1;
}
void WREN(void) //寫使能鎖存
{
SCK=0;
CS=0;
OUTByte(0x06); //發(fā)送06H寫使能命令字
SCK=0;
CS=1;
}
void WRDI(void) //寫使能復(fù)位(禁止寫)
{
SCK=0;
CS=0;
OUTByte(0x04); //發(fā)送04H寫禁止命令字
SCK=0;
CS=1;
}
void WRSR(void) //寫狀態(tài)寄存器
{
SCK=0;
CS=0;
OUTByte(0x01); //發(fā)送01H寫寄存器命令字
OUTByte(0x20); //發(fā)送寄存器值BL0,BL1為0沒寫保護(hù),WD0=0 WD1=1看門狗復(fù)位時(shí)間為200ms
SCK=0;
CS=1;
WIPCHK(); //判斷是否寫入
}
unsigned char RSDR(void) //讀狀態(tài)寄存器
{
unsigned char Temp;
SCK=0;
CS=0;
OUTByte(0x05); //發(fā)送05H讀狀態(tài)寄存器命令字
Temp = INPUTByte(); //讀狀態(tài)寄存器值
SCK=0;
CS=1;
return Temp;
}
void WIPCHK(void) //reentrant //檢查WIP位,判斷是否寫入完成
{
unsigned char Temp,TempCyc;
for(TempCyc=0;TempCyc<50;TempCyc++)
{
Temp = RSDR(); //讀狀態(tài)寄存器
if (Temp&0x01==0)
TempCyc = 50;
}
}
void OUTByte(unsigned char Byte) //輸出一個(gè)定節(jié)
{
unsigned char TempCyc;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
SCK = 0;
SI = Byte & 0x80;
Byte = Byte<<1; //右移
SCK = 1;
}
SI=0; //使SI處于確定的狀態(tài)
}
unsigned char INPUTByte(void) //輸入一個(gè)字節(jié)
{
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) //讀地址中的數(shù)據(jù)這里不做先導(dǎo)字處理,只能讀00-FFH
{
unsigned char Temp;
SCK=0;
CS=0;
OUTByte(0x3); //發(fā)送讀指令03H 如要支持000-FFF則要把高位地址左移3位再為03H相或
OUTByte(ADD); //發(fā)送低位地址
Temp = INPUTByte();
SCK=0;
CS=1;
return Temp;
}
void WriteByte(unsigned char Byte,ADD) //向地址寫入數(shù)據(jù)這里同樣不做先導(dǎo)字處理,只能寫00-FFH
{
SCK=0;
CS=0;
OUTByte(0x2); //發(fā)送寫指令02H 如要支持000-FFF則要把高位地址左移2位再為02H相或
OUTByte(ADD); //發(fā)送低位地址
OUTByte(Byte); //發(fā)送數(shù)據(jù)
SCK=0;
CS=1;
WIPCHK(); //判斷是否寫入
}