📄 sd2000.lst
字号:
C51 COMPILER V7.06 SD2000 01/02/2000 11:14:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SD2000
OBJECT MODULE PLACED IN Sd2000.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Sd2000.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<intrins.h>
2 #include "C8051f.h"
3 #include "Sd2000.h"
4 #include "Timer.h"
5 #include "App.h"
6
7 unsigned char bdata temp_p;
8
9 sbit DD_7 = temp_p^7;
10 sbit DD_0 = temp_p^0;
11
12 void Start()
13 {
14 1 RT_SCL = 0;
15 1 RT_SDA = 1;
16 1 Delay5us();
17 1 RT_SCL = 1;
18 1 Delay5us();
19 1 RT_SDA = 0;
20 1 Delay5us();
21 1 RT_SCL = 0;
22 1 }
23
24
25 void Stop()
26 {
27 1 RT_SCL = 0;
28 1 RT_SDA = 0;
29 1 Delay5us();
30 1 RT_SCL = 1;
31 1 Delay5us();
32 1 RT_SDA = 1;
33 1 Delay5us();
34 1 RT_SCL = 0;
35 1 }
36
37 /***************************************************************************/
38 /*
39 void Ack()
40 {
41 RT_SDA = 0;
42 RT_SCL = 1;
43 Delay5us();
44 RT_SCL = 0;
45 RT_SDA = 1;
46 Delay5us();
47 }
48 */
49 /***************************************************************************/
50 /*
51 void NoAck()
52 {
53 RT_SDA = 1;
54 RT_SCL = 1;
55 Delay5us();
C51 COMPILER V7.06 SD2000 01/02/2000 11:14:25 PAGE 2
56 RT_SCL = 0;
57 Delay5us();
58 }
59 */
60 /***************************************************************************/
61 void TestAck()
62 {
63 1 /* bit ErrorBit;
64 1 RT_SDA = 1;
65 1 RT_SCL = 1;
66 1 Delay5us();
67 1 ErrorBit = SDA;
68 1 RT_SCL = 0;
69 1 Delay5us();
70 1 return(ErrorBit);
71 1 */
72 1 }
73
74 void SendBit(bit mm)
75 {
76 1 RT_SDA = 0;
77 1 RT_SCL = 0;
78 1 _nop_();
79 1 RT_SDA = mm;
80 1 Delay5us();
81 1 RT_SCL = 1;
82 1 Delay5us();
83 1 RT_SCL = 0;
84 1 }
85
86 bit LoadBit()
87 {
88 1 bit mm;
89 1 RT_SDA = 1;
90 1 RT_SCL = 0;
91 1 Delay5us();
92 1 // mm=SDA;
93 1 // delay5us();
94 1 RT_SCL = 1;
95 1 Delay5us();
96 1 mm = RT_SDA;
97 1 _nop_();
98 1 RT_SCL = 0;
99 1 return(mm);
100 1 }
101 /***************************************************************************/
102 void Write8Bit(unsigned char input)
103 {
104 1 unsigned char temp_2;
105 1
106 1 temp_p = input;
107 1 for(temp_2 = 8; temp_2 != 0; temp_2--)
108 1 {
109 2 // SendBit(DD_0);
110 2 RT_SDA = 0;
111 2 RT_SCL = 0;
112 2 _nop_();
113 2 RT_SDA = DD_0;
114 2 Delay5us();
115 2
116 2 RT_SCL = 1;
117 2 Delay5us();
C51 COMPILER V7.06 SD2000 01/02/2000 11:14:25 PAGE 3
118 2
119 2 RT_SCL = 0;
120 2 temp_p = temp_p>>1;
121 2
122 2 }
123 1 // LoadBit();
124 1 RT_SDA = 1;
125 1 RT_SCL = 0;
126 1 Delay5us();
127 1
128 1 // mm=SDA;
129 1 // delay5us();
130 1 RT_SCL = 1;
131 1 Delay5us();
132 1
133 1 DD_0 = RT_SDA;
134 1 _nop_();
135 1 RT_SCL=0;
136 1 }
137
138 /***************************************************************************/
139 void Write8BitCOMM(unsigned char input)
140 {
141 1 unsigned char temp_2;
142 1
143 1 temp_p = input;
144 1 for(temp_2 = 8; temp_2 != 0; temp_2--)
145 1 {
146 2 // SendBit(DD_7);
147 2 RT_SDA = 0;
148 2 RT_SCL = 0;
149 2 _nop_();
150 2 RT_SDA = DD_7;
151 2 Delay5us();
152 2
153 2 RT_SCL = 1;
154 2 Delay5us();
155 2
156 2 RT_SCL = 0;
157 2 temp_p = temp_p<<1;
158 2
159 2 }
160 1 // LoadBit();
161 1 RT_SDA = 1;
162 1 RT_SCL = 0;
163 1 Delay5us();
164 1
165 1 // mm=SDA;
166 1 // Delay5us();
167 1 RT_SCL = 1;
168 1 Delay5us();
169 1
170 1 DD_0 = RT_SDA;
171 1 _nop_();
172 1 RT_SCL = 0;
173 1 }
174
175 /***************************************************************************/
176 unsigned char Read8Bit()
177 {
178 1 unsigned char temp_2;
179 1 unsigned char rbyte = 0;
C51 COMPILER V7.06 SD2000 01/02/2000 11:14:25 PAGE 4
180 1
181 1 for(temp_2 = 8; temp_2 != 0; temp_2--)
182 1 {
183 2 temp_p = temp_p>>1;
184 2 // DD_7=LoadBit();
185 2 RT_SDA = 1;
186 2 RT_SCL = 0;
187 2 Delay5us();
188 2
189 2 // mm=SDA;
190 2 // delay5us();
191 2 RT_SCL = 1;
192 2 Delay5us();
193 2
194 2 DD_7 = RT_SDA;
195 2 _nop_();
196 2 RT_SCL = 0;
197 2 }
198 1 return(temp_p);
199 1 }
200
201 void ResetSD()
202 {
203 1 EA = 0;
204 1 Start();
205 1 Write8BitCOMM(ResetSD2000);
206 1 // TestAck();
207 1 Stop();
208 1 Delay5us();
209 1 EA = 1;
210 1 }
211
212 void InitSD(void)
213 {
214 1 EA = 0;
215 1 RT_SCL = 0;
216 1 RT_SDA = 0;
217 1 Delay5us();
218 1 Delay5us();
219 1 if(ReadStateRegSD()>0x7f)
220 1 {
221 2 Delay1ms(200);
222 2 if(ReadStateRegSD()>0x7f)
223 2 {
224 3 ResetSD();
225 3 }
226 2 }
227 1 Delay5us();
228 1 Delay5us();
229 1 WriteStateRegSD(0xc0);
230 1 EA = 1;
231 1 }
232
233 unsigned char ReadStateRegSD()
234 {
235 1 unsigned tempd;
236 1 EA = 0;
237 1 Start();
238 1 Write8BitCOMM(ReadStateReg);
239 1 // TestAck();
240 1 tempd = Read8Bit();
241 1 SendBit(0);
C51 COMPILER V7.06 SD2000 01/02/2000 11:14:25 PAGE 5
242 1 // TestAck();
243 1 Stop();
244 1 Delay5us();
245 1 EA = 1;
246 1 return(tempd);
247 1 }
248
249 void WriteStateRegSD(unsigned char state)
250 {
251 1 EA = 0;
252 1 Start();
253 1 Write8BitCOMM(WriteStateReg);
254 1 // TestAck();
255 1 Write8Bit(state);
256 1 // TestAck();
257 1 Stop();
258 1 Delay5us();
259 1 EA = 1;
260 1 }
261
262 void ReadTimeSD(unsigned char *time)
263 {
264 1 unsigned char tempp;
265 1
266 1 EA = 0;
267 1 Start();
268 1 Write8BitCOMM(ReadTime);
269 1 // TestAck();
270 1 for(tempp = 0; tempp < 7; tempp++)
271 1 {
272 2 time[tempp] = Read8Bit();
273 2 SendBit(0);
274 2 // TestAck();
275 2 }
276 1 Stop();
277 1 Delay5us();
278 1 EA = 1;
279 1 }
280
281 void WriteTimeSD(unsigned char * time)
282 {
283 1 unsigned char tempp;
284 1
285 1 EA = 0;
286 1 Start();
287 1 Write8BitCOMM(WriteTime);
288 1 // TestAck();
289 1 for(tempp = 0; tempp<7; tempp++)
290 1 {
291 2 Write8Bit(time[tempp]);
292 2 // TestAck();
293 2 }
294 1 Stop();
295 1 Delay5us();
296 1 EA = 1;
297 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 610 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 17 ----
C51 COMPILER V7.06 SD2000 01/02/2000 11:14:25 PAGE 6
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -