ds1302.lst

来自「STC51系列的源码」· LST 代码 · 共 309 行 · 第 1/2 页

LST
309 行
字号
 142          
 143          /********************************************************************************/
 144          /* funname : DS1302_read_8_bit()                                                */
 145          /* created : xillinx                                                            */
 146          /* time    : 2008-08-06                                                         */
 147          /* descript: 读取8位数据                                                        */
 148          /********************************************************************************/
 149          unsigned char DS1302_read_8_bit(void)
 150          {   unsigned char i,mdata=0x0;
 151   1          DS1302_set_dat(0x1);
 152   1          for(i=0x0; i<0x8; i++)
 153   1          {   mdata >>=0x1;
 154   2              DS1302_delay_min();
 155   2              if(DS1302_get_dat()==0x1)
 156   2              {  mdata|=0x80;
 157   3              }
 158   2              DS1302_set_clk(0x1);
 159   2                  DS1302_delay_max();
 160   2              DS1302_set_clk(0x0);
 161   2              
 162   2              DS1302_delay_min();
 163   2          }
 164   1          return mdata;
 165   1      }
 166          
 167          /********************************************************************************/
 168          /* funname : DS1302_read_byte()                                                 */
 169          /* created : xillinx                                                            */
 170          /* time    : 2008-08-06                                                         */
 171          /* descript: 读DS1302字节                                                       */
 172          /********************************************************************************/
 173          unsigned char DS1302_read_byte(unsigned char address)
 174          {   unsigned char mdata=0x0;
 175   1          DS1302_open();                  //* 打开DS1302
 176   1          DS1302_write_8_bit(address|0x1);//* 写入DS1302命令
 177   1          mdata=DS1302_read_8_bit();      //* 读入DS1302数据
 178   1          DS1302_close();                 //* 关闭DS1302
C51 COMPILER V8.02   DS1302                                                                09/25/2008 18:46:20 PAGE 4   

 179   1          return mdata;                   //* 返回数据
 180   1      }
 181          
 182          /********************************************************************************/
 183          /* funname : DS1302_write_byte()                                                */
 184          /* created : xillinx                                                            */
 185          /* time    : 2008-08-06                                                         */
 186          /* descript: 写DS1302字节                                                       */
 187          /********************************************************************************/
 188          void DS1302_write_byte(unsigned char address, unsigned char mdata)
 189          {   DS1302_open();              //* 打开DS1302
 190   1          DS1302_write_8_bit(address);//* 写地址
 191   1          DS1302_write_8_bit(mdata);  //* 写数据
 192   1          DS1302_close();             //* 关闭DS1302
 193   1      }
 194          
 195          /********************************************************************************/
 196          /* funname : DS1302_read_ram_byte()                                             */
 197          /* created : xillinx                                                            */
 198          /* time    : 2008-08-06                                                         */
 199          /* descript: 读DS1302的RAM字节                                                  */
 200          /********************************************************************************/
 201          unsigned char DS1302_read_ram_byte(unsigned char address)
 202          {   unsigned char mdata;
 203   1          DS1302_open();              //* 打开DS1302
 204   1          DS1302_write_8_bit((address<<0x1)|0xC1);    //* 写入DS1302命令
 205   1          mdata=DS1302_read_8_bit();  //* 读入DS1302数据
 206   1          DS1302_close();             //* 关闭DS1302
 207   1          return mdata;
 208   1      }
 209          
 210          /********************************************************************************/
 211          /* funname : DS1302_read_ram_byte()                                             */
 212          /* created : xillinx                                                            */
 213          /* time    : 2008-08-06                                                         */
 214          /* descript: 写DS1302的RAM字节                                                  */
 215          /********************************************************************************/
 216          void DS1302_write_ram_byte(unsigned char address, unsigned char mdata)
 217          {   DS1302_open();
 218   1          DS1302_write_8_bit((address<<0x1)|0xC0);
 219   1          DS1302_write_8_bit(mdata);
 220   1          DS1302_close();
 221   1      }
 222          
 223          /********************************************************************************/
 224          /* funname : DS1302_set_protect()                                               */
 225          /* created : xillinx                                                            */
 226          /* time    : 2008-08-06                                                         */
 227          /* descript: DS1302是否写保护                                                   */
 228          /********************************************************************************/
 229          void DS1302_set_protect(unsigned char flag)
 230          {       if(flag)
 231   1              {   DS1302_write_byte(DS1302_CONTROL,0x80);  //* 0x8E 控制字节地址,bit7=WP WP=1 禁止数据写入DS1302
 232   2              }
 233   1              else
 234   1              {   DS1302_write_byte(DS1302_CONTROL,0x00);  //* WP=0 允许写入DS1302
 235   2              }
 236   1      }
 237          
 238          /********************************************************************************/
 239          /* funname : DS1302_start()                                                     */
 240          /* created : xillinx                                                            */
C51 COMPILER V8.02   DS1302                                                                09/25/2008 18:46:20 PAGE 5   

 241          /* time    : 2008-08-06                                                         */
 242          /* descript: DS1302开始工作                                                     */
 243          /********************************************************************************/
 244          void DS1302_start(void)
 245          {   unsigned char mdata;
 246   1          mdata =DS1302_read_byte(DS1302_SECOND);//* 读秒数据
 247   1          mdata&=0x7F;                //* 打开晶振
 248   1          DS1302_set_protect(0x0);    //* 开放DS1302写保护
 249   1          DS1302_write_byte(DS1302_SECOND,mdata);//打开晶振
 250   1          DS1302_set_protect(0x1);    //使能DS1302写保护
 251   1      }
 252          
 253          /********************************************************************************/
 254          /* funname : DS1302_get_time()                                                  */
 255          /* created : xillinx                                                            */
 256          /* time    : 2008-08-06                                                         */
 257          /* descript: DS1302开始工作                                                     */
 258          /********************************************************************************/
 259          void DS1302_get_time(void)
 260          {       unsigned char mdata;
 261   1          memset(&DS1302_time,0x0,sizeof(st_ds1302_time));
 262   1              mdata = DS1302_read_byte(DS1302_SECOND);
 263   1              DS1302_time.second = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
 264   1              mdata = DS1302_read_byte(DS1302_MINUTE);
 265   1              DS1302_time.minute = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
 266   1              mdata = DS1302_read_byte(DS1302_HOUR);
 267   1              DS1302_time.hour   = ((mdata&0x10)>>4)*10 + (mdata&0x0F);
 268   1              mdata = DS1302_read_byte(DS1302_DAY);
 269   1              DS1302_time.day    = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
 270   1              mdata = DS1302_read_byte(DS1302_WEEK);
 271   1              DS1302_time.week   = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
 272   1              mdata = DS1302_read_byte(DS1302_MONTH);
 273   1              DS1302_time.month  = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
 274   1              mdata = DS1302_read_byte(DS1302_YEAR);
 275   1              DS1302_time.year   = ((mdata&0x70)>>4)*10 + (mdata&0x0F);
 276   1      }


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


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

⌨️ 快捷键说明

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