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总线通信的几个关键程序
推荐阅读最新更新时间: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
[单片机]
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
[单片机]
基于单片机的车载超级电容测试系统设计与实现
伴随着科技的进步,电动汽车技术得到迅速的发展。相比内燃机汽车,电动汽车具有零排放、高能量效率、低噪声、低热辐射、易操纵和易维护等优点,将是未来汽车发展的方向,也是现行研究的热点。 电动汽车的动力电池有如下三类:燃料电池、蓄电池和超级电容。燃料电池、蓄电池和超级电容在能量密度和功率密度上有互补性 。单一使用蓄电池、燃料电池或者超级电容,难以用作电动汽车的动力源。混合电池是一比较理想的解决办法。采用混合电池驱动系统,特别利用超级电容快速充放电能实现汽车制动能量回收,以及燃料电池超大能量密度支持汽车持久行驶,使得燃料电池/超级电容组成的混合驱动系统成为电动车驱动的最佳方案 。 对于车载用电源,为达到较高功率和能量,超级电
[测试测量]
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、
[单片机]
零基础:学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 ;
[单片机]
基于森国科MCU SPIN的落地扇和循环扇应用方案
本期内容重点介绍,针对三相低压风扇电机驱动,森国科SGK32G031芯片可提供的一款高性价比解决方案,加速实现低功耗、轻量化、节能化的落地扇&循环扇应用。 森国科MCU SPIN(SGK32G031)芯片 高性能 高可靠性 芯片采用32-bit Arm Cortex-M0内核,主频60MHZ,内置USART ,集成业内领先的高采样率的高速12bit ADC ,集成2个高速 模拟 比较器 ,2个OPA 运算放大器 , 硬件 除法器; 芯片针对电机应用进行了多项设计优化,具备了高精准高可靠 时钟 系统、可支持移相的 TI MER、以及-40℃~105℃增强 工业 级工作温度范围等多项高可靠性优势。 小尺寸、多应用 芯片采用Q
[嵌入式]