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

📄 www.ourhc.cn.lst

📁 STC12C5A60S2精简开发板使用手机及其经典例程
💻 LST
字号:
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:35:00 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2                                      汇诚科技
   3          
   4          实现功能:STC12C5A60S2单片机之DS1302应用1T
   5          使用芯片:STC12C5A60S2
   6          晶振:11.0592MHZ
   7          波特率:115200
   8          编译环境:Keil
   9          作者:zhangxinchun
  10          网站:www.ourhc.cn
  11          淘宝店:
  12          汇诚科技 http://ourhc.taobao.com
  13          郑兴电子直销部 http://shop68451856.taobao.com
  14          【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!  
  15            
  16          
  17          *********************************************************************/
  18          #include "REG52.H"
  19          #include "INTRINS.H"
  20          
  21          typedef unsigned char BYTE;
  22          
  23          sbit SCLK = P1^0;                   //DS1302时钟口P1.0
  24          sbit IO = P1^1;                     //DS1302数据口P1.1
  25          sbit RST = P1^2;                    //DS1302片选口P1.2
  26          
  27                              //秒    分    时    日    月  星期    年
  28          BYTE code init[] = {0x00, 0x00, 0x20, 0x01, 0x01, 0x05, 0x10};
  29          BYTE data now[7];
  30          
  31          void DS1302_Initial();
  32          void DS1302_SetTime(BYTE *p);
  33          void DS1302_GetTime(BYTE *p);
  34          
  35          void main()
  36          {
  37   1          DS1302_Initial();               //初始化DS1302
  38   1          DS1302_SetTime(init);           //设置初始时间
  39   1      
  40   1          DS1302_GetTime(now);            //读取当前时间
  41   1          while (1);
  42   1      }
  43          
  44          /**************************************
  45          延时X微秒(STC12C5A60S2@12M)
  46          不同的工作环境,需要调整此函数
  47          此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同
  48          **************************************/
  49          void Delay()
  50          {
  51   1          _nop_();
  52   1          _nop_();
  53   1      }
  54          
  55          /**************************************
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:35:00 PAGE 2   

  56          从DS1302读1字节数据
  57          **************************************/
  58          BYTE DS1302_ReadByte()
  59          {
  60   1          BYTE i;
  61   1          BYTE dat = 0;
  62   1      
  63   1          for (i=0; i<8; i++)             //8位计数器
  64   1          {
  65   2                      SCLK = 0;                   //时钟线拉低
  66   2                      Delay();                //延时等待
  67   2              dat >>= 1;                      //数据右移一位
  68   2                      if (IO) dat |= 0x80;        //读取数据
  69   2                      SCLK = 1;                   //时钟线拉高
  70   2                      Delay();                //延时等待
  71   2              }
  72   1      
  73   1          return dat;
  74   1      }
  75          
  76          /**************************************
  77          向DS1302写1字节数据
  78          **************************************/
  79          void DS1302_WriteByte(BYTE dat)
  80          {
  81   1          char i;
  82   1      
  83   1          for (i=0; i<8; i++)             //8位计数器
  84   1          {
  85   2              SCLK = 0;                   //时钟线拉低
  86   2              Delay();                //延时等待
  87   2              dat >>= 1;                  //移出数据
  88   2              IO = CY;                    //送出到端口
  89   2              SCLK = 1;                   //时钟线拉高
  90   2              Delay();                //延时等待
  91   2          }
  92   1      }
  93          
  94          /**************************************
  95          读DS1302某地址的的数据
  96          **************************************/
  97          BYTE DS1302_ReadData(BYTE addr)
  98          {
  99   1          BYTE dat;
 100   1      
 101   1          RST = 0;
 102   1          Delay();
 103   1          SCLK = 0;
 104   1          Delay();
 105   1          RST = 1;
 106   1          Delay();
 107   1          DS1302_WriteByte(addr);         //写地址
 108   1          dat = DS1302_ReadByte();        //读数据
 109   1          SCLK = 1;
 110   1          RST = 0;
 111   1      
 112   1          return dat;
 113   1      }
 114          
 115          /**************************************
 116          往DS1302的某个地址写入数据
 117          **************************************/
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:35:00 PAGE 3   

 118          void DS1302_WriteData(BYTE addr, BYTE dat)
 119          {
 120   1          RST = 0;
 121   1          Delay();
 122   1          SCLK = 0;
 123   1          Delay();
 124   1          RST = 1;
 125   1          Delay();
 126   1          DS1302_WriteByte(addr);         //写地址
 127   1          DS1302_WriteByte(dat);          //写数据
 128   1          SCLK = 1;
 129   1          RST = 0;
 130   1      }
 131          
 132          /**************************************
 133          写入初始时间
 134          **************************************/
 135          void DS1302_SetTime(BYTE *p)
 136          {
 137   1          BYTE addr = 0x80;
 138   1          BYTE n = 7;
 139   1      
 140   1          DS1302_WriteData(0x8e, 0x00);   //允许写操作
 141   1          while (n--)
 142   1          {
 143   2              DS1302_WriteData(addr, *p++);
 144   2              addr += 2;
 145   2          }
 146   1          DS1302_WriteData(0x8e, 0x80);   //写保护
 147   1      }
 148          
 149          /**************************************
 150          读取当前时间
 151          **************************************/
 152          void DS1302_GetTime(BYTE *p)
 153          {
 154   1          BYTE addr = 0x81;
 155   1          BYTE n = 7;
 156   1      
 157   1          while (n--)
 158   1          {
 159   2              *p++ = DS1302_ReadData(addr);
 160   2              addr += 2;
 161   2          }
 162   1      }
 163          
 164          /**************************************
 165          初始化DS1302
 166          **************************************/
 167          void DS1302_Initial()
 168          {
 169   1          RST = 0;
 170   1          SCLK = 0;
 171   1          DS1302_WriteData(0x8e, 0x00);   //允许写操作
 172   1          DS1302_WriteData(0x80, 0x00);   //时钟启动
 173   1          DS1302_WriteData(0x90, 0xa6);   //一个二极管+4K电阻充电
 174   1          DS1302_WriteData(0x8e, 0x80);   //写保护
 175   1      }
 176          
 177          
 178          /********************************************************************
 179                                        结束
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:35:00 PAGE 4   

 180          *********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    249    ----
   CONSTANT SIZE    =      7    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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