📄 clock-1302.c
字号:
/*=========================================================
* 开发环境:Keil uVision3 *
* 软件名称: *
* 开发日期:2007/1/10 *
* 开 发 者:LPC *
=========================================================*/
/*加入头文件*/
#include<W77C32.h> //W77E58头文件
#include<intrins.h> //
#include<stdio.h> //
#include<stdlib.h> //
#include<TYPE.H> //声明定义
#include<OUTTYPE.H> //声明字库
#include<INCLUDES.H> //声明所有子函数
//=======================================================//
/*****************实时时钟函数开始************************/
//=======================================================//
/*=========================================================
函数名:DS1302_EN()
功能:时钟芯片使能函数
入口参数:无
出口参数:无
=========================================================*/
void DS1302_EN(void)
{
DS1302_CS=0; //释放时钟芯片
DS1302_CLK=0; //时钟芯片使能时时钟信号必须为低
DS1302_CS=1; //时钟芯片使能
}
/*=========================================================
函数名:DS1302_UN()
功能:时钟芯片释放函数
入口参数:无
出口参数:无
=========================================================*/
void DS1302_UN(void)
{
DS1302_CLK=1; //释放时钟
DS1302_CS=0; //释放时钟芯片
}
/*=========================================================
函数名:DS1302_ReadByte()
功能:时钟芯片读字节函数
入口参数:无
出口参数:读出数据(1字节)
说明:读出数据在时钟下降沿
=========================================================*/
Uchar DS1302_ReadByte(void)
{
Uchar i,TByte; //声明变量
for(i=0;i<8;i++)
{
TByte>>=1; //接收数据右移1位
DS1302_CLK=0; //时钟低
if(DS1302_IO)
{
TByte|=0x80; //第一位置高
}
else
{
TByte&=0x7F; //第一位拉低
}
DS1302_CLK=1; //时钟高
}
return TByte; //返回读出数据
}
/*=========================================================
函数名:DS1302_WriteByte()
功能:时钟芯片写字节函数
入口参数:读出数据(1字节)
出口参数:无
说明:数据在CLK上升沿写入
=========================================================*/
void DS1302_WriteByte(Uchar TByte)
{
Uchar i; //声明变量
for(i=0;i<8;i++)
{
DS1302_CLK=0; //拉低时钟
if(TByte&0x01)
{
DS1302_IO=1; //写入数据位放在数据口
}
else
{
DS1302_IO=0; //写入数据位放在数据口
}
DS1302_CLK=1; //输出数据
TByte>>=1; //数据右移移位
}
}
/*=========================================================
函数名:DS1302_WriteTime()
功能:向时钟芯片写数据函数
入口参数:写入地址(1字节)、写入数据/命令(1字节)
出口参数:无
=========================================================*/
void DS1302_WriteTime(Uchar Addrs,Uchar Con_Dat)
{
DS1302_EN(); //时钟芯片使能
DS1302_WriteByte(Addrs); //写寄存器地址
DS1302_WriteByte(Con_Dat); //写指令/数据
DS1302_UN(); //释放时钟芯片
}
/*=========================================================
函数名:DS1302_ReadTime()
功能:读出时钟芯片数据函数
入口参数:写入地址(1字节)
出口参数:读出数据(1字节)
=========================================================*/
Uchar DS1302_ReadTime(Uchar Addrs)
{
Uchar r; //声明变量
DS1302_EN(); //时钟芯片使能
DS1302_WriteByte(Addrs); //写寄存器地址
r=DS1302_ReadByte(); //读出数据
DS1302_UN(); //释放时钟芯片
return r; //返回数据
}
/*=========================================================
函数名:DS1302_ReadTimeBurst()
功能:连续读出时钟芯片数据函数
入口参数:无
出口参数:无(读出数据(9字节))
=========================================================*/
void DS1302_ReadTimeBurst(void)
{
Uchar i; //声明临时变量
DS1302_EN(); //时钟芯片使能
DS1302_WriteByte(0xBF); //发送连续读指令
for(i=0;i<8;i++)
{
Time[i]=DS1302_ReadByte(); //读出数据
}
DS1302_UN(); //释放时钟芯片
}
/*=========================================================
函数名:DS1302_WriteTimeBurst()
功能:连续写入时钟芯片时钟数据函数
入口参数:无
出口参数:无
=========================================================*/
void DS1302_WriteTimeBurst(void)
{
Uchar i; //声明临时变量
DS1302_EN(); //时钟芯片使能
DS1302_WriteByte(0xBE); //发送连续写指令
for(i=0;i<8;i++)
{
DS1302_WriteByte(Time[i]); //写入数据
}
DS1302_UN(); //释放时钟芯片
}
/*=========================================================
函数名:DS1302_Init()
功能:时钟芯片初始化函数
入口参数:无
出口参数:无
=========================================================*/
void DS1302_Init(void)
{
Uchar Sd; //声明变量
Sd=DS1302_ReadTime(0x81); //读秒状态寄存器
if(Sd&0x80)
{
DS1302_WriteTime(0x8E,0x00); //DS1302写使能
DS1302_WriteTime(0x80,0x00); //写起始秒数据
DS1302_WriteTime(0x82,0x00); //写起始分数据
DS1302_WriteTime(0x84,0x09); //写起始时数据
DS1302_WriteTime(0x86,0x01); //写起始日数据
DS1302_WriteTime(0x88,0x05); //写起始月数据
DS1302_WriteTime(0x8A,0x04); //写起始周数据
DS1302_WriteTime(0x8C,0x08); //写起始年数据
DS1302_WriteTime(0x90,0xAA); //配置充电寄存器
DS1302_WriteTime(0x8E,0x80); //关闭DS1302写使能
}
}
//=======================================================//
/*****************实时时钟函数结束************************/
//=======================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -