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

📄 ds1302.lst

📁 单片机C语言编程与实例源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 171   1              Write();                                //对DS1302写命令字和地址
 172   1          ds1302_dat = 1;
 173   1          for(a=0;a<size;a++)                 //读出DS1302数据
 174   1          {
 175   2              ACC_0 = ds1302_dat;    
 176   2              ds1302_clk = 1; ds1302_clk = 0; ACC_1 = ds1302_dat;
 177   2              ds1302_clk = 1; ds1302_clk = 0; ACC_2 = ds1302_dat;
 178   2              ds1302_clk = 1; ds1302_clk = 0; ACC_3 = ds1302_dat;
 179   2              ds1302_clk = 1; ds1302_clk = 0; ACC_4 = ds1302_dat;
C51 COMPILER V7.02a   DS1302                                                               04/22/2003 22:51:04 PAGE 4   

 180   2              ds1302_clk = 1; ds1302_clk = 0; ACC_5 = ds1302_dat;
 181   2              ds1302_clk = 1; ds1302_clk = 0; ACC_6 = ds1302_dat;
 182   2              ds1302_clk = 1; ds1302_clk = 0; ACC_7 = ds1302_dat;
 183   2              b = ACC;
 184   2              *(buffer+a)=b;
 185   2              ds1302_clk = 1; ds1302_clk = 0;
 186   2          }
 187   1          ds1302_rst = 0;
 188   1          ds1302_clk = 1;
 189   1      }
 190          
 191          void WriteRam(uchar data * buffer,uchar size)    //向RAM中写入多个字节
 192          {
 193   1          register uchar a;
 194   1          ds1302_clk = 0;
 195   1          ds1302_rst = 0;
 196   1          ds1302_rst = 1;
 197   1          ACC = 0xfe;                         //命令字为FE
 198   1          Write();                            //对DS1302写命令字和地址
 199   1          for(a=0;a<size;a++)
 200   1          {
 201   2              ACC = *(buffer+a);
 202   2              Write();                        //对DS1302写数据
 203   2          }    
 204   1          ds1302_rst = 0;
 205   1          ds1302_clk = 1;
 206   1      }
 207          
 208          void WriteRTC(uchar data * buffer,uchar size)    //向DS1302中写入多个字节
 209          {//注意:连续写DS1302只能是8个字节一起写
 210   1          register uchar a;
 211   1          ds1302_clk = 0;
 212   1          ds1302_rst = 0;
 213   1          ds1302_rst = 1;
 214   1          ACC = 0xbe;                         //命令字为BEH
 215   1          Write();                            //对DS1302写命令字和地址
 216   1          for(a=0;a<size;a++)
 217   1          {
 218   2              ACC = *(buffer+a);
 219   2              Write();                        //对DS1302写数据
 220   2          }
 221   1          ds1302_rst = 0;
 222   1          ds1302_clk = 1;
 223   1      }
 224          
 225          uchar ReadSec(void)                     //从DS1302中读出秒字节
 226          {
 227   1          return ReadRTC_Byte(0x81);
 228   1      }
 229          
 230          uchar ReadMin(void)                     //从DS1302中读出分字节
 231          {
 232   1          return ReadRTC_Byte(0x83);
 233   1      }
 234          
 235          uchar ReadHr(void)                      //从DS1302中读出时字节
 236          {
 237   1          return ReadRTC_Byte(0x85);
 238   1      }
 239          
 240          uchar ReadDay(void)                     //从DS1302中读出日字节
 241          {
C51 COMPILER V7.02a   DS1302                                                               04/22/2003 22:51:04 PAGE 5   

 242   1          return ReadRTC_Byte(0x87);
 243   1      }
 244          
 245          uchar ReadMonth(void)                           //从DS1302中读出月字节
 246          {
 247   1          return ReadRTC_Byte(0x89);
 248   1      }
 249          
 250          uchar ReadWeek(void)                            //从DS1302中读出星期字节
 251          {
 252   1          return ReadRTC_Byte(0x8B);
 253   1      }
 254          
 255          uchar ReadYear(void)                            //从DS1302中读出年字节
 256          {
 257   1          return ReadRTC_Byte(0x8D);
 258   1      }
 259          
 260          void WriteSec(uchar number)             //向DS1302中写入秒字节
 261          {
 262   1          WriteRTC_Byte(0x80,number);
 263   1      }
 264          
 265          void WriteMin(uchar number)             //向DS1302中写入分字节
 266          {
 267   1          WriteRTC_Byte(0x82,number);
 268   1      }
 269          
 270          void WriteHr(uchar number)              //向DS1302中写入时字节
 271          {
 272   1          WriteRTC_Byte(0x84,number);
 273   1      }
 274          
 275          void WriteDay(uchar number)             //向DS1302中写入日字节
 276          {
 277   1          WriteRTC_Byte(0x86,number);
 278   1      }
 279          
 280          void WriteMonth(uchar number)           //向DS1302中写入月字节
 281          {
 282   1          WriteRTC_Byte(0x88,number);
 283   1      }
 284          
 285          void WriteWeek(uchar number)            //向DS1302中写入星期字节
 286          {
 287   1          WriteRTC_Byte(0x8A,number);
 288   1      }
 289          
 290          void WriteYear(uchar number)            //向DS1302中写入年字节
 291          {
 292   1          WriteRTC_Byte(0x8C,number);
 293   1      }
 294          
 295          void WriteControl(uchar number)         //向慢速充电控制寄存器写入控制字节
 296          {
 297   1          WriteRTC_Byte(0x90,number);
 298   1      }
 299          
 300          void DisableWP(void)                            //禁止写保护
 301          {
 302   1          WriteRTC_Byte(0x8E,0);
 303   1      }
C51 COMPILER V7.02a   DS1302                                                               04/22/2003 22:51:04 PAGE 6   

 304          
 305          void EnableWP(void)                     //允许写保护
 306          {
 307   1          WriteRTC_Byte(0x8E,0x80);
 308   1      }
 309          
 310          void main(void)                                 //主程序
 311          {
 312   1          uchar sec,min,hr,day,month,week,year;
 313   1          uchar data buffer1[32] = 
 314   1      {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
 315   1          uchar data buffer2[8] = {45,45,15,13,3,2,01,0};
 316   1          ReadRTC(buffer2,8);
 317   1          DisableWP();                                //禁止写保护
 318   1          WriteControl(0xaa);                 //向慢速充电控制寄存器写入控制字节
 319   1          WriteRam(buffer1,31);                       //写DS1302RAM
 320   1          WriteRTC(buffer2,8);                        //写DS1302时钟
 321   1          EnableWP();                         //允许写保护
 322   1          ReadRam(buffer1,31);                        //读DS1302RAM
 323   1          ReadRTC(buffer2,8);                 //读DS1302时钟
 324   1          sec = ReadSec();                            //读秒
 325   1          min = ReadMin();                            //读分
 326   1          hr = ReadHr();                              //读小时
 327   1          day = ReadDay();                            //读日
 328   1          month = ReadMonth();                        //读月
 329   1          week = ReadWeek();                  //读星期
 330   1          year = ReadYear();                  //读年
 331   1          ACC = 0;
 332   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    678    ----
   CONSTANT SIZE    =     40    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      47
   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 + -