搜档网
当前位置:搜档网 › 基于单片机的硬件应用i2c spi uart(不同接口)

基于单片机的硬件应用i2c spi uart(不同接口)

基于单片机的硬件应用i2c spi uart(不同接口)
基于单片机的硬件应用i2c spi uart(不同接口)

基于单片机的硬件应用

1.LCD1602液晶

2.24c08 I2C存储器

3.DS1302时钟(SPI)

4.串口通讯(UART)

1 LCD1602

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD ,目前常用16*1,16*2,20*2和40*2行等的模块。外观如图1.1:

LCD1602引脚功能说明,如图1.2。

1.1 显示原理

LCD1602内的HD44780控制芯片内置了DDRAM、CGROM 和CGRAM。

DDRAM就是显示数据RAM,用来寄存待显示的字符代码,共80个字节。如表1。

例如如果在第一行第二个位置写入“A”字符,即在地址01H中写入。

CGROM(Character Generator ROM)是固化字模存储器。在PC 上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS 里

都固化有字符字模。字模代表了在点阵屏幕上点亮和熄灭的信息数据。类似于在8*8LED点阵上显示文字或图形生成字模,字模的编码和ASCII码一致。

CGRAM(Character Generator RAM)是允许用户自定义的字符产生存储器。

(ROM:random read-only memory RAM:random access memory)

1.2 指令集

LCD1602共有11条指令。各指令详细见LCD1602技术说明书,下面就读写指令和据详细说明。

1.2.1 读写引脚高低电平设置和时序

(1)读数据和状态,时序入图1.3。

读状态输入:RS=0,RW=1,E=1

读数据输入:RS=0,RW=1,E=1

(2)写数据和状态,时序入图1.4。

写指令 输入:RS=0,RW=0,E=下降沿脉冲,DB0-DB7=指令码 写数据 输入:RS=1,RW=0,E=下降沿脉冲,DB0-DB7=数据

1.2.2 读写程序分析

(1)读取忙信号或AC 地址指令,各位入图1.5。

BF=0,表示液晶显示器可以接收来自单片机的数据或指令。

bit BusyTest(void)

{

bit result;

RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状

RW=1;

E=1; //E=1,才允许读写

_nop_(); //空操作

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

result=BF; //将忙碌标志电平赋给result

E=0;

return result;

}

(2)写入指令和数据

void Write_com (unsigned char dictate)

{

while(BusyTest()==1); //如果忙就等待

RS=0; //根据规定,RS和R/W同时为低电平时,可

以写入指令

RW=0;

E=0; //E置低电平(写指令时,

// 就是让E从0到1发生正跳变,所以应"0"

_nop_();

_nop_(); //空操作两个机器周期,给硬件反应时间

P0=dictate; //将数据送入P0口,即写入指令或地址

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

E=1; //E置高电平

_nop_();

_nop_();

_nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间

E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令

}

(3)写入地址,指令如图1.6。

{

Write_com(x|0x80); //显示位置的确定方法

规定为"80H+地址码x",因为//DB7要求固定为1。

}

1.3 Proteus仿真

仿真效果如图1.7。

2 24c08 I2C存储器

24c08存储器是遵守I2C总线协议的存储器件。I2C总线接口EEPROM存储器是一种采用I2C总线接口的串行总线存储器,这类存储器具有体积小、引脚少、功耗低、工作电压范围宽等特点。

2.1 I2C总线原理

2.1.1 I2C总线概述

I2C总线(Inter Integrated Circuit Bus):是Philips公司推出的串行总线标准(为二线制)。总线上扩展的外围器件及外设接口通过总线寻址,是具备总线仲裁和高低速设备同步等功能的高性能多主机总线。

双线由串行数据线SDA和串行时钟线SCL构成,可发送和接收数据。所有挂接在I2C总线上的器件和接口电路都应具有I2C总线接口,且所有的SDA/SCL同

名端相连。总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。

特点:无需片选信号,价格低。允许若干兼容器件共享总线,应用比较广泛。总线的长度可达

7.6m ,传

送速度可达400kbps ,标准速率为100kbps 。支持多个组件。支持多主控器件(某时刻只能有一个主控器件)。I2C 总线上所有设备的SDA, SCL 引脚必须外接上拉电阻。

2.1.2 I2C 总线协议

(1)只有在总线空闲时才允许数据的传送。

(2)在数据传送过程中,当时钟线为高电平时,数据线必须保持为高电平状态,不允许有跳变。时钟线为高电平时,数据线的任何电平跳变将被视为起始或终止信号。如图2.2所示。

起始信号:在SCL 为高电平期间,SDA 出现下降沿信号。 终止信号:在SCL 为高电平期间,SDA 出现下降沿信号。

应答信号:I2C 总线数据传送时每成功地传送一个字节数据后接收器都必须产生一个应答信号,应答的器件在第9 个时钟周期时将SDA 线拉低表示其已收到一个8 位数据。如图2.3所示。

2.1.3 I2C 总线寻址方式和控制字

由于所有器件都通过SCL 和SDA 连接在I2C 总线上,因此,主器件在进行数据传输前需要通过寻址,选择需要通信的从器件。I2C 总线上所有外围器件都需要有唯一的7位地址,由器件地址和引脚地址两部分组成。器件地址是I2C 器件固有的地址编码,器件出厂时就已经给定,不可更改。引脚地址是由I2C 总线外围器件的地址引脚(A2,A1,A0)决定,根据其在电路中接电源正极、接地或悬空的不同,形成不同的地址代码。指令如图2.4所示。

2.1.4 数据读写

主器件产生开始信号以后,发送的第一个字节为控制字节。前七位为从器件的地址片选信号。最低位为数据传送方向位(高电平表示读从器件,低电平表示写从器件)

,然后发送一个选择从器件片内地址的字节,来决定开始读写数据的

起始地址。接着再发送数据字节,可以是单字节数据,也可以是一组数据,由主器件来决定。从器件每接收到一个字节以后,都要返回一个应答信号(ASK=0)。主器件在应答时钟周期高电平期间释放SDA 线,转由从器件控制,从器件在这个时钟周期的高电平期间必须拉低SDA 线,并使之为稳定的低电平,作为有效的应答信号。

写操作时序,图2.5。

读操作时序,图2.6。

2.2 24C08的应用

2.2.1 24C08的管脚配置,图

2.7

2.2.2 部分实现代码分析

(1)

void start()

// 开始位

{

SDA = 1; //SDA初始化为高电平“1”

SCL = 1; //开始数据传送时,要求SCL为高电平“1”

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

SDA = 0; //SDA的下降沿被认为是开始信号

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

SCL = 0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)

}

(2)

bit Ask() //检测应答

{

bit ack_bit; //储存应答位

SDA = 1; // 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,

//以让SDA线转由接收设备(AT24Cxx)控制_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

SCL = 1; //根据上述规定,SCL应为高电平

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

ack_bit = SDA; //接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节

//若送高电平,表示没有接收到,传送异常结束发送SCL = 0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)

return ack_bit; // 返回AT24Cxx应答位

}

(3)

void WriteCurrent(unsigned char y)//写入数据

{

unsigned char i;

for(i = 0; i < 8; i++) // 循环移入8个位

{

SDA = (bit)(y&0x80); //通过按位“与”运算将最高位数据送到S

//因为传送时高位在前,低位在后

_nop_(); //等待一个机器周期

SCL = 1; //在SCL的上升沿将数据写入AT24Cxx

_nop_(); //等待一个机器周期

_nop_(); //等待一个机器周期

SCL = 0; //将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲

y <<= 1; //将y 中的各二进位向左移一位

}

}

2.3 Proteus 仿真 计数器断电后从断电时开始计数

断电前计数到43,关闭电源,如图2.8。

(Anode 正极:)

3 DS1302时钟芯片

3.1 DS1302介绍

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。

如图3.1所示,X1,X2接晶振,SCLK为串行时钟线,I/O为串行数据线,RST为复位线。

3.2 SPI接口协议

3.2.1 SPI接口简介

SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。

3.2.2 SPI接口读写指令的时序分析

单字节写:在进行操作之前先得将CE(也可说是RST)置高电平,然后单片机将控制字的位0放到I/O上,当I/O的数据稳定后,将SCLK置高电平,DS1302检测到SCLK的上升沿后就将I/O上的数据读取,然后单片机将SCLK置为低电平,再将控制字的位1放到I/O上,如此反复,将一个字节控制字的8个位传给DS1302。接下来就是传一个字节的数据给DS1302,当传完数据后,单片机将CE置为低电平,操作结束。

单字节读操作的一开始写控制字的过程和上面的单字节写操作是一样,但是单字节读操作在写控制字的最后一个位,SCLK还在高电平时,DS1302就将数据放到I/O上,单片机将SCLK置为低电平后数据锁存,单机机就可以读取I/O上的数据。如此反复,将一个字节的数据读入单片机。

读与写操作的不同就在于,写操作是在SCLK低电平时单片机将数据放到IO 上,当SCLK上升沿时,DS1302读取。而读操作是在SCLK高电平时DS1302放数据到IO上,将SCLK置为低电平后,单片机就可从IO上读取数据。

和I2C接口相比,SPI接口协议无需应答信号,读写速度更快。

4 串口通讯(UART)

4.1 UART 通用串行通讯简介

UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现

全双工传输和接收。各种收发方式如图4.1。

UART 是计算机中串行通信

计算机中,UART 相连于产生兼容RS232规范信号的电路。RS232标准定义逻辑“1”信号相对于地为-3到-15伏,而逻辑“0”相对于地为+3到+15伏。所以,当一个微控制器中的UART 相连于PC 时,它需要一个RS232驱动器来转换电平。UART 这里指的是TTL 电平的串口;RS232指的是RS232电平的串口。TTL 电平是5V 的,而RS232是负逻辑电平,它定义+5~+12V 为低电平,而-12~-5V 为高电平。

Uart 串口的RXD 、TXD 等一般直接与处理器芯片的引脚相连,而RS232串口的RXD 、TXD 等一般需要经过电平转换(通常由Max232等芯片进行电平转换)才能接到处理器芯片的引脚上,否则这么高的电压很可能会把芯片烧坏。

我们平时所用的电脑的串口就是RS232的,当我们在做电路工作时,应该注意下外设的串口是Uart 类型的还是RS232类型的,如果不匹配,应当找个转换线(通常这根转换线内有块类似于Max232的芯片做电平转换工作的),可不能盲目地将两串口相连,如图4.2。

4.2 51单片机的串行接口内部结构

内部结构图如图4.4。

波特率的计算:

例如在RXD ,SBUF 中的串行数据由RxD 逐位移入;RxD 接收移位时钟,频率=fosc/12;

波特率=

))2(*12*32/(*2X fosc n SMOD ,其中X 为定时器的计数初值。

4.3 以单片机和计算机通信程序为例简单说明

#include

#include

unsigned char tmp;

void send_char(unsigned char txd);

main()

{

TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率

TH1=TL1=0xFD; // 波特率9600

SCON = 0x50; // 设定串行口工作方式1 允许接收,相当于下面三句

//SM0=0;

//SM1=1;

//REN=1;

PCON =0x00; // 波特率不倍增

TR1 = 1; // 启动定时器1

while(1)

{

if(RI==1) // 是否有数据到来

{

RI = 0;

tmp = SBUF; // 暂存接收到的数据

P0 = tmp; // 数据传送到P0口

send_char(tmp); // 回传接收到的数据

}

}

}

void send_char(unsigned char txd)

// 传送一个字符

{

SBUF = txd;

while(!TI); // 等特数据传送

TI = 0; // 清除数据传送标志}

I2CBus与SMBus间技术差异

I2C Bus与SMBus间技术差异 前言: 关于I2C与SMBus,许多人很少去谈论与了解两者的细节差异,包括很多国外的简报,文章也经常将两者混写、交杂描述、交替运用。 确实,在一般运用下,I2C Bus与SMBus没有太大的差别,从实际接线上看也几乎无差异,甚至两者直接相连多半也能相安无误地正确互通并运作。不过若真要仔细探究,其实还是有诸多不同,如果电子设计工程师不能明辨两者的真实差异,那么在日后的开发设计的验证纠错阶段必然会产生困扰,为此本文将从各层面来说明I2C Bus与SMBus的细微区别,期望能为各位带来些许帮助。 我写这篇文章,可以理解为郭長祐先生博客中相关文章的读书笔记,我可没有那么高的造诣,关于I2C Bus的基础,可参考先生之前的「I2C 界面之线路实务」,网址为: https://www.sodocs.net/doc/2f3785775.html,/n/article.asp?id=304799064272FED148256FDC00481D68 当然也可以去参考Philips半导体网站的I2C官方规格: https://www.sodocs.net/doc/2f3785775.html,/acrobat/literature/9398/39340011.pdf 运用背景、版本演进之别 首先从规格的制订背景开始,I2C是在设计电视应用时所研发的界面,首版于1992 年发表;而SMBus(System Management Bus)则是Intel与Duracell (金顶电池)共同制订笔记本电脑所用的智能型电池(Smart Battery)时所研发的接口,首版于1995 年发表,不过SMBus文件中也提及,SMBus确实是参考自I2C,并以I2C为基础所衍生成。 I2C起源于电视设计,但之后朝通用路线发展,各种电子设计都有机会用到I2C;而SMBus则在之后为PC所制订的先进组态与电源管理接口(Advanced Configuration & Power Interface;ACPI)规范中成为基础的管理讯息传递接口、控制传递接口。 虽然I2C与SMBus先后制订时间不同,但都在2000年左右进入成熟化改版,I2C的过程改版以加速为主要诉求,而SMBus以更切合Smart Battery及ACPI的需求为多。 I2C三次主要改版: 1992 年v1.0 1998 年v2.0 2000 年v2.1 SMBus三次主要改版: 1995 年v1.0 1998 年v1.1 2000 年v2.0

简要对比TWI总线与I2C总线

简要对比TWI总线与I2C总线 摘要在简要对比TWI总线与I2C总线的基础上,详细介绍TWI总线的内部模块、工作时序和工作模式,并给出一个编程实例加以说明.对TWI总线和传统的I2C总线的正确区分及使用具有现实的指导意义。 关键词两线串行总线TWI I2C AVR系列的单片机内部集成了TWI(Two-wire SerialInterface)总线。该总线具有I2C总线的特点,即接线简单,外部硬件只需两个上拉电阻,使用时钟线SCL和数据线SDA就可以将128个不同的设备互连到一起;而且支持主机和从机操作,器件可以工作于发送器模式或接收器模式,数据传输率高达400 kHz。正因为TWI总线具有这么多的优点,因此受到了使用者的青睐。 由于该总线与传统的I2C总线极其相似。因此不少人误以为TWI总线就是I2C总线,其实这只是一种简单化的理解。TWI总线是对I2C总线的继承和发展。它定义了自已的功能模块和寄存器,寄存器各位功能的定义与I2C总线并不相同;而且TWI总线引入了状奁寄存器,使得TWI总线在操作和使用上比I2C总线更为灵活。在实际应用上,由于大部分单片机内部没有集成I2C总线,因此单片机的控制是通过模拟I2C总线的时序来完成其操作的。 AVR系列的单片机内部集成了TWI总线,而且其用法也比I2C更为灵活。本文结合一个实例对TWI总线的内部模块、工作时序和工作模式进行了详细介绍,目的在于正确区分TWI 总线和传统的I2C总线,对如何正确使用TWI总线编程也具有现实的指导意义。 1 TWI内部模块 TWI内部由总线接口单元、比特率发生器、地址匹配单元和控制单元等几个子模块组成,如罔1所示。图中,SCL、SDA为MCU的TWI接口引脚。引脚的输出驱动器包含一个波

SPI、I2C、UART三种串行总线的原理、区别及应用

简单描述: SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些很薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C 是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存这两种线属于低速传输; 而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。UART和,UART就是我们指的串口,速度比上面三者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡; SmBus有点类似于USB设备跟计算机那样的短距离通信。 简单的狭义的说SPI和I2C是做在电路板上的。而UART和SMBUS是在机器外面连接两个机器的。 详细描述: 1、UART(TX,RX)就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机通信上面用的最多。 2、SPI(CLK,I/O,O,CS)接口和上面UART相比,多了一条同步时钟线,上面UART 的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。 3、I2C(SCL,SDA)接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。一般单片机系统里主要用来和24C02等小容易存储器连接。 SPI:高速同步串行口。3~4线接口,收发独立、可同步进行 UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢 SPI:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了

SPI_IIC_USART_区别

第一个区别当然是名字: SPI(Serial Peripheral Inter face:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。 如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。 I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。 如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备) UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART 发送器组成,硬件上由两根线,一根用于发送,一根用于接收。 显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行; 第四,看看牛人们的意见吧! wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI 则无所谓,因为它是有时钟的协议。 quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。 SPI总线 ----串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI总线是一种三线同步总线,因其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间

i2c区别spi

I2C的数据输入输出用的是一根线,SPI则分为dataIN和dataOUT。由于这个原因,采用I2C时CPU的端口占用少,SPI多一根。但是由于I2C的数据线是双向的,所以隔离比较复杂,SPI则比较容易。所以系统内部通信可用I2C,若要与外部通信则最好用SPI带隔离(可以提高抗干扰能力)。但是I2C和SPI都不适合长距离传输。长距离时就要用485了。 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如P89LPC900. SPI,是一种高速的,全双工,同步的通信总线,其工作模式有两种:主模式和从模式,无论那种模式,都支持 3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。 I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。 I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。 I2C的数据输入输出用的是一根线,SPI则分为dataIN和dataOUT。由于这个原因,采用I2C时CPU的端口占用少,SPI多一根。但是由于I2C的数据线是双向的,所以隔离比较复杂,SPI则比较容易。所以系统内部通信可用I2C,若要与外部通信则最好用SPI带隔离(可以提高抗干扰能力)。但是I2C和 SPI都不适合长距离传输。长距离时就要用485 了。 第一: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)

iic和spi有什么区别

iic和spi有什么区别 什么是iicIIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS),IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。 IIC简介即I2C,一种总线结构。例如:内存中的SPD信息,通过IIC,与BX芯片组联系,IIC 存在于英特尔PIIX4结构体系中。 随着大规模集成电路技术的发展,把CPU和一个单独工作系统所必需的ROM、RAM、I/O 端口、A/D、D/A等外围电路集成在一个单片内而制成的单片机或微控制器愈来愈方便。目前,世界上许多公司生产单片机,品种很多。其中包括各种字长的CPU,各种容量的ROM、RAM以及功能各异的I/O接口电路等等,但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。扩展的方法有两种:一种是并行总线,另一种是串行总线。由于串行总线的连线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。因此,采用串行线可大大简化系统的硬件设计。PHILIPS公司早在十几年前就推出了I2C串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能。因此,这是一种高性能的串行总线。 飞利浦电子公司日前推出新型二选一I2C主选择器,可以使两个I2C主设备中的任何一个与共享资源连接,广泛适用于从MP3播放器到服务器等计算、通信和网络应用领域,从而使制造商和终端用户从中获益。PCA9541可以使两个I2C主设备在互不连接的情况下与同一个从设备相连接,从而简化了设计的复杂性。此外,新产品以单器件替代了I2C多个主设备应用中的多个芯片,有效节省了系统成本。 什么是spiSPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时

SPI,UART,I2C都有什么区别,及其各自的特点

SPI,UART,I2C都有什么区别,及其各自的特点 区别: SPI:高速同步串行口。3~4线接口,收发独立、可同步进行 UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢 I2C:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能: 将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。 I2C:能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。 更详细的区别: 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS:意为IC之间总线) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上:

