📄 sd2k3drv.lst
字号:
C51 COMPILER V7.09 SD2K3DRV 10/09/2005 20:45:31 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE SD2K3DRV
OBJECT MODULE PLACED IN E:\C51PRJ\APPNEW\SD2K3DRV.OBJ
COMPILER INVOKED BY: d:\keil\c51\BIN\C51.EXE E:\C51PRJ\APPNEW\SD2K3DRV.C DB SB OE
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 /* 文件名:sd2300drv.c */
12 /* 版 本:Version 1.0 */
13 /* 描 述:sd2300驱动代码 */
14 /* 作 者:spot */
15 /* 函 数: */
16 /* sd2300_wait */
17 /* sd2300_start */
18 /* sd2300_stop */
19 /* sd2300_ack */
20 /* sd2300_no_ack */
21 /* sd2300_wait_ack */
22 /* sd2300_send_byte */
23 /* sd2300_receive_byte */
24 /* sd2300_read_date */
25 /* sd2300_write_date */
26 /* sd2300_write_config */
27 /* */
28 /* 参考资料: http://www.whwave.com.cn */
29 /* */
30 /* 历史记录: */
31 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
32 /****************************************************************************/
33 #include <reg52.h>
34 #include <absacc.h>
35 #include <intrins.h>
36 #include "../includes/types.h"
37 #include "../includes/sd2k3drv.h"
38
39 sbit SDA = P0^6; /* sd2300数据传送位 */
40 sbit SCL = P0^7; /* sd2300时钟控制位 */
41
42 u_char date[7];
43
44 /* sd2300延时 */
45 void sd2300_wait(void)
46 {
47 1 _nop_();
48 1 _nop_();
49 1 _nop_();
50 1 _nop_();
51 1 }
52
53 /* 开启sd2300总线 */
54 void sd2300_start(void)
55 {
C51 COMPILER V7.09 SD2K3DRV 10/09/2005 20:45:31 PAGE 2
56 1 SDA = 1;
57 1 SCL = 1;
58 1 sd2300_wait();
59 1 SDA = 0;
60 1 sd2300_wait();
61 1 SCL = 0;
62 1 }
63
64 /* 关闭sd2300总线 */
65 void sd2300_stop(void)
66 {
67 1 SDA=0;
68 1 SCL=0;
69 1 sd2300_wait();
70 1 SCL=1;
71 1 sd2300_wait();
72 1 SDA=1;
73 1 }
74
75 /* 发送ACK信号 */
76 void sd2300_ack(void)
77 {
78 1 SDA=0;
79 1 SCL=0;
80 1 sd2300_wait();
81 1 SCL=1;
82 1 sd2300_wait();
83 1 SCL=0;
84 1 }
85
86 /* 发送NOACK信号 */
87 void sd2300_no_ack(void)
88 {
89 1 SDA=1;
90 1 SCL=0;
91 1 sd2300_wait();
92 1 SCL=1;
93 1 sd2300_wait();
94 1 SCL=0;
95 1 }
96
97 /****************************************************************************/
98 /* 函数名:sd2300_wait_ack */
99 /* 功 能:等待ACK信号 */
100 /* 作 者:spot */
101 /* 输 入:无 */
102 /* 输 出:1-ACK 0-ERROR */
103 /* */
104 /* 历史记录: */
105 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
106 /****************************************************************************/
107 bit sd2300_wait_ack(void)
108 {
109 1 u_char errtime=255;
110 1
111 1 SCL=0;
112 1 SDA=1;
113 1 sd2300_wait();
114 1 SCL=1;
115 1 sd2300_wait();
116 1
117 1 while(SDA)
C51 COMPILER V7.09 SD2K3DRV 10/09/2005 20:45:31 PAGE 3
118 1 {
119 2 errtime--;
120 2 if(!errtime)
121 2 return 0;
122 2 }
123 1
124 1 SCL=0;
125 1 return 1;
126 1 }
127
128 /****************************************************************************/
129 /* 函数名:sd2300_send_byte */
130 /* 功 能:MCU向sd2300设备发送一个字节 */
131 /* 作 者:spot */
132 /* 输 入: */
133 /* demand 待发送命令或数据 */
134 /* */
135 /* 输 出:无 */
136 /* */
137 /* 历史记录: */
138 /* spot 2005-10-05 Creat Inital version. (Version 1.0) */
139 /****************************************************************************/
140 void sd2300_send_byte(u_char demand)
141 {
142 1 u_char i = 8;
143 1
144 1 while(i--)
145 1 {
146 2 SCL = 0;
147 2 _nop_();
148 2 SDA = (bit)(demand&0x80);
149 2 demand <<= 1;
150 2 sd2300_wait();
151 2 SCL = 1;
152 2 sd2300_wait();
153 2 }
154 1 SCL=0;
155 1 }
156
157 /****************************************************************************/
158 /* 函数名:sd2300_receive_byte */
159 /* 功 能:MCU从sd2300设备接收一个字节 */
160 /* 作 者:spot */
161 /* 输 入:无 */
162 /* 输 出:ddata 接收数据 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -