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 ...
随机推荐
- News feed
1. Level 1.0 Database Schema: a. User UserID Name Age 1 Jason 25 2 Michael 26 b. Friendship Friendsh ...
- Problem D: Integer Inquiry
Problem D: Integer InquiryTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 41 Solved: 12[Submit][Status ...
- [LeetCode]题解(python):068-Text Justification
题目来源: https://leetcode.com/problems/text-justification/ 题意分析: 输入一个字符串数组和一个规定长度L.将这个字符串数组的元素尽可能放到长度的L ...
- 在iOS上增加手势锁屏、解锁功能
在iOS上增加手势锁屏.解锁功能 在一些涉及个人隐私的场景下,尤其是当移动设备包含太多私密信息时,为用户的安全考虑是有必要的. 桌面版的QQ在很多年前就考虑到用户离开电脑后隐私泄露的危险,提供了“离开 ...
- libcprops
Install Howto Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_6 ...
- ubutu下的几个命令
nginx重启命令 (ps:意为将nginx重启) /usr/local/nginx/sbin/nginx -s reload 给new目录权限设置为777 (ps:意思为将wwwroot/new目录 ...
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- vs c++配置opencv(1)
环境: vs2013 opencv2.4.13 准备工作: 1.安装opencv. opencv各版本间存在API差异,opencv提供相应版本的vc文件,在其安装目录 ..opencv\build\ ...
- Hidden String(深搜)
Hidden String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- asp.net MVC 使用JQuery.Ajax
使用到:Jquery.js 以及 Newtonsoft.Json.dll 客户端调用方式: $("#ButAjax").click(function() {$.ajax({type ...