【51单片机系列】DS1302时钟模块 本文是关于DS1302时钟芯片的相关介绍。 一、 DS1302时钟芯片介绍 DS1302是DALLAS公司推出的涓流充电时钟芯片,内部含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。该芯片是3线SPI接口。 实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可以自动调整。 时钟操作通过AM/PM只是决定采用24或12小时格式。 DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需要用到三根通信线: ① RES复位;② I/O数据线;③ SCLK串行时钟。 时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。 DS1302工作时功耗很低,保持数据个时钟信息时功率小于1mW。 DS1302的双电源管脚用于主电源和备份电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器。它广泛应用与电话、传真、便携式仪器以及电池供电的仪器仪表等产品领域下面。 DS1302主要的性能指标:实时时钟具有能计算2100年之前的秒、分、时、日、周、月、年的能力,还有闰年调整能力。31个8位暂存数据存储RAM。串行I/O口方式使得管脚数量最少。宽范围工作电压3.0~5.5V。工作在2.0V时,电流小于300nA。读/写时钟或RAM数据时有两种传送方式:单字节传送和多字节传送方式。8脚DIP封装或可选的8脚SOIC封装根据表面装配。简单3线接口。与TTL兼容Vcc=5V。可选工业级温度范围-40~+85。具有涓流充电能力。采用主电源和备份电源双电源供应,备份电源可用电池或大容量电容实现。 DS1302芯片管脚如下:
DS1302管脚 芯片管脚功能:管脚名称管脚标号说明Vcc21备用电源引脚,接入电池断电时提供1302电源X1、X22、3外部晶振引脚,通常需要外接32.768K晶振GND4电源地CE5使能引脚,也是复位引脚RST,低电平有效,操作时置为高电平I/O6串行数据引脚,数据输出或输入都使用该引脚,具有三态功能SCLK7串行时钟引脚Vcc18工作电源引脚 二、DS1302的使用 操作DS1302的大致过程,就是将各种数据写入DS1302的寄存器,来设置它当前的时间的格式;然后使DS1302开始运作,DS1302时钟会按照设置情况运转,再用单片机将其寄存器内的数据读出;最后用液晶显示,就是常说的简易电子时钟。 简单来说DS1302的操作分2步,显示部分属于液晶显示的内容,不属于DS1302本身的内容。 首先了解下寄存器,DS1302有一个控制寄存器、12个日历/时钟寄存器和31个RAM。 2.1、DS1302的控制寄存器 控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字节为控制命令,它用于对DS1302读写过程进行控制,格式如下:RAM/CKA4A3A2A1A0RD/WR第7位固定是1。第6位,1表示片内RAM;0表示日历、时钟寄存器选择位。第5到1位,地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。第0位,1表示RD,即下一步的操作是读;0表示WR,即下一步的操作是写。 第5到1位取值代表的RAM或寄存器如下表所示。根据下表可以知道,如果要读秒寄存器,命令为1000 0001,如果要写秒寄存器命令为1000 0000。寄存器名称D71D6RAM/CKD5A4D4A3D3A2D2A1D1A0D0RD/WR寄存器值秒寄存器或180H/81H分寄存器或182H/83H时寄存器或184H/85H日寄存器或186H/87H月寄存器或188H/89H星期寄存器或18AH/8BH年寄存器或18CH/8DH写保护寄存器或18EH/8FH慢充电寄存器或190H/91H时钟突发模式或1BEH/BFHRAM0或1C0H/C1H…11……………0或1…RAM或1FCH/FDHRAM突发模式或1FEH/FFH 2.2、DS1302的日历/时钟寄存器 DS1302共有12个寄存器,其中7个与日历、时钟有关,存放的数据为BCD码形式,格式如下:寄存器名称取值范围D7D6~D4D3~D0秒寄存器00~59CH秒的十位秒的个位分寄存器00~590分的十位分的个位时寄存器01 ~ 12或00 ~ 2312或24D6-D5-D40-A/P-HR时的个位日寄存器01~310D6-D5D40-日的十位日的个位月寄存器01~120D6-D5-D40-0-1或0月的个位周寄存器01~070D6-D5-D40-0-0星期几年寄存器01~99年的十位年的十位年的个位写保护寄存器WP0-0-00-0-0-0慢充电寄存器TCSTCS-TCS-TCSDS-DS-RS-RS时钟突发寄存器 寄存器说明: 秒寄存器:低四位为SEC,高的次三位为10SEC。CH位为时钟暂停位,当CH=1时,时钟暂停,CH=0时,时钟开始启动。 时寄存器:最高位为12/24小时的格式选择位,1表示12小时格式,0表示24小时格式; 当设置为12小时显示格式时,D5的高电平表示上午AM,D5低电平表示下午PM; 当设置为24小时格式时,D5、D4表示小时的十位。 写保护寄存器:最高位WP为1时,DS1302只读不写,一般在往DS1302写数据之前确保WP为0。 慢充电寄存器:TCS位为控制慢充电的选择,当为1010时才能使慢充电工作。 DS为二极管选择位。DS=01表示选择一个二极管,DS=10表示选择二个二极管,DS=11或00表示充电器被禁止,与TCS无关。 RS用于选择连接在Vcc2和Vcc1之间的电阻,RS=00,充电器被禁止,与TCS无关,电阻选择如下:RS位电阻器阻值00无无01R12K10R24K11R38K 从DS1302中读取出来的时钟数据均为BCD码格式,需要转换为习惯的十进制。 BCD码是通过4位二进制码来表示1位十进制中的0~9这10个数码。 二进制码转换为BCD码的方式为:4位二进制码大于1001时,加6。比如BCD码00001100的二进制码为:00001100+6=0010010。 如下所示: 十进制码二进制码0000000 2.3、片内RAM DS1302片内有31个RAM单,对片内RAM的操作方式有两种:单字节方式和多字节方式。 当控制命令字位C0H~FDH时为单字节读写方式,命令字中的D5 ~ D1用于选择对应的RAM单。 当控制命令字为FEH、FFH时为多字节操作,表中的RAM突发模式,多字节操作可一次把所有的RAM单内容进行读写。FEH为写操作,FFH为读操作。 2.4、DS1302的读写时序 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位开始。在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位到高位。时序图如下。DS1302通过SPI串行总线跟单片机通信,当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是CLOCK寄存器操作。第二个字节是要读或要写的数据。单字节读写,只有在SCLK为低电平时,才能将CE置为高电平。所以在进行操作之前需要先将SCLK置低电平,然后将CE置为高电平,接着开始在IO上放入要传送的电平信号。然后跳变SCLK。数据在SCLK上升沿时,DS1302读写数据,在SCLK下降沿时,DS1302放置数据到IO上。
DS1302读写时序 上图是DS1302的三个时序:复位时序、单字节写时序、单字节读时序。 CE(RST):复位时序,在RST引脚产生一个正脉冲,在整个读写期间,RST保持高电平,一次字节读写完毕后,把RST返回低电平准备下次读写周期。 单字节读时序:读之前要先对寄存器写命令,从最低位开始写;可以看到,写数据时在SCLK的上升沿实现,读数据在SCLK的下降沿实现。在单字节读时序中,写命令的第八个上升沿结束后紧接着的第八个下降沿就将要读寄存器的第一位数据读到数据线上了。读出来的数据也是最低位开始。 单字节写时序:两个字节的数据配合16个上升沿将数据写入即可。 需要注意的是:在操作DS1302之前需要关闭写保护。用延时来降低单片机的速度以配合器件时序。DS1302读出来的数据是BCD码形式,要转换成常用的10进制。读取字节之前,将IO设置为输入口,读取完之后,将IO改回输出口。写程序时,建议开辟数组集放置DS1302的一系列数据,方便扩展键盘输入。 三、SPI总线介绍 SPI,Serial Peripheral Interface,串行外围接口。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,可达几Mbps。 SPI接口以主从方式工作,这种方式下通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:MOSI——主器件数据输出,从器件数据输入;MISO——主器件数据输入,从器件数据输出;SCLK——时钟信号,由主器件产生;/CE——从器件使能信号,由主器件控制;
SPI接口 SPI接口内部硬件如下:
SPI接口内部硬件图 SPI没有指定的流控制,没有应答机制确认是否接收到数据。 四、DS1302使用示例 本示例实现的功能是:系统运行时,数码管上显示电子时钟,格式为”xx-xx-xx”。 使用到的资源有数码管以及DS1302时钟芯片,DS1302时钟模块设计如下,DS1302芯片的控制管脚接至单片机的P3.4~P3.6口上,在芯片的X1、X2管脚处外接了一个32.768KHz晶振,为时钟运行提供一个稳定的时钟频率。
proteus中DS1302时钟模块 软件实现,按照上面介绍的时序编写DS1302的读、写时序代码,如下: 在读取之前需要对DS1302初始化,写入设置的时间,然后可以读取时间,代码如下: 主程序中,数据处理函数中读取时间,并将时间处理后赋值给显示数据的数组,如下 数码管显示函数与温度传感器使用示例中类似。主函数如下: 第一次初始化仿真结果:
初始化时钟芯片 当注释调初始化函数时,会显示当前时间,如下:
注释初始化函数显示当前时间
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/28040.html