-
51
单片机
ds1302
程序
void v_RTInputByte(uchar ucDa)
{
uchar i;
ACC = ucDa;
for(i=8; i>0; i--)
{
T_IO = ACC0;
//
相当于汇编中的
RRC
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/***************** ************************************************** *
*
*
名称
: uchar uc_RTOutputByte
*
说明
:
*
功能
:
从
DS1302
读取
1Byte
数据
*
调用
:
*
输入
:
*
返回值
: ACC
***************************** ******************************************/
uchar uc_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);
}
/****** ************************************************** ************
*
*
名称
: v_W1302
*
说明
:
先写地址,后写命令
/
数据
*
功能
:
往
DS1302
写入数据
*
调用
: v_RTInputByte()
*
输入
: ucAddr: DS1302
地址
, ucDa:
要写的数据
*
返回值
:
无
*** ************************************************** ******************/
void v_W1302(uchar ucAddr, uchar ucDa)
{
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 :
读取的数据
************* ************************************************** ********/
uchar uc_R1302(uchar ucAddr)
{
uchar ucDa;
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
码
) 1B 1B 1B 1B 1B 1B 1B 1B
*
返回值
:
无
********************************************** *************************/
void v_BurstW1302T(uchar *pSecDa)
{
uchar i;
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
码
) 1B 1B 1B 1B 1B 1B 1B
*
返回值
: ucDa :
读取的数据
**** ************************************************** *****************/
void v_BurstR1302T(uchar *pSecDa)
{
uchar i;
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;
-
-
-
-
-
-
-
-
本文更新与1970-01-01 08:00,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/553627.html
-
上一篇:没有了
下一篇:没有了