?? x5045子程序.txt
字號:
sbit Si_5045_5045= P3^2;
sbit So_5045_5045=P1^0;
sbit Cs_5045_5045= P1^6;
sbit Sck_5045_5045= P1^1;
//---------------------------------
//x5045子程序
//---------------------------------
void RESWDI(void) //復位看門狗(喂狗)
{
Cs_5045 = 0;
Cs_5045 = 1;
}
void WREN(void) //寫使能鎖存
{
Sck_5045=0;
Cs_5045=0;
OUTByte(0x06); //發送06H寫使能命令字
Sck_5045=0;
Cs_5045=1;
}
void WRDI(void) //寫使能復位(禁止寫)
{
Sck_5045=0;
Cs_5045=0;
OUTByte(0x04); //發送04H寫禁止命令字
Sck_5045=0;
Cs_5045=1;
}
void WRSR(void) //寫狀態寄存器
{
Sck_5045=0;
Cs_5045=0;
OUTByte(0x01); //發送01H寫寄存器命令字
OUTByte(0x20); //發送寄存器值BL0,BL1為0沒寫保護,WD0=0 WD1=1看門狗復位時間為200ms
Sck_5045=0;
Cs_5045=1;
WIPCHK(); //判斷是否寫入
}
uchar RSDR(void) //讀狀態寄存器
{
uchar Temp;
Sck_5045=0;
Cs_5045=0;
OUTByte(0x05); //發送05H讀狀態寄存器命令字
Temp = INPUTByte(); //讀狀態寄存器值
Sck_5045=0;
Cs_5045=1;
return Temp;
}
void WIPCHK(void) //reentrant //檢查WIP位,判斷是否寫入完成
{
uchar Temp,TempCyc;
for(TempCyc=0;TempCyc<50;TempCyc++)
{
Temp = RSDR(); //讀狀態寄存器
if (Temp&0x01==0)
TempCyc = 50;
}
}
void OUTByte(uchar Byte) //輸出一個定節
{
uchar TempCyc;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
Sck_5045 = 0;
Si_5045 = Byte & 0x80;
Byte = Byte<<1; //右移
Sck_5045 = 1;
}
Si_5045=0; //使Si_5045處于確定的狀態
}
uchar INPUTByte(void) //輸入一個字節
{
uchar Temp=0, TempCyc;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
Temp = Temp<<1; //右移
Sck_5045 = 0;
if (So_5045)
Temp = Temp|0x01; //So_5045為1,則最低位為1
Sck_5045 = 1;
}
return Temp;
}
uchar ReadByte(uchar ADD) //讀地址中的數據這里不做先導字處理,只能讀00-FFH
{
uchar Temp;
Sck_5045=0;
Cs_5045=0;
OUTByte(0x3); //發送讀指令03H 如要支持000-FFF則要把高位地址左移3位再為03H相或
OUTByte(ADD); //發送低位地址
Temp = INPUTByte();
Sck_5045=0;
Cs_5045=1;
return Temp;
}
void WriteByte(uchar Byte,ADD) //向地址寫入數據這里同樣不做先導字處理,只能寫00-FFH
{
Sck_5045=0;
Cs_5045=0;
OUTByte(0x2); //發送寫指令02H 如要支持000-FFF則要把高位地址左移2位再為02H相或
OUTByte(ADD); //發送低位地址
OUTByte(Byte); //發送數據
Sck_5045=0;
Cs_5045=1;
WIPCHK(); //判斷是否寫入
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -