📄 iic(ok).lst
字号:
197 /*******************************************************************
198 向无子地址器件发送字节数据函数
199 函数原型: bit ISendByte(uchar sla,ucahr c);
200 功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
201 如果返回1表示操作成功,否则操作有误。
202 注意: 使用前必须已结束总线。
203 ********************************************************************/
204 bit ISendByte(uchar sla,uchar c)
205 {
206 1 Start_I2c(); /*启动总线*/
207 1 SendByte(sla); /*发送器件地址*/
208 1 if(ack==0)return(0);
209 1 SendByte(c); /*发送数据*/
210 1 if(ack==0)return(0);
211 1 Stop_I2c(); /*结束总线*/
212 1 return(1);
213 1 }
214
215
216
217
218 /*******************************************************************
219 向有子地址器件发送多字节数据函数
220 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
221 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
222 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
223 如果返回1表示操作成功,否则操作有误。
224 注意: 使用前必须已结束总线。
225 ********************************************************************/
226 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
227 {
228 1 uchar i;
229 1
230 1 Start_I2c(); /*启动总线*/
231 1 SendByte(sla); /*发送器件地址*/
232 1 if(ack==0)return(0);
233 1 SendByte(suba); /*发送器件子地址*/
234 1 if(ack==0)return(0);
235 1
236 1 for(i=0;i<no;i++)
237 1 {
238 2 SendByte(*s); /*发送数据*/
239 2 if(ack==0)return(0);
240 2 s++;
C51 COMPILER V7.20 IIC_OK_ 06/07/2006 17:13:03 PAGE 5
241 2 }
242 1 Stop_I2c(); /*结束总线*/
243 1 return(1);
244 1 }
245
246
247 /*******************************************************************
248 向无子地址器件发送多字节数据函数
249 函数原型: bit ISendStr(uchar sla,ucahr *s,uchar no);
250 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
251 地址sla,发送内容是s指向的内容,发送no个字节。
252 如果返回1表示操作成功,否则操作有误。
253 注意: 使用前必须已结束总线。
254 ********************************************************************/
255 bit ISendStrExt(uchar sla,uchar *s,uchar no)
256 {
257 1 uchar i;
258 1
259 1 Start_I2c(); /*启动总线*/
260 1 SendByte(sla); /*发送器件地址*/
261 1 if(ack==0)return(0);
262 1
263 1 for(i=0;i<no;i++)
264 1 {
265 2 SendByte(*s); /*发送数据*/
266 2 if(ack==0)return(0);
267 2 s++;
268 2 }
269 1 Stop_I2c(); /*结束总线*/
270 1 return(1);
271 1 }
272
273
274
275
276
277 /*******************************************************************
278 向无子地址器件读字节数据函数
279 函数原型: bit IRcvByte(uchar sla,ucahr *c);
280 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
281 址sla,返回值在c.
282 如果返回1表示操作成功,否则操作有误。
283 注意: 使用前必须已结束总线。
284 ********************************************************************/
285 bit IRcvByte(uchar sla,uchar *c)
286 {
287 1 Start_I2c(); /*启动总线*/
288 1 SendByte(sla+1); /*发送器件地址*/
289 1 if(ack==0)return(0);
290 1 *c=RcvByte(); /*读取数据*/
291 1 Ack_I2c(1); /*发送非就答位*/
292 1 Stop_I2c(); /*结束总线*/
293 1 return(1);
294 1 }
295
296
297
298 /*******************************************************************
299 向有子地址器件读取多字节数据函数
300 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
301 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
302 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
C51 COMPILER V7.20 IIC_OK_ 06/07/2006 17:13:03 PAGE 6
303 如果返回1表示操作成功,否则操作有误。
304 注意: 使用前必须已结束总线。
305 ********************************************************************/
306 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
307 {
308 1 uchar i;
309 1
310 1 Start_I2c(); /*启动总线*/
311 1 SendByte(sla); /*发送器件地址*/
312 1 if(ack==0)return(0);
313 1 SendByte(suba); /*发送器件子地址*/
314 1 if(ack==0)return(0);
315 1
316 1 Start_I2c(); /*重新启动总线*/
317 1 SendByte(sla+1);
318 1 if(ack==0)return(0);
319 1 for(i=0;i<no-1;i++)
320 1 {
321 2 *s=RcvByte(); /*发送数据*/
322 2 Ack_I2c(0); /*发送就答位*/
323 2 s++;
324 2 }
325 1 *s=RcvByte();
326 1 Ack_I2c(1); /*发送非应位*/
327 1 Stop_I2c(); /*结束总线*/
328 1 return(1);
329 1 }
330
331
332 /*******************************************************************
333 向无子地址器件读取多字节数据函数
334 函数原型: bit ISendStrExt(uchar sla,ucahr *s,uchar no);
335 功能: 从启动总线到发送地址,读数据,结束总线的全过程.
336 从器件地址sla,读出的内容放入s指向的存储区,
337 读no个字节。如果返回1表示操作成功,否则操作有误。
338 注意: 使用前必须已结束总线。
339 ********************************************************************/
340 bit IRcvStrExt(uchar sla,uchar *s,uchar no)
341 {
342 1 uchar i;
343 1
344 1 Start_I2c();
345 1 SendByte(sla+1);
346 1 if(ack==0)return(0);
347 1
348 1 for(i=0;i<no-1;i++)
349 1 {
350 2 *s=RcvByte(); /*发送数据*/
351 2 Ack_I2c(0); /*发送就答位*/
352 2 s++;
353 2 }
354 1 *s=RcvByte();
355 1 Ack_I2c(1); /*发送非应位*/
356 1 Stop_I2c(); /*结束总线*/
357 1 return(1);
358 1 }
359 main()
360 {
361 1 bit flag;
362 1 flag=ISendStr(write24c01,writeaddr,T,6);
363 1 delay(10);
364 1 flag=IRcvStr(write24c01,readaddr,R,6);
C51 COMPILER V7.20 IIC_OK_ 06/07/2006 17:13:03 PAGE 7
365 1 display();}
366 void display()
367 {
368 1 uchar i,j=0x20;
369 1 for(;i<6;i++){
370 2 P0=tab[R[i]];
371 2 P2=j;
372 2 j>>=1;
373 2 delay(5);
374 2 }
375 1 i=0;
376 1 delay(5);
377 1 }
378 void delay(uchar x)
379 {
380 1 uchar i,j;
381 1 for(j=0;j<x;j++)
382 1 for(i=0;i<120;i++)
383 1 {;}
384 1 }
385
386
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 560 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 24
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -