当前位置: 首页 > news >正文

十二、51单片机之DS1302

1、DS1302简介

(1)详情查看数据手册。

(2)管角描述

管教名称功能
1Vcc2双供电配置中的主电源供电引脚
2X1与标准的32.768kHz晶振相连。用于ds1302记时。
3X2
4GND电源地
5CE输入信号,CE信号在读写时必须保持高电平
6I/O输入/推挽输出I/O,是三线接口的双向数据管脚
7SCLKds1302与单片机通信的时钟信号
8Vcc1电源引脚

(3)ds1302采用SPI数字接口。

(4)ds1302内部存储着一个时间点信息(年月日时分秒周几),可读可写,上电时间自动走。

2、RTC相关知识

(1)RTC指real time clock,实时时钟的意思。

(2)时间点和时间段,时间点是xx年xx月xx日xx时xx分xx秒,时间段是一定长度的时间。

(3)RTC用于提供时间点,定时器用于提供时间段。

(4)RTC存在形式:单片机内部集成或单片机外部扩展。

3、SPI接口

(1)分为三线或者四线。

(2)三线:CE、SCLK、I/O。

(3)四线:CE、SCLK、输入、输出。

4、DS1302的时间格式

4.1、8421BCD码

(1)ds1302读出的时间是按照8421BCD码表示的。

(2)8421BCD码是一种数字编码,很像10进制和16进制的结合。

(3)8421BCD码看起来很像10进制(29往下是30而不是2A)。

(3)BCD码本质上又是16进制(BCD码的21在计算机中就是0x21)。

(4)BCD码用4位二进制数来表示十进制数中的0~9这10个数码。

4.2、BCD码的意义

(1)计算机喜欢16进制,而人喜欢10进制,BCD码综合了两者的考量。

4.3、ds1302年份

(1)ds1302直接读出的年(BCD编码)+2000就是当前的年份。

(2)譬如读出的BCD码16,对应0x16所以就是2016年。

4.4、十进制转换为8421BCD码

(1)十进制84转为8421BCD码为0x84。

(2)计算方式(84/10)*16+84%10

5、代码出现的问题及解决

问题: 串口打印时间时会出现一些FF。

解决方法:

(1)硬件上在IO线上设置10K的电阻做弱上拉处理。

(2)如果没有做弱上拉,也有办法解决。在代码的读取寄存器时序之后,加一个将IO置为低电平的代码进去,就可以了。(见如下代码ds1302.c中Ds1302ReadByte函数)。

6、代码

(1)ds1302代码

ds1302.c文件

