DS1302(51单片机)

本文详细介绍了DALLAS公司的DS1302实时时钟芯片的工作原理、特性,包括其RAM结构、三线接口、指令字节以及读写时序。重点讲解了如何通过BCD码表示时间信息的存储和读取过程。
摘要由CSDN通过智能技术生成

原理图和引脚

DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时钟电路,它

可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V~

5.5V。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节时钟信

或 RAM 数据。DS1302 内部有一个 31×8 的用于临时性存放数据的 RAM 寄存器

三根线

  • SCLK同步时钟
  • I/O数据输入输出
  • RST低电平使能

指令字节

对DS1302进行读写的指令字节共有8位,

第7位固定位“1”

第6位是选择位,1:选择存储RAM中的数据;0:日历时钟数据

第5~2位是地址

第1位是选择位,1:读操作;0:写操作

7

6

5

4

3

2

1

0

1

RAM

A4

A3

A2

A1

A0

1:RD

\tfrac{}{CK}

0:\frac{}{WR}

时序

写时序:

地址指令,后数据

void ds1302_write(unsigned char addr, unsigned char dat)
{

	unsigned char i;
	RST = 1;
    _nop_();
	
	//写入目标地址:addr
	addr = addr & 0xFE;     //最低位置零
    
	for (i = 0; i < 8; i ++) 
	{
        SDA = addr & 0x01;//从最低位开始
		addr >>= 1;
        SCLK = 1;
        _nop_();
        SCLK = 0;
        _nop_();
	}
	
	//写入数据:dat
	for (i = 0; i < 8; i ++) 
	{
        SDA = dat & 0x01;//从最低位开始
		dat >>= 1;
        SCLK = 1;
        _nop_();
        SCLK = 0;
        _nop_();
	}
	RST = 0;	//停止DS1302总线
    _nop_();
}

读时序:

地址指令,后数据

unsigned char ds1302_read(unsigned char addr)
{

	unsigned char i;
	unsigned char dat;
	RST = 1;
    _nop_();
	
	//写入目标地址:addr
	addr = addr | 0x01;//最低位置高
    
	for (i = 0; i < 8; i ++) 
	{
        SDA = addr & 0x01;
        addr >>= 1;
        SCLK = 1;
        _nop_();
        SCLK = 0;//下降沿,放置数据
        _nop_();
	}
	
    SCLK = 1;
    _nop_();
	//输出数据:dat
	for (i = 0; i < 8; i ++) 
	{
        dat >>= 1;
        if(SDA)
        {
            dat |= 0x80;
        }
        else
        {
            dat &= 0x7f;
        }
		SCLK = 0;
        _nop_();
        SCLK = 1;
        _nop_();
	}
SCLK = 0;
    _nop_();
	RST = 0;	//停止DS1302总线
_nop_();
//解决读取时间是ff的问题
	SDA = 0;	
return dat;
}

控制地址

读寄存器

写寄存器

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

范围

81h

80h

CH

10秒

00-59

83h

82h

10分

00-59

85h

84h

12/ \frac{}{24}

0

10

1-12/0-23

AM/\frac{}{PM}

87h

86h

0

0

10日

1-31

89h

88h

0

0

0

10月

1-12

8Bh

8Ah

0

0

0

0

0

周日

1-7

8Dh

8Ch

10年

00-99

8Fh

8Eh

WP

0

0

0

0

0

0

0

DS1302时间格式

什么是BCD码?

BCD码是一种数字编码,特点是像十进制,但其实本质还是十六进制。BCD码只有0-9没有ABCDEF字母

原理

四位二进制表示一位十进制0-9的数据。例如:12D表示成BCD码就是0001 0010

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值