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

网站建设唯美谷网站兰州网络推广的平台

网站建设唯美谷网站,兰州网络推广的平台,大型网站制作流程,顺义网站建设前言 现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。 本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路主要特点是采用串行数据传输,可为掉电…

前言

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。

  • 本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路
  • 主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。


一、DS18B20芯片介绍

 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片。

特征

DS1302模块:


二、芯片引脚定义与应用电路

晶振给芯片提供一个时钟源 

典型工作电路

51单片机DS1302电路图

蓝桥杯15单片机开发板实际电路

注意51单片机与15单片机使用的I/O口是不同的

该开发板中没有接备用电池,因此掉电再上电之后是初始化设置的时间。

带电池的DS1302模块可以存储时间

引脚名作用
VCC2主电源
VCC1备用电池
GND电源接地
X1,X232.768kHz晶振
CE芯片使能
IO数据输入/输出
SCLK串行时钟


三、寄存器定义

DS1302相关寄存器如下:

  • 第一行的 CH(BIT7)表示时钟暂停控制位,这一位置1代表时钟暂停,置0时钟正常运行
  • 倒数第二行的 WP(BIT7),这一位置1代表芯片写保护,写入操作无效,置0即可解除芯片写保护,就可以写入数据

 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器如上图所示。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。


四、命令字

  • 第0位表示读还是写(置1表示读,置0表示写);
  • 第1-5位表示地址(秒地址为0,分钟地址为10,…);
  • 第6位表示操作RAM还是时钟CK(置1表示操作RAM,置0表示操作CK);
  • 第7位:固定为1;

举个例子:

对时钟操作、秒地址操作、读:
10000001(0x81)
对时钟操作、秒地址操作、写:
10000000(0x80)
这与上面寄存器中的读地址和写地址是对应的。


五、数据流

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

五、时序图与数据读写

时序代码实现部分

#include "DS1302.h"//对端口重新定义,位变量,只进行逻辑判断,非零即真
sbit DS1302_CE   = P1^3;
sbit DS1302_IO   = P2^3;
sbit DS1302_SCLK = P1^7;#define DS1302_SECOND   0x80	//秒
#define DS1302_MINTUE   0x82	//分钟
#define DS1302_HOUR     0x84	//小时
#define DS1302_DATE     0x86	//日
#define DS1302_MONTH    0x88	//月
#define DS1302_DAY      0x8A	//星期
#define DS1302_YEAR     0x8C	//年
#define DS1302_WP       0x8E	//写保护的unsigned char DS1302_Time[9]={23,2,9,23,59,55,4};//年 月 日 时 分 秒 星期//上电默认1,先初始化为0
void DS1302_Init(void)
{   DS1302_CE    = 0;	//DS1302_SCLK  = 0;
}//单字节写(命令字,数据)
void DS1302_WriteByte(unsigned char Command, unsigned char Data)
{unsigned char i;DS1302_CE = 1;	for (i = 0; i < 8; i ++)	//写命令字{DS1302_IO = Command & (0x01<<i);DS1302_SCLK = 1;DS1302_SCLK = 0;}for (i = 0; i < 8; i ++)	//写数据{DS1302_IO = Data & (0x01<<i);DS1302_SCLK = 1;DS1302_SCLK = 0;}	DS1302_CE = 0;	
}//单字节读,用上面的宏定义即可
unsigned char DS1302_ReadByte(unsigned char Command)
{unsigned char Data = 0x00;unsigned char i;Command |= 0x01;//变成读的地址DS1302_CE = 1;	for (i = 0; i < 8; i ++)	//写命令字{DS1302_IO = Command & (0x01<<i);DS1302_SCLK = 0;	//先给0后给1,因为时序图上少一个脉冲DS1302_SCLK = 1;}for (i = 0; i < 8; i ++){DS1302_SCLK = 1;	//先给1后给0,模拟时序图DS1302_SCLK = 0;if(DS1302_IO == 1)	//读取端口是1{ Data |= (0x01<<i); }	//读数据操作}DS1302_CE = 0;	DS1302_IO = 0;	//修改的地方return Data;	
}void DS1302_SetTime(void)
{DS1302_WriteByte(DS1302_WP, 0x00);//解除芯片写保护DS1302_WriteByte(DS1302_YEAR,   DS1302_Time[0]/10*16+DS1302_Time[0]%10);//十进制转BCD码DS1302_WriteByte(DS1302_MONTH,  DS1302_Time[1]/10*16+DS1302_Time[1]%10);	DS1302_WriteByte(DS1302_DATE,   DS1302_Time[2]/10*16+DS1302_Time[2]%10);DS1302_WriteByte(DS1302_HOUR,   DS1302_Time[3]/10*16+DS1302_Time[3]%10);DS1302_WriteByte(DS1302_MINTUE, DS1302_Time[4]/10*16+DS1302_Time[4]%10);DS1302_WriteByte(DS1302_SECOND, DS1302_Time[5]/10*16+DS1302_Time[5]%10);DS1302_WriteByte(DS1302_DAY,    DS1302_Time[6]/10*16+DS1302_Time[6]%10);	//星期DS1302_WriteByte(DS1302_WP, 0x80);//此句WP给0x80,打开芯片写保护
}void DS1302_ReadTime(void) //此函数读取时钟芯片的数据,写到数组DS1302_Time里
{unsigned char Temp;Temp = DS1302_ReadByte(DS1302_YEAR);//进去就被 或运算 置1,变成读,读BCD码DS1302_Time[0] = Temp/16*10+Temp%16;Temp = DS1302_ReadByte(DS1302_MONTH);//月DS1302_Time[1] = Temp/16*10+Temp%16;Temp = DS1302_ReadByte(DS1302_DATE);DS1302_Time[2] = Temp/16*10+Temp%16;Temp = DS1302_ReadByte(DS1302_HOUR);DS1302_Time[3] = Temp/16*10+Temp%16;Temp = DS1302_ReadByte(DS1302_MINTUE);DS1302_Time[4] = Temp/16*10+Temp%16;Temp = DS1302_ReadByte(DS1302_SECOND);DS1302_Time[5] = Temp/16*10+Temp%16;Temp = DS1302_ReadByte(DS1302_DAY);DS1302_Time[6] = Temp/16*10+Temp%16;
}

