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

📄 chang_x5045.c

📁 51单片机5045看门狗芯片的代码(通过编程)
💻 C
字号:
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char

#define WREN  0x06                    //允许写指令
#define WRDI  0x04                   //禁止写指令
#define RSDR  0x05                  //读状态寄存器
#define WRSR  0x01                 //写状态寄存器

sbit SCK = P2^0;                  //
sbit SI = P2^1;                  //输入端
sbit SO = P2^2;                 //输出端
sbit CS = P2^3;                //用于片选 /CS

bit SendData(uchar SData){              //数据输入
	uchar Cnt;
	for(Cnt = 0;Cnt < 8;Cnt ++){
		SCK = 0;                            //上升沿有效
		SData <<= 1;
		SI = CY;
		SCK = 1;
	}
}

uchar RecData(){                                //数据输出
	uchar Cnt;
	uchar ReadData = 0;
	for(Cnt = 0;Cnt < 8;Cnt ++){
		SCK = 1;
		SCK = 0;                           //下降沿有效
		ReadData <<= 1;
		if(SO){
			ReadData |= 0x01;
		}
		else{
			ReadData &= 0xfe;
		}
	}
	return (ReadData);
}
void FeedDog()
{
	CS = 1;
	_nop_();
	_nop_();
	CS = 0;
}

bit WriteEnable(void){                   //写允许
	CS = 0;
	SendData(WREN);                   //发送写允许指令
	CS = 1;
	CS = 0;
}
bit Writedisable(void){
	SendData(WRDI);                 //发送写禁止指令
}

void Wipchk()
{
	unsigned char Dat;
	do
    	{
    		CS = 1;
    		CS = 0;
        	SendData(0x05);
        	Dat&=0x01;
        	CS = 1;
    	}
    	while(Dat);
}

bit WriteStatus(uchar Status){
	WriteEnable();
	SendData(WRSR);                    //发送写状态寄存器指令
	CS = 1;
	CS = 0;
	SendData(Status);
	CS = 1;
}
uchar ReadStatus(void){
	uchar RData;
	CS = 0;
	SendData(RSDR);                    //发送读状态寄存器指令
	RData = RecData();
	CS = 1;
	return(RData);
}
bit WriteData(uchar Address,uchar Data,bit Flag){/*1 - 上片£?0 - 下片*/
	WriteEnable();
	if(Flag)
		SendData(0x0a);
	else
		SendData(0x02);
	SendData(Address);
	SendData(Data);
	CS = 1;
	Wipchk();
}
uchar ReadData(uchar Address,bit Flag){
	uchar RData;
	CS = 0;
	if(Flag)
		SendData(0x0b);
	else
		SendData(0x03);
	SendData(Address);
	RData = RecData();
        _nop_();
	CS = 1;
	return(RData);
}

main(){
	uchar Temp;
	Temp = ReadData(0,1);
	while(Temp & 0x01){
		Temp = ReadStatus();
	}
        _nop_();
	WriteData(0,0x79,1);
	Temp = ReadData(0,1);
	_nop_();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -