微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > I2C的问题,新手,帮帮忙!

I2C的问题,新手,帮帮忙!

时间:10-02 整理:3721RD 点击:

下面是本人的完整代码,新手测试IIC通讯。正常 工作应该是 第一个LED点亮,,求大神解答

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. sbit sda=P2^0;
  4. sbit scl=P2^1;
  5. void init();
  6. void res();        
  7. void delay();

  8. void write(uchar date);//问题1:这里的date改成data就编译不了了,为什么?

  9. uchar rd();
  10. void start();
  11. void delay1(uchar x);
  12. void stop();
  13. void x(uchar m);
  14. void main()
  15. {

  16.                 while(1)                 //问题2:不套while(1)循环   蜂鸣器会响  为什么
  17.                 x(0xfe);
  18.         

  19.                         
  20. }

  21. void x(uchar m)
  22. {
  23.         init();
  24.         start();
  25.         write(0xa0);
  26.         res();
  27.         write(1);
  28.         res();
  29.         write(m);
  30.         res();
  31.         stop();

  32.         delay1(100);                 //问题3:这延时100毫秒有什么用啊,去掉后不能正常工作。

  33.         start();
  34.         write(0xa0);
  35.         res();
  36.         write(1);
  37.         res();
  38.         start();
  39.         write(0xa1);
  40.         res();
  41.         P1=rd();
  42.         stop();
  43. }




  44. void delay1(uchar x)
  45. {
  46.         uchar a,b;
  47.         for(a=x;a>0;a--)
  48.          for(b=100;b>0;b--);
  49. }


  50. void init()
  51. {
  52.         scl=1;
  53.         sda=1;
  54.         delay();
  55. }

  56. void res()
  57. {
  58.         uchar i=0;
  59.         scl=1;
  60.         delay();
  61.         while((sda==1)&&(i<250))i++;
  62.         scl=0;

  63. }

  64. void delay()
  65. {;;}



  66. void write(uchar date)
  67. {
  68.         uchar i,temp;
  69.         temp=date;

  70.         for(i=0;i<8;i++)
  71.         {
  72.                 scl=0;
  73.                 delay();
  74.                 temp=temp<<1;
  75.                 sda=CY;
  76.                 delay();
  77.                 scl=1;
  78.                 delay();
  79.                 scl=0;
  80.         }
  81. }



  82. uchar rd()
  83. {
  84.         uchar i,k=0x00;
  85.         scl=0;
  86.         for(i=0;i<8;i++)
  87.         {
  88.                 scl=1;
  89.                 delay();
  90.                 k=((k<<1)|sda);
  91.                 scl=0;                  
  92.                 delay();        
  93.         }
  94.         return k;
  95.                
  96. }



  97. void start()
  98. {
  99.         sda=1;
  100.         scl=1;
  101.         delay();
  102.         sda=0;
  103.         delay();
  104.         
  105. }

  106. void stop()
  107. {
  108.         sda=0;
  109.         scl=1;
  110.         delay();
  111.         sda=1;
  112.         delay();
  113.         
  114. }

复制代码






找到问题所在了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top