时钟芯片ds1302及其应用

上传人:kms****20 文档编号:51644233 上传时间:2018-08-15 格式:PPT 页数:34 大小:419KB
返回 下载 相关 举报
时钟芯片ds1302及其应用_第1页
第1页 / 共34页
时钟芯片ds1302及其应用_第2页
第2页 / 共34页
时钟芯片ds1302及其应用_第3页
第3页 / 共34页
时钟芯片ds1302及其应用_第4页
第4页 / 共34页
时钟芯片ds1302及其应用_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《时钟芯片ds1302及其应用》由会员分享,可在线阅读,更多相关《时钟芯片ds1302及其应用(34页珍藏版)》请在金锄头文库上搜索。

1、时钟芯片DS1302及其应用l 时钟计数功能,可以对秒、分钟、小时、月、星期、年的计 数。年计数可达到 2100 年。 l 有 31*8 位的额外数据暂存寄存器 l 最少 I/O 引脚传输,通过三引脚SCLK,RST,IO控制 l 工作电压: 2.0-5.5V l 工作电流小于 320 纳安( 2.0V ) l 读写时钟寄存器或内部 RAM ( 31*8 位的额外数据暂存寄 存)可以采用单字节模式和突发模式 l 8-pin DIP 封装或 8-pin SOICs l 兼容 TTL ( 5.0V ) l 可选的工业级别,工作温度 -40 85 摄氏度 l 兼容 DS1202 较 DS1202 增

2、加的功能:1. 可通过 Vcc1 进行涓流充电2. 双重电源补给3. 备用电源可采用电池或者超级电容 (0.1F以上 ) ,可以 用老式电脑主板上的 3.6V 充电电池。功能介绍引脚分布引脚功能VCC1 VCC1提供了在电池供电 系统的低功耗模式,以及低功耗电 池备用。VCC2 - VCC2是主电源,双电源配置电源引脚。VCC1连 接到备份源在主电源的情况下维持的时间和日期。 当VCC2 0;i-) DS1302_IO = a a = 1; DS1302_CLK=1; _nop_(); DS1302_CLK=0; _nop_(); 函数功能:单片机向DS1302写一个字节子程序IO=字节a的最

3、低位字节右移1位CLK=1,延时CLK=0,延时到8次了?结束函数功能:单片机从DS1302读一个字节子程序 uchar readbyte(void) uchar i,dat=0; for(i=8;i0;i-) dat = 1;if(DS1302_IO) dat|=0x80; DS1302_CLK=1;nop;DS1302_CLK=0; return dat; 经过 8 个时钟周期的控制读指令的 输入,控制指令串行输入后,一个 字节的数据将在下个 8 个时钟周期 的下降沿被输出,注意:先输出字节 的低位。将上面的写字节和读字节放在一起研究void sendbyte(uchar a) uchar

4、 i;for(i=8;i0;i-) DS1302_IO = a a = 1; DS1302_CLK=1; _nop_(); DS1302_CLK=0; _nop_(); 读一个字节子程序 uchar readbyte(void) uchar i,dat=0; for(i=8;i0;i-) dat = 1;if(DS1302_IO) dat|=0x80; DS1302_CLK=1;nop;DS1302_CLK=0; return dat; 写一个字节子程序这是一种方案在控制字节最后一位写 完后的下降沿,第一个 读数据位就出现了此句看上去,在没有先产生下降沿 的情况下就读了数据,其实在左 边已经产

5、生了第一个数据位将上面的写字节和读字节放在一起研究void sendbyte(uchar a) uchar i;for(i=8;i0;i-)DS1302_CLK=0;nop;DS1302_IO = a a = 1;DS1302_CLK=1;nop; 读一个字节子程序 uchar readbyte(void) uchar i,dat=0;for(i=8;i0;i-) DS1302_CLK=1; nop; DS1302_CLK=0; dat=1; if(DS1302_IO)dat|=0x80;return dat; 写一个字节子程序这是另一种方案这里是先产生数据,再产生上升 沿的方式送数据,最后没

