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

📄 x5045wdt.c

📁 1、lpc2119的uart0 imer0应用 2、循环冗余校验CRC函数库 3、ASC字符在5*7点阵LED的应用 4、X045的应用函数库
💻 C
字号:
//------------------------------------------------------------------
//		x5045的应用函数库
//------------------------------------------------------------------


#define  WREN_INST   		0x06
#define  WRDI_INST   		0x04
#define  WRSR_INST   		0x01
#define  RDSR_INST   		0x05
#define  WRITE_INST  		0x02
#define  READ_INST   		0x03
#define  MAX_POLL    		99 
#define  WATCHTIME_1400MS   0x00            //pay attention time don't forget add 0x
#define  WATCHTIME_600MS   	0x10
#define  WATCHTIME_200MS   	0x20
#define  WATCHDOGDISABLE	0x30
#define  WATCHTIME			WATCHTIME_1400MS

#define X_CS  				0x00000040		//P0.6		5045片选输出口 
#define X_SO  				0x00000020		//P0.5  	5045数据输入口
#define X_SI 				0x00000080		//P0.7	 	5045数据输出口
#define X_CLK  				0x01000000		//P1.24  	5045时钟输出口

#define SET_X_CS			IO0SET=X_CS;	SomeNOP()
#define CLR_X_CS			IO0CLR=X_CS;	SomeNOP()	
#define SET_X_SI			IO0SET=X_SI;	SomeNOP()
#define CLR_X_SI			IO0CLR=X_SI;	SomeNOP()	
#define SET_X_CLK			IO1SET=X_CLK;	SomeNOP()
#define CLR_X_CLK			IO1CLR=X_CLK;	SomeNOP()		
#define CHECKSODATA			(IO0PIN & X_SO)
//指令延时
void SomeNOP()
{
 	unsigned char i;
 	for(i=0;i<15;i++){}  
}

//喂狗
void watchdog(void)
{
 	SET_X_CS;
 	CLR_X_CS;
}

unsigned char inbyt(void)               //读数据
{
	unsigned char i,indata=0,temp=0x80;
	
	for(i=0;i<8;i++)
   	{
   		SET_X_CLK;//clk=0
   		CLR_X_CLK;//clk=1
   		
   		if(CHECKSODATA){indata|=temp;}
        
   		temp>>=1;
   	}
   	return indata;
}
//ok

void outbyt(unsigned char outdata)                //向串口发数据
{
	unsigned char i,temp=0x80;
	
	for(i=0;i<8;i++)
   	{
   		CLR_X_CLK;//CLK=0

    	if( (outdata&temp) ){SET_X_SI;}
       	else{CLR_X_SI;}
       	
       	temp>>=1;
   		SET_X_CLK;//CLK=1
   	}
   	CLR_X_SI;
}
//ok
 
unsigned char ReadState(void)               //读状态      
{
	unsigned char state;
	CLR_X_CLK;
	CLR_X_CS;
	outbyt(RDSR_INST);
	state=inbyt();
	CLR_X_CLK;
	SET_X_CS;
	return state;
}
//ok


void SetWriteEnable(void)                        //写使能
{
	CLR_X_CLK;
	CLR_X_CS;
	outbyt(WREN_INST);                     //Send WREN instruction 
	CLR_X_CLK;
	SET_X_CS;
}
//ok

void wip_poll(void)                        //等待空闲   
{
	unsigned char i,state;
	for(i=0;i<MAX_POLL;i++)
	{
		state=ReadState();
		if((state&0x01));
		else  i=MAX_POLL;
	}
}
//ok

void WriteState(unsigned char temp)                         //写状态
{
	CLR_X_CLK;
	CLR_X_CS;
	outbyt(WRSR_INST);
	outbyt(temp);
	CLR_X_CLK;
	SET_X_CS;
	wip_poll();
}
//ok

void write_byte(unsigned int address,unsigned char data_in)        //写一位即八个字节
{
	unsigned char address_h,address_l;

	SetWriteEnable(); 
	                           
	CLR_X_CLK;
	CLR_X_CS;

	address_h=address/0x100;
	address_l=address%0x100;

	address_h<<=3;
	outbyt(address_h|WRITE_INST);
	outbyt(address_l);
	outbyt(data_in);

	CLR_X_CLK;
	SET_X_CS;
	wip_poll();
}
//ok

signed char read_byte(unsigned int address)            //读一位
{
	unsigned char address_h,address_l,temp;
	CLR_X_CLK;
	CLR_X_CS;

	address_l=(address%0x100);
	address_h=(address/0x100);
	address_h<<=3;

	outbyt(address_h|READ_INST);
	outbyt(address_l);

	temp=inbyt();
	CLR_X_CLK;
	SET_X_CS;
	return temp;
}

//ok

void write_16byte(unsigned int d,signed int e)  //写两个字节
{  
	write_byte(d,e/256);      //address/256=high address
   	d++;
   	write_byte(d,e%256);      //address%256=lowaddress
}
//ok

signed int read_16byte(unsigned int d)          //读两个字节
{
   	unsigned char e,f;
   	signed int k;
   	e=read_byte(d);           
   	d++;
  	f=read_byte(d);  
   	k=e*256+f;                //e*256 means high byte add low f
   	return k;
}
//ok

//设置看门狗不允许写
void setwrite_unenable(void)
{
 	SetWriteEnable();
 	WriteState(WATCHTIME|0x0C);
}

//设置看门狗写数据使能
void setwatchdog(void)                      // 设置看门狗定时时间或禁狗要设定WATCHDOGTIME
{
 	SetWriteEnable();
 	WriteState(WATCHTIME);
}
//ok

//判断看门狗定时器是否使用 如果没有使用就设置看门狗定时值1。5秒
void judge_watchdog(void)
{
 	unsigned char temp;
 	temp=ReadState();//读状态字
 	
 	if((temp&WATCHDOGDISABLE)==WATCHDOGDISABLE)
   	{
    	setwatchdog(); 
   	} 
   	
   	temp=ReadState();//读状态字
}



⌨️ 快捷键说明

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