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

📄 sd2kdrv.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  SD2KDRV                                                                09/23/2005 17:32:57 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE SD2KDRV
OBJECT MODULE PLACED IN G:\C51PRJ\SD2KDRV\SD2KDRV.OBJ
COMPILER INVOKED BY: e:\keil\c51\BIN\C51.EXE G:\C51PRJ\SD2KDRV\SD2KDRV.C DB SB OE

stmt 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          /*         sd2000_read_date                                                 */
  25          /*         sd2000_write_date                                                */
  26          /*         sd2000_write_status                                              */
  27          /*                                                                          */
  28          /* 历史记录:                                                               */
  29          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
  30          /****************************************************************************/
  31          #include <reg52.h>
  32          #include <absacc.h>
  33          #include <intrins.h>
  34          #include "../includes/types.h"
  35          
  36          sbit SDA = P0^6;              /* sd2000数据传送位 */
  37          sbit SCL = P0^7;              /* sd2000时钟控制位 */
  38          
  39          /* 函数声明 */
  40          void sd2000_wait(void);       /* sd2000延时       */
  41          void sd2000_start(void);      /* 开启sd2000总线   */
  42          void sd2000_stop(void);       /* 关闭sd2000总线   */
  43          void sd2000_ack(void);        /* 发送ACK信号      */
  44          void sd2000_no_ack(void);     /* 发送NOACK信号    */
  45          bit sd2000_wait_ack(void);    /* 等待ACK信号      */
  46          void sd2000_send_byte(u_char demand, bit order);    /* MCU向sd2000发送一个字节 */
  47          u_char sd2000_receive_byte(void);                   /* MCU从sd2000接收一个字节 */
  48          void sd2000_read_date(void);                        /* 读取sd2000时钟数据      */
  49          void sd2000_write_date(void);                       /* 写入sd2000时钟数据      */
  50          void sd2000_write_status(void);                     /* 写sd2000状态寄存器      */
  51          
  52          /* 声明结束 */
  53          
  54          u_char read_date[7];
  55          u_char write_date1[7] = {0x05, 0x09, 0x11, 0x00, 0x12, 0x00, 0x00};
C51 COMPILER V6.12  SD2KDRV                                                                09/23/2005 17:32:57 PAGE 2   

  56          u_char write_date[7] = {0x05, 0x08, 0x08, 0x01, 0x16, 0x12, 0x00};
  57          /* sd2000延时       */
  58          void sd2000_wait(void)
  59          {
  60   1          _nop_();
  61   1          _nop_();
  62   1          _nop_();
  63   1          _nop_();
  64   1      }
  65          
  66          /* 开启sd2000总线   */
  67          void sd2000_start(void)
  68          {
  69   1          SDA = 1;
  70   1          SCL = 1;
  71   1          sd2000_wait();
  72   1          SDA = 0;
  73   1          sd2000_wait();
  74   1          SCL = 0;
  75   1      }
  76          
  77          /* 关闭sd2000总线   */
  78          void sd2000_stop(void)
  79          {
  80   1          SDA=0;
  81   1          SCL=0;
  82   1          sd2000_wait();
  83   1          SCL=1;
  84   1          sd2000_wait();
  85   1          SDA=1;
  86   1      }
  87          
  88          /* 发送ACK信号   */
  89          void sd2000_ack(void)
  90          {
  91   1          SDA=0;
  92   1          sd2000_wait();
  93   1          SCL=1;
  94   1          sd2000_wait();
  95   1          SCL=0;
  96   1      }
  97          
  98          /* 发送NOACK信号 */
  99          void sd2000_no_ack(void)
 100          {
 101   1          SDA=1;
 102   1          sd2000_wait();
 103   1          SCL=1;
 104   1          sd2000_wait();
 105   1          SCL=0;
 106   1      }
 107          
 108          /****************************************************************************/
 109          /* 函数名:sd2000_wait_ack                                                  */
 110          /* 功  能:等待ACK信号                                                      */
 111          /* 作  者:spot                                                             */
 112          /* 输  入:无                                                               */
 113          /* 输  出:1-ACK         0-ERROR                                            */
 114          /*                                                                          */
 115          /* 历史记录:                                                               */
 116          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 117          /****************************************************************************/
C51 COMPILER V6.12  SD2KDRV                                                                09/23/2005 17:32:57 PAGE 3   

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

 180   3              }
 181   2              SCL=0;
 182   2          }
 183   1      
 184   1      }
 185          
 186          /****************************************************************************/
 187          /* 函数名:sd2000_receive_byte                                              */
 188          /* 功  能:MCU从sd2000设备接收一个字节                                      */
 189          /* 作  者:spot                                                             */
 190          /* 输  入:无                                                               */
 191          /* 输  出:ddata   接收数据                                                 */
 192          /*                                                                          */
 193          /* 历史记录:                                                               */
 194          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 195          /****************************************************************************/
 196          u_char sd2000_receive_byte(void)
 197          {
 198   1          u_char i=8;
 199   1          u_char ddata=0;
 200   1      
 201   1          SDA=1;
 202   1          while(i--)
 203   1          {
 204   2              ddata >>= 1;
 205   2              SCL=0;
 206   2              sd2000_wait();
 207   2              SCL=1;
 208   2              sd2000_wait();
 209   2              if(SDA)
 210   2              {
 211   3                  ddata |= 0x80;
 212   3              }

⌨️ 快捷键说明

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