收藏 分销(赏)

时钟芯片.pptx

上传人:a199****6536 文档编号:8168317 上传时间:2025-02-06 格式:PPTX 页数:30 大小:369.75KB 下载积分:12 金币
下载 相关 举报
时钟芯片.pptx_第1页
第1页 / 共30页
时钟芯片.pptx_第2页
第2页 / 共30页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,20,11,年,4,月,25,日星期一,南大科院,第,#,页,2025/2/6 周四,南大科院,第,1,页,1302,电子时钟芯片编程与应用,20,11,年,4,月,25,日星期一,南大科院,第,2,页,一、,1302,芯片概述,DS1302,是,DALLAS,公司推出的涓流充电时钟芯片,内含有一个,实时时钟,/,日历和,31,字节静态,RAM,通过简单的串行接口与单片机进行通信,实时时钟,/,日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过,AM/PM,指示决定采用,24,或,12,小时格式,DS1302,与单片机之间,使用,SPI,总线,,简单地采用同步串行的方式进行通信仅需用到三个口线,1,、,RST,复位,2,、,I/O,数据线,3,、,SCLK,串行时钟,20,11,年,4,月,25,日星期一,南大科院,第,3,页,二、管脚描述,X1 X2 32.768KHz,晶振管脚,GND,地,RST,复位脚,I/O,数据输入,/,输出引脚,SCLK,串行时钟,Vcc1,Vcc2,电源供电管脚,20,11,年,4,月,25,日星期一,南大科院,第,4,页,命令(地址)分配,数据位,D7,D6,D5,D4,D3,D2,D1,D0,定义,=1,命令,=1 RAM,A4,A3,A2,A1,A0,=0,写,=1,读,=0,时钟或控制寄存器,地址,规律,命令在,80,以上,与,RAM,有关的在,C0,以上,命令与地址混合编程,20,11,年,4,月,25,日星期一,南大科院,第,5,页,命令分布规律,序号,类别,第一字节命令(地址),第二字节数据,1,时钟,808C,(写、读,72,),年、星期、月、日、时、分、秒,7,个单元,2,控制写读寄存器,8E,、,8F,(写、读),00,写入允许,80,写入禁止,3,时钟多字节读写,BE,、,BF,(写、读),4,RAM,单个字节读写,C0FD,(写、读,312,),单个数据,5,RAM,多字节读写,BE,、,BF,(写、读),20,11,年,4,月,25,日星期一,南大科院,第,6,页,序号,操作对象,第一字节,第二字节,读指令,写指令,D7,D6D4,D6D4,1,秒,81,80,CH=0,启动时钟,CH=1,停止时钟,10,秒,秒,写,80 00,启动时钟,写,80 80,停止时钟,2,分,83,82,0,10,分,分,3,时,85,84,=1 12,小时,=0 24,小时,0,A/P,时,10,位,小时,=1,下午,=0,上午,4,日,87,86,0,0,10,日,日,5,月,89,88,0,0,0,10M,月,6,星期,8B,8A,0,0,0,0,0,星期,7,年,8D,8C,10,年,年,8,读写允许,控 制,允许读,允许写,WP,说明:,00,写入允许,80,写入禁止,8F,8E,=0,允许写,=1,禁止写,9,RAM,读写,读,写,第二个字节数据,C0-CF,10,时钟多字节读写,读,写,写入或读出全部时钟数据,BF,BE,三、命令及其格式,20,11,年,4,月,25,日星期一,南大科院,第,7,页,四、读写时序,单个字节写,先输出写命令,后输出数据,一个周期:,RST=1,I/O,引脚送出数据,SCLK,上升沿,=1=0,先输出命令,紧接着输出数据,共,16,个,SCLK,20,11,年,4,月,25,日星期一,南大科院,第,8,页,程序模块,1,写一个字节数据,void 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;,20,11,年,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=0;,ACC=ACC 1,;,20,11,年,4,月,25,日星期一,南大科院,第,10,页,2,、读单个字节,单个字节读,先输出读命令,后读入数据,一个周期:,RST=1,I/O,引脚读入数据,SCLK,上升沿,=1=0,先输出命令,紧接着读入数据,共,16,个,SCLK,20,11,年,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();,/*,读,1Byte,数据*,/,T_CLK=1;,T_RST=0;,return(ucDa);,20,11,年,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;,20,11,年,4,月,25,日星期一,南大科院,第,13,页,五、时钟控制,1,、,写多个字节,:程序名称,:v_BurstW1302T*,说明,:,先写地址,后写数据,(,时钟多字节方式,)*,功能,:,往,DS1302,写入时钟数据,(,多字节方式,)*,调用,:v_RTInputByte()*,输入,:pSecDa:,时钟数据地址 格式为,:,秒 分 时 日 月 星期 年 控制*,8Byte(BCD,码,)1B 1B 1B 1B 1B 1B 1B 1B*,返回值,:,无,20,11,年,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:,时钟多字节写命令*,/,for(i=8;i0;i-),/*8Byte=7Byte,时钟数据,+1Byte,控制*,/,v_RTInputByte(*pSecDa,);,/*,写,1Byte,数据*,/,pSecDa+;T_CLK=1;,T_RST=0;,20,11,年,4,月,25,日星期一,南大科院,第,15,页,读多个字节,:,名称,:v_BurstR1302T*,说明,:,先写地址,后读命令,/,数据,(,时钟多字节方式,)*,功能,:,读取,DS1302,时钟数据*调用,:v_RTInputByte(),uc_RTOutputByte()*,输入,:pSecDa:,时钟数据地址 格式为,:,秒 分 时 日 月 星期 年*,7Byte(BCD,码,)1B 1B 1B 1B 1B 1B 1B*,返回值,:ucDa:,读取的数据,20,11,年,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;,20,11,年,4,月,25,日星期一,南大科院,第,17,页,六、时钟初始化,名称,:v_Set1302*,说明,:*,功能,:,设置初始时间*调用,:v_W1302()*,输入,:pSecDa:,初始时间地址,。初始时间格式为,:,秒 分 时 日 月 星期 年*,7Byte(BCD,码,)1B 1B 1B 1B 1B 1B 1B*,返回值,:,无,20,11,年,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_W1302(ucAddr,*pSecDa);/*,秒 分 时 日 月 星期 年*,/,pSecDa+;,ucAddr+=2,;,/*,命令从秒开始,每次加,2,是下一条*,/,v_W1302(0 x8e,0 x80);/*,控制命令,WP=1,写保护,?*/,20,11,年,4,月,25,日星期一,南大科院,第,19,页,七、,读取,DS1302,当前时间,名称,:v_Get1302*,说明,:*,功能,:,读取,DS1302,当前时间*调用,:uc_R1302()*,输入,:ucCurtime:,保存当前时间地址。当前时间格式为,:,秒 分 时 日 月 星期 年*,7Byte(BCD,码,)1B 1B 1B 1B 1B 1B 1B*,返回值,:,无,20,11,年,4,月,25,日星期一,南大科院,第,20,页,名称,:v_Get1302*,说明,:*,功能,:,读取,DS1302,当前时间*调用,:uc_R1302()*,输入,:ucCurtime:,保存当前时间地址。当前时间格式为,:,秒 分 时 日 月 星期 年*,7Byte(BCD,码,)1B 1B 1B 1B 1B 1B 1B*,返回值,:,无,20,11,年,4,月,25,日星期一,南大科院,第,21,页,void v_Get1302(uchar ucCurtime)uchar i;uchar ucAddr=,0 x81,;,/*,命令从秒开始,WP=,1,读操作,*/,for(i=0;i7;i+)ucCurtimei=uc_R1302(ucAddr);,/*,格式为,:,秒 分 时 日 月 星期 年*,/,ucAddr+=2,;,/*,命令从秒开始,每次加,2,是下一条*,/,20,11,年,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=ACC3;sbit ACC4=ACC4;sbit ACC5=ACC5;sbit ACC6=ACC6;sbit ACC7=ACC7,;,20,11,年,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=1;CLK=0;DAT=ACC5;CLK=1;CLK=0;DAT=ACC6;CLK=1;CLK=0;DAT=ACC7;CLK=1;,20,11,年,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;CLK=0;ACC5=DAT;CLK=1;CLK=0;ACC6=DAT;CLK=1;CLK=0;ACC7=DAT;CLK=1,return(ACC);,20,11,年,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;,20,11,年,4,月,25,日星期一,南大科院,第,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);,20,11,年,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);,20,11,年,4,月,25,日星期一,南大科院,第,28,页,/*,函数名:,readtime(),;,/*,参 数:无,/*,功 能:用于读取,DS1302,的当前时间,具体时间值存放在,timecur7,数组中,void readtime()uchar i;for(i=0;i7;i+)timercuri=R_Byte(0 x81+i+i);,20,11,年,4,月,25,日星期一,南大科院,第,29,页,/*,函数名:,BCD_to_INT(),;,/*,参 数:无,/*,功 能:用于将时间,BCD,码转换为十进制码,void BCD_to_INT()uchar i;for(i=0;i7;i+)bcd_int(timercuri);,20,11,年,4,月,25,日星期一,南大科院,第,30,页,/*,函数名:,unsigned char*bcd_int(unsigned char i)/*,参 数:,BCD,型数据,/*,功 能:因为从,DS1302,读回的数据是,BCD,码,所以要将其转换为十进制整形数据,unsigned char*bcd_int(unsigned char i)uchar j;*(pTimerInt+)=(i,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服