打印

DS1302的C5C程序源代码

[复制链接]
853|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bairan168|  楼主 | 2010-12-6 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
vivisa| | 2010-12-6 20:31 | 只看该作者
这个算不算: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=8i0i--)
{
T_IO=ACC0/* 相当于汇编中的RRC*/
T_CLK=1
T_CLK=0
ACC=ACC1
}
}
/********************************************************************
*
*名称:ucharuc_RTOutputByte
*说明:
*功能:从DS1302读取1Byte数据
*调用:
*输入:
*返回值:ACC
***********************************************************************/
ucharuc_RTOutputByte(void)
{
uchari
for(i=8i0i--)
{
ACC=ACC gt1/*相当于汇编中的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=8i0i--)/*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=8i0i--)
{
*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=31i0i--)/*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=31i0i--)/*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=7i0i--)
{
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=0i7i++)
{
ucCurtime[i]=uc_R1302(ucAddr) /*格式为:秒分时日月
星期年*/
ucAddr+=2
}
}

使用特权

评论回复
板凳
foreverly| | 2010-12-7 14:41 | 只看该作者
不错。二楼。

使用特权

评论回复
地板
al2913| | 2010-12-7 22:03 | 只看该作者
:lol支持二楼

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

776

帖子

2

粉丝