📄 iic.lst
字号:
C51 COMPILER V7.06 IIC 04/09/2005 13:15:56 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN iic.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE iic.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define IIC_C
2 #include "common.h"
3 #include "iic.h"
4 #include "intrins.h"
5 #include "stdio.h"
6
7 #define AT24CXXPAGELEN 8
8
9 #define nops(); _nop_(); _nop_(); _nop_(); _nop_();
10
11 void start()
12 {
13 1 EA = 0;
14 1 IIC_SDA = 1;
15 1 IIC_SCL = 1;
16 1 nops();
17 1 IIC_SDA = 0;
18 1 nops();
19 1 IIC_SCL = 0;
20 1 EA = 1;
21 1 }
22
23 void stop()
24 {
25 1 EA = 0;
26 1 IIC_SCL = 0;
27 1 IIC_SDA = 0;
28 1 IIC_SCL = 1;
29 1 nops();
30 1 IIC_SDA = 1;
31 1 nops();
32 1 IIC_SCL = 0;
33 1 EA = 1;
34 1 }
35 /*
36 void ack()
37 {
38 IIC_SCL = 0;
39 IIC_SDA = 0;
40 nops();
41 IIC_SCL = 1;
42 nops();
43 IIC_SCL = 0;
44 nops();
45 }
46 */
47 void noack()
48 {
49 1 EA = 0;
50 1 IIC_SDA = 1;
51 1 nops();
52 1 IIC_SCL = 0;
53 1 nops();
54 1 IIC_SCL = 1;
55 1 nops();
C51 COMPILER V7.06 IIC 04/09/2005 13:15:56 PAGE 2
56 1 IIC_SCL = 0;
57 1 nops();
58 1 EA = 1;
59 1 }
60
61 uchar waitack()
62 {
63 1 uchar i=255;
64 1
65 1 EA = 0;
66 1 IIC_SDA = 1;
67 1
68 1 while(i--)
69 1 {
70 2 nops();
71 2 if(IIC_SDA == 0)
72 2 {
73 3 IIC_SCL = 0;
74 3 nops();
75 3 IIC_SCL = 1;
76 3 nops();
77 3 IIC_SCL = 0;
78 3 nops();
79 3 return 1;
80 3 }
81 2 }
82 1
83 1 stop();
84 1 EA = 1;
85 1
86 1 return 0;
87 1 }
88
89 void clockout(uchar dat)
90 {
91 1 uchar i;
92 1
93 1 EA = 0;
94 1
95 1 for(i=0;i<8;i++)
96 1 {
97 2 IIC_SCL = 0;
98 2 nops();
99 2
100 2 if(dat &0x80)
101 2 IIC_SDA = 1;
102 2 else
103 2 IIC_SDA = 0;
104 2 dat <<= 1;
105 2
106 2 IIC_SCL = 1;
107 2 nops();
108 2
109 2 IIC_SCL = 0;
110 2 nops();
111 2 }
112 1
113 1 EA = 1;
114 1 }
115
116 uchar clockin()
117 {
C51 COMPILER V7.06 IIC 04/09/2005 13:15:56 PAGE 3
118 1 uchar i;
119 1 uchar c = 0;
120 1
121 1 EA = 0;
122 1
123 1 for(i=0;i<8;i++)
124 1 {
125 2 c <<= 1;
126 2
127 2 IIC_SCL = 0;
128 2 nops();
129 2
130 2 IIC_SCL = 1;
131 2 nops();
132 2
133 2 IIC_SDA = 1;
134 2 if(IIC_SDA == 1)
135 2 c |= 0x01;
136 2
137 2 IIC_SCL = 0;
138 2 nops();
139 2 }
140 1
141 1 EA = 1;
142 1
143 1 return c;
144 1 }
145
146 uchar readiic(uchar addr,uchar *pdat)
147 {
148 1 uchar c;
149 1
150 1 EA = 0;
151 1
152 1 start();
153 1
154 1 //device address
155 1 c = 0xa0;
156 1 clockout(c);
157 1 if(!waitack()) return 0;
158 1
159 1 //memory address
160 1 c = addr;
161 1 clockout(c);
162 1 if(!waitack()) return 0;
163 1
164 1 start();
165 1
166 1 //device address
167 1 c = 0xa1;
168 1 clockout(c);
169 1 if(!waitack()) return 0;
170 1
171 1 //read data
172 1 *pdat = clockin();
173 1
174 1 noack();
175 1
176 1 stop();
177 1
178 1 EA = 1;
179 1
C51 COMPILER V7.06 IIC 04/09/2005 13:15:56 PAGE 4
180 1 return 1;
181 1 }
182 /*
183 uchar readiiccur(uchar *pdat)
184 {
185 uchar c;
186
187 start();
188
189 //device address
190 c = 0xa1;
191 clockout(c);
192 if(!waitack()) return 0;
193
194 //read data
195 *pdat = clockin();
196
197 noack();
198
199 stop();
200
201 return 1;
202 }
203 */
204 /*
205 uchar readiicpage(uchar *pdat,uchar len)
206 {
207 uchar c,i;
208
209 if(len > AT24CXXPAGELEN)
210 return 0;
211
212 start();
213
214 //device address
215 c = 0xa1;
216 clockout(c);
217 if(!waitack()) return 0;
218
219 //read data
220 for(i=0; i<len; i++)
221 {
222 pdat[i] = clockin();
223 if(i != len-1)
224 ack();
225 }
226
227 noack();
228
229 stop();
230
231 return 1;
232 }
233 */
234 uchar writeiic(uchar addr,uchar dat)
235 {
236 1 uchar c;
237 1
238 1 EA = 0;
239 1
240 1 start();
241 1
C51 COMPILER V7.06 IIC 04/09/2005 13:15:56 PAGE 5
242 1 //device address
243 1 c = 0xa0;
244 1 clockout(c);
245 1 if(!waitack()) return 0;
246 1
247 1 //memory address
248 1 c = addr;
249 1 clockout(c);
250 1 if(!waitack()) return 0;
251 1
252 1 //write data
253 1 clockout(dat);
254 1 if(!waitack()) return 0;
255 1
256 1 stop();
257 1
258 1 EA = 1;
259 1
260 1 return 1;
261 1 }
262 /*
263 uchar writeiicpage(uchar addr,uchar *pdat,uchar len)
264 {
265 uchar i,c;
266
267 if(len > AT24CXXPAGELEN)
268 return 0;
269
270 start();
271
272 //device address
273 c = 0xa0;
274 clockout(c);
275 if(!waitack()) return 0;
276
277 //memory address
278 c = addr;
279 clockout(c);
280 if(!waitack()) return 0;
281
282 //write data
283 for(i=0; i<len; i++)
284 {
285 clockout(pdat[i]);
286 if(!waitack()) return 0;
287 }
288
289 stop();
290
291 return 1;
292 }
293 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 330 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
C51 COMPILER V7.06 IIC 04/09/2005 13:15:56 PAGE 6
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -