单片机模拟I2C总线通信的几个关键程序

发布者:Heavenly999最新更新时间:2019-01-29 来源: eefocus关键字:单片机  模拟I2C  总线通信 手机看文章 扫描二维码
随时随地手机看文章

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位一位一位地接收

关键字:单片机  模拟I2C  总线通信 引用地址:单片机模拟I2C总线通信的几个关键程序

上一篇:STC单片机timer2捕获模式测频率
下一篇:STM8获取电压值

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

基于单片机和SG3525的智能充电电源设计
蓄电池作为储能电源已广泛应用于各个行业,但目前成品化蓄电池充电电源的充电方式单一,大部分只有两级充电模式,有的甚至只有简单的恒压或恒流充电方式,使用这些方式为电池组充电时,缩短了蓄电池的寿命,不利于蓄电池的长期有效使用。 充电电源的控制技术目前可大体分为两类:第一类采用单片集成PWM控制器件,这类器件具有精度高、抗干扰性强、开关频率高、外接元件少等优点;第二类是采用单片机或DSP的控制技术,该类控制器采用数字运算,性能稳定,能实现系统的智能控制。本文介绍了一种基于ADUC814单片机与专用集成PWM控制器SG3525的蓄电池充电电源,它结合了两类控制技术的优点。 2、充电电源主电路总体设计框图 图1为充电电源的总体设计框图。市
[电源管理]
PIC单片机-定时器的应用
一、利用定时器Timer0的定时功能,设计一个倒计时,显示在数码管上。 #include htc.h #define uint8 unsigned char #define uint16 unsigned int #define SCK_595 RA5 #define RCK_595 RE0 #define SER_595 RC0 __CONFIG(WDTDIS & LVPDIS & HS & PWRTDIS & BORDIS);//设置配置位 //WDTDIS:disable watchdog timer 看门狗禁止 //LVPDIS:low voltage programming disabled
[单片机]
自编超声波测距模块(HC-SR04)STC单片机程序
各位朋友,大家好~ 相信很多朋友都用过一款HC-SR04超声波测距模块,这个模块售价很平民,某宝上仅4RMB左右:能测3-400cm,真的很不错的。 前一段时间,偶尔看到一款超声波测距模块(m**eblock的),控制方式与HC-SR04有所不同,硬件上是大同小异的,但售价非常有逼格。 本菜出于好奇,在网上找了很久的资料,大多数都是讲怎么使用HC-SR04模块的,而我想找的资料是如何制作HC-SR04这个模块,关键是模块中STC单片机的程序。 1、原理部分 HC-SR04这个模块是2线制的(不包含电源线),Echo与Trig,Trig负责接收10us以上的触发信号,Echo则是输出距离信号;下面是时序图: 而m**e
[单片机]
自编超声波测距模块(HC-SR04)STC<font color='red'>单片机</font>程序
NXP单片机怎样选型方法
NXP半导体微控制器 一、LPC2300系列ARM—将串行通信进行到底 在如今信息化的时代,信息化技术随处可见,应用场合也随之多元化。LPC2300系列ARM7芯片,片上集成了4大主流串行通信功能和多项增强特性令LPC2300适合于各种嵌入式应用。 1、4大串行通信功能部件: 集成以太网控制器,支持10/100MbpsPHY芯片; 2路CAN接口; 2路USB2.0全速接口(12Mbps); 多达4路UART接口(其中一路带有IrDA功能)。 2、选型指南 二、超越想象—LPC2400系列ARM LPC2400系列ARM7芯片继承了LPC2300系列的高贵血统,并独具创新集成更多新特性,包括MII/RMI接口、USBHos
[单片机]
NXP<font color='red'>单片机</font>怎样选型方法
基于单片机的车载超级电容测试系统设计与实现
  伴随着科技的进步,电动汽车技术得到迅速的发展。相比内燃机汽车,电动汽车具有零排放、高能量效率、低噪声、低热辐射、易操纵和易维护等优点,将是未来汽车发展的方向,也是现行研究的热点。   电动汽车的动力电池有如下三类:燃料电池、蓄电池和超级电容。燃料电池、蓄电池和超级电容在能量密度和功率密度上有互补性 。单一使用蓄电池、燃料电池或者超级电容,难以用作电动汽车的动力源。混合电池是一比较理想的解决办法。采用混合电池驱动系统,特别利用超级电容快速充放电能实现汽车制动能量回收,以及燃料电池超大能量密度支持汽车持久行驶,使得燃料电池/超级电容组成的混合驱动系统成为电动车驱动的最佳方案 。   对于车载用电源,为达到较高功率和能量,超级电
[测试测量]
基于<font color='red'>单片机</font>的车载超级电容测试系统设计与实现
AVR单片机定时/计数器学习笔记(二)
定时/计数器1(16位)有普通模式、CTC模式、快速PWM模式、相位修正PWM模式等工作模式。 2.CTC模式(需要用到OC1A、OC1B两个引脚) 应用:用于产生占空比为50%的方波信号 ( N为分频系数 ) 需要配置的寄存器:T/C1控制寄存器A(TCCR1A)、T/C1控制寄存器B(TCCR1B)、输出比较寄存器1A(OCR1A)。 (1)TCCR1A的bit7、bit6用于设置OC1A脚的比较输出模式,bit5、bit4用于设置OC1B脚的比较输出模式。(此处我们都设为,比较匹配时OC1A、OC1B电平取反) (2)TCCR1B的bit4、
[单片机]
AVR<font color='red'>单片机</font>定时/计数器学习笔记(二)
零基础:学51单片机定时器
  我们学单片机是首先学的就是 led 闪烁,那是用延时程序做的,现在回想起来,这样做不很恰当,为什么呢?我们的主程序做了灯的闪烁,就不能再干其它的事了,难道单片机只能这样工作吗?当然不是,我们能用定时器来实现灯的闪烁的功能。   例 1:查询方式   ORG 0000H   AJMP START   ORG 30H   START:   MOV P1,#0FFH ;关所 灯   MOV TMOD,#00000001B ;定时/计数器 0 工作于方式 1   MOV TH0,#15H   MOV TL0,#0A0H ;即数 5536   SETB TR0 ;定时/计数器 0 开始运行   LOOP:JBC TF0,NEXT ;
[单片机]
零基础:学51<font color='red'>单片机</font>定时器
基于森国科MCU SPIN的落地扇和循环扇应用方案
本期内容重点介绍,针对三相低压风扇电机驱动,森国科SGK32G031芯片可提供的一款高性价比解决方案,加速实现低功耗、轻量化、节能化的落地扇&循环扇应用。 森国科MCU SPIN(SGK32G031)芯片 高性能 高可靠性 芯片采用32-bit Arm Cortex-M0内核,主频60MHZ,内置USART ,集成业内领先的高采样率的高速12bit ADC ,集成2个高速 模拟 比较器 ,2个OPA 运算放大器 , 硬件 除法器; 芯片针对电机应用进行了多项设计优化,具备了高精准高可靠 时钟 系统、可支持移相的 TI MER、以及-40℃~105℃增强 工业 级工作温度范围等多项高可靠性优势。 小尺寸、多应用 芯片采用Q
[嵌入式]
基于森国科<font color='red'>MCU</font> SPIN的落地扇和循环扇应用方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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