MCU开发之I2C通信

  程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。各个标志位的意义如下: 
PSW.7(Cy):进位标志位。 
PSW.6(AC):辅助进位标志位,又称为半进位标志位。 
PSW.5(F0):用户标志位。 
PSW.4、PSW.3(RS1和 RS0):寄存器组选择位。 
PSW.2(OV):溢出标志位。 
PSW.1(空缺位):此位未定义。 
PSW.0(P):奇偶校验位

  1 /*    I2C通信流程
  2     a、初始化I2C总线;
  3     b、发送起始信号;
  4     c、发送目标地址;(芯片的硬件地址)
  5     d、等待应答;
  6     e、发送或接收数据,这取决于c中目标地址中最后一位的设置;
  7     f、应答;
  8     g、从c-f循环;
  9     h、发送终止信号;
 10 */
 11 
 12 
 13 #include <reg51.h>
 14 #define uchar unsigned char
 15 #define uint  unsigned int
 16 
 17 void delay()
 18 {
 19     for(;;)
 20         ;
 21 }
 22 
 23 //I2C的初始化
 24 void init()
 25 {
 26     SDA = 1;
 27     delay();
 28     SCL = 1;
 29     delay();
 30 }
 31 
 32 //发送起始信号
 33 void start()
 34 {
 35     SDA = 0;
 36     delay();
 37 }
 38  39 //发送目标地址
 40 //发送函数,发送目标地址可以调用发送函数即可
 41 void  write(uchar content)
 42 {
 43     uchar i;
 44     uchar temp = content;
 45 
 46     for(i=0;i<8;i++)
 47     {
 48         temp=temp<<1; //左移一位 移出的一位在CY中,涉及程序状态字PSW 
 49         SCL = 0;
 50         delay();
 51         SDA = CY;
 52         delay();
 53         SCL = 1;
 54         delay();
 55     }
 56 
 57     SCL = 0;
 58     delay();
 59     SDA = 1;
 60     delay();        
 61 }
 62 
 63 //等待应答    ACK
 64 /*
 65     从机应答,在SCL为高电平时,将SDA拉低;即产生应答信号;
 66 */
 67 void respons()
 68 {
 69     uchar i;  
 70     SCL=1;  
 71     delay();  
 72     while((SDA==1)&&(i<250))//没收到应答,我等!~~  
 73         i++;        //等了250次没收到就不管他了,就当他收到了-_-  
 74                     //其实没收到的话可以结束程序的  
 75     SCL=0;  
 76 }
 77 
 78 //接收数据;发送、接收数据,取决于前面地址字的最后一位。读/ 79 uchar read()
 80 {
 81      uchar k, i = 0;
 82      for(i=0;i<8;i++)  
 83     {  
 84         SCL=1;  
 85         delay();  
 86         k=(k<<1)|SDA;//先左移一位,再在最低位接受当前位  
 87         SCL=0;  
 88         delay();  
 89     }  
 90     return k;
 91 }
 92 
 93 void finish()
 94 {
 95     SCL = 1;
 96     delay()
 97     SDA = 0;
 98     delay();
 99     SDA = 1;
100     delay();
101 }
原文地址:https://www.cnblogs.com/chris-cp/p/3886518.html