i2c虚拟总线通用软件包

发布者:云淡风轻2014最新更新时间:2016-10-28 来源: eefocus关键字:i2c  虚拟总线  通用软件包 手机看文章 扫描二维码
随时随地手机看文章
// ****************************************************************//
//------------- 虚拟 i2c软件包头文件  iic.h  -----------------------//
//****************************************************************//

sbit SDA=P1^7;                        //定义IIC数据线//
sbit SCL=P1^6;                       //定义IIC时钟线//
#define uchar unsigned char
#define uint unsigned int 
extern void delay(uint x);          //延时子程序//
extern void sta();           //启动IIC总线//
extern void stop();          //停止IIC总线//
extern void mack();          //发送应答位//
extern void mnack();          //发送非应答位//
extern void cack();        //应答位检查//
extern void wrbyt(uchar shu);        //发送 1 个字节//
extern viod  wrbyt0();                  
extern void wrbyt1();
extern uchar rdbyt();                    //读取 1 个字节//
extern void wrnbyt(uchar slaw,uchar number,uchar ff[]);   //发送N个字节//
extern void rdnbyt(uchar slar,uchar number,uchar qq[]);   //读N个字节//



//************************************************************//
//---------   虚拟i2c软件包,12MHz晶振  ----------------------//
//***********************************************************//
#pragma db cd
#i nclude
#i nclude
#i nclude



void sta()        //启动iic总线//
{
SDA=1;
SCL=1;
while(SCL==0)
{;}
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}


void stop()
{
SDA=0;
SCL=1;
while(SCL==0)
{;}
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}


void mack()
{
SDA=0;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
SDA=1;
}


void mnack()
{
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
SDA=0;
}


void cack()
{
SDA=1;
SCL=1;
F0=0;
if(SDA==0)
   {
        SCL=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    }
 else
    {
         F0=1;
         SCL=0;
         _nop_();
         _nop_();
         _nop_();
         _nop_();
     }
}




void wrbyt(uchar shu)
{
uchar i;
for(i=0;i<8;i++)
   {
      if ((shu&0x80)>0)
         { wrbyt1(); }
      else
         { wrbyt0();}
      shu<<=1;
    }
}



void wrbyt0()
{
SDA=0;
SCL=1;
_nop_(); 
_nop_(); 
_nop_(); 
_nop_();
SCL=0;
}



void wrbyt1()
{
SDA=1;
SCL=1;
_nop_(); 
_nop_(); 
_nop_(); 
_nop_(); 
SCL=0;
SDA=0;
}



uchar rdbyt()
{
uchar nn=0xff;
uchar j;
for (j=0;j<8;j++)
    {
         SDA=1;
         SCL=1;
         if(SDA==0)
            {
                    nn<<=1;
                nn=(nn&0xfe);                 
                SCL=0;
             }
          else 
             {
                    nn<<=1;
                nn=(nn|0x01);                 
                SCL=0;
             }
     }
     return(nn);
}







//********************写N个字节子程序************************//
//slaw--写寻址字节, number--字节数, ff[]--N个字节数组//

void wrnbyt(uchar slaw,uchar number,uchar ff[])
{
  uchar idata k;
writ: do
   {
         sta();
         wrbyt(slaw);
         cack();
    }while(F0==1);
for(k=0;k     {  
         wrbyt(ff[k]);
         cack();
         if(F0==1)
             goto writ;
      }
 stop();
}



//***************读N个字节子程序*********************//
//number--字节数,slar--读寻址字节,qq--贮存单元数组//

void rdnbyt(slar,number,qq)
uchar slar,number,qq[];
{
uchar idata data0,l;
do
    {
       sta();
       wrbyt(slar);
       cack();
     }while(F0==1);
    
  for(l=0;l      {
        data0=rdbyt();
        qq[l]=data0;
           if(l<(number-1))
              { mack(); }
      }
   mnack();
   stop();
}
关键字:i2c  虚拟总线  通用软件包 引用地址:i2c虚拟总线通用软件包

上一篇:状态机的典范-HT6222红外遥控芯片接收程序
下一篇:ds1868(数字电位器) c 驱动程序

推荐阅读最新更新时间:2024-03-16 15:18

【PIC32MZ】I2C通信
I2C跟串口一样,仅需2根线通讯即可,在某些引脚紧张的应用中非常有用,不过I2C相比于串口,通讯协议更简单一点,距离也更短一些,仅限于板间通信。大多数IC都支持I2C协议。 I2C的时序图为: I2C数据传输是在起始条件和停止条件之间。 起始条件和停止条件都是SCL为高一段时间产生。起始条件为SDA从高变为低,停止条件为SDA从低变为高。 I2C数据传输规则为,第一字节必须为地址,一般器件地址都是7位(也有10位的),放在高7位,最后一位时读写标识,所以,读写地址是不相同的,并且很多IC都可以配置多个地址选择,这是为了在一组I2C上接多个IC,因为I2C是通过地址来识别从机的。 每传输一个字节,从机都要回复一个
[单片机]
【PIC32MZ】<font color='red'>I2C</font>通信
(6)s3c2440用I2C接口访问EEPROM
在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下. 本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来,最后还是放弃了.甚至参考了linux下i2c-algo-bit.c和i2c-gpio.c,依然没调出来.如果有示波器,可能很快就能找到原因,现在完全不知道问题出在哪里.其实想用GPIO模拟I2C的目的很简单,以一种简单而又深刻的方式来理解I2C. 既然这条路暂时没法走,退而求其次,用s3c2440的I2C接口来访问EEPROM,只要按照datasheet的来做,基本上不用考虑时序咯. 从s3c2440和AT24
[单片机]
(6)s3c2440用<font color='red'>I2C</font>接口访问EEPROM
STM32的I2C框图详解及通讯过程
STM32 的I2C 特性及架构 如果我们直接控制STM32 的两个GPIO 引脚,分别用作SCL 及SDA,按照上述信号的时序要求,直接像控制LED 灯那样控制引脚的输出(若是接收数据时则读取SDA 电平),就可以实现I2C 通讯。同样,假如我们按照USART 的要求去控制引脚,也能实现USART通讯。所以只要遵守协议,就是标准的通讯,不管您如何实现它,不管是ST 生产的控制器还是ATMEL 生产的存储器, 都能按通讯标准交互。 由于直接控制GPIO 引脚电平产生通讯时序时,需要由CPU 控制每个时刻的引脚状态,所以称之为“软件模拟协议”方式。 相对地,还有“硬件协议”方式,STM32 的I2C 片上外设专门负责实现I2C 通
[单片机]
STM32的<font color='red'>I2C</font>框图详解及通讯过程
STM8L051F3 硬件I2C从机实例--新手导航
这是我写的第一篇有关于技术的文章,可能写的不是很好,仅供参考。 先介绍一下背景,我是第一次接触STM的芯片,以前接触过都是基于51的芯片,算是有一点基础吧。因为公司的项目需要用到STM8L051F3的硬件I2C作为从机送数据,把自己从接触到调通遇到的问题记录一下,有需要的可以参考一下。 这篇文章是以相对新手的水平去写给新手参考的,所以我会尽量写的详细点。 1.首先我们需要查看数据手册,看下硬件I2C的接口是哪个端口,我用的是STM8L051F3这一块芯片。 这款芯片的I2C应该是不能复用别的端口的,反正手册我没查到,只能用C0跟C1。 2.接下来开始初始化I2C需要的设置。(这里我只讲7位地址的。) void
[单片机]
STM8L051F3 硬件<font color='red'>I2C</font>从机实例--新手导航
3.4.2内核下I2C驱动之24CXX实例
at24cxx_dev.c部分: #include linux/kernel.h #include linux/module.h #include linux/platform_device.h #include linux/i2c.h #include linux/err.h #include linux/regmap.h #include linux/slab.h static struct i2c_board_info at24cxx_info = { I2C_BOARD_INFO( at24c08 , 0x50), }; static struct i2c_client *at2
[单片机]
MAX517与51单片机的I2C总线数据通信
1 I2C总线的特点及基本通信协议 I2C总线是Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线?串行数据线和串行时钟线?即可使连接于总线上的器件之间实现信息传送,同时可通过对器件进行软件寻址,而不是对硬件进行片选寻址的方式来节约通信线数目,从而减少了硬件所占空间。因为总线已集成在片内,所以大大缩短了设计时间,此外,在从系统中移去或增加集成电路芯片时,对总线上的其它集成芯片没有影响。 1.1 I2C总线的主要特点 I2C总线通常由两根线构成:串行数据线(SDA)和串行时钟线(SCL);总线上所有的器件都可以通过软件寻址,并保持简单的主从关系,其中主器件既可以作为发送器,又可以作为接收器;
[单片机]
MAX517与51单片机的<font color='red'>I2C</font><font color='red'>总线</font>数据通信
基于I2C串行总线的单片机应用系统的设计方法和程序
目前,消费类电子产品(如彩电、音响等)的功能多样化使得控制电路变得更为复杂。而Philips公司推出的集成电路芯片间总线I2CBUS(Inter ICBUS)是目前众多总线中最简洁有效、使用也为广泛的一种总线格式。I2C总线通常是以硬件来实现的,这就要求所选器件必须具有I2C总线接口,但目前广泛使用的MCS-51系列单片机并不具备I2C总线的专用硬件部分。本文结合笔者采用单片机8031实现对具有I2C总线接口的立体声音频处理芯片TDA7313的控制,介绍了I2C总线以及基于I2C串行总线的单片机应用系统的设计方法和程序。 1 I2C总线简介 1.1 I2C总线的组成 I2C串行总线是用双向数据线(SDA)和串行
[单片机]
基于<font color='red'>I2C</font>串行<font color='red'>总线</font>的单片机应用系统的设计方法和程序
基于I2C总线的处理器的联网设计方案
  随着微控制器的价格越来越低,功能越来越强大,电气设计人员发现在单板和多板系统中都使用多个小型控制器是一种更加经济高效的方法。这种辅助处理器能够减轻主处理器在耗时任务上面的处理开销,例如扫描键盘、显示控制器和电机控制。这些控制器也可以配置为各种各样的专用外设。   最近,我接受了一项任务:开发一种能够方便地适用于多种应用的接口(软/硬件),且要符合嵌入式处理器中常用的行业标准。在分析了一些典型应用之后,我们列出了一些针对该硬件接口的设计需求:常用于32位和8位处理器;能够得到常用外设器件的支持;外设接口代码量低于0.5kB;引脚数量少;数据带宽可达10kBps;RAM用量少;一条总线上支持多种外设;方便使用API;不需要外部接
[安防电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved