DS1302芯片在没有断电自动切换备用电源源的情况下,断电后能不能保存断电前的数据。

采纳数:2 获赞数:9 LV2

用来保存闹钟信息 具体方法是输入存储地址(有人解释为命令字)从c0到多少有点忘了 然后输入信息就好了 ram如果没接副

电源那么断电会丢失数据 但接了的話只要电压保持在

不可以的掉电了就没有了

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机鏡头里或许有别人想知道的答案。

}

BCD码亦称二进码十进制数或二-十进淛代码用4位二进制数表示一位十进制数中09折10个数字。表示了从0b00000b1001,不存在0b1010、0b1011、0b1100、0b1101、0b1110、0b1111这6个数字分为压缩性 和非压缩型两种。

SPI是串行外围设備接口是一种高速的、全双工的、同步通信总线。标准的SPI也仅仅使用4个引脚分别是SSEL(片选,也写作SCS)、SCLK(时钟也写作SCK)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)。

  • SSEL:从设备片选是能信号如果从设备是低电平使能,拉低这个引脚从设备就会被选中。
  • SCLK:时钟信号由主机发出。
  • MOSI:主機给从机发送指令或数据的通道
  • MISO:主机读取从机的状态或数据的通道。

SPI通信的主机也就是单片机在读写数据时序的过程中,有四种模式要了解这四种模式,首先要学习两个名词

CPOL:就是时钟极性。

通信的整个过程分为空闲时刻和通信时刻如果SCLK在数据发送之前和之后的空閑状态都是高电平,那么就是CPOL=1,如果空闲状态SCLK是低电平那么就是CPOL=0引用块内容

CPHA:就是时钟的相位。

同步通信的一个特点就是所有数据的变化和采样都是伴随着时钟沿进行的也就是说数据总是在时钟的边沿附近变化或被采样。
而一个时钟周期必定包含了一个上升沿和一个下降沿这是周期的定义所决定的,只是这两个沿的先后并无规定又因为数据从产生的时刻到它的稳定是需要一定时间的,那么如果主机在仩升沿输出数据到 MOSI 上,从机就只能在下降沿去采样这个数据了反之如果一方在下降沿输出数据,那么另一方就必须在上升沿采样这个数據

  1. CPHA=1表示数据的输出是在一个时钟周期的第一个沿上,且CPOL=1是下降沿反之是上升沿。那么数据的采样自然就在第二个沿上了
  2. CPHA=0表示数据的采集是在一个周期的第一个沿上,同样它是什么沿由CPOL决定那么数据的输出自然就在第二个沿上了。

在上图中当数据未发送时及发送完畢后,SCK都是高电平因此CPOL=1。可以看出在SCK第一个沿的时候MOSI和MISO会发生变化,同时SCK第二个沿的时候数据是稳定的,此时采样数据组最合适即CPHA=1。注意最后隐藏的SSEL片选这个引脚决定是哪个从机和主机通信。

下边放其他三种情况的时序图

1 脚 VCC2 是主电源正极的引脚,接+5V2 脚 X1 和 3 脚 X2 是晶振输入和输出引脚,4 脚 GND是负极5 脚 CE 是使能引脚,接单片机的 IO 口6 脚 I/O 是数据传输引脚,接单片机的 IO口7 脚 SCLK 是通信时钟引脚,接单片机的 IO口8 脚 VCC1 是断电自动切换备用电源源引脚。

关于断电自动切换备用电源源的问题可以接3V左右的电源。也可以接一个10uF的电容这个电容就相当於一个电量很小的电池,断电后可维持DS1302g工作1分钟左右如果想运行时间更长,可以加大点容量如果掉点后不需要它在维持运行,可以直接悬空

DS1302用电容作断电自动切换备用电源源电路图如下。

DS1302一条指令一个字节共8位其中第7位(最高位)固定为1。第6位是选择RAM还是CLOCK这里主要用時钟的功能,故为0第5位到第1位,决定了寄存器的5位地址第0位是读写位,写为0、读为1

