//--------------------------------- //x5045子程序 //--------------------------------- void RESWDI(void) //復(fù)位看門(mén)狗(喂狗) { CS = 0; CS = 1; } void WREN(void) //寫(xiě)使能鎖存 { SCK=0; CS=0; OUTByte(0x06); //發(fā)送06H寫(xiě)使能命令字 SCK=0; CS=1; } void WRDI(void) //寫(xiě)使能復(fù)位(禁止寫(xiě)) { SCK=0; CS=0; OUTByte(0x04); //發(fā)送04H寫(xiě)禁止命令字 SCK=0; CS=1; } void WRSR(void) //寫(xiě)狀態(tài)寄存器 { SCK=0; CS=0; OUTByte(0x01); //發(fā)送01H寫(xiě)寄存器命令字 OUTByte(0x20); //發(fā)送寄存器值BL0,BL1為0沒(méi)寫(xiě)保護(hù),WD0=0 WD1=1看門(mén)狗復(fù)位時(shí)間為200ms SCK=0; CS=1; WIPCHK(); //判斷是否寫(xiě)入 } 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位,判斷是否寫(xiě)入完成 { 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) //向地址寫(xiě)入數(shù)據(jù)這里同樣不做先導(dǎo)字處理,只能寫(xiě)00-FFH { SCK=0; CS=0; OUTByte(0x2); //發(fā)送寫(xiě)指令02H 如要支持000-FFF則要把高位地址左移2位再為02H相或 OUTByte(ADD); //發(fā)送低位地址 OUTByte(Byte); //發(fā)送數(shù)據(jù) SCK=0; CS=1; WIPCHK(); //判斷是否寫(xiě)入 } |