效果

9之后变成16了

原因?

   BCD码   

十进制十六进制BCD码
90000 100109
160001 000010

介绍BCD码的文章:

【C语言】BCD码、十进制互相转换

 这个BIT7  CH  如果给1,时钟就会暂停, 给0是运行的

12/24第四行  BIT7   =0,是24小时模式

如果BIT7 = 1 是12小时模式  BIT5 = 0是AM, BIT5 = 1是PM

写的地址,弄个宏定义

Command(写) | 0x01 = Command(读)

让写的地址 |= 0x01,就是读数据的地址,减少一半的宏定义!!!


参考文章:

DS1302详解

51单片机DS1302实时时钟

单片机常用芯片总结(二)——DS1302时钟芯片

B站视频(链接打不开)

江科大自化协-51单片机入门教程-2020版 程序全程纯手打 从零开始入门【10-1】【10-2】


http://www.tj-hxxt.cn/news/3170.html

相关文章:

  • 网络科技公司网站源码下载市场营销推广方案
  • 动态网站设计网络营销与直播电商专业就业前景
  • 衡水冀县做网站百度 搜索热度
  • 合肥房产网最新楼盘seo关键词优化软件
  • java做的网站怎么设置关闭和开启网站访问seo是指
  • 网站免费响应建设淄博seo
  • 春雨直播正版下载seo包年优化平台
  • 购票网站模板网站怎么做的
  • 犀牛云做网站编辑上传东莞网站关键词优化排名
  • 徐汇网站建设百度网络营销
  • 10个值得推荐的免费设计网站软文代发
  • 在哪里做网站好百度指数app
  • 织梦中查看演示网站怎么做什么软件可以搜索关键词精准
  • 网站需要怎么做的模拟搜索点击软件
  • 如何开始做婚恋网站网站运营工作的基本内容
  • 手机wap网站建设解决方案某网站搜索引擎优化
  • 营销型网站建设易网拓网站seo是干什么的
  • 诸城网站建设百度指数怎么刷指数方法
  • 国际专线网络怎么申请重庆seo结算
  • 寻甸回族彝族网站建设ks免费刷粉网站推广
  • 网站建设优化服务机构seo门户网站建设方案
  • 十大b站不收费网站开发
  • 建立独立网站需要注册公司吗怎么创作自己的网站
  • 太原网站推广优化营销战略包括哪些方面
  • 台州网站建站石家庄网站建设案例
  • 深圳做网站专业公司电工培训
  • 深圳网站制作的公司刷僵尸粉网站推广
  • 卖掉的网站了对方用来做违法武汉网站设计公司
  • 石家庄seo网站优化价格搜索关键词查询
  • 分销pc网站查询关键词网站