#include "ds1302.h"
#include <reg52.h>
#include <intrins.h>sbit DS_IO	 = P3^4;
sbit DS_CE   = P3^5;
sbit DS_SCLK = P3^6;
/*DS1302写入和读取时分秒的地址命令*/
uchar code  Read_RTC_Addr[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8B, 0x8D};
uchar code Write_RTC_Addr[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C};
/*存储顺序是秒分时日月周年,存储格式是用BCD码*/
uchar TIME[7] = {0, 50, 0x21, 0x16, 0x03, 0x04, 0x23};/**功能:向ds1302写命令(地址+数据)*参数:addr :地址value:数据*返回值:无*/
void DS1302_WriteByte(unsigned char addr, unsigned char value)
{unsigned char i = 0;DS_CE = 0;_nop_();DS_SCLK = 0;_nop_();DS_CE = 1;_nop_();for(i = 0; i < 8; i++){DS_IO = (addr >> i) & 0x01;		/*SPI由低位开始传输*/DS_SCLK=1;_nop_();DS_SCLK=0;_nop_();}for(i = 0; i < 8; i++){DS_IO = (value >> i) & 0x01;DS_SCLK = 1;_nop_();DS_SCLK = 0;_nop_();}DS_CE = 0;_nop_();
}/**功能  : 读取一个地址的数据*参数  : addr*返回值: Data*/
unsigned char Ds1302ReadByte(unsigned char addr)
{unsigned char i    = 0;unsigned char Data = 0;DS_CE = 0;_nop_();DS_SCLK = 0;_nop_();DS_CE = 1;_nop_();for(i = 0; i < 8; i++){DS_IO = (addr >> i) & 0x01;    /*数据从低位开始传送*/DS_SCLK = 1;                   /*数据在上升沿时,DS1302读取数据*/_nop_();                       /*延时*/DS_SCLK = 0;                   /*DS1302下降沿时,放置数据*/_nop_();}for(i = 0; i < 8; i ++)          /*读取8位数据*/{if(DS_IO == 1){Data |= (0x01 << i);         /*从最低位开始接收*/}DS_SCLK = 1;_nop_();DS_SCLK = 0;                   /*DS1302下降沿时,放置数据*/_nop_();}DS_CE = 0;_nop_();	DS_IO = 0;   /*为了解决FF出现的问题*/return Data;	
}/**功能:读取时钟信息*参数:无*返回值:无*/
void Ds1302ReadTime()
{unsigned char i = 0;for(i = 0; i < 7; i++)	/*读取7个字节的时钟信号:分秒时日月周年*/{TIME[i] = Ds1302ReadByte(Read_RTC_Addr[i]);}
}	/**功能:设置初始时间*参数:无*返回值:无*/
void DS1392SetTime(void)
{unsigned char i = 0;DS1302_WriteByte(0x8E,0x00);  /*关闭写保护*/for(i = 0; i < 7; i++){DS1302_WriteByte(Write_RTC_Addr[i],TIME[i]);  /*TIME为8421BCD码]*/}DS1302_WriteByte(0x8E,0x80);  /*打开写保护*/
}

ds1302.h文件

#ifndef _DS1302_H_
#define _DS1302_H_#define uchar unsigned charextern uchar TIME[7];void DS1302_WriteByte(unsigned char addr, unsigned char value);  /*向ds1302写命令(地址+数据)*/  
unsigned char Ds1302ReadByte(unsigned char addr);                /*读取一个地址的数据*/
void Ds1302ReadTime();                                           /*读取时钟信息*/
void DS1392SetTime(void);                                        /*设置初始时间*/#endif

(2)串口代码

drv_uart.c文件

#include "drv_uart.h"
#include <reg52.h>
#include <intrins.h>/**功能:串口初始化函数,8数据位,1停止位,无校验位,波特率4800*参数:无*返回值:无*/
void UartInit(void)
{SCON = 0x50;  //串口工作在模式1,8位数据位,允许串行接收PCON = 0x80;  //波特率加倍TMOD = 0x20;  //设置T1为模式2 TH1 = 243;    //波特率4800	,TH1 = 晶振频率/12/32/波特率TL1 = 243;    //8位自动重装,意识是TH1用完了之后下一个周期TL1会自动重装到TH1去。TR1 = 1;      //开启定时器1ES = 1;       //打开串口中断EA = 1;       //打开总中断
}/**功能:通过串口发送一个字节数据*参数:需要发送的内容*返回值:无*/
void UartSendByte(unsigned char Dat)
{SBUF = Dat;      //准备好需要发送的一个字节while(TI == 0);  //确认串口发送没有再忙,while循环需要加超时判断TI = 0;					 //软件复位TI标志位
}void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}

drv_uart.h文件

#ifndef __DRV_UART_H__
#define __DRV_UART_H__/*函数声明*/
void UartInit(void);                  /*串口初始化函数,8数据位,1停止位,无校验位,波特率4800*/
void UartSendByte(unsigned char Dat); /*通过串口发送一个字节数据*/
void Delay500ms();	#endif

(3)main.c代码

