⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x5405.c

📁 x5045看门狗芯片51代码
💻 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 + -