📄 rtc8025._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 + -