实时时钟芯片DS1302 C51源程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return(ucData);
}
/********************************************************************
函数名:Set1302()
功能:设置初始时间
说明:先写地址,后写数据。写入09年5月4日8时8分0秒
调用:W1302()
入口参数:
函数名:W1302()
功能:往DS1302写入数据
说明:先写地址,后写命令/数据(内部函数)
调用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData:要写的数据
返回值:无
***********************************************************************/
#include
sbit T_CLK = P2^7; /*实时时钟时钟线引脚*/
sbit T_IO = P1^4; /*实时时钟数据线引脚*/
sbit T_RST = P1^5; /*实时时钟复位线引脚*/
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
void RTInputByte(uchar); /*输入1Byte */
返回值:无
***********************************************************************/
void Set1302(void)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
W1302(0X80,0X00);//写秒起振
W1302(0X82,0X08);//写分
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /*地址,命令*/
ucData = RTOutputByte(); /*读1Byte数据*/
T_CLK = 1;
T_RST = 0;
实时时钟芯片DS1302 C51源程序
/****************************************************************
模块名称:DS1302.c
功能:实时时钟模块时钟芯片型号:DS1302
说明:
*********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /*地址,命令*/
RTInputByte(ucDa); /*写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
W1302(0X84,0X08);//写时
W1302(0X86,0X04);//写日
W1302(0X88,0X05);//写月
W1302(0X8C,0X09);//写年
W1302(0X90,0XAA);//启动慢充电
}
禁止写保护:W1302(0X8E,0X00)写年(如09年):W1302(0X8C,0X09)
函数名:RTOutputByte()
功能:实时时钟读取一字节
说明:从DS1302读取1Byte数据(内部函数)
入口参数:无
返回值:ACC
***********************************************************************/
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
函数名:RTInputByte()
功能:实时时钟写入一字节
说明:往DS1302写入1Byte数据(内部函数)
入口参数:d写入的数据
返回值:无
***********************************************************************/
void RTInputByte(uchar d)
函数名:R1302来自百度文库)
功能:读取DS1302某地址的数据
说明:先写地址,后读命令/数据(内部函数)
调用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返回值:ucData :读取的数据
***********************************************************************/
允许写保护:W1302(0X8E,0X80)读月:R1302(0X89)
慢充电控制:W1302(0X90,0XAA)写秒(起振):W1302(0X80,0X00)
写秒(停振):W1302(0X80,0X80)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************
uchar RTOutputByte(void); /*输出?1Byte */
void W1302(uchar, uchar);
uchar R1302(uchar);
/********************************************************************
}
/********************************************************************
函数名:Set1302()
功能:设置初始时间
说明:先写地址,后写数据。写入09年5月4日8时8分0秒
调用:W1302()
入口参数:
函数名:W1302()
功能:往DS1302写入数据
说明:先写地址,后写命令/数据(内部函数)
调用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData:要写的数据
返回值:无
***********************************************************************/
#include
sbit T_CLK = P2^7; /*实时时钟时钟线引脚*/
sbit T_IO = P1^4; /*实时时钟数据线引脚*/
sbit T_RST = P1^5; /*实时时钟复位线引脚*/
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
void RTInputByte(uchar); /*输入1Byte */
返回值:无
***********************************************************************/
void Set1302(void)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
W1302(0X80,0X00);//写秒起振
W1302(0X82,0X08);//写分
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /*地址,命令*/
ucData = RTOutputByte(); /*读1Byte数据*/
T_CLK = 1;
T_RST = 0;
实时时钟芯片DS1302 C51源程序
/****************************************************************
模块名称:DS1302.c
功能:实时时钟模块时钟芯片型号:DS1302
说明:
*********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /*地址,命令*/
RTInputByte(ucDa); /*写1Byte数据*/
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
W1302(0X84,0X08);//写时
W1302(0X86,0X04);//写日
W1302(0X88,0X05);//写月
W1302(0X8C,0X09);//写年
W1302(0X90,0XAA);//启动慢充电
}
禁止写保护:W1302(0X8E,0X00)写年(如09年):W1302(0X8C,0X09)
函数名:RTOutputByte()
功能:实时时钟读取一字节
说明:从DS1302读取1Byte数据(内部函数)
入口参数:无
返回值:ACC
***********************************************************************/
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; /*相当于汇编中的RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
函数名:RTInputByte()
功能:实时时钟写入一字节
说明:往DS1302写入1Byte数据(内部函数)
入口参数:d写入的数据
返回值:无
***********************************************************************/
void RTInputByte(uchar d)
函数名:R1302来自百度文库)
功能:读取DS1302某地址的数据
说明:先写地址,后读命令/数据(内部函数)
调用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返回值:ucData :读取的数据
***********************************************************************/
允许写保护:W1302(0X8E,0X80)读月:R1302(0X89)
慢充电控制:W1302(0X90,0XAA)写秒(起振):W1302(0X80,0X00)
写秒(停振):W1302(0X80,0X80)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0; /*相当于汇编中的RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************
uchar RTOutputByte(void); /*输出?1Byte */
void W1302(uchar, uchar);
uchar R1302(uchar);
/********************************************************************