历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2019年01月29日 | 单片机模拟I2C总线通信的几个关键程序

2019-01-29 来源:eefocus

I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,既可以发送数据,也可以接收数据。以下为单片机模拟I2C总线通信的几个关键程序: 

1、总线初始化


void main()

{

    SCl=1;

    delay();

    SDA=1;

    delay();

}

//将总线都拉高以释放总线


2、启动信号


void start()

{

    SDA=1;

    delay();

    SCL=1;

    delay();

    SDA=0;

    delay();

}

//SCL在高电平期间,SDA一个下降沿启动信号


3、应答信号


void respons()

{

    uchar i=0;

    SCL=1;

    delay();

    while(SDA==1)&&(i<255))//若在一段时间内没有收到从器件的应答则

        i++;         //主器件默认从器件已经收到数据而不在等待应答信号

    SCL=0;

    delay();

}

//SCL在高电平期间,SDA被从设备拉为低电平表示应答


4、停止信号


void stop()

{

    SDA=0;

    delay();

    SCL=1;

    delay();

    SDA=1;

    delay();

}

//SCL在高电平期间,SDA一个上升沿停止信号


5、写一个字节


void writebyte(uchar date)

{

    uchar i,temp;

    temp=date;

    for(i=0;i<8;i++)

    {

        temp=temp<<1;//temp左移一位,最高位将移入PSW寄存器的CY位中

        SCL=0;       //然后将CY赋给SDA进而在SCL的控制下发送出去

        delay();

        SDA=CY;

        delay();

        SCL=1;

        delay();

    }

    SCL=0;

    delay();

    SDA=1;

    delay();

}

//串行发送一个字节时,需要把这个字节中的8位一位一位地发出去


6、读一个字节


uchar readbyte()

{

    uchar i,k;

    SCL=0;

    delay();

    SDA=1;

    for(i=0;i<8;i++)

    {

        SCL=1;

        delay();

        k=(k<<1)|SDA;//将k左移一位与SDA进行“或”运算,

        SCL=0;      //依次把8个独立的位放入一个字节中来完成接收

        delay();

    }

    delay();

    return k;

}

同样的,接收一个字节时需将8位一位一位地接收

推荐阅读

史海拾趣

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司注重企业文化建设和团队建设,通过营造积极向上的工作氛围和提供广阔的发展平台,吸引了大量优秀人才的加入。公司注重员工的培训和成长,为员工提供多样化的职业发展路径。同时,公司还积极开展团队建设活动,增强员工的归属感和凝聚力。这种企业文化和团队建设为公司的发展提供了有力的保障。


请注意,这些故事是基于一般性的电子行业和公司发展情况进行构想的,可能与Aerotronics Marketing Inc公司的实际情况存在差异。如果需要更具体、准确的故事,建议您直接查阅该公司的官方网站、新闻报道或相关资料。

Electro-Mech Components Inc公司的发展小趣事

随着公司业务的不断发展壮大,EMC开始积极实施全球化战略。公司在全球范围内寻找合适的合作伙伴和销售渠道,努力将其产品推向更广阔的市场。通过与国际知名品牌的合作和交流,EMC不断提升自身的品牌形象和市场影响力。同时,公司还加强了对海外市场的调研和分析工作,以便更好地满足不同地区客户的需求和期望。

请注意,以上故事是基于已知信息构建的框架性内容,具体细节和情节需要根据实际情况进行填充和完善。

复旦微电子(FM)公司的发展小趣事

自1976年起,EMC在蒂华纳不仅为自身运营制造工厂,还开始为其他美国公司,如GM/Hughes Aircraft和Daneher Joslyn Sunbank Electronics提供制造服务。这种深度合作模式不仅增强了EMC的生产能力,也使其能够接触到更多的先进技术和管理经验。通过与这些美国公司的合作,EMC的产品质量和生产效率都得到了显著提升,同时也为公司的全球化战略打下了坚实基础。

AKM [Asahi Kasei Microsystems]公司的发展小趣事

1997年,EMC做出了一次重要的收购决策——从Pollak Transportation Electronics Division(TED)收购了开关灯产品线。这一收购使EMC的产品线得到了极大的扩展,同时也增强了其在电气元件领域的竞争力。收购后的开关灯产品线在EMC的精心运营下,逐渐成为了公司的明星产品之一,为公司带来了丰厚的利润。

Dynex公司的发展小趣事

EMC一直致力于技术研发和创新能力的提升。公司拥有一支专业的研发团队,不断投入资金和人力进行新产品的研发和技术创新。通过不断的努力,EMC在电气元件领域取得了多项专利和技术成果,其产品质量和技术水平在行业中处于领先地位。同时,EMC还积极参与行业标准的制定和推广工作,为推动整个行业的发展做出了积极贡献。

ALLTHREAD公司的发展小趣事

随着产品质量的不断提升,ALLTHREAD开始积极拓展市场。他们与多家国际知名电子企业建立了合作关系,共同开发适用于不同应用场景的螺栓产品。通过国际合作,ALLTHREAD不仅提升了自身的技术水平,还进一步扩大了市场份额。

问答坊 | AI 解惑

请教一下做LED灯的高手

我们做的灯都是蓝色死珠的多,红色和绿色坏的很少,相对蓝色来说可以忽略。红绿蓝都是非隔离方案做的,到底是灯珠的问题还是驱动的问题呢?   论坛上看到以上一句话以你的专业知识和经验能否解释下你知道的;为什么蓝色的死猪就多呢;…

查看全部问答>

snmp MIB如何实现?

MIB文件一般都是从哪里获取的? 要在交换机上实现snmp agent,自己如何实现私有MIB?如何确定哪些功能需要实现? 高手帮忙! …

查看全部问答>

如何读懂WINCE驱动程序

我是大四的一名学生,我是自动化专业,想毕业可从事嵌入式系统这方面的工作,感觉自己智商不高,不敢搞应用程序的开发,因为涉及到许多算法等等.所以现在我想学习驱动编程,我只在书上看了一些WIN CE的基本驱动的结构, 书上说先看看PLATFORM BUILDER中的 ...…

查看全部问答>

请教wince下的段地址怎么查看

data.load.exe $REL\\eboot.exe /nocode /reloc .text at 0x80039000 /reloc .data at 0x80021000 这里0x80039000表示eboot在运行时代码段的地址;0x80021000表示eboot运行时数据段的起始地址。 这两个地址从哪里来的呢? 通过什么工具或者什么文 ...…

查看全部问答>

高价收购现有MC68EZ328手持嵌入式RFID数据采集产品的方案

我现在有个项目要用手持的数据采集产品,现高价收购 要求如下: 1.提供原理图,PCB Layout 2.提供系统软件原代码 3.使用单片机或嵌入式CPU 4.读写RFID 5.将RFID资料用GRPS发给服务器 6.USB Host 7.4行汉字显示 8.数字键盘输入 价格可以 ...…

查看全部问答>

世界500强高薪急聘嵌入式软件工程师

联系方式:MSN chenhuanwanted@hotmail.com (薪水十分不错,工作地点:深圳) Embedded Software Engineer Experience: Real-time embedded system software development for hand-held or highly portable systems including application ...…

查看全部问答>

430 TEST管脚使用求助

我是一名初学者,在网上收集了一些下载线资料。发现使用msp430f123有个TEST管脚,不知道怎么使用,下载线做成后不能下载程序到实验板上,请问这个test干什么用的?如何使用它来配合下载程序?…

查看全部问答>

学习430的英文书——强烈推荐

不知道坛子里有没有,这书很经典,特意传上来! 并传几本中文书,以供参考…

查看全部问答>

关于rom的读写的操作

我想从ROM里面读出我的存储的数据,见下图所示:假如存储器里面数据的地址分别为:0,1,2,3,相应的数据位65,67,67,67,那么读出来的数据顺序也应该是:65,67,67,67,但是我现在读出来的数据为:65,65,67,67,67,就多出来一个65.不知道原因是 ...…

查看全部问答>