6、有产生 下降沿。这里要先产生下降沿,再读数据/* 函数功能:写DS1302地址子程序 向address地址上写入数据dat */ void write_DS1302(uchar address,uchar dat) DS1302_RST=0; nop; DS1302_CLK=0; nop; DS1302_RST=1; nop; sendbyte(address); nop; sendbyte(dat); nop; DS1302_RST=0; nop; DS1302_CLK=0; 经过 8 个时钟周期的控 制字节的输入,一个字 节的输入将在下 8 个时 钟周期的上升沿完成, 数据传输从字节最低位

7、 开始。这3句的目的是将CLK置0,但是不知道 会不会产生下降沿而送错数据,所以先 RST=0,停止所有数据传送,高阻态,等 CLK=0之后,再回复RST=1;/* 函数功能:读DS1302地址子程序 入口参数:add 出口参数:readtimeR */ uchar read_DS1302(uchar address) uchar timer; DS1302_RST=0; delays(2); DS1302_CLK=0; delays(2); DS1302_RST=1; nop; sendbyte(address); timer=readbyte(); DS1302_RST=0; nop; D

8、S1302_CLK=0; return timer; /* 函数功能:初始化DS1302子程序 入口参数:wr_data(全局变量) 出口参数: */ void DS1302_init() write_DS1302(0x8e,0x00); /关闭保护,bit7=0write_DS1302(0x8c,wr_data0);/年 write_DS1302(0x88,wr_data1);/月 write_DS1302(0x86,wr_data2);/日 write_DS1302(0x8A,wr_data3);/星期 write_DS1302(0x84,wr_data4);/时 write_DS1302

9、(0x82,wr_data5);/分 write_DS1302(0x80,wr_data6);/秒 write_DS1302(0x8e,0x80); /开写保护,bit7=1 void clock_start(void) uchar val;val = read_DS1302(0x81); /读秒寄存器 val /秒寄存器最高位0, 时钟振荡启动 write_DS1302(0x8e,0x00); /关写保护 write_DS1302(0x80,val); /写回秒寄存器write_DS1302(0x90,0xa5);/1010使能涓电流充电,DS=01: 选择一个二极管,RS=01: R1=2

10、kwrite_DS1302(0x8e,0x80); /开写保护 启动振荡器,启动涓电流充电(竞赛可省略)(竞赛可省略)可以省略的理由:1.由于秒寄存器是内容0x000x59,显然初始化时最高位也同时清零了;2.使用的电池,不充电,可以不对电池充电。/* 函数功能:读DS1302时间子程序 读到数组readtimeR中 */ void read_time(void) readtimeR0=read_DS1302(0x8d); /年BCD码 readtimeR1=read_DS1302(0x89); /月BCD码 readtimeR2=read_DS1302(0x87); /日BCD码 readt

11、imeR3=read_DS1302(0x8b); /周BCD码 readtimeR4=read_DS1302(0x85); /时BCD码 readtimeR5=read_DS1302(0x83); /分BCD码 readtimeR6=read_DS1302(0x81); /秒BCD码 送显示的数据处理方式year_h = readtimeR04; /年十位 year_l = readtimeR0 /年个位 month_h = readtimeR14; /月十位 month_l = readtimeR1 /月个位 date_h = readtimeR24; /日十位 date_l = readt

12、imeR2 /日个位 hour_h = readtimeR44; /时十位 hour_l = readtimeR4 /时个位 minute_h = readtimeR54; /分十位 minute_l = readtimeR5 /分个位 second_h = readtimeR64; /秒十位 second_l = readtimeR6 /秒个位disTime0=hour_h; disTime1=hour_l; disTime3=minute_h; disTime4=minute_l; disTime6=second_h; disTime7=second_l;display(disTime);

13、disDate0=year_h; disDate1=year_l; disDate3=month_h; disDate4=month_l; disDate6=date_h; disDate7=date_l;display(disDate)作判断的数据处理方式uchar sec,min,hour,dat,mon,year; sec= second_h *10+ second_l; min= minute_h*10+ minute_l ; year_h = readtimeR04; /年十位 year_l = readtimeR0 /年个位 month_h = readtimeR14; /月十位 month_l = readtimeR1 /月个位 date_h = readtimeR

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号