SMBus与I2C总线的区别

SMBus与I2C总线的区别 The I 2C bus and the SMBus are popular 2-wire buses that areessentially compatible with each other. Below,significantdifferences between the two buses. I2C SMBus Timeout No Yes Minimum Clock Speed DC 10kHz Maximum Clock Speed 100kHz (400kHz and 2MHz also available) 100kHz V HIGH0.7 x V DD, 3.0V Fixed 2.1V V LOW0.3 x V DD, 1.5V Fixed 0.8V Max I 3mA 350(iA Clock Nomenclature SCL SMBCLK Data Nomenclature SDA SMBDAT General Call Yes Yes Alert# No Yes SMBus与I2C的差别 SMBus与I2C总线之间在时序特性上存在一些差别。首先, SMBus需要一定数据保持时间,而I2C 总线则是从内部延长数据保持时间。 SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为 止。SMBus只工作在从10kHz到最高100kHz。最低工作频率10kHz是由SMBus超时功能决定的 (1)SMBus是一种二线制串行总线,1996年第一版规范开始商用。它大部分基于I2C总线规范。和I2C 一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100KHZ且专 门面向智能电池管理应用。它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位, 在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。 SMBus与I2C总线之间在时序特性上存在一些差别。首先, SMBus需要一定数据保持时间,而I2C 总线则是从内部延长数据保持时间。SMBus具有超时功能,因此当 SCL太低而超过35 ms时,从器件将 复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。 SMBus只工作在从10kHz到最高100KHZ。最低工作频率10kHz是由SMBus超时功能决定的。

I2C与UART的区别与比较

I2C IIC本身是为板级通讯设计,没有考虑远距离通讯.UART通讯编程简单,通讯速度远比IIC 快,可以直接使用RS485延伸通讯距离达到1km,通讯速度很容易做高。 UART是一个并行输入成为串行输出的芯片...有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信. I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用 于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优 点。 发送器:发送数据到总线的器件; 接收器:从总线接收数据的器件; 主机:初始化发送产生时钟信号和终止发送的器件; 从机:被主机寻址的器件; 多主机:同时有多于一个主机尝试控制总线但不破坏传输; 仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏 的过程; 同步:两个或多个器件同步时钟信号的过程。 两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;SDA 线上的数据必须在 时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。

SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件; SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。 发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个 字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。 数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器 释放SDA 线(高)。在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。 写操作 写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不 同有所不同。 读操作

IIC与IIB的区别

防爆电器产品的分类 1.按使用场所不同分为: Ⅰ类:煤矿用防爆电器; Ⅱ类:工厂用防爆电器; 2.按用途不同分为: 灯具:有内装灯泡、灯管及LED三种; 电器:操作柱、开关、按钮、配电箱、起动器、控制柜; 管件:接线盒(箱)、穿线盒、活接头、挠性连接管; 仪表:安全栅、电表、电话机; 其它类:电铃、风机、风扇、变压器、插销、镇流器、加热器、空调; 3.按最大试验安全间隙和最小点燃电流比例不同,Ⅱ类防爆电器又可分为:ⅡA类防爆电器; ⅡB类防爆电器; ⅡC类防爆电器; 防爆级别:ⅡC>ⅡB>ⅡA 本质安全型及隔爆型防爆电气设备有ⅡA、ⅡB、ⅡC 分级外,其它类型无级别规定。 4.按防爆类型分为: 隔爆型(d);增安型(e);正压型(P);充砂型(q);充油型(O);本质安全型(i);无火花型(n);气密型(h);浇封型(m);特殊型(s);粉尘防爆型(DIP);复合型(ed); 5. 按危险环境的区域选用防爆电气设备类型 0区:ia、S; 1区:ia、ib、d、e(部分)、m、p、O、q; 2区:ia、ib、d、e、m、p、O、q、n. 以上符号代表:ia、ib-本质安全型;d-隔爆型;e-增安型;m-浇封型;p-正压型;O-充油型;q-充沙型;n-无火花型;S-特殊型。 S型防爆电气设备是指不符合上述防爆型式标准的电气设备,但经检验单位认可。一般由检验单位确认使用的危险区域。 1区环境使用的e型防爆电气设备仅限于接线盒(箱)、三相鼠笼式异步电动机、单插脚荧光灯产品。 爆炸性气体(蒸气)混合物的分类、分组

1. 爆炸性气体(蒸气)混合物分类: 中国: Ⅰ类(甲烷)、Ⅱ类(爆炸性气体混合物)、Ⅲ类(爆炸性粉尘和纤维) 北美: ClassⅠ(爆炸性气体);ClassⅡ(爆炸性粉尘);ClassⅢ(纤维) 2. 爆炸性气体(蒸气)混合物分级: 3.爆炸性气体分组总汇 4. 爆炸性气体(蒸气)环境的分区 世界各国对危险场所区域划分不同,但大致分为两大派系:我国和大多数欧洲国家采用国际电工委员会(IEC)的划分方法,而以美国和加拿大为主要代表的其他国家则采用北美划分方法。 1)我国对爆炸性危险场所划分的依据: GB3836.14-2000《爆炸性气体环境用电气设备第14部分危险场所分类》

