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

📄 x5045.c

📁 X5045的底层驱动
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
/*-------------------------------------------
//X5045状态字定义
#define WREN_INST 0x06		//写允许命令
#define WRDI_INST 0x04		//写禁止
#define WRSR_INST 0x01		//写状态寄存器命令
#define RDSR_INST 0x05		//读状态寄存器命令
#define WRITE_INST 0x02		//写存储器命令
#define RDAD_INST 0x03		//读存储器命令	
#define MAX_POLL 0x99		//测试的最大次数
//-------------------------------------------*/

sbit CS_5045=P1^4;
sbit SIO=P1^1;
sbit CLK=P1^0;
sfr16 DPTR=0x82;
unsigned char time;
unsigned char eeprom_data;
void timer0_int(void) interrupt 1
{
	TH0=0xdc;
	TL0=0x00;
	if(time--==0)
		{
			time=100;
		}
}
void mDelay(unsigned int DelayTime)
{
	unsigned char j=0;
	for(;DelayTime>0;DelayTime--)
	{
		for(j=0;j<125;j++)
		{;}
	}
}

//----------------------------------------------------
//名称:clear_dog
//功能:x5045看门狗定时器复位子程序
//
//----------------------------------------------------
void clear_dog(void)
{
	CS_5045=1;
	_nop_();_nop_();
	CS_5045=0;
	_nop_();_nop_();
	CS_5045=1;
}
//----------------------------------------------------
//名称:read_dog
//功能:读x5045,1字节数据子程序
//rd为读出数
//----------------------------------------------------
unsigned char read_dog(void)
{
	unsigned char n,rd;
	for(n=0;n<8;n++){
		CLK=1;
		_nop_();_nop_();
		CLK=0;
		if(SIO==1)
			rd|=0x01;
		else
			rd&=0xFE;
		if(n<7)
		rd=rd<<1;}
	return rd;
}
//----------------------------------------------------
//名称:write_dog
//功能:写x5045,1字节数据子程序
//wr为写入数
//----------------------------------------------------
void write_dog(unsigned char wr)
{
	unsigned char n;
	for(n=0;n<8;n++){	
	CLK=0;
		if(wr&0x80)
			SIO=1;
		else 
			SIO=0;
		CLK=1;
		wr=wr<<1;}
}
//----------------------------------------------------
//名称:write_enable
//功能:写x5045使能允许子程序
//
//----------------------------------------------------
void write_enable(void)
{
	CLK=0;
	CS_5045=0;
	write_dog(0x06);/*写使能锁存器*/
	CLK=0;
	CS_5045=1;
}
//读写状态寄存器或E2PROM操作函数-----------------------
//-----------------------------------------------------
//名称:read_dogstate
//功能:x5045读状态寄存器子程序
//status为返回状态字
//----------------------------------------------------
unsigned char read_dogstate(void)
{
	unsigned char status; 	
	CLK=0;	
	CS_5045=0;
	write_dog(0x05);	/*RSDR,读状态寄存器*/
	status=read_dog();	/*读出状态字节*/
	CLK=0;
	CS_5045=1;
	return status; 		
}
//----------------------------------------------------
//名称:write_dogstatus
//功能:x5045写状态寄存器子程序
//wr为写入状态
//----------------------------------------------------
void write_dogstate(unsigned char wr)
{
	unsigned char status;
	do{status=read_dogstate();}
	while(status&0x01);
	write_enable();  /*写使能允许*/ 
	CLK=0;
	CS_5045=0;
	write_dog(0x01); /*WRSR,写状态寄存器*/
	write_dog(wr);  /*写状态字节*/
	CLK=0;
	CS_5045=1;
}
//----------------------------------------------------
//名称:read_dogdata
//功能:读x5045单元指定位置1字节数据子程序
//com为读出数
//addr为指定地址
//----------------------------------------------------
unsigned char read_dogdata(unsigned int addr)
{
	unsigned char com;
	DPTR=addr;
	CLK=0;
	CS_5045=0;
	com=0x03;
	if(DPH&0x01)
		com|=0x08;
	write_dog(com);  
	write_dog(DPL);  /*写数据起始地址*/
	com=read_dog();  /*读数据*/
	CLK=0;
	CS_5045=1;
	return com;
}
//----------------------------------------------------
//名称:write_dogdata
//功能:向x5045单元指定位置写1字节数据子程序
//wr为写入数
//addr为指定地址
//----------------------------------------------------
void write_dogdata(unsigned int addr,unsigned char wr)
{
	unsigned char status;
	do{status=read_dogstate();}
	while(status&0x01);
	write_enable();  /*WREN,写使能允许*/ 
	DPTR=addr;
	CLK=0;
	CS_5045=0;
	status=0x02;
	if(DPH&0x01)
		status|=0x08;
	write_dog(status);	/*WRITE,写数据命令*/
	write_dog(DPL);	/*写数据起始地址*/
	write_dog(wr);	/*写数据*/
	CLK=0;
	CS_5045=1;
}

main()
{
//	CKCON=0x00;	//时钟控制
//	AUXR=0x01;	//	禁止ALE输出
	P0=0xff;
	P1=0xff;
	P2=0xff;
//	P3=0xff;
/*  设置t0 */
	mDelay(1000);
	TMOD=0x21;
	TH0=0xdc;
	TL0=0x00;

	IE=0x82;
	IP=0x02;
	TR0=1;
	EA=1;
	
	time=100;
	clear_dog();
	mDelay(1000);
	write_dogstate(0x00);

	while(1)
	{	
		write_dogdata(0x0001,0xaa);
		eeprom_data=read_dogdata(0x0001);
		mDelay(1000);
		write_dogdata(0x0003,0x55);
		eeprom_data=read_dogdata(0x0003);
		mDelay(1000);	//1s
		//	LED=!LED;
	}
}


⌨️ 快捷键说明

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