⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新型实时时钟芯片ds12887原理与应用.htm

📁 一个单片机+实时时钟芯片实现的万年历程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle 
          borderColorDark=#000000><FONT face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle 
          borderColorDark=#000000><FONT face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle 
          borderColorDark=#000000><FONT face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle 
          borderColorDark=#000000><FONT face=楷体_GB2312 
        size=1>0</FONT></TD></TR></TBODY></TABLE><FONT face=宋体 
      size=2>&nbsp;&nbsp;&nbsp; 
      IRQF:中断申请标志位。当下列表达式中一个或多个为真时,置1。<BR>&nbsp;&nbsp;&nbsp; 
      PF=PIE=1;AF=AIE=1;<BR>&nbsp;&nbsp;&nbsp; UF=UIE=1;<BR>&nbsp;&nbsp;&nbsp; 
      即:IRQF=PF·PIE+AF·AIE+UF·UIE<BR>&nbsp;&nbsp;&nbsp; 只要IRQF为1,<SPAN 
      style="TEXT-DECORATION: overline">IRQ</SPAN>管脚输出低 ,程序读寄存器C以后或<SPAN 
      style="TEXT-DECORATION: overline">RESET</SPAN>管脚为低后,所有标志位清零。<BR>&nbsp;&nbsp; 
      AF:定闹中断标志位,只读,AF为1表明现在时间与定闹时间匹配。<BR>&nbsp;&nbsp;&nbsp; 
      VF:更新周期结束标志位。VF为1表明更新周期结束。<BR>&nbsp;&nbsp;&nbsp; 
      BIAT0~BIT3:未用状态位,读出总为0,不能写入。<BR><B>4.4 寄存器D</B> 
      <TABLE cellSpacing=1 width=450 border=1>
        <TBODY>
        <TR>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT7</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT6</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT5</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT4</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIOT</FONT><FONT face=楷体_GB2312 
          size=1>3</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT</FONT><FONT face=楷体_GB2312 
          size=1>2</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT</FONT></FONT><FONT face=楷体_GB2312 
            size=1>1</FONT></TD><FONT face=宋体 size=2>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>BIT</FONT></FONT><FONT face=楷体_GB2312 
            size=1>0</FONT></TD></TR>
        <TR>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>VRT</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD>
          <TD borderColor=#ffffff borderColorLight=#000000 align=middle><FONT 
            face=楷体_GB2312 size=1>0</FONT></TD></TR></TBODY></TABLE><FONT face=宋体 
      size=2>&nbsp;&nbsp;&nbsp; VRT:内部锂电池状态位,平时应总读出1,如出现0,表明内部锂电池耗 
      尽。<BR>&nbsp;&nbsp;&nbsp; BIT0~BIT6:未用状态位,读出总为0,不能写入。</FONT>
      <P><B><FONT face=黑体 size=4>5. 硬件接口电路<IMG height=121 
      src="新型实时时钟芯片DS12887原理与应用.files/970103t4.jpg" width=196 align=right 
      border=0></FONT></B>
      <P><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp; 
      DS12887时钟芯片和80C31单微机的接口电路如图4所示。模式选择脚MOT拉地,选择不NTEL时序,选择DS12887时钟芯片的地址总线及AS端口和80C31单片微机的P0及ALE端直接相联;而DS、R/W读写控制线与单片机的RD、WAR控制线相连;DS12887的高位地址由80C31半日片机的P2.7端口来片选,则DS12887的高8位地址定为7FH,而其低8侠地址则由芯片内部各单元的地址来决定(00H~3FH);DS12887的中断输出端<SPAN 
      style="TEXT-DECORATION: overline">IRQ</SPAN>和80C的外部<SPAN 
      style="TEXT-DECORATION: overline">I</SPAN><SPAN 
      style="TEXT-DECORATION: overline">NT0</SPAN>端相联,给单片机提供中断信号;DS12887的SQW端口可编程产生方波输出信号。</FONT>
      <P><B><FONT face=黑体 size=4>6. 接口软件</FONT></B>
      <P><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp; 
      下面为DS12887时钟芯片和80C31单片机的接口软件,假定采用每天24小时制的非夏令时,时间数据格式为BCD码,初始化时间为1996年1月1日9时00分00秒,1k方波输出。时钟芯片每一秒种向单片机申请中断一次,一方面让单片机修改一次时钟显示,另一方面也给单片微机系统提供时间基准。<BR>&nbsp;&nbsp;&nbsp; 
      (1)DS12887时钟芯片的初始化写入程序<BR>&nbsp;&nbsp;&nbsp; MOV 
      DPTR,#7F0AH;寄存器A地址<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      A,#70H:DV2~DV0=111,分频复位<BR>&nbsp;&nbsp;&nbsp; MOVX&nbsp; @ 
      DPTR,AA<BR>&nbsp;&nbsp;&nbsp; INC&nbsp; DPTR:到寄存器B地址<BR>&nbsp;&nbsp;&nbsp; 
      MOV&nbsp; A,#8AH:停止更新,允许更新中断,选BCD码,24小时制<BR></FONT>&nbsp;&nbsp;&nbsp;<FONT 
      face=宋体 size=2> MOVX&nbsp; @DPRT,A<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      QPL,#00H,秒单元地址<BR>&nbsp;&nbsp;&nbsp; CLR&nbsp; A:00秒<BR>&nbsp;&nbsp;&nbsp; 
      MOVX&nbsp; @DPTR,A<BR>&nbsp;&nbsp;&nbsp; MOV 
      DPL,#02H;分单元地址<BR>&nbsp;&nbsp;&nbsp; CLR&nbsp; A:00分<BR>&nbsp;&nbsp;&nbsp; 
      MOVX @DPTR,A<BR>&nbsp;&nbsp;&nbsp; MOV 
      DPL,#04H;时单元地址<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      A,#09H;9时<BR>&nbsp;&nbsp;&nbsp; MOVX&nbsp; @DPTR,A<BR>&nbsp;&nbsp;&nbsp; 
      MOV&nbsp; DPL#07H;日单元地址<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      A,@01H:1日<BR>&nbsp;&nbsp;&nbsp; 
      MOVX @DPTR,A<BR>  INC DPTR:到月单元地址<BR>  MOV A,#01H;1月<BR>&nbsp;&nbsp;&nbsp; 
      MOVX&nbsp; @DPTR,A<BR>&nbsp;&nbsp;&nbsp; IC&nbsp; 
      DPTR:到年单元地址<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      A,#96H;1996年<BR>&nbsp;&nbsp;&nbsp; MOVX&nbsp; 
      @DPTR,A<BR>&nbsp;&nbsp;&nbsp; INC&nbsp; DPTR;到寄存器A地址<BR>&nbsp;&nbsp;&nbsp; 
      MOV&nbsp; A,#26H;DV2~DV0=010&nbsp; RS3~RS0=0110<BR>&nbsp;&nbsp;&nbsp; 
      MOVX&nbsp; @DPTR,A:选周期中断率为976.5625&micro;s,允许方波输出,频率1kHz<BR>&nbsp;&nbsp;&nbsp; 
      INC&nbsp; DPTR:到寄存器B<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp; 
      A,#1AH;每秒更新一次,允许方波输出,24小时制<BR>&nbsp;&nbsp;&nbsp; MOVX&nbsp; 
      @DPTR,A:时钟开始运行<BR>&nbsp;&nbsp;&nbsp; 
      (2)读取DS12887时钟日历数据程序<BR>&nbsp;&nbsp;&nbsp; 
      DS12887的日历时钟通常有中断和查询两种方法读出。但在读数据时,首先要判断数据是否更新结束,只有在数据更新结束时数据读出才有效。<BR>&nbsp;&nbsp;&nbsp; 
      ①采用查询法读取数据:<BR>&nbsp;&nbsp;&nbsp; 
      查询寄存器A的UIP位,当UIP=0时,数据更新结束,可以读出。以下是采用查询方法,从秒至年单元的数据读出后存入80C31内部RAM的30~35H单元中,该部分程序如下:<BR>&nbsp;&nbsp;&nbsp; 
      MOV&nbsp; DPTR,#7F0AH;寄存器A地址<BR>&nbsp;&nbsp;&nbsp; MOVX&nbsp; 
      A,@DPTR<BR>&nbsp;&nbsp;&nbsp; WAIT:JB&nbsp; 
      ACC,7,WAIT:UIP=1则等待更新完毕<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      DPL,@00H;秒地址<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      R0,#30H;取目标首地址<BR>&nbsp;&nbsp;&nbsp; MOVX&nbsp;&nbsp; 
      A,@DPTR;取秒数据<BR>&nbsp;&nbsp;&nbsp; MOV&nbsp; 
      @R0,A:送入80C31的内部RAM缓冲区<BR>&nbsp;&nbsp;&nbsp; IC&nbsp; 
      DPTR:移指针<BR>&nbsp;&nbsp;&nbsp; IC&nbsp; R0<BR>&nbsp;&nbsp;&nbsp; 
      ;以下略<BR>&nbsp;&nbsp;&nbsp; ②采用中断法读取数据<BR>&nbsp;&nbsp;&nbsp; 
      当DS12887发出中断请示,单片微机可以响应中断而读取日历数据。对于更新结束中断,中断时更新结束,数据有效,可以直接读取日历数据;对于闹钟中断和周期中断也需查询寄存器A的UIP位,当UIP=0时,数据更新结束,再读出日历时钟,具体指令这里不再列出。</FONT> 
      </P></FONT></FONT></TD></TR>
  <TR align=middle>
    <TD width=744 colSpan=2>
      <P style="LINE-HEIGHT: 200%" align=center>
      <P align=center><FONT face=宋体 color=#0000bb size=2><INPUT class=main onclick=window.close() type=submit value=关闭本文 name="Close Window"> 
      </FONT></P>
      <P style="LINE-HEIGHT: 200%"><FONT face=宋体 size=2><BR><FONT 
      color=#ff0000>本文文章著作权归作者和《国外电子元器件》所有<BR>“器件在线”网页版权所有<BR><B>任何单位和个人未经许可,严禁链接,镜像,复制,拷贝或转载</B></FONT></FONT></P></TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -