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

📄 ds1302.lst

📁 时钟芯片ds1302的程序
💻 LST
字号:
C51 COMPILER V7.02a   DS1302                                                               12/05/2007 16:04:24 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /****************************************Copyright (c)**************************************************
   2          **--------------文件信息--------------------------------------------------------------------------------
   3          **文   件   名: ds1302.c
   4          **创   建   人: 
   5          **创 建 日  期: 
   6          **最后修改日期: 
   7          **描        述: 中断处理初始化及中断处理 
   8          ********************************************************************************************************/
   9          #define _DS1302_C_
  10          
  11          #include "Intrins.h"
  12          #include "reg51.h"
  13          #include "DS1302.h"
  14          
  15          sbit T_CLK = P1^1;
  16          sbit T_IO  = P1^2;
  17          sbit T_RST = P1^3;
  18          sbit BIT7  = ACC^7;
  19          sbit BIT0  = ACC^0;
  20          
  21          unsigned int *pCurrentTime;                     //用于*GetTime()函数中存放读到的时间值
  22          unsigned char CurrentTime[7];           //用于*GetTime()函数中存放读到的时间值
  23          unsigned char i,j,k,x,m,n;                      //用于循环次数
  24          unsigned char OutData;                          //用于Read1302(unsigned char ucAddress)函数中返回读取的值
  25          unsigned char InitTime[7] = {0x00,0x01,0x01,0x01,0x01,0x01,0x01};
  26                                                          //   秒   分   时   日   月   星期 年
  27          /****************************************************************************
  28          * 名    称:Initial1302()
  29          * 功    能:DS1302初始化
  30          * 入口参数:无
  31          * 出口参数:无
  32          * 说    明:设置时间初值
  33          ****************************************************************************/
  34          #ifdef _INITIAL_1302_
  35          void Initial1302()      
  36          {
  37   1              unsigned char wAddress = 0x80;          //秒寄存器写地址
  38   1              Write1302(0x8e,0x00);                           //将控制寄存器值设为0,最高位WP=0允许写
  39   1              for(i=0;i<7;i++)                                        //将7个时间初值写入对应的寄存器
  40   1              {
  41   2                      Write1302(wAddress,InitTime[i]);
  42   2                      wAddress += 2;
  43   2              }
  44   1              Write1302(0x8e,0x80);                           //写保护,防止干扰影响时间值    
  45   1      }
  46          #endif
  47          /****************************************************************************
  48          * 名    称:InputByte(unsigned char InData)
  49          * 功    能:写入一个字节数据
  50          * 入口参数:unsigned char InData
  51          * 出口参数:无
  52          * 说    明:8位数据写入函数
  53          ****************************************************************************/
  54          #ifdef _INPUT_BYTE_
  55          InputByte(unsigned char InByte)
C51 COMPILER V7.02a   DS1302                                                               12/05/2007 16:04:24 PAGE 2   

  56          {
  57   1              ACC = InByte;                                           //将要写入的数放在ACC中
  58   1              for(j=8;j>0;j--)                                        //循环8次,写入8位数据,从低位到高位
  59   1              {
  60   2                      T_IO = BIT0;                                    //将ACC的低位放在I/O线上
  61   2                      _nop_();
  62   2                      T_CLK = 0;
  63   2                      T_CLK = 1;                                              //在时钟线的上升沿写入1位数据
  64   2                      ACC = ACC >> 1;                                 //将待写入数据的高位移至ACC^0
  65   2              }
  66   1      }
  67          #endif
  68          /****************************************************************************
  69          * 名    称:OutputByte()
  70          * 功    能:读出一个字节数据
  71          * 入口参数:无
  72          * 出口参数:ACC
  73          * 说    明://8位数据读出函数
  74          ****************************************************************************/
  75          #ifdef _OUTPUT_BYTE_
  76          unsigned char OutputByte()                              
  77          {
  78   1              ACC = 0;
  79   1              for(k=8;k>0;k--)
  80   1              {
  81   2                      ACC = ACC >> 1;                                 //先收到的是低位,所以将其往低位移
  82   2                      T_CLK = 1;              
  83   2                      T_CLK = 0;                                              //时钟下降沿读出1位数据
  84   2                      BIT7 = T_IO;    
  85   2              }
  86   1              return ACC;
  87   1      }
  88          #endif
  89          /****************************************************************************
  90          * 名    称:Write1302()
  91          * 功    能:将指令或数据写入对应的寄存器
  92          * 入口参数:unsigned char Address,unsigned char InData
  93          * 出口参数:无
  94          * 说    明:
  95          ****************************************************************************/
  96          #ifdef _WRITE_1302_
  97          void Write1302(unsigned char xAddress,unsigned char InData)
  98          {
  99   1              T_CLK = 0;
 100   1              T_RST = 0;
 101   1              
 102   1              T_RST = 1;                                                      //启动数据传送
 103   1              _nop_();
 104   1              InputByte(xAddress);                            //调用写入函数,先写入地址      
 105   1              InputByte(InData);                                      //调用写入函数将指令或数据写入
 106   1              T_RST = 0;
 107   1              //T_CLK = 1;
 108   1      }
 109          #endif
 110          /****************************************************************************
 111          * 名    称:Read1302(unsigned char Address)
 112          * 功    能:读出对应寄存器的内容
 113          * 入口参数:unsigned char Address
 114          * 出口参数:OutData
 115          * 说    明:
 116          ****************************************************************************/
 117          #ifdef _READ_1302_
C51 COMPILER V7.02a   DS1302                                                               12/05/2007 16:04:24 PAGE 3   

 118          unsigned char Read1302(unsigned char dAddress)
 119          {
 120   1              T_CLK = 0;
 121   1              T_RST = 0;
 122   1              T_RST = 1;
 123   1              _nop_();
 124   1              InputByte(dAddress);                            //调用写入函数,先写入地址      
 125   1              OutData = OutputByte();
 126   1              T_RST = 0;
 127   1      //      T_CLK = 1;
 128   1              return OutData;
 129   1      }
 130          #endif
 131          
 132          /****************************************************************************
 133          * 名    称:GetTime
 134          * 功    能:读取当前时间值
 135          * 入口参数:无
 136          * 出口参数:CurrentTime
 137          * 说    明:
 138          ****************************************************************************/
 139          #ifdef _GET_TIME_
 140          unsigned int *GetTime()         
 141          {
 142   1              unsigned char rAddress = 0x81;          //秒寄存器读地址
 143   1              for(x=0;x<7;x++)
 144   1              {
 145   2      //              *(pCurrentTime + x) = Read1302(rAddress);       //读对应时钟寄存器的值
 146   2                      CurrentTime[x] = Read1302(rAddress);
 147   2                      rAddress += 2;
 148   2              }
 149   1              return pCurrentTime;
 150   1      }
 151          #endif
 152          
 153          /****************************************************************************
 154          * 名    称:Delay10ms()
 155          * 功    能:延时10ms
 156          * 入口参数:无
 157          * 出口参数:无
 158          * 说    明:1us每周期
 159          ****************************************************************************/
 160          #ifdef _DELAY_10_MS_
 161          void Delay10ms()                
 162          {
 163   1              for(m=20;m>0;m--)       
 164   1              for(n=250;n>0;n--);     
 165   1      }
 166          #endif
*** WARNING C316 IN LINE 166 OF DS1302.c: unterminated conditionals


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    169    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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