接口RTC模块(DS1307)与8051微控制器

在本文中,我们将看到如何接口一个RTC(实时时钟)模块到8051微控制器。市场上有不同种类的RTC模块。在本教程中,我们使用的是最常见的RTC模块,它与DS1307 IC、一个LCD模块和AT89S52(8051变体)一起提供。AT89S52是Atmel公司生产的典型的8051单片机。将RTC模块接口到8051微控制器非常简单。你只需要在RTC模块和8051之间做2个连接。所以让我们开始吧!

实时时钟8051

实时时钟模块基本上是一个时间跟踪装置,它给出当前的时间和日期。DS3231 IC自带的RTC模块具有设置报警功能。

关于DS1307 RTC模块的说明

在这里,我们使用基于I2C协议(二线协议)的时钟芯片DS1307的RTC模块。该模块提供了诸如秒、分钟、小时、星期的一天、月的一天、月和年的详细信息,包括对闰年的校正。它可以以12小时或24小时的格式运行。该模块的电流消耗为纳米安培范围。即使是3V电池也可以在没有任何外部电源的情况下,为它提供10年的精确时钟。

DS1307有一个64字节的内存区域,其中前8字节保留为RTC寄存器区域,其余56字节分配为通用RAM。有关当前、日期和时间的详细信息以二进制编码小数(BCD)的形式存储在其寄存器区域中。该模块使用一个名为I2C的串行通信协议与单片机进行通信。I2C总线物理上由2根有源导线组成。电线被称为SDAsci,都是双向的。SDA是串行数据线,SCL是串行时钟线。每一个连接到总线的设备都有自己唯一的设备地址,无论是MCU还是RTC模块。这些芯片中的每一个都可以作为接收器或发射器,取决于其功能。

DS1307将作为通信网络中的从机,控制器只能通过启动一个启动条件和一个设备地址来访问从机。之后,我们需要发送寄存器号以便访问里面的值。8051的接口是简单的I2C, SDA和SCL引脚连接到8051的任意两个引脚。在软件方面,我们使用名为“I2C”的用户定义库进行I2C通信。这个库允许您与I2C / TWI设备进行通信。

我希望到目前为止你能理解!让我们来看看电路图!下面给出了连接RTC模块到8051的电路图。

电路图- RTC接口与8051

实时时钟8051
电路图- RTC 8051接口

如图所示进行连接!现在让我们进入编码部分。

程序/代码的解释

下载程序-嵌入式C

用嵌入式C语言(使用Keil编译器)编写了用8051实现实时时钟的程序。

我们首先包括"LCD8bit"库进入程序。它是一个用户定义的库,用于在8位模式下将微控制器与LCD模块连接起来。在这个库中,我们包含了一些函数,用于初始化LCD,用于发送命令和发送要显示的数据。

连接到LCD的数据引脚和连接到命令引脚的端口可以在库本身配置。在这里,我们定义port0数据引脚,命令引脚分别为P3.5、P3.6和P3.7。

这里使用的另一个用户定义的库是“延迟"由命名为"Delay_ms ()”和“Delay_us ()”。Delay_ms(1000)将暂停程序1000毫秒(即。当我们需要暂停程序几微秒时,使用Delay_us(_)函数。

浏览我们的教程了解更多接口LCD模块到8051在4位模式和8位模式

在这个项目中,我们主要集中在RTC模块接口.如前所述,一个名为“I2C,用于I2C通信。的I2CStart ()函数将启动通信。I2CSend ()函数是否用于发送数据和I2Cread ()是用来读取寄存器的。

两个函数被命名为readAllReg ()”和“readSecReg ()在主程序中定义,用于从RTC模块读取时间细节。前者用于读取所有寄存器,后者用于单独读取“第二”寄存器。

在DS1307中,字节被存储为二进制编码的小数。因此,在将值写入寄存器之前,我们需要将其转换为BCD(二进制编码小数)。同样,从寄存器区读取值后,应该将其转换为小数。Dec_To_BCD ()是用于此的函数。

在从RTC模块读取值之前,我们必须立即设置时间和日期。用于这个的函数是凝固时间()函数。我们应该通过实际的时间细节作为参数。实际的格式是凝固时间(秒、分钟、小时、陶氏、dom,月,年);

在我们的项目中,我们在24小时模式下使用DS1307,然后我们在软件端将其转换为12小时模式。所以在传递参数时,时间细节应该是24小时模式凝固时间()函数。

注意:-在一次上传程序之后,您应该通过注释凝固时间()函数。否则,凝固时间()函数将破坏当前时间,而每次你重置微控制器。

一个函数命名displayTime ()用于在LCD上显示时间和日期。在函数内部,它会每隔一秒调用“readSecreg()”。“readAllReg()”函数每隔一分钟就会被调用一次。一个名为"一个[7]在程序开始时全局声明。“readSecReg()”和“readAllReg()”函数将分别以每一秒和每一分钟的时间周期性地更新这个数组元素。

作者

评论都关门了。

Baidu