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

📄 rtc8025._c

📁 AVR16源代码 ICC编译器
💻 _C
字号:
#include	<iom128v.h>
#include	"Rtc8025.h"

//==========================================================
//函	数:void RTC_Delay(unsigned int MD)
//功	能:延时
//入口参数:延时的参数
//出口参数:无
//日	期:2005-07-21	chenzuan	
//==========================================================
void RTC_Delay(unsigned int MD)
{
	while(MD --);
}
//==========================================================
//函	数:	void Send_Start(void)
//功	能:	发送起始位
//入口参数:	无
//出口参数:	1错误,0正确
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Send_Start(void)
{
	RTCSDA_INPUT;
	RTC_Delay(1);
	if((PIND & 0x02) == 0)
		return 1;
	RTCSDA_H;
	RTC_Delay(1);
	RTCSDA_OUTPUT;
	RTCSCL_L;
	RTC_Delay(1);
	RTCSCL_H;
	RTC_Delay(1);
	RTCSDA_L;
	RTC_Delay(1);
	RTCSCL_L;
	RTC_Delay(1);
	return 0;
}
//==========================================================
//函	数:	void Send_Stop(void)
//功	能:	发送停止位
//入口参数:	无
//出口参数:	1错误,0正确
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Send_Stop(void)
{
	RTCSDA_INPUT;
	RTC_Delay(20);
	if((PIND & 0x02) == 0)
		return 1;
	RTCSDA_L;
	RTCSDA_OUTPUT;
	RTCSCL_L;
	RTC_Delay(1);
	RTCSCL_H;
	RTC_Delay(1);
	RTCSDA_H;
	RTC_Delay(1);
	RTCSCL_L;
	RTC_Delay(1);
	return 0;
}
//==========================================================
//函	数:	unsigned char Receive_ACK()
//功	能:	接收应答
//入口参数:	无
//出口参数:	1错误,0正确
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Receive_ACK(void)
{
	RTCSDA_INPUT;
	RTC_Delay(1);
	RTCSCL_H;
	RTC_Delay(1);
	if((PIND & 0x02) == 2)
		return 1;
	RTCSCL_L;
	RTC_Delay(1);
	return 0;
}
//==========================================================
//函	数:	unsigned char Send_ACK(void)
//功	能:	发送应答
//入口参数:	无
//出口参数:	无
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Send_ACK(void)
{
	RTCSCL_L;
	if(!(PIND & 0x02))
		return 1;	
	RTCSDA_L;
	RTCSDA_OUTPUT;
	RTC_Delay(1);
	RTCSCL_H;
	RTC_Delay(1);
	RTCSCL_L;
	RTC_Delay(1);
}

//==========================================================
//函	数:	void Send_No_ACK(void)
//功	能:	发送应答
//入口参数:	无
//出口参数:	无
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Send_No_ACK(void)
{
	RTCSCL_L;
	if(!(PIND & 0x02))
		return 1;	
	RTCSDA_OUTPUT;
	RTC_Delay(1);
	RTCSDA_H;
	RTC_Delay(1);
	RTCSCL_H;
	RTC_Delay(1);
	RTCSCL_L;
	RTC_Delay(1);
	return 0;
}
//==========================================================
//函	数:	unsigned char Read_Byte(void)
//功	能:	从R8025里读一个Byte
//入口参数:	无
//出口参数:	错误返回1,正确返回读取的值
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Read_Byte(void)
{
	unsigned char i = 8;
	unsigned char Byte;

	RTCSCL_L;
	RTCSDA_INPUT;
	while(i --)
	{
		Byte = Byte << 1;
		RTCSCL_H;
		RTC_Delay(1);		
		if((PIND & 0x02))
		{
			Byte = Byte + 1;
		}
		RTCSCL_L;
		RTC_Delay(1);
	}
	return Byte;
}
//==========================================================
//函	数:	void Write_Byte(unsigned char Data)
//功	能:	R8025写一个Byte
//入口参数:	写的数据
//出口参数:	返回1错误,0成功
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Write_Byte(unsigned char Data)
{
	unsigned char i = 8;
	
	RTCSDA_INPUT;
	RTC_Delay(1);	
	if((PIND & 0x02) == 0)
		return 1;	
	RTCSDA_L;
	RTCSDA_OUTPUT;	
	while(i --)
	{
        	if(Data & 0x80)
            		RTCSDA_H;
        	else
		    	RTCSDA_L;
		RTCSCL_H;
		RTC_Delay(1);		    	
		RTCSCL_L;
		RTC_Delay(1);    	
		Data = Data << 1;
	}
	return 0;
}

//==========================================================
//函	数:	unsigned char Read_Time_Data(unsigned char *Frame,
//			unsigned char Address,unsigned char Len)
//功	能:	读时间数据
//入口参数:	存放的地方,读的地址,长度
//出口参数:	返回1错误,0成功
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Read_Time_Data(unsigned char *Frame,
			     unsigned char Address,
			     unsigned char Len)
{
	unsigned char i;
	
	Send_Start();
	Write_Byte(0x64);		//写数据命令;	
	if(Receive_ACK()) 
		return 1;
	Write_Byte(Address);		//写入要读的首地址
	if(Receive_ACK()) 
		return 1;
	Send_Start();
	Write_Byte(0x65);		//读数据命令
	if(Receive_ACK()) 
		return 1;
	for(i = 0;i < Len;i ++)
	{
		Frame[i] = Read_Byte();
		if(i == (Len - 1))
			Send_No_ACK();
		else
			Send_ACK();
	}
	Send_Stop();			
	return 0;		
}
//==========================================================
//函	数:	unsigned char Write_Time_Data(unsigned char *Frame,
//			      unsigned char Address,
//			      unsigned char Len)
//功	能:	写时间和数据
//入口参数:	写入数据,地址,长度
//出口参数:	返回1错误,0成功
//日	期:	2005-07-20	chenzuan
//==========================================================
unsigned char Write_Time_Data(unsigned char *Frame,
			      unsigned char Address,
			      unsigned char Len)
{
	unsigned char i;
	
	Send_Start();
	Write_Byte(0x64);		//写数据命令;	
	if(Receive_ACK()) 
		return 1;
	Write_Byte(Address);		//写入要读的首地址
	if(Receive_ACK()) 
		return 1;
	for(i = 0;i < Len;i ++)
	{
		Write_Byte(Frame[i]);
		if(Receive_ACK())
			return 1;
	}	
	Send_Stop();			
	return 0;		
}

⌨️ 快捷键说明

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