📄 24cxx.lst
字号:
C51 COMPILER V8.02 24CXX 05/04/2008 16:39:42 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 24CXX
OBJECT MODULE PLACED IN 24CXX.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24CXX.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*连续读不好使*/
2 #include <reg51.h>
3 #include <intrins.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 const uchar WRITE = 0xa0;
7 const uchar READ = 0xa1;
8
9 sbit SCL = P1^6;
10 sbit SDA = P1^7;
11 sbit key = P1^2;
12 /************函数原型*******************/
13 void Delays(uchar n);
14 void Start_I2C(void);
15 void Stop_I2C(void);
16 bit Ask_I2C(void);
17 void Write_byte(uchar c_data);
18 void Write_24CXX(uchar addr,uchar c_data);
19 void Write_24CXXs(uchar addr,uchar *pr, uchar n);
20 uchar Read_byte(void);
21 uchar Read_24CXX(uchar addr);
22 void ASK(void);
23 void No_Ask(void);
24 void Read_24CXXs(uchar addr,uchar *pr, uchar n);
25 ///////////////////////////////////
26 void main(void)
27 {
28 1 uchar arr[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
29 1 uchar arr_1[8] = {0};
30 1 uchar i = 0;
31 1 //uchar temp;
32 1 // P2 = Read_24CXX(0x30);
33 1 //Write_24CXX(0x12,0x80);
34 1 /* for(i = 0; i < 8; i++)
35 1 {
36 1 Write_24CXXs(0x40+i*8,arr,8);
37 1 Delays(10);
38 1 // Write_24CXXs(0x38,&arr[8],4);
39 1 } */
40 1
41 1 P2 = 0x00;
42 1 /*for(i = 0; i<20; i++)
43 1 {
44 1 P2 = Read_24CXX(0x40 + i);
45 1 Delays(10);
46 1 } */
47 1
48 1 Read_24CXXs(0x10,arr_1,8);
49 1 while(1);
50 1 }
51 ///////////////////////////////////////
52 /***************延时函数****************/
53 void Delays(uchar n)
54 {
55 1 uchar i, j;
C51 COMPILER V8.02 24CXX 05/04/2008 16:39:42 PAGE 2
56 1
57 1 for(i = n; i > 0; i--)
58 1 for(j = 112; j > 1; j--)
59 1 continue;
60 1 }
61 /*************启动信号*******************/
62 void Start_I2C(void)
63 {
64 1 SDA = 1;
65 1 SCL = 1;
66 1 _nop_();
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1 SDA = 0;
73 1 _nop_();
74 1 _nop_();
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 _nop_();
79 1 SCL = 0;
80 1 }
81 /**************结束信号**************************/
82 void Stop_I2C(void)
83 {
84 1 SDA = 0;
85 1 SCL = 1;
86 1 _nop_();
87 1 _nop_();
88 1 _nop_();
89 1 _nop_();
90 1 _nop_();
91 1 _nop_();
92 1 SDA = 1;
93 1 _nop_();
94 1 _nop_();
95 1 _nop_();
96 1 _nop_();
97 1 _nop_();
98 1 }
99 /*********检验应答信号***************************/
100 bit Ask_I2C(void)
101 {
102 1 bit ask;
103 1 SDA = 1;
104 1 _nop_();
105 1 _nop_();
106 1 _nop_();
107 1 _nop_();
108 1 _nop_();
109 1 _nop_();
110 1 SCL = 1;
111 1 _nop_();
112 1 _nop_();
113 1 _nop_();
114 1 _nop_();
115 1 _nop_();
116 1 SCL = 0;
117 1 return ( ask = !SDA);
C51 COMPILER V8.02 24CXX 05/04/2008 16:39:42 PAGE 3
118 1 }
119 /************写一个字节**********************/
120 void Write_byte(uchar c_data)
121 {
122 1 uchar i;
123 1 for(i = 0; i < 8; i++)
124 1 {
125 2 if(c_data&0x80)
126 2 SDA = 1;
127 2 else SDA = 0;
128 2 SCL = 1;
129 2 _nop_();
130 2 _nop_();
131 2 _nop_();
132 2 _nop_();
133 2 _nop_();
134 2 SCL = 0;
135 2 c_data <<= 1;
136 2 }
137 1 Delays(10);
138 1 }
139 /***********写应答信号***********************/
140 void ASK(void)
141 {
142 1 SDA = 0;
143 1 SCL = 1;
144 1 _nop_();
145 1 _nop_();
146 1 _nop_();
147 1 _nop_();
148 1 _nop_();
149 1 _nop_();
150 1 SDA = 1;
151 1 SCL = 0;
152 1
153 1 }
154 /***********写非应答信号********************/
155 void No_Ask(void)
156 {
157 1 SDA = 1;
158 1 SCL = 1;
159 1 _nop_();
160 1 _nop_();
161 1 _nop_();
162 1 _nop_();
163 1 _nop_();
164 1 _nop_();
165 1 SCL = 0;
166 1 SDA = 0;
167 1
168 1 }
169 /**********读取一个字节***************/
170 uchar Read_byte(void)
171 {
172 1 uchar i = 0;
173 1 uchar temp;
174 1
175 1 SDA =1;
176 1 for(i = 0; i < 8; i++)
177 1 {
178 2 temp <<= 1;
179 2 SCL = 1;
C51 COMPILER V8.02 24CXX 05/04/2008 16:39:42 PAGE 4
180 2 _nop_();
181 2 _nop_();
182 2 _nop_();
183 2 _nop_();
184 2 _nop_();
185 2 if(SDA)temp++;
186 2 _nop_();
187 2 _nop_();
188 2 _nop_();
189 2 _nop_();
190 2 SCL = 0;
191 2 }
192 1 SCL = 0;
193 1 return temp;
194 1 }
195 /***********从片子中读取一个数据************************/
196 uchar Read_24CXX(uchar addr)
197 {
198 1 bit flag = 0;
199 1 uchar temp ;
200 1
201 1 Start_I2C();
202 1 while(!flag) ///写入读控制字
203 1 {
204 2 Write_byte(WRITE);
205 2 flag = Ask_I2C(); //检验应答位
206 2 }
207 1 flag = 0;
208 1 while(!flag)
209 1 {
210 2 Write_byte(addr); //写入要读的地址
211 2 flag = Ask_I2C();
212 2 }
213 1 flag = 0; //从新开始
214 1 Start_I2C();
215 1 while(!flag) ///写入读控制字
216 1 {
217 2 Write_byte(READ);
218 2 flag = Ask_I2C(); //检验应答位
219 2 }
220 1 temp = ~Read_byte(); //读取数据
221 1 No_Ask(); //非应答
222 1 Stop_I2C();
223 1 return temp;
224 1 }
225 /************从片子中读取连续的多个数据********************/
226 void Read_24CXXs(uchar addr,uchar *pr, uchar n)
227 {
228 1 bit flag = 0;
229 1 uchar temp ;
230 1
231 1 Start_I2C();
232 1 while(!flag) ///写入读控制字
233 1 {
234 2 Write_byte(WRITE);
235 2 flag = Ask_I2C(); //检验应答位
236 2 }
237 1 flag = 0;
238 1 while(!flag)
239 1 {
240 2 Write_byte(addr); //写入要读的地址
241 2 flag = Ask_I2C();
C51 COMPILER V8.02 24CXX 05/04/2008 16:39:42 PAGE 5
242 2 }
243 1 flag = 0; //从新开始
244 1
245 1 Start_I2C();
246 1 while(!flag) ///写入读控制字
247 1 {
248 2 Write_byte(READ);
249 2 flag = Ask_I2C(); //检验应答位
250 2 }
251 1
252 1 while(n--) //连续读取
253 1 {
254 2 *pr = Read_byte(); //读取数据
255 2 No_Ask(); //非应答
256 2 pr++;
257 2 Delays(10);
258 2 }
259 1 Stop_I2C();
260 1 }
*** WARNING C280 IN LINE 229 OF 24CXX.C: 'temp': unreferenced local variable
261 /**********向片子的一个地址写入一个数据*****/
262 void Write_24CXX(uchar addr,uchar c_data)
263 {
264 1 bit flag = 0;
265 1
266 1 Start_I2C();
267 1 while(!flag) ///写入控制字
268 1 {
269 2 Write_byte(WRITE);
270 2 flag = Ask_I2C(); //检验应答位
271 2 }
272 1 flag = 0;
273 1 while(!flag)
274 1 {
275 2 Write_byte(addr); //写入地址
276 2 flag = Ask_I2C();
277 2 }
278 1 flag = 0;
279 1 while(!flag)
280 1 {
281 2 Write_byte(c_data); //写入数据
282 2 flag = Ask_I2C();
283 2 }
284 1 Stop_I2C();
285 1 }
286 /**********向片子中连续写入8个数据********最多8个****************/
287 void Write_24CXXs(uchar addr,uchar *pr, uchar n)
288 {
289 1 uchar i = 0;
290 1 uchar m = 0;
291 1 uchar nm = 0;
292 1 bit flag = 0;
293 1
294 1 m = n;
295 1 Start_I2C();
296 1 while(!flag) ///写入控制字
297 1 {
298 2 Write_byte(WRITE);
299 2 flag = Ask_I2C(); //检验应答位
300 2 }
301 1 /* for(i = 0; i < (m/8) + 1; i++)
302 1 {
C51 COMPILER V8.02 24CXX 05/04/2008 16:39:42 PAGE 6
303 1 if(n > 8)nm = 8;
304 1 else nm = n; */
305 1 flag = 0;
306 1 while(!flag)
307 1 {
308 2 Write_byte(addr); //写入地址
309 2 flag = Ask_I2C();
310 2 }
311 1 while(n--)
312 1 {
313 2 flag = 0;
314 2 while(!flag)
315 2 {
316 3 Write_byte(*pr); //写入数据
317 3 flag = Ask_I2C();
318 3 pr++;
319 3 }
320 2 }
321 1 /* addr += i*8;
322 1 n -= i *8;
323 1 } */
324 1 Stop_I2C();
325 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 523 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 34
IDATA SIZE = ---- ----
BIT SIZE = ---- 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -