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

📄 www.ourhc.cn.lst

📁 STC12C5A60S2精简开发板使用手机及其经典例程
💻 LST
字号:
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:36:48 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应用12T
   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          从DS1302读1字节数据
  46          **************************************/
  47          BYTE DS1302_ReadByte()
  48          {
  49   1          BYTE i;
  50   1          BYTE dat = 0;
  51   1      
  52   1          for (i=0; i<8; i++)             //8位计数器
  53   1          {
  54   2              SCLK = 0;                   //时钟线拉低
  55   2              _nop_();                    //延时等待
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:36:48 PAGE 2   

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

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

C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 21:36:48 PAGE 4   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    251    ----
   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 + -