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.通常用于连接鼠标(串口)及通讯设备(如连 ...
 
随机推荐
- android 导航布局
			
http://blog.csdn.net/wangjinyu501/article/details/8140588 http://www.cnblogs.com/hanyonglu/archive/2 ...
 - XJOI网上同步训练DAY1 T1
			
思路:我们考虑由于没有人的区间会覆盖其他人,所以我们将区间按左端点排序,发现如果地盘长度已知,可以贪心地尽量往左放,来判断是否有解,因此做法很简单,就是二分答案,然后O(n)贪心判定,复杂度为O(nl ...
 - BZOJ 1061 志愿者招募
			
http://www.lydsy.com/JudgeOnline/problem.php?id=1061 思路:可以用不等式的改装变成费用流. 将不等式列出,如果有负的常数,那么就从等式连向T,如果是 ...
 - hdu 4405 Aeroplane chess(概率+dp)
			
Problem Description Hzz loves aeroplane chess very much. The chess map contains N+ grids labeled to ...
 - 使用xtrabakcup  备份inodb数据库
			
1,获取yum源 rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1- ...
 - css1-颜色和长度
			
<!DOCTYPE html>CSS1-颜色和长度 <style>div{ /*颜色*/ color:#f00; /*前景色*/ background:#00f; /*背景色* ...
 - 黑马程序员—— Java SE(2)
			
----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训 ...
 - DataList、Repeater、GridView中的Checkbox取值问题
			
先看页面代码 <asp:DataList id="DataList1" runat="server" Width="100%" Rep ...
 - django防止表单数据重复提交
			
思路: 在Asp.net中存在Page.IsPostback的方法,所以对django中表单提交数据的重复提交的数据采用相似方法实现,即在页面第一次访问时,即访问方法为GET方法在view中 ...
 - PHP学习笔记三十五【Try】
			
<?php function AddUser($name) { if($name=="张三") { echo "add success"; return ...