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):奇偶校验位
/* 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通信的更多相关文章
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- Android开发之bindService()通信
Service启动方式有两种,startService(intent)和bindService(intent,conn,Context.BIND_AUTO_CREATE) startService(i ...
- Android网络开发之Socket通信
HTTP通信中Client发送的每次请求都需要Server回送响应,在请求结束后,Client会主动释放连接.从建立连接到隔壁连接的过程成为一次连接.要保持Client程序的在线状态,需要不断地向Se ...
- Android 开发之 bindService() 通信
Service 启动方式有两种 startService(intent) bindService(intent,conn,Context.BIND_AUTO_CREATE) startService( ...
- Android开发之bindService()侦听service内部状态
在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 p ...
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
- Cocos2d-x 3.x游戏开发之旅
Cocos2d-x 3.x游戏开发之旅 钟迪龙 著 ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...
- [置顶] Android开发之MediaPlayerService服务详解(一)
前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...
- [置顶] Android开发之serviceManager分析
Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...
随机推荐
- JS封装移动端触摸滑动插件应用于导航banner【精装版】
自己封装了一个小插件,一个小尝试. 可用于类似于京东导航等效果,效果多样化,很方便. 欢迎大家提点意见. mrChenSwiper( {parent, child, type, parentN, c ...
- C++知识点整理——持续更新
virtual是C++的一个关键字,virtual修饰的函数可以被子类重写. 用法:在返回值类型的前面添加关键字即可. override是C++的保留字(注意不是关键字),表示当前函数重写了基类的 ...
- Cookie管理
1,判断来访者是否第一次 public class VistorTest extends HttpServlet { @Override protected void doGet(HttpServle ...
- centos6.5 升级python 到 python 2.7.11 安装 pip
1.首先官方下载源码,然后安装(./configure,make all,make install,make clean,make distclean) 注意:需要先安装zlib-devel,open ...
- Oracle 奇葩的问题:创建存储过程没有反应
问题描述:需要在oracle 数据库中再创建一个数据库(数据库实例)然后作为临时数据库,一切成功: 现在需要在数据库中新建一个表空间然后创建用户,使用创建的用户登录创建一个存储过程,执行提交刷新一下, ...
- 高质量程序设计指南C/C++语言——malloc/free使用要点
- Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决(对三层的例子配置有帮助)
Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLSto ...
- C/C++程序员面试大纲
基础篇:操作系统.计算机网络.设计模式一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会写 ...
- 为《31天成为IT服务达人》征求正式名字
写书时.没细想书的名字,仅仅是在想出本能够让同行或未来同行高速入门的书,如今想来还是应正式给他取个名,请朋友们帮忙哟
- NeHe OpenGL lession 4
// lession4.c #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <stdio.h> ...