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

📄 sd2kdrv.lst

📁 SD2KDRV sd2000驱动代码 在程序上设置断点
💻 LST
📖 第 1 页 / 共 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              }
 213   2      
 214   2          }
 215   1          SCL=0;
 216   1          return ddata;
 217   1      }
 218          
 219          /****************************************************************************/
 220          /* 函数名:sd2000_read_date                                                 */
 221          /* 功  能:读取sd2000时钟数据                                               */
 222          /* 作  者:spot                                                             */
 223          /* 输  入:无                                                               */
 224          /* 输  出:无                                                               */
 225          /*                                                                          */
 226          /* 历史记录:                                                               */
 227          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 228          /****************************************************************************/
 229          void sd2000_read_date(void)
 230          {
 231   1          u_char i;
 232   1      
 233   1          sd2000_start();
 234   1          sd2000_send_byte(0x65,1); /* 从年开始读取数据   */
 235   1          sd2000_wait_ack();
 236   1      
 237   1          for (i=0; i<7; i++)
 238   1          {
 239   2              read_date[i] = sd2000_receive_byte();
 240   2      
 241   2              if (i != 6)           /* 最后一个数据不应答 */
C51 COMPILER V7.06   SD2KDRV                                                               07/25/2006 15:44:21 PAGE 5   

 242   2              {
 243   3                  sd2000_ack();
 244   3              }
 245   2          }
 246   1          read_date[4] &= 0x7F;
 247   1          sd2000_no_ack();
 248   1          sd2000_stop();
 249   1      }
 250          
 251          /****************************************************************************/
 252          /* 函数名:sd2000_write_date                                                */
 253          /* 功  能:写入sd2000时钟数据                                               */
 254          /* 作  者:spot                                                             */
 255          /* 输  入:无                                                               */
 256          /* 输  出:无                                                               */
 257          /*                                                                          */
 258          /* 历史记录:                                                               */
 259          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 260          /****************************************************************************/
 261          void sd2000_write_date(void)
 262          {
 263   1         u_char i;
 264   1      
 265   1         sd2000_start();
 266   1         sd2000_send_byte(0x64,1); /* 从年开始写入数据   */
 267   1         sd2000_wait_ack();
 268   1      
 269   1         for(i=0; i<7; i++)
 270   1         {
 271   2             sd2000_send_byte(write_date[i],0);
 272   2             sd2000_wait_ack();
 273   2         }
 274   1         sd2000_stop();
 275   1      }
 276          
 277          /****************************************************************************/
 278          /* 函数名:sd2000_write_status                                              */
 279          /* 功  能:写sd2000状态寄存器                                               */
 280          /* 作  者:spot                                                             */
 281          /* 输  入:无                                                               */
 282          /* 输  出:无                                                               */
 283          /*                                                                          */
 284          /* 历史记录:                                                               */
 285          /*  spot          2005-06-20     Creat Inital version. (Version 1.0)        */
 286          /****************************************************************************/
 287          void sd2000_write_status(void)
 288          {
 289   1          sd2000_start();
 290   1          sd2000_send_byte(0x62,1);  /* 发送SD20001C状态寄存器命令 */
 291   1          sd2000_wait_ack();
 292   1          sd2000_send_byte(0xc0,0);  /* 24小时制,关所有中断       */
 293   1          sd2000_wait_ack();
 294   1          sd2000_stop();
 295   1      }
 296          
 297          void delay(void)
 298          {
 299   1          u_char i;
 300   1          for (i=0; i<200; i++);
 301   1      }
 302          
 303          main()
C51 COMPILER V7.06   SD2KDRV                                                               07/25/2006 15:44:21 PAGE 6   

 304          {
 305   1      
 306   1          sd2000_write_status();
 307   1      
 308   1          while(1)
 309   1          {
 310   2              sd2000_read_date();
 311   2              delay();
 312   2              sd2000_write_date();
 313   2          }
 314   1      }
C51 COMPILER V7.06   SD2KDRV                                                               07/25/2006 15:44:21 PAGE 7   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
u_long . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_LONG   -----  4
u_short. . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
delay. . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
sd2000_read_date . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0004H  1
read_date. . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0000H  7
_sd2000_send_byte. . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  demand . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  order. . . . . . . . . . . . . . . .  AUTO     DATA   BIT      0000H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
u_int. . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
sd2000_write_date. . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0004H  1
sd2000_ack . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
sd2000_start . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
write_date . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0007H  7
sd2000_write_status. . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
sd2000_wait. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0007H  -----
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
sd2000_wait_ack. . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  errtime. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
sd2000_stop. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
SDA. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0086H  1
write_date1. . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    000EH  7
SCL. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0087H  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
sd2000_no_ack. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
u_char . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_CHAR   -----  1
sd2000_receive_byte. . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  ddata. . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


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