#include <reg52.h>
#include "ds1302.h"
#include "drv_uart.h"/*函数声明*/
void Uart_PrintTime(void);void main()
{UartInit();      // 串口初始化DS1392SetTime(); // 设置初始时间while(1){Ds1302ReadTime();     /*读取时钟信息*/Uart_PrintTime();     /*通过串口打印时间*///UartSendByte('D');Delay500ms();}
}/**功能:通过串口打印时间*参数:无*返回值:无*/
void Uart_PrintTime(void)
{unsigned char i = 0;	/*用于for循环*/for(i = 0; i < 7; i++){UartSendByte(TIME[i]);}
}

七、实验现象

通过串口打印时间,如下图:

 

 

相关文章:

十二、51单片机之DS1302

1、DS1302简介 (1)详情查看数据手册。 (2)管角描述 管教名称功能1Vcc2双供电配置中的主电源供电引脚2X1与标准的32.768kHz晶振相连。用于ds1302记时。3X24GND电源地5CE输入信号&#xff0c;CE信号在读写时必须保持高电平6I/O输入/推挽输出I/O&#xff0c;是三线接口的双向数…...

ChatGPT-4震撼发布

3月15日消息&#xff0c;美国当地时间周二&#xff0c;人工智能研究公司OpenAI发布了其下一代大型语言模型GPT-4&#xff0c;这是其支持ChatGPT和新必应等应用程序的最新AI大型语言模型。该公司表示&#xff0c;该模型在许多专业测试中的表现超出了“人类水平”。GPT-4, 相较于…...

HTML樱花飘落

樱花效果 FOR YOU GIRL 以梦为马&#xff0c;不负韶华 LOVE YOU FOREVER 实现代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head><meta http-equiv"…...

力扣-排名靠前的旅行者

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1407. 排名靠前的旅行者二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其…...

马上要面试了,还有八股文没理解?让ChatGPT来给你讲讲吧——如何更好使用ChatGPT?

最近这段时间 ChatGPT 掀起了一阵 AI 热潮&#xff0c;目前来看网上大部分内容都是在调戏 AI&#xff0c;很少有人写如何用 ChatGPT 做正事儿。 作为一个大部分知识都是从搜索引擎和 GitHub 学来的程序员&#xff0c;第一次和 ChatGPT 促膝长谈后&#xff0c;基本认定了一个事…...

怎么避免服务内存溢出?

在高并发、高吞吐的场景下&#xff0c;很多简单的事情&#xff0c;会变得非常复杂&#xff0c;而很多程序并没有在设计时针对高并发高吞吐量的情况做好内存管理。 自动内存管理机制的实现原理 做内存管理&#xff0c;主要考虑申请内存和内存回收两部分。 申请内存的步骤&…...

01_I.MX6U芯片简介

目录 I.MX6芯片简介 Corterx -A7架构简介 Cortex-A处理器运行模型 Cortex-A 寄存器组 IMX6U IO表示形式 I.MX6芯片简介 ARM Cortex-A7内核可达900 MHz,128 KB L2缓存。 并行24bit RGB LCD接口&#xff0c;可以支持1366*768分辨率。 3.8/10/16位 并行摄像头传感器接口(CS…...

嵌入式学习笔记——STM32的中断控制体系

STM32的中断控制体系前言STM32中断的概念中断类型中断控制常用控制函数区分中断源与中断信号配置中断优先级分组问题中断使能中断服务函数总结前言 上一篇中&#xff0c;借着串口接受的问题&#xff0c;简要说了一下串口中断的作用和用法&#xff0c;本文将对STM32的中断控制体…...

如何发布自己的npm包

一、什么是npm npm是随同nodejs一起安装的javascript包管理工具&#xff0c;能解决nodejs代码部署上的很多问题&#xff0c;常见的使用场景有以下几种&#xff1a; ①.允许用户从npm服务器下载别人编写的第三方包到本地使用。 ②.允许用户从npm服务器下载并安装别人编写的命令…...

Qt QProcess管道命令带“|”多命令执行获取stdout输出问题总结