I2C总线入门(很详细-很经典)

12 C总线入门 I)最近学习5 1单片机,学到A/D, D/A转换的时候发现我板子上的转换芯片?不是书上所讲的ADCO 8 0 4和DACO 8 3 2而是P CF 8 591 T ,看了一下它的数据手册,发现它并不是书上所说的并行传输数据,是使用I2C总线传输的。搞了两天才搞懂,写出来给大家分享一下,不足之处请务必不吝指岀。 1. i?c gtt 介绍 I J C Ata(IMer IC Bu≤) Ih PHlUPS公司捡Hl?绘近"束锻电FMIm控Sw皱城广泛采冊的M 标ML它肚附通信的Jlff按口仪少■控Mm*>妙件MKB :仁违估JaE较扁第优点.Λ hΛ?f∣M?.砒以“7个总IUl件的时按到Fc总线上? Af?的暮件AJl川知0的按【】? Ii过淮址来谏別迪仃对叙便它们町以性曲l j CJ^ it irdMur. I J Cfitt由数飙嫂SDA和时伸饮$ci?IWi剣农购成通仙找烁Kt町发iX&?.也廨?Λ CPυ 1J?F? ICZrn]? IC I HCZrWJΛ5

8-lead PDlP 以上是I 2 C 总线通信的格式。 2 1 8 2 3 4 AOE Al 匚 A2□ GND 匚 □ VCC WP ZJS □ SDA A N N3 AI N V 辽 叵 rlF 匡 叵Jθ] v DD 回 AoUT 回 迢 AGND PCFδ591P — 卫IExT 2 )接下来看如何使用I 2C 总线进行通信 3. FC 总线通信格式 图8.1.2为I 2 C 总线上进厅一次数据传输的通信格式? N A

I2C总线入门(很详细,很经典)

I2C总线入门 1)最近学习51单片机,学到A/D,D/A转换的时候发现我板子上的转换芯片不是书上所讲的ADC0804和DAC0832而是PCF8591T,看了一下它的数据手册,发现它并不是书上所说的并行传输数据,是使用I2C 总线传输的。搞了两天才搞懂,写出来给大家分享一下,不足之处请务必不吝指出。 以上是I2C总线的简单介绍。 就比如说AT24C02存储芯片,和PCF8591数模模数转换芯片都支持I2C端口。(如下图)

2)接下来看如何使用I2C总线进行通信 以上是I2C总线通信的格式。 由上图可以看出进行通信需要以下几个步骤a.初始化I2C总线 就是把SDA和SCL都变成高电平。

