1.ds1302的性能指标
1)可以计算2100年之前的秒、分、时、日、星期、月、年,并且可以调整闰年。 2)内部有31个字节静态RAM,供用户访问 3)串行数据传送方式(SPI3线接口) 4)工作电压:2.0~5.5v 5) 工作电流:2v时,小于300nA(功耗低) 6)时钟或RAM数据的读写,有两种传送方式:单字节传送、多字节传送 7)主电源和负电源双电源供电(备份电源可以用电池或大电容实现)
2.SPI
1)spi的中文意思是“串行外围接口” 2)spi的应用场景:EEPROM,FLASH,实时时钟,AD转换器,数字信号处理器,数字信号解码器 3)spi接口是在CPU和外围低速器件之间进行同步串行数据传输。在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,全双工通信,数据传输速度总体比IIC快,速度可达到几Mbps。 4)spi接口工作方式:主从工作方式,通常是1个主器件及1个或多个从器件。包括4种信号:MOSI(主器件数据输出,从器件数据输入),MISO(主器件数据输入,从器件数据输出),SCLK(时钟信号,由主器件产生),/CS(从器件使能信号,由主器件控制) 5)补充:spi接口的内部硬件原理,首先它有一个时钟,这个时钟控制移位寄存器来移位,,,,,,,,,,,,,,,, 6)缺点:没有应答机制,不能确定是否接收到数据
3.ds1302硬件
X1和X2接晶振 复位引脚CE,低电平有效 SCLK:串行时钟输入引脚 vcc1工作电源引脚 vcc2备用电源引脚(接入电源断电时,备用电池供电)
4.ds1302的寄存器及片内RAM
ds1302内部包括1个控制寄存器,12个寄存器(7个与日历、时钟相关,存放的数据是BCD码形式)和31个RAM 1)控制寄存器 用于存放ds1302的控制命令字, ds1302的复位引脚回到高电平后写入的第一个字就是控制命令,控制着ds1302的读写过程**。下图是对控制字节的配置 D6=0,是时钟、日历寄存器 D6=1,是片内31个RAM
下面是日历、时钟寄存器 对于小时寄存器,D7为12/24小时的选择位。D7=1,即12小时制。D7=0,即24小时制。 在12小时模式下,D5=1是上午。D5=0是下午。D4为小时的时位。 在24小时模式下,D5和D4是小时的时位
对于秒寄存器,其CH位是时钟暂停位,为1则时钟暂停,为0则时钟启动。
写保护寄存器,WP为写保护位,WP=1写保护,WP=0未写保护。 对日历、时钟寄存器、片内RAM写时,WP清零。 对日历、时钟寄存器、片内RAM读时,WP置1。
片内RAM
IO输入输出
代码的实现
(1) main() 初始化时钟芯片 处理数据 显示数据
(2) 初始化 首先看一下Ds1302write(0x8E,0x00); 它是通过配置CE SCLK IO的高低电平(即时序)来实现写入数据的。 那么Ds1302write(0x8E,0x00);的参数代表什么意义呢? 对于0x8E 需要看一下写保护寄存器的配置 若想对该寄存器实现写操作, 则要配置控制命令为1000 1110用16进制表示成0x8E。 若想对该寄存器实现读操作(不可写), 则要配置控制命令为1000 1111用16进制表示成0x8F。 这里提到的控制命令是指“ds1302的复位引脚回到高电平后写入的第一个字就是控制命令,控制着ds1302的读写过程**。” ds1302的复位引脚回到高电平后写入的第二个字就是具体的数据 也就是说第一个字节是寄存器的地址,第二个字节是寄存器的模式 若想配置“写保护寄存器”,首先输入0x8E。 紧接着配置寄存器 配置寄存器时,按下图要求配置 写保护寄存器,WP为写保护位,WP=1写保护,WP=0未写保护。 对日历、时钟寄存器、片内RAM写时,WP清零。 对日历、时钟寄存器、片内RAM读时,WP置1。 所以配置的数据应该为0x00 这就解释了Ds1302write(0x8E,0x00);的两个参数 到这里就完成了关闭写保护(即可以向寄存器写值) 关闭写保护之后,就要向具体的“分-秒-时-日-月-周-年”寄存器写入数据。 分-秒-时-日-月-周-年一共是7份数据 这就解释了为什么要循环7次 代码中写入的是 Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); WRITE_RTC_ADDR[n]是寄存器地址 TIME[n]是具体的值 uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; uchar TIME[7] = {0, 0, 0x15, 0x23, 0x09, 0x04, 0x21};
对于各寄存器地址 注意,写的时候D0配置为0 写入时 秒:1000 0000即0x80 分:1000 0010即0x82 时:1000 0100即0x84 日:1000 0110即0x86 月:1000 1000即0x88 周:1000 1010即0x8a 年:1000 1100即0x8c
读取时 秒:1000 0001即0x81 分:1000 0011即0x83 时:1000 0101即0x85 日:1000 0111即0x87 月:1000 1001即0x89 周:1000 1011即0x8b 年:1000 1101即0x8d 日期
|