问题描述: 在Qt中,使用system和QProcess执行命令,system执行的命令,我们通常不需要获取stdout的输出结果,所以只需要得到返回结果,知道成功失败即可。 而用到QProcess,多半是要获取输出的返回信息。 这里的返回信息只要是标准输出的即可,当然了,也可以是别的channe…...

【JavaEE进阶篇2】spring基于注解开发1

在上一篇文章当中&#xff0c;我们提到了怎样使用spring来创建一个bean对象。下面&#xff0c;我们继续来研究一下&#xff0c;更加优胜的开发方式&#xff1a;基于注解开发【JavaEE进阶篇1】认识Spring、认识IoC、使用spring创建对象_革凡成圣211的博客-CSDN博客springIoc、使…...

统一登录验证统一返回格式统一异常处理的实现

统一登录验证&统一返回格式&统一异常处理的实现 一、用户登录权限效验1.1 最初的用户登录验证1.2 Spring AOP 用户统一登录验证的问题1.3 Spring 拦截器1.3.1 准备工作1.3.2 自定义拦截器1.3.3 将自定义拦截器加入到系统配置1.4 拦截器实现原理1.4.1 实现原理源码分析1…...

【建议收藏】华为OD面试,什么场景下会使用到kafka,消息消费中需要注意哪些问题,kafka的幂等性,联合索引等问题

文章目录 华为 OD 面试流程一、什么场景下会使用到 kafka二、消息消费中需要注意哪些问题三、怎么处理重复消费四、kafka 的幂等性怎么处理的五、kafka 会怎么处理消费者消费失败的问题六、数据库设计中,你会如何去设计一张表七、联合索引有什么原则华为 OD 面试流程 机试:三…...

【MySQL】MySQL的优化(二)

目录 explain分析执行计划 Explain分析执行计划-Explain 之 id Explain分析执行计划-Explain 之 select_type Explain分析执行计划-Explain 之 type Explain分析执行计划-其他指标字段 explain分析执行计划 通过以上步骤查询到效率低的 SQL 语句后&#xff0c;可以通过 …...

QT VTK开发 (一、下载编译)

Vtk&#xff0c;&#xff08;visualization toolkit&#xff09;是一个开源的免费软件系统&#xff0c;主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的&#xff0c;它的内核是用C构建的&#xff0c;包含有大约250,000行代码&#xff0c…...

C/C++每日一练(20230314)

目录 1. 移动数组中的元素 2. 搜索二维矩阵 3. 三角形最小路径和 &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang 每日一练 专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 Java 每日一练 专栏 1. 移动数组中的元素 将一维数组中的元素循环左移 k 个位置 输入…...

裸辞3个月,面试了25家公司,终于找到心仪的工作了

​上半年裁员&#xff0c;下半年裸辞&#xff0c;有不少人高呼裸辞后躺平真的好快乐&#xff01;但也有很多人&#xff0c;裸辞后的生活五味杂陈。 面试25次终于找到心仪工作 因为工作压力大、领导PUA等各种原因&#xff0c;今年2月下旬我从一家互联网小厂裸辞&#xff0c;没…...

【Linux学习】进程间通信——system V(共享内存 | 消息队列 | 信号量)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 进程间通信——共享内存 | 消息队列 | 信号量&#x1f3c0;共享内存⚽系统调用shmgetkey值⚽系统…...

解决 IDA 防F5转伪C笔记

某app砸壳后放到IDA,根据堆栈查到该位置如下; G调到,0x1b81bcc 看下: BR 调到后面 x8 x9地址,汇编指令; 找到x9的地址,然后减去基地址也就是首地址,得到便宜地址; hook x9: var moduleAddr = Module.findBaseAddress("XX"); var line = moduleAddr.add...

【面试题】你需要知道的webpack高频面试题

大厂面试题分享 面试题库前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库谈谈你对webpack的看法webpack是一个模块打包工具&#xff0c;可以使用它管理项目中的模块依赖&#xff0c;并编译输出模块所需的静态文件。它…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...