void init() //初始化 { SDA=1; delay(); SCL=1; delay(); } delay()为延时函数 void delay() //延时4-5个微秒 {;;} b.发送起始信号 就是保持SCL为高电平,而SDA从高电平降为低电平(这是I2C总线的规定,别问我为什么) void start()//起始信号 { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); } c.发送地址字(芯片的硬件地址)

(8591的数据手册) 前四位对同一种芯片来说是固定的,不同的芯片之间不同。就像pcf8591是1001而at24c02是1010 接下来三位A0,A1,A2是可编程的三个地址位,这里说说的编程并不是通过软件编程,而是把A0,A1,A2三个引脚接不同的电压来确定数值。接VCC 表示1,接GND表示0。为什么要有这三个呢?因为有可能你在I2C总线上“并联”了不止一个相同的元件(比如说接了三个8591),那你如何来分辨你要操作的是哪一个芯片呢,就是通过设置A0,A1,A2的数值,来区别。可编程的地址一个有三位,也就是说最多可以接8个相同的芯片在同一个I2C总线上。 最后一位是读/写位,1为读,0为写。 @如何写数据 写数据只需要按照时序图 1.先将SCL置0(只有它为0的时候SDA才允许变化) 2.改变SDA是数值(就是你当前要穿的一位是0还是1) 3.把SCL置1(此时芯片就会读取总线上的数据)

I2C总线入门(很详细-很经典)

I2C总线入门 1)最近学习51单片机,学到A/D,D/A转换的时候发现我板子上的转换芯片不是书上所讲的ADC0804和DAC0832而是PCF8591T,看了一下它的数据手册,发现它并不是书上所说的并行传输数据,是使用I2C总线传输的。搞了两天才搞懂,写出来给大家分享一下,不足之处请务必不吝指出。 以上是I2C总线的简单介绍。 就比如说AT24C02存储芯片,和PCF8591数模模数转换芯片都支持I2C端口。(如下图)

2)接下来看如何使用I2C总线进行通信 以上是I2C总线通信的格式。

由上图可以看出进行通信需要以下几个步骤 a.初始化I2C总线 就是把SDA和SCL都变成高电平。 voidinit()?//初始化 { ?SDA=1; ?delay(); SCL=1; delay();? } delay()为延时函数 voiddelay()?//延时4-5个微秒 {;;} b.发送起始信号 就是保持SCL为高电平,而SDA从高电平降为低电平(这是I2C总线的规定,别问我为什么) void start()//起始信号 { ?SDA=1; delay(); SCL=1; ?delay(); SDA=0; ?delay(); }

c.发送地址字(芯片的硬件地址) (8591的数据手册) 前四位对同一种芯片来说是固定的,不同的芯片之间不同。就像pcf8591是1001而at24c02是1010 接下来三位A0,A1,A2是可编程的三个地址位,这里说说的编程并不是通过软件编程,而是把A0,A1,A2三个引脚接不同的电压来确定数值。接VCC表示1,接GND表示0。为什么要有这三个呢?因为有可能你在I2C总线上“并联”了不止一个相同的元件(比如说接了三个8591),那你如何来分辨你要操作的是哪一个芯片呢,就是通过设置A0,A1,A2的数值,来区别。可编程的地址一个有三位,也就是说最多可以接8个相同的芯片在同一个I2C总线上。 最后一位是读/写位,1为读,0为写。 @如何写数据 写数据只需要按照时序图 1.先将SCL置0(只有它为0的时候SDA才允许变化) 2.改变SDA是数值(就是你当前要穿的一位是0还是1)

SPI,UART,I2C的区别以及RS232与RS485的区别

SPI,UART,I2C的区别以及RS232与RS485的区别 详细的区别: 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS:意为IC之间总线) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。 主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。 如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。 I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。 在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。 如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备) UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART

I2C与SMBus的区别总结

