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

📄 sd2000drv.lst

📁 压缩包中包括多个常用的汇编
💻 LST
字号:
C51 COMPILER V7.09   SD2000DRV                                                             07/12/2005 15:35:29 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE SD2000DRV
OBJECT MODULE PLACED IN .\sd2000drv.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\sd2000drv\sd2000drv.c BROWSE DEBUG OBJECTEXTEND PRINT(.\sd2000drv.lst) O
                    -BJECT(.\sd2000drv.obj)

line level    source

   1          /****************************************************************************/
   2          /*                                                                          */
   3          /*               Copyright (c) 2005, 老树工作室                             */
   4          /*                   All rights reserved.                                   */
   5          /*                                                                          */
   6          /*      http://www.saintone.net      Email:hxm0902@163.com                  */
   7          /*      QQ:112431149                 Tel:010-62966630                       */
   8          /*                                                                          */
   9          /****************************************************************************/
  10          /****************************************************************************/
  11          /* 文件名:sd2000drv.c                                                      */
  12          /* 版  本:Version 1.0                                                      */
  13          /* 描  述:sd2000驱动代码                                                   */
  14          /* 作  者:spot                                                             */
  15          /* 函  数:                                                                 */
  16          /*         sd2000_wait                                                      */
  17          /*         sd2000_start                                                     */
  18          /*         sd2000_stop                                                      */ 
  19          /*         sd2000_ack                                                       */
  20          /*         sd2000_no_ack                                                    */
  21          /*         sd2000_wait_ack                                                  */
  22          /*         sd2000_send_byte                                                 */
  23          /*         sd2000_receive_byte                                              */
  24          /*                                                                          */
  25          /* 历史记录:                                                               */
  26          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
  27          /****************************************************************************/
  28          #include <reg51.h>
  29          #include <absacc.h>
  30          #include <intrins.h>
  31          
  32          sbit SDA = P1^3;              /* sd2000数据传送位 */
  33          sbit SCL = P1^4;              /* sd2000时钟控制位 */
  34          
  35          /* 函数声明 */
  36          void sd2000_wait(void);       /* sd2000延时       */
  37          void sd2000_start(void);      /* 开启sd2000总线   */
  38          void sd2000_stop(void);       /* 关闭sd2000总线   */
  39          void sd2000_ack(void);        /* 发送ACK信号      */
  40          void sd2000_no_ack(void);     /* 发送NOACK信号    */
  41          bit sd2000_wait_ack(void);    /* 等待ACK信号      */
  42          void sd2000_send_byte(unsigned char demand, bit order);    /* MCU向sd2000发送一个字节 */
  43          unsigned char sd2000_receive_byte(void);                   /* MCU从sd2000接收一个字节 */
  44          /* 声明结束 */
  45          
  46          unsigned char date[7];
  47          
  48          /* sd2000延时       */
  49          void sd2000_wait(void)
  50          {
  51   1          _nop_();
  52   1          _nop_();
  53   1          _nop_();
  54   1          _nop_();    
C51 COMPILER V7.09   SD2000DRV                                                             07/12/2005 15:35:29 PAGE 2   

  55   1      }
  56          
  57          /* 开启sd2000总线   */
  58          void sd2000_start(void)
  59          {
  60   1          SDA = 1;
  61   1          SCL = 1;
  62   1          sd2000_wait();    
  63   1          SDA = 0;
  64   1          sd2000_wait();
  65   1          SCL = 0;
  66   1      }
  67          
  68          /* 关闭sd2000总线   */
  69          void sd2000_stop(void)
  70          {
  71   1          SDA=0;
  72   1          SCL=0;
  73   1          sd2000_wait();
  74   1          SCL=1;
  75   1          sd2000_wait();
  76   1          SDA=1;    
  77   1      }
  78          
  79          /* 发送ACK信号   */
  80          void sd2000_ack(void)
  81          {       
  82   1          SDA=0;
  83   1          sd2000_wait();
  84   1          SCL=1;
  85   1          sd2000_wait();
  86   1          SCL=0;
  87   1      }
  88          
  89          /* 发送NOACK信号 */
  90          void sd2000_no_ack(void)
  91          {       
  92   1          SDA=1;
  93   1          sd2000_wait();
  94   1          SCL=1;
  95   1          sd2000_wait();
  96   1          SCL=0;      
  97   1      }
  98          
  99          /****************************************************************************/
 100          /* 函数名:sd2000_wait_ack                                                  */
 101          /* 功  能:等待ACK信号                                                      */
 102          /* 作  者:spot                                                             */
 103          /* 输  入:无                                                               */
 104          /* 输  出:1-ACK         0-ERROR                                            */
 105          /*                                                                          */
 106          /* 历史记录:                                                               */
 107          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 108          /****************************************************************************/
 109          bit sd2000_wait_ack(void)
 110          {
 111   1          unsigned char errtime=255;
 112   1          
 113   1          SDA=1;
 114   1          sd2000_wait();
 115   1          SCL=1;
 116   1          sd2000_wait();
C51 COMPILER V7.09   SD2000DRV                                                             07/12/2005 15:35:29 PAGE 3   

 117   1          
 118   1          while(SDA)
 119   1          {
 120   2              errtime--;
 121   2              if(!errtime)
 122   2                  return 0;
 123   2          }
 124   1          
 125   1          SCL=0;
 126   1          return 1;
 127   1      }
 128          
 129          /****************************************************************************/
 130          /* 函数名:sd2000_send_byte                                                 */
 131          /* 功  能:MCU向sd2000设备发送一个字节                                      */
 132          /* 作  者:spot                                                             */
 133          /* 输  入:                                                                 */
 134          /*         demand                  待发送命令或数据                         */
 135          /*         order                   1,发送命令;  0,发送数据                  */
 136          /*                                                                          */
 137          /* 输  出:无                                                               */
 138          /*                                                                          */
 139          /* 历史记录:                                                               */
 140          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 141          /****************************************************************************/
 142          void sd2000_send_byte(unsigned char demand, bit order)  
 143          {
 144   1          unsigned char i = 8;        
 145   1          
 146   1          if (order)
 147   1          {
 148   2              while(i--)
 149   2              {
 150   3                  SCL = 0;
 151   3                  _nop_();
 152   3                  SDA = (bit)(demand&0x80);
 153   3                  demand <<= 1;
 154   3                  sd2000_wait();
 155   3                  SCL = 1;
 156   3                  sd2000_wait();
 157   3              }
 158   2              SCL=0;          
 159   2          }
 160   1          else
 161   1          {
 162   2              while(i--)
 163   2              {
 164   3                  SCL = 0;
 165   3                  _nop_();
 166   3                  SDA = (bit)(demand&0x01);
 167   3                  demand >>= 1;
 168   3                  sd2000_wait();
 169   3                  SCL = 1;
 170   3                  sd2000_wait();
 171   3              }
 172   2              SCL=0;   
 173   2          }
 174   1           
 175   1      }
 176          
 177          /****************************************************************************/
 178          /* 函数名:sd2000_receive_byte                                              */
