📄 x5405.c
字号:
/**************X5045.c***********/
#include "reg51.h"
#include "structure.h"
#include "Constant.h"
#include "X5045.h"
/***************X5045程序*************/
void RESWDI(void) /*复位看门狗(喂狗)*/
{
unsigned char xdata *ptr;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
//CS = 0;
//CS = 1;
}
void WREN(void) /*写使能锁存*/
{
unsigned char xdata *ptr;
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=0;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
OUTByte(0x06); /*发送06H写使能命令字 */
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=1;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
}
void WRDI(void) /*写使能复位(禁止写)*/
{
unsigned char xdata *ptr;
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=0;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
OUTByte(0x04); /*发送04H写禁止命令字 */
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=1;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
}
void WRSR(void) /*写状态寄存器*/
{
unsigned char xdata *ptr;
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=0;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
OUTByte(0x01); /*发送01H写寄存器命令字*/
OUTByte(0x10); /*D0=0 WD1=0看门狗复位时间为600MS*/
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=1;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
//WIPCHK(); /*判断是否写入*/
}
/*unsigned char RSDR(void) //读状态寄存器
{
unsigned char Temp;
unsigned char xdata *ptr;
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=0;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
OUTByte(0x05); //发送05H读状态寄存器命令字
Temp = INPUTByte(); //读状态寄存器值
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=1;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
return Temp;
}*/
/**************X5045初始化**************************/
void X5045_INIT()
{
unsigned char xdata *ptr;
ptr=0x8000; //WP=1
Third_Output_Control=Third_Output_Control|0x10;
*ptr=Third_Output_Control;
EA=0;
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//SI=0;
ptr=0x8000; //SI=0
Third_Output_Control=Third_Output_Control&0xbf;
*ptr=Third_Output_Control;
//CS=1;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
//SO=1;
WREN(); /*写使能锁存*/
WRSR(); /*写状态寄存器*/
//RSDR(); /*读状态寄存器*/
RESWDI(); /*复位看门狗(喂狗)*/
}
/*void WIPCHK(void) //检查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,SI;
unsigned char xdata *ptr;
for(TempCyc=0;TempCyc<8;TempCyc++)
{
//CS=0;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
//SCK = 0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
SI = Byte & 0x80;
if(SI)
{
ptr=0x8000; //SI=1
Third_Output_Control=Third_Output_Control|0x40;
*ptr=Third_Output_Control;
}
else
{
ptr=0x8000; //SI=0
Third_Output_Control=Third_Output_Control&0xbf;
*ptr=Third_Output_Control;
}
Byte = Byte<<1; /*右移*/
//SCK = 1;
ptr=0x8000; //SCK=1
Third_Output_Control=Third_Output_Control|0x20;
*ptr=Third_Output_Control;
}
//SI=0; /*使SI处于确定的状态*/
ptr=0x8000; //SI=1
Third_Output_Control=Third_Output_Control|0x40;
*ptr=Third_Output_Control;
}
/*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 ADDH,unsigned char ADDL) //读EEPROM
{
unsigned char Temp;
SCK=0;
CS=0;
ADDH=ADDH<<3;
ADDH=ADDH|0x03;
RSDR();
OUTByte(ADDH); //发送高位地址
OUTByte(ADDL); //发送低位地址
Temp = INPUTByte();
SCK=0;
CS=1;
return Temp;
}*/
void WriteByte(unsigned char Byte,unsigned char ADDH,unsigned char ADDL) /*向地址写入数据*/
{
unsigned char xdata *ptr;
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=0;
ptr=0x8000; //CS=0
Third_Output_Control=Third_Output_Control&0x7f;
*ptr=Third_Output_Control;
ADDH=ADDH<<3;
ADDH=ADDH|0x02;
WREN();
OUTByte(ADDH); /*发送高位地址 */
OUTByte(ADDL); /*发送低位地址*/
OUTByte(Byte); /*发送数据*/
//SCK=0;
ptr=0x8000; //SCK=0
Third_Output_Control=Third_Output_Control&0xdf;
*ptr=Third_Output_Control;
//CS=1;
ptr=0x8000; //CS=1
Third_Output_Control=Third_Output_Control|0x80;
*ptr=Third_Output_Control;
//WIPCHK(); /*判断是否写入*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -