时钟芯片1302复习课程

上传人:yuzo****123 文档编号:143750606 上传时间:2020-09-01 格式:PPT 页数:30 大小:444.50KB
返回 下载 相关 举报
时钟芯片1302复习课程_第1页
第1页 / 共30页
时钟芯片1302复习课程_第2页
第2页 / 共30页
时钟芯片1302复习课程_第3页
第3页 / 共30页
时钟芯片1302复习课程_第4页
第4页 / 共30页
时钟芯片1302复习课程_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《时钟芯片1302复习课程》由会员分享,可在线阅读,更多相关《时钟芯片1302复习课程(30页珍藏版)》请在金锄头文库上搜索。

1、2020/9/1,南大科院,第1页,1302电子时钟芯片编程与应用,2011年4月25日星期一,南大科院,第2页,一、1302芯片概述,DS1302 是DALLAS 公司推出的涓流充电时钟芯片 内含有一个实时时钟/日历和31 字节静态RAM 通过简单的串行接口与单片机进行通信 实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式 DS1302 与单片机之间使用SPI总线,简单地采用同步串行的方式进行通信仅需用到三个口线 1 、RST 复位 2、 I/O 数据线 3、 SCLK串行时钟,2011年4月25日星期一

2、,南大科院,第3页,二、管脚描述,X1 X2 32.768KHz 晶振管脚 GND 地 RST 复位脚 I/O 数据输入/输出引脚 SCLK 串行时钟 Vcc1,Vcc2 电源供电管脚,2011年4月25日星期一,南大科院,第5页,命令分布规律,2011年4月25日星期一,南大科院,第6页,三、命令及其格式,2011年4月25日星期一,南大科院,第7页,四、读写时序,单个字节写 先输出写命令,后输出数据 一个周期: RST=1 I/O引脚送出数据 SCLK上升沿=1=0 先输出命令,紧接着输出数据,共16个SCLK,2011年4月25日星期一,南大科院,第8页,程序模块1 写一个字节数据,vo

3、id v_W1302(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /* 写地址,命令 */v_RTInputByte(ucDa); /* 写1Byte数据*/T_CLK = 1;T_RST =0;,2011年4月25日星期一,南大科院,第9页,单个字节写子函数,void v_RTInputByte(uchar ucDa) uchar i;ACC = ucDa;for(i=8; i0; i-)T_IO = ACC0; /*相当于汇编中的 RRC */T_CLK = 1;T_CLK =

4、0;ACC = ACC 1; ,2011年4月25日星期一,南大科院,第10页,2、读单个字节,单个字节读 先输出读命令,后读入数据 一个周期: RST=1 I/O引脚读入数据 SCLK上升沿=1=0 先输出命令,紧接着读入数据,共16个SCLK,2011年4月25日星期一,南大科院,第11页,程序模块2 读一个字节数据,uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr); /*写 地址,读命令 */ucDa = uc_RTOutputByte(); /* 读1By

5、te数据 */T_CLK = 1;T_RST =0;return(ucDa);,2011年4月25日星期一,南大科院,第12页,读个字节数据子函数,void v_RTInputByte(uchar ucDa) uchar i;ACC = ucDa;for(i=8; i0; i-)T_IO = ACC0; /*相当于汇编中的 RRC */T_CLK = 1;T_CLK = 0;ACC = ACC 1; ,2011年4月25日星期一,南大科院,第13页,五、时钟控制,1、写多个字节:程序名称: v_BurstW1302T* 说明: 先写地址,后写数据(时钟多字节方式)* 功能: 往DS1302写入

6、时钟数据(多字节方式)* 调用: v_RTInputByte() * 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B* 返回值: 无,2011年4月25日星期一,南大科院,第14页,void v_BurstW1302T(uchar *pSecDa)uchar i;v_W1302(0 x8e,0 x00); /* 控制命令,WP=0,写操作*/T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0 xbe); /* 0 xbe:时钟多字节写命令 */

7、for (i=8;i0;i-) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/v_RTInputByte(*pSecDa); /* 写1Byte数据*/pSecDa+;T_CLK = 1;T_RST =0;,2011年4月25日星期一,南大科院,第15页,读多个字节:名称: v_BurstR1302T* 说明: 先写地址,后读命令/数据(时钟多字节方式)* 功能: 读取DS1302时钟数据* 调用: v_RTInputByte() , uc_RTOutputByte()* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD

8、码) 1B 1B 1B 1B 1B 1B 1B* 返回值: ucDa :读取的数据,2011年4月25日星期一,南大科院,第16页,void v_BurstR1302T(uchar *pSecDa)uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0 xbf); /* 0 xbf:时钟多字节读命令 */for (i=8; i0; i-) *pSecDa = uc_RTOutputByte(); /* 读1Byte数据 */pSecDa+;T_CLK = 1;T_RST =0;,2011年4月25日星期一,南大科院,第17页,六、时钟初始化,

9、名称: v_Set1302* 说明: * 功能: 设置初始时间* 调用: v_W1302() * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值: 无,2011年4月25日星期一,南大科院,第18页,void v_Set1302(uchar *pSecDa) uchar i;uchar ucAddr = 0 x80; /*命令从秒开始,WP=0,写操作*/ v_W1302(0 x8e,0 x00); /* 控制命令,WP=0,写操作*/for(i =7;i0;i-) v_W1

10、302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */pSecDa+;ucAddr +=2; /*命令从秒开始,每次加2是下一条*/ v_W1302(0 x8e,0 x80); /* 控制命令,WP=1,写保护?*/,2011年4月25日星期一,南大科院,第19页,七、读取DS1302当前时间,名称: v_Get1302* 说明: * 功能: 读取DS1302当前时间* 调用: uc_R1302() * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1

11、B* 返回值: 无,2011年4月25日星期一,南大科院,第20页,名称: v_Get1302* 说明: * 功能: 读取DS1302当前时间* 调用: uc_R1302() * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B* 返回值: 无,2011年4月25日星期一,南大科院,第21页,void v_Get1302(uchar ucCurtime) uchar i;uchar ucAddr = 0 x81; /*命令从秒开始,WP=1,读操作*/ for (i=0;i7;

12、i+)ucCurtimei = uc_R1302(ucAddr); /*格式为: 秒 分 时 日 月 星期 年 */ucAddr += 2;/*命令从秒开始,每次加2是下一条*/ ,2011年4月25日星期一,南大科院,第22页,最直接的程序,sbit CLK=P10; file:/与硬件相关的连线 clk为DS1302的时钟信号线sbit DAT=P11; file:/DAT为DS1302的I/O数据线sbit RST=P12; file:/RST为DS1302的RST信号线 sbit ACC0=ACC0;sbit ACC1=ACC1;sbit ACC2=ACC2;sbit ACC3=ACC

13、3;sbit ACC4=ACC4;sbit ACC5=ACC5;sbit ACC6=ACC6;sbit ACC7=ACC7;,2011年4月25日星期一,南大科院,第23页,/* 函数名:write(address);/* 参 数:地址/数据字节/* 功 能:用于向DS1302输入地址或数据信息,void write(uchar address) ACC=address; CLK=0; DAT=ACC0; CLK=1;CLK=0; DAT=ACC1; CLK=1;CLK=0; DAT=ACC2; CLK=1;CLK=0; DAT=ACC3; CLK=1;CLK=0; DAT=ACC4; CLK

14、=1;CLK=0; DAT=ACC5; CLK=1;CLK=0; DAT=ACC6; CLK=1;CLK=0; DAT=ACC7; CLK=1;,2011年4月25日星期一,南大科院,第24页,/* 函数名:read();/* 参 数:无/* 功 能:用于从DS1302读出时间数据信息,void read()/ DAT=1; /*注意在进行读操作之前DAT应置1*/ CLK=0; ACC0=DAT; CLK=1;CLK=0; ACC1=DAT; CLK=1;CLK=0; ACC2=DAT; CLK=1;CLK=0; ACC3=DAT; CLK=1;CLK=0; ACC4=DAT; CLK=1;

15、CLK=0; ACC5=DAT; CLK=1;CLK=0; ACC6=DAT; CLK=1;CLK=0; ACC7=DAT; CLK=1 return(ACC); ,2011年4月25日星期一,南大科院,第25页,/* 函数名:W_Byte(address, byte);/* 参 数:地址,数据/* 功 能:用于向DS1302指定的地址address输入数据byte,/*/void W_Byte(uchar address,uchar byte) RST=0; CLK=0; RST=1; write(address); write(byte); RST=0; ,2011年4月25日星期一,南大

16、科院,第26页,/* 函数名:R_Byte(address);/* 参 数:地址/* 功 能:用于从DS1302指定地址address处读出数据,并将数据存放到ACC中,uchar R_Byte(uchar address) RST=0; CLK=0; RST=1; write(address); DAT=1; read(); RST=0; return(ACC);,2011年4月25日星期一,南大科院,第27页,/* 函数名:timeset() ;/* 参 数:无/* 功 能:用于设置DS1302的时间,具体时间值存放在time_set7数组中,void timeset() uchar i; W_Byte(0 x8e,0 x00); for(i=0;i7;i+) W_Byte(0 x80+i+i,time_seti);,2011年4月25日星期一,南大科院,第28页,/* 函数名:readtime() ;/* 参 数:无/* 功 能:用于读取DS1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

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