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

📄 x5045_drive.c

📁 X5045的AVR单片机读写全代码程序
💻 C
字号:
/*C**************************************************************************
* NAME: X5045_Drive.c
*----------------------------------------------------------------------------
* Copyright (c) 2008 HIT(WH)
*----------------------------------------------------------------------------
* CREATED_BY:      Cai Xianjun
* CREATION_DATE:   2008/12/17
* AUTHOR:          $Cai Xianjun$
* REVISI0N:        $Revision: 1.0 $
* DATE:            $Date: 2008/12/17 08:00:00 $
* MODIFIED DATE :  
* MODIFIED AUTHOR: 

*----------------------------------------------------------------------------
* PURPOSE:        Used for AT90CAN128
* 
*****************************************************************************/
#include <avr/io.h>
#include "X5045_Drive.h"
#include <avr/sfr_defs.h>
#include <avr/iocanxx.h>
unsigned char an_dat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/*F**************************************************************************
* NAME: watch_dog 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void  watch_dog(void)
{     
                        
   PORTB &= ~_BV(X5045_CS);	//CS LOW
   PORTB |= _BV(X5045_CS);		//CS high
                       
}
/*F**************************************************************************
* NAME: ep_init 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void	ep_init(void)
{
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB |= _BV(X5045_CS);		//CS high
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	PORTB |= _BV(X5045_CS);		//CS high
}
/*F**************************************************************************
* NAME: read_ep 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
unsigned char read_ep(void)
{
	unsigned char m,i;

	m=0;
	for(i=0;i<8;i++)
	{
		PORTE |= _BV(X5045_SCK);	//SCK high
		Delay_Xms(X5045_delay);
		PORTE &= ~_BV(X5045_SCK);	//SCK LOW
		Delay_Xms(X5045_delay);
		if(PING&0x10)
		{
			m|=an_dat[7-i];
		}
		
	}
	return(m);
}
/*F**************************************************************************
* NAME: watchdog_set 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void 	watchdog_set(unsigned char reset_type)
{

	ep_ewen();
	PORTB |= _BV(X5045_CS);		//CS high
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	write_ep(1);
	write_ep(reset_type);//0x30-->no 0x20-->200ms 0x10h-->600ms 0x00-->1.4s
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB |= _BV(X5045_CS);		//CS high
	ep_wait();
}
/*F**************************************************************************
* NAME: ep_ewen 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void 	ep_ewen(void)
{
	ep_init();
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	write_ep(6);
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB |= _BV(X5045_CS);		//CS high
}
/*F**************************************************************************
* NAME: write_ep 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void	write_ep(unsigned char wr_data)
{
	unsigned char m,i;
	for(i=0;i<8;i++)
	{  
		PORTE &= ~_BV(X5045_SCK);	//SCK LOW
		Delay_Xms(X5045_delay);
		m=wr_data&an_dat[7-i];
		if(m!=0)
		PORTB |= _BV(X5045_SI);		//SI high
		else 
		PORTB &= ~_BV(X5045_SI);	//SI low
		PORTE |= _BV(X5045_SCK);	//SCK high
		Delay_Xms(X5045_delay);
		
	}
	PORTB &= ~_BV(X5045_SI);	//SI low

}
/*F**************************************************************************
* NAME: ep_wait 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void	ep_wait(void)
{
	unsigned char m,n;
	unsigned int i;
	for(i=0;i<5000;i++)
	{
		m=read_rdsr();
		n=m&0x01;
		if(n==0)break;
	}
}
/*F**************************************************************************
* NAME: read_rdsr 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
unsigned char read_rdsr(void)
{
	unsigned char m;
	ep_init();
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	write_ep(5);
	m=read_ep();
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB |= _BV(X5045_CS);		//CS high
	return(m);
}
/*F**************************************************************************
* NAME: WriteByte2rom 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void WriteByte2rom(unsigned int address,unsigned char Data)
{
	unsigned char up,down;
	up=address/0x100;
	down=address%0x100;

	ep_ewen();
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	if(up==0)
	write_ep(0x2);
	else if(up>0)
	write_ep(0xa);
	write_ep(down);
	write_ep(Data);
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB |= _BV(X5045_CS);		//CS high
	ep_wait();


}

/*F**************************************************************************
* NAME: ReadByteFrom 
*----------------------------------------------------------------------------
* AUTHOR:         $Cai Xianjun$
* MODIFIED DATE : $Date: 2008/12/17 15:30:00 $
*----------------------------------------------------------------------------
* PURPOSE:
*   
*----------------------------------------------------------------------------
* PARAMS:
*   
*
* return:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
unsigned char  ReadByteFrom(unsigned int address)
{
	unsigned char up,down,temp;
	up=address/0x100;
	down=address%0x100;

	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB &= ~_BV(X5045_CS);	//CS LOW
	if(up==0)
	write_ep(0x3);
	else if(up>0)
	write_ep(0xb);
	write_ep(down);
	temp=read_ep();
	PORTE &= ~_BV(X5045_SCK);	//SCK LOW
	Delay_Xms(X5045_delay);
	PORTB |= _BV(X5045_CS);		//CS high
	ep_wait();
	return temp;
}



⌨️ 快捷键说明

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