2025年51单片机时钟电路原理(51单片机时钟电路原理图)

51单片机时钟电路原理(51单片机时钟电路原理图)单片机常用的通信协议有三种 SPI UART I2C SPI Serial Peripheral Interface 串行外围设备接口 是一种 全双工 同步 的通信总线 常用于单片机与 EEPROM FLASH 实时时钟 数字信号处理器等器件的通信 通信原理 主从方式 标准 SPI 一共有四条线 SSEL



单片机常用的通信协议有三种:SPI,UART,I2C

SPI:Serial Peripheral Interface 串行外围设备接口,是一种全双工,同步的通信总线

常用于单片机与EEPROM,FLASH,实时时钟,数字信号处理器等器件的通信

通信原理:主从方式,标准SPI一共有四条线:

SSEL:从设备片选使能信号,如果从设备是低电平使能,当拉低这个引脚时,从设备就会被选中

SCLK:时钟信号,主机产生,类似于I2C的SCL

MOSI:主机给从机发送指令或者数据的通道

MISO:主机读取从机的状态或者数据的通道

补充:CPOL:Clock Polarity 时钟极性,如果SCLK在空闲时刻的空闲状态是高电平,那么CPOL=1,如果SCLK空闲状态是低电平,那么CPOL = 0

CPHA: Clock Phase 时钟相位

如果主机在上升沿输出数据,从机就只能在下降沿采样这个数据

CPHA = 1:就表示数据的输出是在一个时钟周期的第一个沿上,至于这个沿是上升沿还是下降沿,这要视 CPOL 的值而定, CPOL=1 那就是下降沿,反之就是上升沿。那么数据的采样自然就是在第二个沿上了

CPHA=0,就表示数据的采样是在一个时钟周期的第一个沿上,同样它是什么沿由 CPOL决定。那么数据的输出自然就在第二个沿上了。
以CPOL=1 CPHA =1为例:(SCLK空闲时是高电平,在下降沿时数据输出,在上升沿时数据采样)

SCK第一个沿到来时MOSI和MISO都发生变化

SCK第二个沿到来时MOSI和MISO都不变,采样数据很稳定

注意:数据采样时MOSI和MISO一定是稳定的,发送数据时一定是不稳定的

1、 DS1302 是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软件自动调整的能力,可以通过配置 AM/PM 来决定采用 24 小时格式还是 12 小时格式。

2、拥有 31 字节数据存储 RAM。

3、串行 I/O 通信方式,相对并行来说比较节省 IO 口的使用。

4、 DS1302 的工作电压比较宽,在 2.0~5.5V 的范围内都可以正常工作。

5、 DS1302 这种时钟芯片功耗一般都很低,它在工作电压 2.0V 的时候,工作电流小于300nA。

6、 DS1302 共有 8 个引脚,有两种封装形式,一种是 DIP-8 封装,芯片宽度(不含引脚)是 300mil,一种是 SOP-8 封装,有两种宽度,一种是 150mil,一种是 208mil。

1:VCC2 主电源正极引脚

2,3:晶振输入与输出引脚

4:GND

5:CE 使能引脚,接单片机IO口

6:数据传输引脚,接单片机IO口

7:SCLK通信时钟引脚

8:VCC1 备用时钟引脚(可以选择,如果选择就要加一个备用电源,在掉电时还是可以正常工作)

DS1302寄存器介绍:

先来说一下DS1302的一条指令,一共8位(1个字节)

7:固定为1

6:选择RAM功能还是时钟功能(DS1302可以当作RAM使用)

1到5:决定了寄存器的五位地址

0:读写位,如果是1就是一条要求读的指令,如果是0那就是一条要求写的指令

接下来再说寄存器:

一共有8个与时钟有关的寄存器,

寄存器0:最高位用来判断时钟在掉电以后是否正常运行,剩下的7位中,高三位是秒的10位(最大是5,也就是101,所以三位足够了),低四位是秒的个位(最大是9,1001)

注意:这些数字全部是BCD码

寄存器1:低七位中高三位是分的10位,低四位是分的个位

寄存器2:bit7是1代表12小时制,0代表24小时制

bit6固定为0,bit5在12小时制下0代表上午,1代表下午   24 小时制下和 bit4 一起代表了小时的十位(12小时制下小时的十位只有0或1,24小时制下是0,1,2)

低四位表示秒

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

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

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

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

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

DS1302通信时序介绍:

三根线,分别是 CE、 I/O 和 SCLK,DS1302的通信是SPI的变异种类
对比一下SPI通信 和DS1302与单片机之间的数据传输:

对于SPI通信,在CPOL = 0 且CPHA = 0的时候,上升沿从机进行数据采样,下降沿主机输出数据

(或者上升沿主机进行数据采样,下降沿从机输出数据)

对于DS1302,先发送一个指令,这个指令就已经告知选择RAM功能还是时钟功能,以及要操作的寄存器的五位地址,以及对这个进行读操作或是写操作,进行写操作时,就将8个位的数据写入      注意同样是在上升沿时DS1302作为从机进行数据采样

同理,再读数据时,在上升沿时DS1302作为从机先读取指令,在下降沿时输出数据

注意:SPI通信协议与DS1302的通信协议还是不完全相同的,单片机没有标准的SPI接口,只能用IO口模拟通信过程(所以数据读取和时钟沿变化不可能同时),必须要先读取IO口上的数据,再拉高SCLK产生上升沿(主机在接收数据时一定是上升沿)

先来一个简单的Lcd时钟,可以显示现在的年月日星期,以及时分秒

只写出main.c文件的代码,Lcd1602.c的代码请翻阅以前的博客:

 
 

上面的程序存在一个问题,比如当从00:00:59变到00:01:00的过程中,先读秒读到了59,然后下一个瞬间读分读到了1,就会显示00:01:59,一个时间很短的bug

为解决这个问题,要用到DS1302的突发模式,我们只将时钟的突发模式 clock Burst mode

如何触发BURST模式:

在给DS1302写指令时将5位地址全部都写成1即可

写数据时:10111110,即0xBE

读数据时:10111111,即0xBF

这样的指令会被DS1302自动识别为BURST模式

如果现在是在读操作,时钟现在的8个寄存器这8个字节会被锁存到另外一个缓冲区内,我们再从这个缓冲区中一次读取8个字节的数据

如果现在是写操作,就会将8个字节的数据全部写到缓冲区内,然后一次输入到8个寄存器中

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

下面展示一下BURST模式的时钟:

 

编程小号
上一篇 2025-02-16 19:30
下一篇 2025-01-26 22:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/35718.html