I2C与SMBus的差异总结 关于I2C与SMBus,许多人很少去谈论与了解两者的细节差异,包括很多国外的简报,文章也经常将两者混写、交杂描述、交替运用。 确实,在一般运用下,I2C Bus与SMBus没有太大的差别,从实际接线上看也几乎无差异,甚至两者直接相连多半也能相安无误地正确互通并运作。不过若真要仔细探究,其实还是有诸多不同,如果电子设计工程师不能明辨两者的真实差异,那么在日后的开发设计的验证纠错阶段必然会产生困扰,为此本文将从各层面来说明I2CBus与SMBus的细微区别,期望能为各位带来些许帮助。 运用背景、版本演进之别 首先从规格的制订背景开始,I2C是在设计电视应用时所研发的界面,首版于1992年发表;而SMBus(System Management Bus)则是Intel与Duracell(金顶电池)共同制订笔记本电脑所用的智能型电池(Smart Battery)时所研发的接口,首版于1995年发表,不过S MBus文件中也提及,SMBus确实是参考自I2C,并以I2C为基础所衍生成。 I2C起源于电视设计,但之后朝通用路线发展,各种电子设计都有机会用到I2C;而SMBus 则在之后为PC所制订的先进组态与电源管理接口(AdvancedConfiguration&Power Inte rface;ACPI)规范中成为基础的管理讯息传递接口、控制传递接口。 虽然I2C与SMBus先后制订时间不同,但都在2000年左右进入成熟化改版,I2C的过程改版以加速为主要诉求,而SMBus以更切合Smart Battery及ACPI的需求为多。 I2C三次主要改版: 1992年v1.0 1998年v2.0 2000年v2.1 SMBus三次主要改版: 1995年v1.0 1998年v1.1 2000年v2.0

CAN总线和I2C等对比

CAN、I2S、I2C、SPI、SSP总线简介 一、SPI总线说明 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口,Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI 用于CPU 与各种外围器件进行全双工、同步串行通讯。SPI可以同时发出和接收串行数据。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。这些外围器件可以是简单的TTL移位寄存器,复杂的LCD显示驱动器,A/D、D/A转换子系统或其他的MCU。当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。主SPI的时钟信号(SCK)使传输同步。其典型系统框图如下图所示。 SPI主要特点有: 可以同时发出和接收串行数据; 可以当作主机或从机工作; 提供频率可编程时钟; 发送结束中断标志; 写冲突保护; 总线竞争保护等。 图2示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示): SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI总线接口时序如图所示。

I2C总线读时序的详解(新手必看)

I2C总线读时序的详解(新手必看) 作者:曾小贤2013届大一新生 I2c总线协议中的读时序与ds1302时钟芯片的读时序是有很大的区别的,ds1302时钟芯片是scl下降沿读取数据的,而i2c 读时序和写时序其实是同一个图,只是读时序可以看成是芯片写数据给单片机。 以下是i2c读时序程序 unsigned char RcvByte() { unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; //置数据线为输入方式 for(BitCnt=0;BitCnt<8;BitCnt++) { _Nop(); SCL=0; //置时钟线为低,让芯片刷新(改变)数据,准备发送数据到数据线上, _Nop(); _Nop(); //延时是为了让芯片有时间释放出数据到数据线上, _Nop(); _Nop(); _Nop(); SCL=1; //通知单片机检测数据线是高电平还是低电平 _Nop(); _Nop(); retc=retc<<1; if(SDA==1)retc=retc+1; //读数据位,接收的数据位放入retc中 _Nop(); _Nop(); } SCL=0; _Nop(); _Nop(); return(retc); } 以下是读时序还要注意的细节,对比下面两段for循环中的读取8位数据的程序 程序一 unsigned char RcvByte() {

unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; //置数据线为输入方式 for(BitCnt=0;BitCnt<8;BitCnt++) { SCL=0; SCL=1; //没有时间给芯片放出数据到数据线上,就通知单片机检测电平,错误! _Nop(); _Nop(); _Nop(); _Nop(); retc=retc<<1; if(SDA==1)retc=retc+1; _Nop(); _Nop(); } SCL=0; _Nop(); _Nop(); return(retc); } 上面程序没有时间给芯片放出数据到数据线上,就通知单片机检测电平,错误! 再看下面程序二 unsigned char RcvByte() { unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; //置数据线为输入方式 for(BitCnt=0;BitCnt<8;BitCnt++) { SCL=1; _Nop(); _Nop(); _Nop(); _Nop();

SPI、IIC与UART区别

SPI、IIC、UART区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。 如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。 I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。 如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备) UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。 显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。 第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行; 第四,看看牛人们的意见吧! wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。 quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。

I2C和SPI,UART的区别

I2C和SPI,UART的区别 2009-11-22 23:00 SPI--Serial Peripheral Interface,(Serial Peripheral Interface:串行外设接口)串行外围设备接口,是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。 I2C--INTER-IC(INTER IC BUS:意为IC之间总线)串行总线的缩写,是PHILIPS 公司推出的芯片间串行传输总线。它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了双工的同步数据传输。具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。 能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何 一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根 据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。 最主要的优点是其简单性和有效性。它支持多主控(multimastering),其中任何能够进行发送 和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 UART(Universal Asynchronous Receiver Transmitter:通用异步收发器):单端,远距离传输。 大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多 GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通 信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,

相关主题