MCU开发之I2C通信

简介:   程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。各个标志位的意义如下: PSW.7(Cy):进位标志位。

  程序状态字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 }

 

相关文章
|
1月前
|
网络协议 数据处理 数据格式
51单片机ESP8266云端通信的实现
51单片机ESP8266云端通信的实现
|
10天前
|
Java
java实现上位机与西门子PLC的通讯设置
这段代码创建了一个ZCAN_Transmit_Data数组,初始化并设置了数组中的第一个元素,包括写入数据、传输类型为1。然后,创建了一个ZCAN_CAN_FRAME对象,指定了CAN_ID和数据长度为8,并将十六进制字符串转换为字节数组填充到数据字段。将这个帧赋值给ZCAN_Transmit_Data对象。最后通过ZLGCAN接口发送数据,如果返回值不等于1,则抛出异常,否则返回发送结果。
|
23天前
|
传感器 监控 芯片
嵌入式系统中MCU与SoC通信方式的选择与应用
嵌入式系统中MCU与SoC通信方式的选择与应用
55 3
|
6月前
|
芯片
嵌入式 IIC(I2C)协议
嵌入式 IIC(I2C)协议
|
7月前
|
安全 芯片 C++
浅谈总线通信机制(通信基础+串口+I2C)
浅谈总线通信机制(通信基础+串口+I2C)
66 0
|
数据处理 SoC Perl
ZYNQ与DSP之间EMIF16通信
介绍说明XQ6657Z35-EVM 高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。
ZYNQ与DSP之间EMIF16通信
【嵌入式】STM32通讯方式
【嵌入式】STM32通讯方式
79 0
|
存储 索引
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
今天我们来介绍西门子S7-200SMART与变频器的通信如何设置,USS通信协议如何组态,下面先介绍一下变频器参数设置。
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
|
存储 监控
西门子S7-1500 PLC之间、PLC与HMI如何建立通信
西门子S7-1500关于通信的功能非常完善,可以说通信无处不在,这其中包括PLC之间的通信,PLC与人机界面的通信。在博途软件中,支持拖拽方式,通过变量的拖拽自动建立通信,这极大的提高了工程效率。今天我们从三个方面介绍S7-1500的通信。看完本文您会发现通信也是如此简单与高效。
西门子S7-1500 PLC之间、PLC与HMI如何建立通信
|
存储 传感器 芯片
嵌入式-iic通信的一些概念
嵌入式-iic通信的一些概念
237 1
嵌入式-iic通信的一些概念