采用51单片机控制的DS1302时钟程序.docx

上传人:b****3 文档编号:26612887 上传时间:2023-06-20 格式:DOCX 页数:6 大小:15.55KB
下载 相关 举报
采用51单片机控制的DS1302时钟程序.docx_第1页
第1页 / 共6页
采用51单片机控制的DS1302时钟程序.docx_第2页
第2页 / 共6页
采用51单片机控制的DS1302时钟程序.docx_第3页
第3页 / 共6页
采用51单片机控制的DS1302时钟程序.docx_第4页
第4页 / 共6页
采用51单片机控制的DS1302时钟程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

采用51单片机控制的DS1302时钟程序.docx

《采用51单片机控制的DS1302时钟程序.docx》由会员分享,可在线阅读,更多相关《采用51单片机控制的DS1302时钟程序.docx(6页珍藏版)》请在冰豆网上搜索。

采用51单片机控制的DS1302时钟程序.docx

采用51单片机控制的DS1302时钟程序

采用51单片机控制的DS1302时钟程序

/*********************************************************************/

/*实时时钟模块时钟芯片型号:

DS1302*/

/*/

/*********************************************************************/

sbitT_CLK=P2^7;/*实时时钟时钟线引脚*/

sbitT_IO=P1^4;/*实时时钟数据线引脚*/

sbitT_RST=P1^5;/*实时时钟复位线引脚*/

/********************************************************************

*

*名称:

v_RTInputByte

*说明:

*功能:

往DS1302写入1Byte数据

*调用:

*输入:

ucDa写入的数据

*返回值:

***********************************************************************/

voidv_RTInputByte(ucharucDa)

{

uchari;

ACC=ucDa;

for(i=8;i>0;i--)

{

T_IO=ACC0;/*相当于汇编中的RRC*/

T_CLK=1;

T_CLK=0;

ACC=ACC>>1;

}

}

/********************************************************************

*

*名称:

ucharuc_RTOutputByte

*说明:

*功能:

从DS1302读取1Byte数据

*调用:

*输入:

*返回值:

ACC

***********************************************************************/

ucharuc_RTOutputByte(void)

{

uchari;

for(i=8;i>0;i--)

{

ACC=ACC>>1;/*相当于汇编中的RRC*/

ACC7=T_IO;

T_CLK=1;

T_CLK=0;

}

return(ACC);

}

/********************************************************************

*

*名称:

v_W1302

*说明:

先写地址,后写命令/数据

*功能:

往DS1302写入数据

*调用:

v_RTInputByte()

*输入:

ucAddr:

DS1302地址,ucDa:

要写的数据

*返回值:

***********************************************************************/

voidv_W1302(ucharucAddr,ucharucDa)

{

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr);/*地址,命令*/

v_RTInputByte(ucDa);/*写1Byte数据*/

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

uc_R1302

*说明:

先写地址,后读命令/数据

*功能:

读取DS1302某地址的数据

*调用:

v_RTInputByte(),uc_RTOutputByte()

*输入:

ucAddr:

DS1302地址

*返回值:

ucDa:

读取的数据

***********************************************************************/

ucharuc_R1302(ucharucAddr)

{

ucharucDa;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(ucAddr);/*地址,命令*/

ucDa=uc_RTOutputByte();/*读1Byte数据*/

T_CLK=1;

T_RST=0;

return(ucDa);

}

/********************************************************************

*

*名称:

v_BurstW1302T

*说明:

先写地址,后写数据(时钟多字节方式)

*功能:

往DS1302写入时钟数据(多字节方式)

*调用:

v_RTInputByte()

*输入:

pSecDa:

时钟数据地址格式为:

秒分时日月星期年控制

*8Byte(BCD码)1B1B1B1B1B1B1B1B

*返回值:

***********************************************************************/

voidv_BurstW1302T(uchar*pSecDa)

{

uchari;

v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作?

*/

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xbe);/*0xbe:

时钟多字节写命令*/

for(i=8;i>0;i--)/*8Byte=7Byte时钟数据+1Byte控制*/

{

v_RTInputByte(*pSecDa);/*写1Byte数据*/

pSecDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

v_BurstR1302T

*说明:

先写地址,后读命令/数据(时钟多字节方式)

*功能:

读取DS1302时钟数据

*调用:

v_RTInputByte(),uc_RTOutputByte()

*输入:

pSecDa:

时钟数据地址格式为:

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

*返回值:

ucDa:

读取的数据

***********************************************************************/

voidv_BurstR1302T(uchar*pSecDa)

{

uchari;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xbf);/*0xbf:

时钟多字节读命令*/

for(i=8;i>0;i--)

{

*pSecDa=uc_RTOutputByte();/*读1Byte数据*/

pSecDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

v_BurstW1302R

*说明:

先写地址,后写数据(寄存器多字节方式)

*功能:

往DS1302寄存器数写入数据(多字节方式)

*调用:

v_RTInputByte()

*输入:

pReDa:

寄存器数据地址

*返回值:

***********************************************************************/

voidv_BurstW1302R(uchar*pReDa)

{

uchari;

v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作?

*/

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xfe);/*0xbe:

时钟多字节写命令*/

for(i=31;i>0;i--)/*31Byte寄存器数据*/

{

v_RTInputByte(*pReDa);/*写1Byte数据*/

pReDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

uc_BurstR1302R

*说明:

先写地址,后读命令/数据(寄存器多字节方式)

*功能:

读取DS1302寄存器数据

*调用:

v_RTInputByte(),uc_RTOutputByte()

*输入:

pReDa:

寄存器数据地址

*返回值:

***********************************************************************/

voidv_BurstR1302R(uchar*pReDa)

{

uchari;

T_RST=0;

T_CLK=0;

T_RST=1;

v_RTInputByte(0xff);/*0xbf:

时钟多字节读命令*/

for(i=31;i>0;i--)/*31Byte寄存器数据*/

{

*pReDa=uc_RTOutputByte();/*读1Byte数据*/

pReDa++;

}

T_CLK=1;

T_RST=0;

}

/********************************************************************

*

*名称:

v_Set1302

*说明:

*功能:

设置初始时间

*调用:

v_W1302()

*输入:

pSecDa:

初始时间地址。

初始时间格式为:

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

*返回值:

***********************************************************************/

voidv_Set1302(uchar*pSecDa)

{

uchari;

ucharucAddr=0x80;

v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作?

*/

for(i=7;i>0;i--)

{

v_W1302(ucAddr,*pSecDa);/*秒分时日月星期年*/

pSecDa++;

ucAddr+=2;

}

v_W1302(0x8e,0x80);/*控制命令,WP=1,写保护?

*/

}

/********************************************************************

*

*名称:

v_Get1302

*说明:

*功能:

读取DS1302当前时间

*调用:

uc_R1302()

*输入:

ucCurtime:

保存当前时间地址。

当前时间格式为:

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

*返回值:

***********************************************************************/

voidv_Get1302(ucharucCurtime[])

{

uchari;

ucharucAddr=0x81;

for(i=0;i<7;i++)

{

ucCurtime[i]=uc_R1302(ucAddr);/*格式为:

秒分时日月

星期年*/

ucAddr+=2;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1