📄 ds1302.c
字号:
#include "DS1302.h"
#include <reg52.h>
#define uchar unsigned char
#define uchar unsigned char
/* -----------------------------------------------------------------------
*/
void rt_reset()//复位DS1302
{
DSCK = 0;
DSRST = 0;
DSRST = 1;
}
/* --------------------------------------------------------------------- */
void rt_wbyte(uchar W_Byte)//写一个字节的内容到ds1302 中
{
uchar i;
for(i = 0; i < 8; ++i)
{
DSIO = 0;
if(W_Byte & 0x01)
{
DSIO = 1; /* set port pin high to read data */
}
DSCK = 0;
DSCK = 1;
W_Byte >>= 1;
}
}
/* -----------------------------------------------------------------------
*/
uchar rt_rbyte()//从ds1302 中读一个字节的信息
{
uchar i;
uchar R_Byte;
R_Byte = 0x00;
DSIO = 1;
for(i=0; i<8; ++i)
{
R_Byte >>= 1;
DSCK = 1;
DSCK = 0;
if(DSIO){
R_Byte |= 0x80;
}
}
return R_Byte;
}
/* ----------------------------------------- */
void GetTime(struct time *p)//读DS1302 内部的时间信息,存在结构指针*p 中
{
rt_reset();
rt_wbyte(0xbf); /* clock burst read (eight registers) */
p->sec = rt_rbyte();//秒
p->minute = rt_rbyte();//分
p->hour = rt_rbyte();//时
p->date = rt_rbyte(); //date,星期
p->month = rt_rbyte();//月
p->week = rt_rbyte(); //day,日
p->year = rt_rbyte();//年
rt_rbyte(); /* must read control register in
burst mode */
rt_reset();
DSRST = 0;
}
/* ----------------------------------------- */
void SetTime(struct time *p)//将结构指针p 中的时间写入DS1302,更新其内部的时间
{
rt_reset();
rt_wbyte(0x8e); /* control register */
rt_wbyte(0); /* disable write protect */
rt_reset();
rt_wbyte(0x90); /* trickle charger register */
rt_wbyte(0xab); /* enable, 2 dDSIOdes, 8K resistor */
rt_reset();
rt_wbyte(0xbe); /* clock burst write (eight registers) */
rt_wbyte(p->sec);
rt_wbyte(p->minute);
rt_wbyte(p->hour);
rt_wbyte(p->date); //date
rt_wbyte(p->month);
rt_wbyte(p->week); //day
rt_wbyte(p->year);
rt_wbyte(0x80); /* must write control register in burst mode,enable write protect*/
rt_reset();
DSRST = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -