您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 6 时钟芯片1302
2020/1/21泉州信息学院第1页第六讲1302电子时钟芯片编程与应用2008年7月17日星期四泉州信息学院第2页一、1302芯片概述DS1302是DALLAS公司推出的涓流充电时钟芯片1.内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信2.实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式3.DS1302与单片机之间使用SPI总线,简单地采用同步串行的方式进行通信仅需用到三个口线1、RST复位2、I/O数据线3、SCLK串行时钟2008年7月17日星期四泉州信息学院第3页二、管脚描述X1X232.768KHz晶振管脚GND地RST复位脚I/O数据输入/输出引脚SCLK串行时钟Vcc1,Vcc2电源供电管脚2008年7月17日星期四泉州信息学院第4页命令(地址)分配数据位D7D6D5D4D3D2D1D0定义=1命令=1RAMA4A3A2A1A0=0写=1读=0时钟或控制寄存器地址规律,命令在80以上,与RAM有关的在C0以上命令与地址混合编程2008年7月17日星期四泉州信息学院第5页命令分布规律序号类别第一字节命令(地址)第二字节数据1时钟80~8C(写、读×7×2)年、星期、月、日、时、分、秒7个单元2控制写读寄存器8E、8F(写、读)00写入允许80写入禁止3时钟多字节读写BE、BF(写、读)4RAM单个字节读写C0~FD(写、读×31×2)单个数据5RAM多字节读写BE、BF(写、读)2008年7月17日星期四泉州信息学院第6页序号操作对象第一字节第二字节读指令写指令D7D6~D4D6~D41秒8180CH=0启动时钟CH=1停止时钟10秒秒写8000启动时钟,写8080停止时钟2分8382010分分3时8584=112小时=024小时0A/P时10位小时=1下午=0上午4日87860010日日5月898800010M月6星期8B8A00000星期7年8D8C10年年8读写允许控制允许读允许写WP说明:00写入允许80写入禁止8F8E=0允许写=1禁止写9RAM读写读写第二个字节数据C0-CF10时钟多字节读写读写写入或读出全部时钟数据BFBE三、命令及其格式2008年7月17日星期四泉州信息学院第7页四、读写时序1.单个字节写先输出写命令,后输出数据1.一个周期:①RST=1②I/O引脚送出数据③SCLK上升沿→=1→=03.先输出命令,紧接着输出数据,共16个SCLKRSTSLCKI/O第一个字节命令第二个字节发送数据数据送出后SLCK脉冲出现2008年7月17日星期四泉州信息学院第8页程序模块1写一个字节数据voidv_W1302(ucharucAddr,ucharucDa){T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(ucAddr);/*写地址,命令*/v_RTInputByte(ucDa);/*写1Byte数据*/T_CLK=1;T_RST=0;}2008年7月17日星期四泉州信息学院第9页单个字节写子函数voidv_RTInputByte(ucharucDa){uchari;ACC=ucDa;for(i=8;i0;i--){T_IO=ACC0;/*相当于汇编中的RRC*/T_CLK=1;T_CLK=0;ACC=ACC1;}}2008年7月17日星期四泉州信息学院第10页2、读单个字节单个字节读先输出读命令,后读入数据1.一个周期:①RST=1②I/O引脚读入数据③SCLK上升沿→=1→=03.先输出命令,紧接着读入数据,共16个SCLKRSTSLCKI/O第一个字节命令第二个字节接收数据数据读入后SLCK脉冲出现2008年7月17日星期四泉州信息学院第11页程序模块2读一个字节数据ucharuc_R1302(ucharucAddr){ucharucDa;T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(ucAddr);/*写地址,读命令*/ucDa=uc_RTOutputByte();/*读1Byte数据*/T_CLK=1;T_RST=0;return(ucDa);}2008年7月17日星期四泉州信息学院第12页读个字节数据子函数voidv_RTInputByte(ucharucDa){uchari;ACC=ucDa;for(i=8;i0;i--){T_IO=ACC0;/*相当于汇编中的RRC*/T_CLK=1;T_CLK=0;ACC=ACC1;}}2008年7月17日星期四泉州信息学院第13页五、时钟控制1、写多个字节:程序名称:v_BurstW1302T*说明:先写地址,后写数据(时钟多字节方式)*功能:往DS1302写入时钟数据(多字节方式)*调用:v_RTInputByte()*输入:pSecDa:时钟数据地址格式为:秒分时日月星期年控制*8Byte(BCD码)1B1B1B1B1B1B1B1B*返回值:无2008年7月17日星期四泉州信息学院第14页voidv_BurstW1302T(uchar*pSecDa){uchari;v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作*/T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(0xbe);/*0xbe:时钟多字节写命令*/for(i=8;i0;i--)/*8Byte=7Byte时钟数据+1Byte控制*/{v_RTInputByte(*pSecDa);/*写1Byte数据*/pSecDa++;}T_CLK=1;T_RST=0;}2008年7月17日星期四泉州信息学院第15页2.读多个字节:名称:v_BurstR1302T*说明:先写地址,后读命令/数据(时钟多字节方式)*功能:读取DS1302时钟数据*调用:v_RTInputByte(),uc_RTOutputByte()*输入:pSecDa:时钟数据地址格式为:秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B*返回值:ucDa:读取的数据2008年7月17日星期四泉州信息学院第16页voidv_BurstR1302T(uchar*pSecDa){uchari;T_RST=0;T_CLK=0;T_RST=1;v_RTInputByte(0xbf);/*0xbf:时钟多字节读命令*/for(i=8;i0;i--){*pSecDa=uc_RTOutputByte();/*读1Byte数据*/pSecDa++;}T_CLK=1;T_RST=0;}2008年7月17日星期四泉州信息学院第17页六、时钟初始化名称:v_Set1302*说明:*功能:设置初始时间*调用:v_W1302()*输入:pSecDa:初始时间地址。初始时间格式为:秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B*返回值:无2008年7月17日星期四泉州信息学院第18页voidv_Set1302(uchar*pSecDa){uchari;ucharucAddr=0x80;/*命令从秒开始,WP=0,写操作*/v_W1302(0x8e,0x00);/*控制命令,WP=0,写操作*/for(i=7;i0;i--){v_W1302(ucAddr,*pSecDa);/*秒分时日月星期年*/pSecDa++;ucAddr+=2;/*命令从秒开始,每次加2是下一条*/}v_W1302(0x8e,0x80);/*控制命令,WP=1,写保护?*/}2008年7月17日星期四泉州信息学院第19页七、读取DS1302当前时间名称:v_Get1302*说明:*功能:读取DS1302当前时间*调用:uc_R1302()*输入:ucCurtime:保存当前时间地址。当前时间格式为:秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B*返回值:无2008年7月17日星期四泉州信息学院第20页名称:v_Get1302*说明:*功能:读取DS1302当前时间*调用:uc_R1302()*输入:ucCurtime:保存当前时间地址。当前时间格式为:秒分时日月星期年*7Byte(BCD码)1B1B1B1B1B1B1B*返回值:无2008年7月17日星期四泉州信息学院第21页voidv_Get1302(ucharucCurtime[]){uchari;ucharucAddr=0x81;/*命令从秒开始,WP=1,读操作*/for(i=0;i7;i++){ucCurtime[i]=uc_R1302(ucAddr);/*格式为:秒分时日月星期年*/ucAddr+=2;/*命令从秒开始,每次加2是下一条*/}2008年7月17日星期四泉州信息学院第22页最直接的程序sbitCLK=P1^0;file://与硬件相关的连线clk为DS1302的时钟信号线sbitDAT=P1^1;file://DAT为DS1302的I/O数据线sbitRST=P1^2;file://RST为DS1302的RST信号线sbitACC0=ACC^0;sbitACC1=ACC^1;sbitACC2=ACC^2;sbitACC3=ACC^3;sbitACC4=ACC^4;sbitACC5=ACC^5;sbitACC6=ACC^6;sbitACC7=ACC^7;2008年7月17日星期四泉州信息学院第23页/*函数名:write(address);/*参数:地址/数据字节/*功能:用于向DS1302输入地址或数据信息voidwrite(ucharaddress){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;}2008年7月17日星期四泉州信息学院第24页/*函数名:read();/*参数:无/*功能:用于从DS1302读出时间数据信息voidread(){//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=1return(ACC);}2008年7月17日星期四泉州信息学院第25页/*函数名:W_Byte(address,byte);/*参数:地址,数据/*功能:用于向DS1302指定的地址address输入数据byte/*****************************************/voidW_Byte(ucharaddress,ucharbyte){RST=0;CLK=0;RST=1;write(address);write(byte);RST=0;}2008年7月17日星期四泉州信息学院第26页/*函数名:R_Byte(address);/*参数:地址/*功能:用于从DS1302指定地址address处读出数据,并将数据存放到ACC中ucharR_Byte(ucharaddress){RST=0;CLK=0;RST=1;write(address);DAT=1;read();RST=0;return(ACC);}2008年7月17日星期四泉州信息学院第27页/*函数名:timeset();/*参数:无/*功能:用于设置DS1302的时间,具体时间值存放在time_set[7]数组中
本文标题:6 时钟芯片1302
链接地址:https://www.777doc.com/doc-3207445 .html