本应用笔记提供了如何将DS1307实时时钟(RTC)连接至微控制器的信息,并提供了一些访问该器件的示例代码。
介绍
DS1307串行实时时钟集成了2线串行接口,可使用兼容8051的微控制器进行控制。本例中的DS1307直接连接到DS5000微控制器上的两个I/O端口,2线握手由低电平驱动器处理,本应用笔记对此进行了讨论。
DS1307 说明
DS1307串行实时时钟为低功耗、全BCD时钟/日历外加56字节非易失性SRAM。地址和数据通过2线双向总线串行传输。时钟/日历提供秒、分钟、小时、星期、日期、月份和年份信息。对于少于 31 天的月份,月末日期会自动调整,包括对闰年的更正。时钟以 24 小时制或 12 小时制运行,带 AM/PM 指示器。DS1307内置电源检测电路,可检测电源故障并自动切换到电池供电。
DS1307 工作原理
DS1307作为串行总线上的从器件工作。通过实现 START 条件并提供设备标识码后跟寄存器地址来获取访问权限。后续寄存器可以按顺序访问,直到执行 STOP 条件。启动和停止条件是使用随附的DS5000代码中的低电平驱动器、SEND_START和SEND_STOP生成的。此外,子程序SEND_BYTE和READ_BYTE提供在DS2之间写入和读取8位字所需的1307线握手。
硬件配置
系统配置如图 1 所示。DS1307的2线总线连接到DS5000的两个I/O端口引脚:SCL - P1.0、SDA - P1.1。五世DD电压为5V,RP= 5KΩ,DS5000采用12 MHz晶体。另一个外围设备可以是识别2线协议的任何其他设备,例如DS1621数字温度计和恒温器。与D5000的接口是使用DS5000T套件硬件和软件完成的。该开发套件允许将PC用作哑终端,使用DS5000的串行端口与键盘和显示器进行通信。
图1.典型的2线总线配置。
定义了以下总线协议(参见图 2)。
在数据传输过程中,只要时钟线为高电平,数据线必须保持稳定。时钟线为高电平时数据线的变化将被解释为控制信号。
因此,定义了以下总线条件:
开始数据传输:当时钟线为高电平时,数据线的状态从高电平到低电平的变化定义了START条件。
停止数据传输:当时钟线为高电平时,数据线的状态从低到高的变化定义了 STOP 条件。
数据有效:当在START条件之后,数据线在时钟信号的高周期内保持稳定时,数据线的状态表示有效数据。线路上的数据必须在时钟信号的低电平期间更改。每个数据位有一个时钟脉冲。
每个数据传输都以 START 条件启动,并以 STOP 条件终止。在 START 和 STOP 条件之间传输的数据字节数不受限制,由主设备决定。信息按字节传输,每个接收器用第九位确认。
确认:每个接收设备在寻址时,都必须在接收每个字节后生成确认。主设备必须生成与此应答位关联的额外时钟脉冲。
确认的器件必须在确认时钟脉冲期间拉下SDA线,以使SDA线在确认相关时钟脉冲的高电平期间稳定为低电平。当然,必须考虑设置和保持时间。主站必须通过不从站输出的最后一个字节上生成应答位来向从站发出数据结束信号。在这种情况下,从机必须将数据线保持高电平,以使主站能够产生STOP条件。
图2详细介绍了如何在2线总线上完成数据传输。根据 R/W位的状态,可以进行两种类型的数据传输:
从主发射器到从接收器的数据传输。主站传输的第一个字节是从地址。接下来是一些数据字节。从站在每个接收到的字节后返回一个应答位。首先使用最高有效位 (MSB) 传输数据。
从从发射器到主接收器的数据传输。第一个字节(从地址)为 由主人传输。然后,从站返回一个应答位。接下来是从站传输多个数据字节。主站在所有接收到的字节(最后一个字节除外)之后返回一个应答位。在最后一个接收的字节的末尾,返回不确认。
图2.2线串行总线上的数据传输。
主器件生成所有串行时钟脉冲以及启动和停止条件。传输以“停止”条件或重复的“开始”条件结束。由于重复的 START 条件也是下一次串行传输的开始,因此不会释放总线。首先使用最高有效位 (MSB) 传输数据。
DS1307可以工作在以下两种模式:
从接收模式(DS1307写入模式):串行数据和时钟通过SDA和SCL接收。接收到每个字节后,将发送一个应答位。启动和停止条件被识别为串行传输的开始和结束。地址识别由硬件在接收到从地址和方向位后执行(参见图3)。地址字节是主站生成启动条件后收到的第一个字节。地址字节包含7位DS1307地址,即1101000,后跟方向位(R//W),对于写入,方向位为0。接收并解码地址字节后,DS1307在SDA线路上输出应答。DS1307确认从地址+写位后,主机向DS1307发送寄存器地址。这将设置DS1307上的寄存器指针。然后,主机开始发送每个字节的数据,DS1307确认接收到的每个字节。主站将生成停止条件以终止数据写入。
从发送器模式(DS1307读取模式):第一个字节的接收和处理方式与从机接收机模式相同。但是,在此模式下,方向位将指示传递方向相反。串行数据由DS1307在SDA上传输,而串行时钟由SCL输入。START 和 STOP 条件被识别为串行传输的开始和结束(请参阅图 4)。地址字节是主站生成启动条件后收到的第一个字节。地址字节包含7位DS1307地址,即1101000,后跟方向位(R/W),读取时为1。接收并解码地址字节后,DS1307在SDA线路上输入确认。然后,DS1307从寄存器指针指向的寄存器地址开始发送数据。如果在启动读取模式之前未写入寄存器指针,则读取的第一个地址是寄存器指针中存储的最后一个地址。DS1307必须由主机发送一个非应答位以终止读操作。
图4.数据读取—从发送器模式。
软件操作
DS5000 接口
附录1中的软件用于通过5000线接口将DS1307与DS2连接。DS5000使用达拉斯半导体公司的DS5000T评估板进行编程,该评估板允许将PC用作哑终端。DS5T评估套件随附的KIT5000K软件环境提供了一个高级接口,用于将应用软件加载到DS5000或通过程序命令设置其配置参数。KIT5K软件包括一个哑终端仿真器,允许用户在DS5000中运行应用软件,通过PC COM端口与用户通信。
DS1307 源代码
附录中代码的第一部分用于配置DS5000与PC进行串行通信。代码的开头还有用于控制演示软件的MASTER_CONTROLLER子例程。
紧跟在MASTER_CONTROLLER子程序之后的子程序是用于控制2线接口的低级驱动器。它们不是DS1307特有的,但可以与任何2线兼容的从器件配合使用。这些子例程是:
SEND_START
此子例程用于在 2 线总线上生成启动条件。
SEND_STOP
此子例程用于在 2 线总线上生成 Stop 条件。
SEND_BYTE
此子例程通过 8 线总线发送一个 2 位字 MSB,优先级为 9千确认脉冲的时钟脉冲。
READ_BYTE
此子例程通过 8 线总线读取 2 位字。它检查要清除的 LASTREAD 标志,指示何时从从设备进行最后一次读取。如果不是最后一次读取,DS5000在9千时钟,如果这是从设备最后一次读取,DS5000发送“未确认”。
SCL_HIGH
此子例程将 SCL 线路从低到高转换,并确保 SCL 线路在继续之前处于高电平。
延迟和DELAY_4
包括这两个子程序是为了确保保持2线总线时序。
附录中的其余代码专门用于演示DS1307的功能。演示的功能包括:
设置时间
时间从键盘读入并存储在DS5000暂存器存储器中。然后通过2线接口传输到DS1307。
设置内存
从键盘读入单个十六进制字节,并写入DS1307的整个用户RAM。
读取日期/时间
日期和时间通过2线总线读取,并存储在DS5000暂存器存储器中。然后将其写入屏幕。这一直持续到按下键盘上的键为止。
读取内存
DS1307的整个用户RAM被读入DS5000暂存器存储器,然后写入PC监视器。
OSC 开/关
DS1307时钟振荡器可以打开或关闭。
SQW/OUT On/ SQW/OUT Off
可以打开或关闭 SQW/OUT。它将以 1 Hz 切换。
结论
已经表明,将DS1307或任何其他2线从器件连接到8051兼容微控制器非常简单。唯一需要注意的是,微控制器上的低电平驱动器不会违反2线定时规范。为此,已将延迟子例程插入到代码中。表1中的值是在用于开发本应用笔记的硬件设置中观察到的实际时序参数。
参数 | 象征 | 实际 | 单位 |
标准及校正实验所时钟频率 | fSCL | 59 | 千 赫 |
停止和启动条件之间的巴士空闲时间 | tBUF | 5.7 | 微秒 |
保持时间(重复)启动条件 | tHD:STA | 6.2 | 微秒 |
标准及校正实验所时钟的低周期 | tLOW | 10.5 | 微秒 |
标准及校正实验表时钟的高周期 | tHIGH | 6.5米 | 微秒 |
重复启动条件的设置时间 | tSU:STA | 5.3 | 微秒 |
数据保持时间 | tHD:DAT | 5.5 | 微秒 |
数据设置时间 | tSU:DAT | 3.1 | 微秒 |
停止条件的设置时间 | tSU:STO |
5.4 | 微秒 |
图3.数据写入—从接收机模式。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !