程序状态字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):奇偶校验位

 /*    I2C通信流程
a、初始化I2C总线;
b、发送起始信号;
c、发送目标地址;(芯片的硬件地址)
d、等待应答;
e、发送或接收数据,这取决于c中目标地址中最后一位的设置;
f、应答;
g、从c-f循环;
h、发送终止信号;
*/ #include <reg51.h>
#define uchar unsigned char
#define uint unsigned int void delay()
{
for(;;)
;
} //I2C的初始化
void init()
{
SDA = 1;
delay();
SCL = 1;
delay();
} //发送起始信号
void start()
{
SDA = 0;
delay();
}

//发送目标地址
//发送函数,发送目标地址可以调用发送函数即可
void write(uchar content)
{
uchar i;
uchar temp = content; for(i=0;i<8;i++)
{
temp=temp<<1; //左移一位 移出的一位在CY中,涉及程序状态字PSW
SCL = 0;
delay();
SDA = CY;
delay();
SCL = 1;
delay();
} SCL = 0;
delay();
SDA = 1;
delay();
} //等待应答 ACK
/*
从机应答,在SCL为高电平时,将SDA拉低;即产生应答信号;
*/
void respons()
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250))//没收到应答,我等!~~
i++; //等了250次没收到就不管他了,就当他收到了-_-
//其实没收到的话可以结束程序的
SCL=0;
} //接收数据;发送、接收数据,取决于前面地址字的最后一位。读/写
uchar read()
{
uchar k, i = 0;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;//先左移一位,再在最低位接受当前位
SCL=0;
delay();
}
return k;
} void finish()
{
SCL = 1;
delay()
SDA = 0;
delay();
SDA = 1;
delay();
}

MCU开发之I2C通信的更多相关文章

  1. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  2. Android开发之bindService()通信

    Service启动方式有两种,startService(intent)和bindService(intent,conn,Context.BIND_AUTO_CREATE) startService(i ...

  3. Android网络开发之Socket通信

    HTTP通信中Client发送的每次请求都需要Server回送响应,在请求结束后,Client会主动释放连接.从建立连接到隔壁连接的过程成为一次连接.要保持Client程序的在线状态,需要不断地向Se ...

  4. Android 开发之 bindService() 通信

    Service 启动方式有两种 startService(intent) bindService(intent,conn,Context.BIND_AUTO_CREATE) startService( ...

  5. Android开发之bindService()侦听service内部状态

    在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 p ...

  6. Android混合开发之WebViewJavascriptBridge实现JS与java安全交互

    前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...

  7. Cocos2d-x 3.x游戏开发之旅

    Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...

  8. [置顶] Android开发之MediaPlayerService服务详解(一)

    前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...

  9. [置顶] Android开发之serviceManager分析

    Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...

随机推荐

  1. News feed

    1. Level 1.0 Database Schema: a. User UserID Name Age 1 Jason 25 2 Michael 26 b. Friendship Friendsh ...

  2. Problem D: Integer Inquiry

    Problem D: Integer InquiryTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 41 Solved: 12[Submit][Status ...

  3. [LeetCode]题解(python):068-Text Justification

    题目来源: https://leetcode.com/problems/text-justification/ 题意分析: 输入一个字符串数组和一个规定长度L.将这个字符串数组的元素尽可能放到长度的L ...

  4. 在iOS上增加手势锁屏、解锁功能

    在iOS上增加手势锁屏.解锁功能 在一些涉及个人隐私的场景下,尤其是当移动设备包含太多私密信息时,为用户的安全考虑是有必要的. 桌面版的QQ在很多年前就考虑到用户离开电脑后隐私泄露的危险,提供了“离开 ...

  5. libcprops

    Install Howto Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_6 ...

  6. ubutu下的几个命令

    nginx重启命令 (ps:意为将nginx重启) /usr/local/nginx/sbin/nginx -s reload 给new目录权限设置为777 (ps:意思为将wwwroot/new目录 ...

  7. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  8. vs c++配置opencv(1)

    环境: vs2013 opencv2.4.13 准备工作: 1.安装opencv. opencv各版本间存在API差异,opencv提供相应版本的vc文件,在其安装目录 ..opencv\build\ ...

  9. Hidden String(深搜)

    Hidden String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  10. asp.net MVC 使用JQuery.Ajax

    使用到:Jquery.js 以及 Newtonsoft.Json.dll 客户端调用方式: $("#ButAjax").click(function() {$.ajax({type ...