📄 i2c_slaver.lst
字号:
278 1
279 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
280 1 TL0 =0xef;
281 1 TF0 = 0;
282 1 while(CLK_PIN == 0)//等待CLK 的0完成
283 1 {
284 2 if(TF0 == 1)
285 2 {
286 3 return;
287 3 }
288 2
289 2 }
290 1
291 1 //读 BYTE1 的第8 位
292 1 SDA_LEVEL = SDA_PIN;//读SDA数据
293 1 if(SDA_LEVEL == 1)
294 1 {
295 2 SDA_DATA[var] |= 0x01;
296 2
297 2 }
298 1 else
299 1 {
300 2 SDA_DATA[var] &= 0xfe;
301 2 }
302 1
303 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
C51 COMPILER V7.50 I2C_SLAVER 03/02/2009 14:25:10 PAGE 6
304 1 TL0 =0xef;
305 1 TF0 = 0;
306 1 while(CLK_PIN == 1)//等待CLK 的 1完成
307 1 {
308 2 if(TF0 == 1)
309 2 {
310 3 return;
311 3 }
312 2 }
313 1
314 1
315 1 //处理应答
316 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
317 1 SDA_PIN = 0;//应答
318 1
319 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
320 1 TL0 =0xef;
321 1 TF0 = 0;
322 1 while(CLK_PIN == 0)//等待CLK 应答0 的完成
323 1 {
324 2 if(TF0 == 1)
325 2 {
326 3
327 3 return;
328 3 }
329 2
330 2 }
331 1
332 1
333 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
334 1 TL0 =0xef;
335 1 TF0 = 0;
336 1 while(CLK_PIN == 1)//等待CLK 应答的 1完成
337 1 {
338 2 if(TF0 == 1)
339 2 {
340 3 return;
341 3 }
342 2 }
343 1
344 1 SDA_PIN = 1;//应答完成,释放SDA
345 1
346 1 //检测是否stop
347 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
348 1 TL0 =0xef;
349 1 TF0 = 0;
350 1 while(CLK_PIN == 0)//等待CLK 0 的完成
351 1 {
352 2 if(TF0 == 1)
353 2 {
354 3 return;
355 3 }
356 2
357 2 }
358 1
359 1 //CLK的0完成了, 接下来检测是否在1期间SDA有上升沿
360 1
361 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
362 1 TL0 =0xef;
363 1 TF0 = 0;
364 1
365 1 SDA_LEVEL= SDA_PIN;
C51 COMPILER V7.50 I2C_SLAVER 03/02/2009 14:25:10 PAGE 7
366 1 if(SDA_LEVEL == 1)
367 1 {
368 2 SDA_LEVEL_BAK = 1;
369 2 while(CLK_PIN == 1)//如果 第一次就是1,肯定不是stop,等待1完
370 2 {
371 3 if(TF0 == 1)
372 3 {
373 4 return;
374 4 }
375 3 }
376 2 }
377 1 else//(SDA_LEVEL == 0)
378 1 {
379 2 SDA_LEVEL_BAK = 0;
380 2 while(CLK_PIN == 1)//等1
381 2 {
382 3 if(TF0 == 1)
383 3 {
384 4 return;
385 4 }
386 3 SDA_LEVEL= SDA_PIN;
387 3
388 3 if(SDA_LEVEL == 1)
389 3 {
390 4 return;
391 4 }
392 3 }
393 2 }
394 1 Recevie_Byte((&SDA_DATA[var + 1]));
395 1
396 1 }
397
398 void Recevie_Byte( unsigned char *Recevie_Pointer)
399 {
400 1 //Recevie_Pointer++;
401 1 if(SDA_LEVEL_BAK== 1)
402 1 {
403 2 *Recevie_Pointer |= 0x01;
404 2 *Recevie_Pointer =*Recevie_Pointer << 1;
405 2 }
406 1 else
407 1 {
408 2 *Recevie_Pointer &= 0xfe;
409 2 *Recevie_Pointer =*Recevie_Pointer << 1;
410 2 }
411 1
412 1 ///////////////////////////////////////
413 1
414 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
415 1 TL0 =0xef;
416 1 TF0 = 0;
417 1 while(CLK_PIN == 0)//等待CLK 的0完成
418 1 {
419 2 if(TF0 == 1)
420 2 {
421 3 return;
422 3 }
423 2
424 2 }
425 1
426 1 SDA_LEVEL = SDA_PIN;//读SDA数据
427 1 if(SDA_LEVEL== 1)
C51 COMPILER V7.50 I2C_SLAVER 03/02/2009 14:25:10 PAGE 8
428 1 {
429 2 *Recevie_Pointer |= 0x01;
430 2 *Recevie_Pointer =*Recevie_Pointer << 1;
431 2 }
432 1 else
433 1 {
434 2 *Recevie_Pointer &= 0xfe;
435 2 *Recevie_Pointer =*Recevie_Pointer << 1;
436 2 }
437 1
438 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
439 1 TL0 =0xef;
440 1 TF0 = 0;
441 1 while(CLK_PIN == 1)//等待CLK 的 1完成
442 1 {
443 2 if(TF0 == 1)
444 2 {
445 3 return;
446 3 }
447 2
448 2 }
449 1
450 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
451 1 TL0 =0xef;
452 1 TF0 = 0;
453 1 while(CLK_PIN == 0)//等待CLK 的0完成
454 1 {
455 2 if(TF0 == 1)
456 2 {
457 3 return;
458 3 }
459 2
460 2 }
461 1
462 1 SDA_LEVEL = SDA_PIN;//读SDA数据
463 1 if(SDA_LEVEL== 1)
464 1 {
465 2 *Recevie_Pointer |= 0x01;
466 2 *Recevie_Pointer =*Recevie_Pointer << 1;
467 2 }
468 1 else
469 1 {
470 2 *Recevie_Pointer &= 0xfe;
471 2 *Recevie_Pointer =*Recevie_Pointer << 1;
472 2 }
473 1
474 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
475 1 TL0 =0xef;
476 1 TF0 = 0;
477 1 while(CLK_PIN == 1)//等待CLK 的 1完成
478 1 {
479 2 if(TF0 == 1)
480 2 {
481 3 return;
482 3 }
483 2
484 2 }
485 1
486 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
487 1 TL0 =0xef;
488 1 TF0 = 0;
489 1 while(CLK_PIN == 0)//等待CLK 的0完成
C51 COMPILER V7.50 I2C_SLAVER 03/02/2009 14:25:10 PAGE 9
490 1 {
491 2 if(TF0 == 1)
492 2 {
493 3 return;
494 3 }
495 2
496 2 }
497 1
498 1 SDA_LEVEL = SDA_PIN;//读SDA数据
499 1 if(SDA_LEVEL== 1)
500 1 {
501 2 *Recevie_Pointer |= 0x01;
502 2 *Recevie_Pointer =*Recevie_Pointer << 1;
503 2 }
504 1 else
505 1 {
506 2 *Recevie_Pointer &= 0xfe;
507 2 *Recevie_Pointer =*Recevie_Pointer << 1;
508 2 }
509 1
510 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
511 1 TL0 =0xef;
512 1 TF0 = 0;
513 1 while(CLK_PIN == 1)//等待CLK 的 1完成
514 1 {
515 2 if(TF0 == 1)
516 2 {
517 3 return;
518 3 }
519 2
520 2 }
521 1
522 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
523 1 TL0 =0xef;
524 1 TF0 = 0;
525 1 while(CLK_PIN == 0)//等待CLK 的0完成
526 1 {
527 2 if(TF0 == 1)
528 2 {
529 3 return;
530 3 }
531 2
532 2 }
533 1
534 1 SDA_LEVEL = SDA_PIN;//读SDA数据
535 1 if(SDA_LEVEL== 1)
536 1 {
537 2 *Recevie_Pointer |= 0x01;
538 2 *Recevie_Pointer =*Recevie_Pointer << 1;
539 2 }
540 1 else
541 1 {
542 2 *Recevie_Pointer &= 0xfe;
543 2 *Recevie_Pointer =*Recevie_Pointer << 1;
544 2 }
545 1
546 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
547 1 TL0 =0xef;
548 1 TF0 = 0;
549 1 while(CLK_PIN == 1)//等待CLK 的1完成
550 1 {
551 2 if(TF0 == 1)
C51 COMPILER V7.50 I2C_SLAVER 03/02/2009 14:25:10 PAGE 10
552 2 {
553 3 return;
554 3 }
555 2
556 2 }
557 1
558 1 TH0 =0xed;//18.432MHz晶体,16位方式3ms
559 1 TL0 =0xef;
560 1 TF0 = 0;
561 1 while(CLK_PIN == 0)//等待CLK 的0完成
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -