I2C串行总线标准驱动程序(C51)-万能程序
#include "reg51.h"
#include "intrins.h"
unsigned char SystemError;
sbit SCL= P1^; //定义串行时钟线所在口 使用时根据自己的需要来定义
sbit SDA= P1^; //定义串行数据线所在口 使用时根据自己的需要来定义
#define SomeNOP(); {_nop_();_nop_();_nop_();_nop_();}
/*--------------------------------------------------------------------------------
调用方式:void AD7416_I2CStart(void) 2003/05/04
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
EA=";
SDA="; SomeNOP();//数据线保持高,时钟线从高到低一次跳变,I2C通信开始
SDA="; SomeNOP();
SCL=";
}
/*--------------------------------------------------------------------------------
调用方式:void AD7416_I2CStop(void) 2003/05/04
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
SCL="; SomeNOP(); //数据线保持低,时钟线从低到高一次跳变,I2C通信停止
SCL=";
EA=";
}
/*--------------------------------------------------------------------------------
调用方式:I2CAck(void) 2003/05/13
函数说明:私有函数,I2C专用,等待从器件接收方的应答
ACK BY AD7416
---------------------------------------------------------------------------------*/
WaitAck(void)
{
unsigned ";//因故障接收方无ACK,超时值为255。
SDA=";
SCL=";
SystemError="0x10";
while(SDA)
{ errtime--;
if(!errtime)
{ AD7416_I2CStop();
AD7416_SystemError=0x11; //出错后给全局变量赋值
return;
}
}
SCL=";
}
/*--------------------------------------------------------------------------------
调用方式:void SendAck(void) ﹫2003/05/13
函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。
---------------------------------------------------------------------------------*/
void SendAck(void)
{
SDA="; SomeNOP(); //数据线保持低,时钟线发生一次从高低的跳变 发送一个应答信号
SCL="; SomeNOP();
SCL=";
}
/*--------------------------------------------------------------------------------
调用方式:void SendAck(void) ﹫2003/05/13
函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,非应答信号。
--------------------------------------------------------------------------------*/
void SendNotAck(void)
{
SDA="; SomeNOP(); //数据线保持高,时钟线发生一次从高低的跳变 没有应答
SCL="; SomeNOP();
SCL=";
}
/*--------------------------------------------------------------------------------
调用方式:void I2CSend(uchar ch) 2003/05/13
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
void I2CSendByte(Byte ch)
{
unsigned ";
while (i--)
{
SCL=";_nop_();
SDA=(bit)(ch&; SomeNOP(); //时钟保持低可以发送数据
SCL="; SomeNOP();
}
SCL=";
}
/*--------------------------------------------------------------------------------
调用方式:uchar I2CReceive(void) 2003/05/13
函数说明:私有函数,I2C专用
---------------------------------------------------------------------------------*/
Byte I2CReceiveByte(void)
{
unsigned ;
SDA=";
while (i--)
{
data<<=;
SCL=";SomeNOP();
SCL=";SomeNOP(); //时钟做一次从低到高的跳变 可以接收数据
data|=SDA;
}
SCL=";
return data;
}
I2C串行总线标准驱动程序(C51)-万能程序的更多相关文章
- I2c串行总线组成及其工作原理
采用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充 常用的串行扩展总线有:I2c总线,单总线,SPI总线,以及microwire.Plus等等 I2c总 ...
- SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)
SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...
- 串行总线 —— I2C、UART、SPI
I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...
- 【转载】IIC SPI UART串行总线
一.SPISPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用. 接口SPI接口经常被称为4线串行 ...
- SPI、I2C、UART三种串行总线协议的区别
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...
- 单片微机原理P4:80C51串口与串行总线拓展
0. 串口通讯 0. 串口通讯的数据传输方式:单工(单向传输数据),半双工(非同时双向传输),全双工(同时,双向传输) 1. 根据通信方式的不同又分为同步通讯和异步通讯. 同步通讯:所有设备都使用同一 ...
- IIC串行总线的组成及其工作原理
------------------最近项目上用到了一款美信的DS1308RTC芯片,由于是挂在了Zynq的PS MIO上,需要软件人员协助才能测试:觉得太麻烦了,想通过飞线,然后在Vivado中调用 ...
- 痞子衡嵌入式:MCUBootUtility v3.5发布,支持串行NOR的ECC及双程序启动
-- 痞子衡维护的 NXP-MCUBootUtility 工具距离上一个大版本(v3.4.0)发布过去半年了,这一次痞子衡为大家带来了版本升级 v3.5.0,这个版本主要有几个非常重要的更新需要跟大家 ...
- COM口,串行通讯端口,RS-232接口 基础知识
COM口即串行通讯端口. COM口的接口标准规范和总线标准规范是RS-232,有时候也叫做RS-232口.电脑上的com口多为9针,最大速率115200bps.通常用于连接鼠标(串口)及通讯设备(如连 ...
随机推荐
- ZOJ3229 Shoot the Bullet
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20756 思路:就讲一下有源汇上下界最大流的做法吧!对于所有的边,就按照无源汇 ...
- 《Programming WPF》翻译 第7章 4.转换
原文:<Programming WPF>翻译 第7章 4.转换 支持高分辨率显示是WPF中的重要样式.这是被部分地支持--强调了可伸缩的向量图,而不是图像.但是,正如使用GDI+和GDI3 ...
- Powershell变量的幕后管理
Powershell变量的幕后管理 513 12月, 2011 在 Powershell tagged 变量 / 类型 by Mooser Lee本文索引[隐藏]1修改变量的选项设置2激活变量的写 ...
- 地址重写--Java中urlrewriter的使用
最近公司以前的一个项目需要升级改版,其中的一个模块是使用Struts2做的不需要改动,但是需要将其从之前的项目里面剥离出来,看了看官网,发现所有的链接访问的静态地址,以为是FreeMarker实现的, ...
- c#实现文件拖放
1. 选择form窗口,在事件分别双击双击DragDrop和DragEnter private void Form1_DragDrop(object sender, DragEventArgs e) ...
- bzoj1734 [Usaco2005 feb]Aggressive cows 愤怒的牛
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- Only2 Labs — A Visual Design Studio
Only2 Labs - A Visual Design Studio 设计合作 对您目前的设计很不满意?或是急缺一个设计供应商?您的团队最近做的项目需要指导?Only2都很乐意为您解困惑. 或者,你 ...
- 从java8 说起函数式编程
写在前面 为什么要用函数式编程.看例子: final List<BigDecimal> prices = Arrays.asList( new BigDecimal("10&qu ...
- shell编程while
脚本编程: 顺序结构 选择结构 if case 循环结构 for while until whil ...
- 【转载】C代码优化方案
C代码优化方案 1.选择合适的算法和数据结构2.使用尽量小的数据类型3.减少运算的强度 (1)查表(游戏程序员必修课) (2)求余运算 (3)平方运算 (4)用移位实现乘除法运算 (5)避免不必要的整 ...