DS1302涓流充电计时芯片特征

1.芯片简介
ds1302 涓流充电计时芯片包含一个实时时钟/日历和 31 字节的静态 ram.通过简单的串行接口与微处理器通讯.这个实时时钟/日历提供年月日,时分秒信息.对于少于 31 天的月份月末会自动调整,还有闰年校正.由于有一个 am/pm 指示器,时钟可以工作在 12 小时制或者24小时制。
主要特点如下
实时时钟计算年、月、日、时、分、秒、星 期,直到 2100 年,并有闰年调节功能 ,具有31 x 8 位 通用暂存 ram。2.0v 至 5.5v 宽电压范围操作 ,在2.0v时工作电流小于300na 。读写时钟或 ram 数据时有单字节或多字节(脉冲串模式)数据传送方式。引脚电平与 ttl 兼容 (vcc = 5v)。2.ds1302引脚定义
使用同步串行通讯简化了 ds1302 与微处理器的接口。与时钟/ram 通讯只需要三根线: ce, i/o (数据线), and sclk (串行时钟). 数据输出输入时钟/ram 一次1字节或者在脉冲串中多达 31 字节。除了 ds1202 的基本计时功能以外, ds1302 有额外特点比如,双管脚主电源和备用电源,可编程涓流充电器 vcc1,还附加 7 字节的暂存器。
3.ds18b20驱动程序
(1)ds1302.h
#ifndef __ds1302_h__#define __ds1302_h__#include #includesbit sck=p1^4; sbit sda=p1^5; sbit rst=p1^6;//复位脚#define rst_clr rst=0//电平置低#define rst_set rst=1//电平置高//双向数据#define io_clr sda=0//电平置低#define io_set sda=1//电平置高#define io_r sda //电平读取//时钟信号#define sck_clr sck=0//时钟信号#define sck_set sck=1//电平置高#define ds1302_sec_add 0x80 //秒数据地址#define ds1302_min_add 0x82 //分数据地址#define ds1302_hr_add 0x84 //时数据地址#define ds1302_date_add 0x86 //日数据地址#define ds1302_month_add 0x88 //月数据地址#define ds1302_day_add 0x8a //星期数据地址#define ds1302_year_add 0x8c //年数据地址#define ds1302_control_add 0x8e //控制数据地址#define ds1302_charger_add 0x90 #define ds1302_clkburst_add 0xbeextern unsigned char time_buf1[8];//空年月日时分秒周extern unsigned char time_buf[8] ;//空年月日时分秒周/*------------------------------------------------ 向ds1302写入一字节数据------------------------------------------------*/void ds1302_write_byte(unsigned char addr, unsigned char d);/*------------------------------------------------ 从ds1302读出一字节数据------------------------------------------------*/unsigned char ds1302_read_byte(unsigned char addr) ;/*------------------------------------------------ 向ds1302写入时钟数据------------------------------------------------*/void ds1302_write_time(void) ;/*------------------------------------------------ 从ds1302读出时钟数据------------------------------------------------*/void ds1302_read_time(void) ;/*------------------------------------------------ ds1302初始化------------------------------------------------*/void ds1302_init(void);#endif(2)ds1302.c
#include ds1302.hunsigned char time_buf1[8] = {20,9,3,13,18,51,00,6};//空年月日时分秒周unsigned char time_buf[8] ; //空年月日时分秒周/*------------------------------------------------ 向ds1302写入一字节数据------------------------------------------------*/void ds1302_write_byte(unsigned char addr, unsigned char d){ unsigned char i; rst_set; //写入目标地址:addr addr = addr & 0xfe; //最低位置零 for (i = 0; i > 1; } //写入数据:d for (i = 0; i > 1; } rst_clr; //停止ds1302总线}/*------------------------------------------------ 从ds1302读出一字节数据------------------------------------------------*/unsigned char ds1302_read_byte(unsigned char addr) { unsigned char i; unsigned char temp; rst_set; //写入目标地址:addr addr = addr | 0x01;//最低位置高 for (i = 0; i > 1; } //输出数据:temp for (i = 0; i > 1; if (io_r) { temp |= 0x80; } else { temp &= 0x7f; } sck_set; sck_clr; } rst_clr; //停止ds1302总线 return temp;}/*------------------------------------------------ 向ds1302写入时钟数据------------------------------------------------*/void ds1302_write_time(void) { unsigned char i,tmp; for(i=0;i< 8;i++) { //bcd处理 tmp=time_buf1[i]/10; time_buf[i]=time_buf1[i]%10; time_buf[i]=time_buf[i]+tmp*16; } ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护 ds1302_write_byte(ds1302_sec_add,0x80); //暂停 //ds1302_write_byte(ds1302_charger_add,0xa9); //涓流充电 ds1302_write_byte(ds1302_year_add,time_buf[1]); //年 ds1302_write_byte(ds1302_month_add,time_buf[2]); //月 ds1302_write_byte(ds1302_date_add,time_buf[3]); //日 ds1302_write_byte(ds1302_day_add,time_buf[7]); //周 ds1302_write_byte(ds1302_hr_add,time_buf[4]); //时 ds1302_write_byte(ds1302_min_add,time_buf[5]); //分 ds1302_write_byte(ds1302_sec_add,time_buf[6]); //秒 ds1302_write_byte(ds1302_day_add,time_buf[7]); //周 ds1302_write_byte(ds1302_control_add,0x80); //打开写保护 }/*------------------------------------------------ 从ds1302读出时钟数据------------------------------------------------*/void ds1302_read_time(void) { unsigned char i,tmp; time_buf[1]=ds1302_read_byte(ds1302_year_add); //年 time_buf[2]=ds1302_read_byte(ds1302_month_add); //月 time_buf[3]=ds1302_read_byte(ds1302_date_add); //日 time_buf[4]=ds1302_read_byte(ds1302_hr_add); //时 time_buf[5]=ds1302_read_byte(ds1302_min_add); //分 time_buf[6]=(ds1302_read_byte(ds1302_sec_add))&0x7f;//秒 time_buf[7]=ds1302_read_byte(ds1302_day_add); //周 for(i=0;i< 8;i++) { //bcd处理 tmp=time_buf[i]/16; time_buf1[i]=time_buf[i]%16; time_buf1[i]=time_buf1[i]+tmp*10; }}/*------------------------------------------------ ds1302初始化------------------------------------------------*/void ds1302_init(void){ rst_clr; //rst脚置低 sck_clr; //sck脚置低 ds1302_write_byte(ds1302_sec_add,0x00); }

一文读懂气体传感器的分类原理
跑分App公布手机温度排行榜,最火烫的竟然是它!
射频电缆计算公式一览表
普源示波器MSO8000系列的介绍
realmeX宣布5月15日正式亮相
DS1302涓流充电计时芯片特征
英特尔发布九代酷睿,将是14nm工艺的谢幕演出
如何进行USBCAN自检详细流程概述
触针式粗糙度轮廓仪的测量原理
鸿蒙系统终于来了 鸿蒙系统支持哪些手机
D4112音频功率放大电路的应用
3D打印机的简介
关于安全用电管理系统的研究以及实际应用
VR虚拟旅游的应用优势
你的智能助理或将比你智商情商高
不能愉快的玩耍了!新MacBook Pro问题多多
全球LED照明另类之“最”盘点
小米6、三星Galaxy S8相爱相杀,同是骁龙835谁更强?
中国5G手机价格全球最低,供不应求普遍“无货”
微服务架构与实践基础篇