C51 COMPILER V7.09   SD2000DRV                                                             07/12/2005 15:35:29 PAGE 4   

 179          /* 功  能:MCU从sd2000设备接收一个字节                                      */
 180          /* 作  者:spot                                                             */
 181          /* 输  入:无                                                               */
 182          /* 输  出:ddata   接收数据                                                 */
 183          /*                                                                          */
 184          /* 历史记录:                                                               */
 185          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 186          /****************************************************************************/
 187          unsigned char sd2000_receive_byte(void)
 188          {
 189   1          unsigned char i=8;
 190   1          unsigned char ddata=0;
 191   1          
 192   1          SDA=1;
 193   1          while(i--)
 194   1          {
 195   2              ddata >>= 1;    
 196   2              SCL=0;
 197   2              sd2000_wait();
 198   2              SCL=1;
 199   2              sd2000_wait();   
 200   2              if(SDA)
 201   2              {
 202   3                  ddata |= 0x80;
 203   3              }          
 204   2                              
 205   2          }
 206   1          SCL=0;
 207   1          return ddata;
 208   1      }
 209          
 210          /****************************************************************************/
 211          /* 函数名:sd2000_read_date                                                 */
 212          /* 功  能:读取sd2000时钟数据                                               */
 213          /* 作  者:spot                                                             */
 214          /* 输  入:无                                                               */
 215          /* 输  出:无                                                               */
 216          /*                                                                          */
 217          /* 历史记录:                                                               */
 218          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 219          /****************************************************************************/
 220          void sd2000_read_date(void)
 221          {
 222   1          unsigned char i;
 223   1          
 224   1          sd2000_start();
 225   1          sd2000_send_byte(0x65,1); /* 从年开始读取数据   */
 226   1          sd2000_wait_ack();
 227   1          
 228   1          for (i=0; i<7; i++)
 229   1          {
 230   2              date[i] = sd2000_receive_byte();
 231   2                      
 232   2              if (i != 6)           /* 最后一个数据不应答 */
 233   2              {
 234   3                  sd2000_ack();
 235   3              }
 236   2          }
 237   1          
 238   1          sd2000_no_ack();
 239   1          sd2000_stop();
 240   1      }
C51 COMPILER V7.09   SD2000DRV                                                             07/12/2005 15:35:29 PAGE 5   

 241          
 242          /****************************************************************************/
 243          /* 函数名:sd2000_write_status                                              */
 244          /* 功  能:写sd2000状态寄存器                                               */
 245          /* 作  者:spot                                                             */
 246          /* 输  入:无                                                               */
 247          /* 输  出:无                                                               */
 248          /*                                                                          */
 249          /* 历史记录:                                                               */
 250          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 251          /****************************************************************************/
 252          void sd2000_write_status(void)
 253          {    
 254   1          sd2000_start();
 255   1          sd2000_send_byte(0x62,1);  /* 发送SD20001C状态寄存器命令 */
 256   1          sd2000_wait_ack();   
 257   1          sd2000_send_byte(0xc0,0);  /* 24小时制,关所有中断       */
 258   1          sd2000_wait_ack();
 259   1          sd2000_stop();        
 260   1      }
 261          
 262          main()
 263          {        
 264   1          sd2000_write_status();
 265   1          
 266   1          sd2000_read_date();
 267   1          
 268   1      }


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


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

⌨️ 快捷键说明

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