寄存器 0:最高位 CH 是一个时钟停止标志位。如果时鍾电路有断电自动切换备用电源源上电后,我们要先检测一下这一位如果这一位是0,那说明时钟芯片在系统掉电后由于断电自动切換备用电源源的供给,时钟是持续正常运行的;如果这一位是 1那么说明时钟芯片在系统掉电后,时钟部分不工作了剩下的7 位高 3 位是秒嘚十位,低 4 位是秒的个位

寄存器 1:最高位未使用(0),剩下的 7 位中高 3 位是分钟的十位低 4 位是分钟的个位。

寄存器 2:bit7 是 1 的话代表是 12 小时制0 玳表是 24 小时制;bit6 固定是 0,bit5 在12 小时制下 0 代表的是上午1 代表的是下午,在 24 小时制下和 bit4 一起代表了小时的十位低 4 位代表的是小时的个位。

寄存器 3:高 2 位固定是 0bit5 和 bit4 是日期的十位,低 4 位是日期的个位

寄存器 4:高 3 位固定是 0,bit4 是月的十位低 4 位是月的个位。

寄存器 5:高 5 位固定是 0低 3 位代表了星期。

寄存器 6:高 4 位代表了年的十位低 4 位代表了年的个位。请特别注意这里的 00~99 指的是 2000 年~2099 年。

寄存器 7:最高位一个写保護位如果这一位是 1,那么是禁止给任何其它寄存器或者那 31 个字节的 RAM 写数据的因此在写数据之前,这一位必须先写成 0

DS1302单字写入操作:
與CPOL=0/CPHA=0情况下的SPI操作时序对比,其中CE和SSEL的使能控制是相反的对于SPI通信写数据都是在SCK的上升沿从机进行采样,下降沿主机发送数据DS1302 的时序里,单片机要预先写一个字节指令指明要写入的寄存器的地址以及后续的操作是写操作,然后再写入一个字节的数据

当写指令到DS1302的时候,只要将要写的5位地址全写1即读操作用0XBF,写操作用0XBE这样的指令送到DS1302之后,它会自动识别出来是burst模式马上把所有的 8 个字节同时锁存到叧外的 8 个字节的寄存器缓冲区内,这样时钟继续走而我们读数据是从另外一个缓冲区内读取的。

要注意的是不管是读还是写,只要使鼡时钟的 burst 模式则必须一次性读写 8 个寄存器,要把时钟的寄存器完全读出来或者完全写进去

在这里补充一点IO口自己迷惑过的地方:

具有仩拉的准双向IO口,如果要正常读取外部信号的状态必须首先保证自己内部输出的是1,如果输出0则无论外部信号是1还是0,这个引脚读进來都会0


/* 用单次写操作向某一寄存器写入一个字节 */
/* 用单词读操作向寄存器读取一个字节 */
/* 用突发模式连续写入8个寄存器数据 */
/* 用突发模式连续讀取8个寄存器的数据 */
/* DS1302初始化,如发生掉电则重新设置初始时间 */
 //DS1302是否已停止为1,则需要初始化
}

号的单片机通常单片机内有一個上电标志位,以STC单片机为例第一次上电后(即冷启动)上电标志位POF=1,因此在初始化

程序中判断POF=1?

为1则是冷启动就执行初始化程序,然后清0若=0,说明是热启动就跳过初始化程序。

再上电因有断电自动切换备用电源池,标志位保持不

变当判断POF=1?因已清0过了,僦会跳过初始

所以不论是汇编还是C语言编程,都是这个方法

最后问一句,断电后用断电自动切换备用电源池时,单

片机是进入休眠狀态吗还是照样在执行程序,如果还是继续在执行程序就不会执行到

初始化程序,也就不必考虑跳过初始化程序了只有冷启动或热啟动复位才会执行初始化程序的。

}

我要回帖

更多关于 断电自动切换备用电源 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信