#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)-万能程序的更多相关文章

  1. I2c串行总线组成及其工作原理

    采用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充 常用的串行扩展总线有:I2c总线,单总线,SPI总线,以及microwire.Plus等等 I2c总 ...

  2. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  3. 串行总线 —— I2C、UART、SPI

    I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...

  4. 【转载】IIC SPI UART串行总线

    一.SPISPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用. 接口SPI接口经常被称为4线串行 ...

  5. SPI、I2C、UART三种串行总线协议的区别

    第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous R ...

  6. 单片微机原理P4:80C51串口与串行总线拓展

    0. 串口通讯 0. 串口通讯的数据传输方式:单工(单向传输数据),半双工(非同时双向传输),全双工(同时,双向传输) 1. 根据通信方式的不同又分为同步通讯和异步通讯. 同步通讯:所有设备都使用同一 ...

  7. IIC串行总线的组成及其工作原理

    ------------------最近项目上用到了一款美信的DS1308RTC芯片,由于是挂在了Zynq的PS MIO上,需要软件人员协助才能测试:觉得太麻烦了,想通过飞线,然后在Vivado中调用 ...

  8. 痞子衡嵌入式:MCUBootUtility v3.5发布,支持串行NOR的ECC及双程序启动

    -- 痞子衡维护的 NXP-MCUBootUtility 工具距离上一个大版本(v3.4.0)发布过去半年了,这一次痞子衡为大家带来了版本升级 v3.5.0,这个版本主要有几个非常重要的更新需要跟大家 ...

  9. COM口,串行通讯端口,RS-232接口 基础知识

    COM口即串行通讯端口. COM口的接口标准规范和总线标准规范是RS-232,有时候也叫做RS-232口.电脑上的com口多为9针,最大速率115200bps.通常用于连接鼠标(串口)及通讯设备(如连 ...

随机推荐

  1. Hdu5126-stars(两次CDQ分治)

    题意: 简化就是有两种操作,一种是插入(x,y,z)这个坐标,第二种是查询(x1,y1,z1)到(x2,y2,z2)(x1<=x2,y1<=y2,z1<=z2)的长方体包含多少个点. ...

  2. extjs两个tbar问题

      版本:extjs3.4   接触过extjs的同志们都知道每个panel都有一个tbar(top bar 上面工具栏) ,bbar(bottom bar 底部工具栏)      大家做查询页面,一 ...

  3. 本地plsqldev.exe连接远端oracle数据库

    先看百度经验:http://jingyan.baidu.com/article/48b558e3540ecf7f38c09a3c.html 这里如果我们只有安装plsql工具,下载oracle精简版本 ...

  4. codevs 1001 舒适的路线 (并查集)

    题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光. Z小镇附近共有 N(<N≤)个景点(编号为1,,,…,N),这些景点被M(<M≤)条道路连 ...

  5. 基于RSA的加密/解密示例C#代码

    using System;using System.Security.Cryptography;using System.Text; class RSACSPSample{ static void M ...

  6. 基于阿里云server搭建SVNserver

    基于阿里云server搭建SVNserver 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/8577 ...

  7. Android应用程序绑定服务(bindService)的过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Serv ...

  8. Android 打造自己的个性化应用(三):应用程序的插件化

    在android的项目开发中,都会遇到后期功能拓展增强与主程序代码变更的现实矛盾,也就是程序的灵活度. 由于linux平台的安全机制,再加上dalvik的特殊机制,各种权限壁垒,使得开发一个灵活多变的 ...

  9. Centos 7 python升级(2.7.5-》2.7.11)

    1.安装升级GCC yum install gcc* openssl openssl-devel ncurses-devel.x86_64  bzip2-devel sqlite-devel pyth ...

  10. 网络基础知识HTTP(1) --转载

    为什么要写网络? 作为网站开发人员,你所开发的软件产品最终是要在网络上运行的.这就像一个生产商,要生产供给东北地区的产品,而生产商对东北的天气.地理.人文毫无了解.生产商的产品肯定是不可用的,或者低端 ...