版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Good is good, but better carries it.精益求精,善益求善。SPI、IIC与UART区别HYPERLINK/smart_qiang/archive/2009/02/22/1396120.htmlSPI、IIC、UART区别第一个区别当然是名字:SPI(SerialPeripheralInterface:串行外设接口);I2C(INTERICBUS)UART(UniversalAsynchronousReceiverTransmitter:通用异步收发器)第二,区别在电气信号线上:SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输
2、入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离
3、、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2
4、C不行;第四,看看牛人们的意见吧!wudanyu:I2C线更少,我觉得比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。quickmouse:I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。HYPERLINK/smart_qiang/archive/2009/02/22/1396110.htmlSPI总线SPI总线简介同步
5、外设接口(SPI)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与EEPROM、ADC、FRAM和显示驱动器之类的慢速外设器件通信。SPI(SerialPeripheralInterface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS决定了唯一的与主设备通信的从设备,如没有CS信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由SDO输出,SDI输入,数据在时钟的上升或下
6、降沿由SDO输出,在紧接着的下降或上升沿由SDI读入,这样经过8/16次时钟的改变,完成8/16位数据的传输。SPI通信该总线通信基于主-从配置。它有以下4个信号:MOSI:主出/从入MISO:主入/从出SCK:串行时钟SS:从属选择芯片上“从属选择”(slave-select)的引脚数决定了可连到总线上的器件数量。在SPI传输中,数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器的时钟脉冲,摩托罗拉没有定义任何通用SPI的时钟规范。然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于SO-数据位的时钟
7、相位。CPOL和CPHA的设置决定了数据取样的时钟沿。数据方向和通信速度SPI传输串行数据时首先传输最高位。波特率可以高达5Mbps,具体速度大小取决于SPI硬件。例如,Xicor公司的SPI串行器件传输速度能达到5MHz。SPI总线接口及时序SPI总线包括1根串行同步时钟信号线以及2根数据线。SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数
8、据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。SPI主模块和与之通信的外设备时钟相位和极性应该一致。个人理解这句话有2层意思:其一,主设备SPI时钟和极性的配置应该由外设来决定;其二,二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。SPI接口时序如图3、图4所示。SPI是一个环形总线结构,由
9、ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010 x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。例子:假设主机和从机初始化就绪:并且主机的sbuff=0 xaa,从机的sbuff=0 x55,下面将分步对spi的8个时钟周期的数据情况演示一遍
10、:假设上升沿发送数据脉冲主机sbuff从机sbuffsdisdo01010101001010101001上0101010 x1010101x011下0101010010101011012上1010100 x0101011x102下1010100101010110103上0101001x1010110 x013下0101001010101101014上1010010 x0101101x104下1010010101011010105上0100101x1011010 x015下0100101010110101016上1001010 x0110101x106下1001010101101010107上0
11、010101x1101010 x017下0010101011010101018上0101010 x1010101x108下010101011010101010这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉底被动选为从机,作为从机的是时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的名准备数据,主机在下一个8位时钟周期才把数据读回来SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,
12、一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。图3示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):图2SPI总线四种工作方式SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位
13、(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI接口时序如图3、图4所示。二,.SPI功能模块的设计根据功能定义及SPI的工作原理,将整个IPCore分为8个子模块:uC接口模块、时钟分频模块、发送数据FIFO模块、接收数据FIFO模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。深入分析SPI的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换
14、,就能得到其余的三种协议。为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。SPI协议心得SPI接口时钟配置心得:在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的SDO连接从设备的SDI,从设备的SDO连接主设备的SDI,从设备SDI接收的数据是主设备的SDO发送过来的,主设备SDI接收的数据是从设备S
15、DO发送过来的,所以主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。下面这段话是SychipWlan8100ModuleSpec上说的,充分说明了时钟极性是如何配置的:The81xxmodulewillalwaysinputdatabitsattherisingedgeoftheclock,andthehostwillalwaysoutputdatabitsonthefallingedgeoftheclock.意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下
16、降沿有效。又如,下面这段话是摘自LCDDriverICSSD1289:SDIisshiftedinto8-bitshiftregisteroneveryrisingedgeofSCKintheorderofdatabit7,databit6databit0.意思是:从设备SSD1289在时钟的上升沿接收数据,而且是按照从高位到地位的顺序接收数据的。因此主设备的SPI时钟极性同样应该配置为下降沿有效。时钟极性和相位配置正确后,数据才能够被准确的发送和接收。因此应该对照从设备的SPI接口时序或者Spec文档说明来正确配置主设备的时钟。IICHYPERLINK/smart_qiang/archive
17、/2009/02/22/1396083.html关于IIC总线2I2C总线工作原理2.1总线的构成及信号类型I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制
18、量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单
19、元出现故障。目前有很多半导体集成电路上都集成了I2C接口。带有I2C接口的单片机有:CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供I2C接口。I2C(InterIntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控
20、内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。1I2C总线特点I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。I2C总线的时钟信号在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器
21、件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号变为低电平,将使SCL线上所有器件开始并保护低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不影响SCL线的状态,这些器件将进入高电平等待的状态。当所有器件的时钟信号都变为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件决定,而时钟高电平时间由时钟高电平期最短的器件决定。I2C总线的传输协议与数据传送起始和停止条件在数据传
22、送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图3所示。开始信号:当时钟总线SCL为高电平时,数据线SDA由高电平向低电平跳变,开始传送数据。结束信号:当SCL线为高电平时,SDA线从低电平向高电平跳变,结束传送数据。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态,其它器件不能再产生开始信号。主器件在结束信号以后退出主器件角色,经过一段时间过,总线被认为是空闲的。图3超始和停止信号图数据格式I2C总线数据传送采用时钟脉冲逐位串行传送方式,在SCL的低电平期间,SDA线上高、低电平能变化,在高电平期间,SDA上
23、数据必须保护稳定,以便接收器采样接收,时序如图4所示。图4数据传送时序图I2C总线发送器送到SDA线上的每个字节必须为8位长,传送时高位在前,低位在后。与之对应,主器件在SCL线上产生8个脉冲;第9个脉冲低电平期间,发送器释放SDA线,接收器把SDA线拉低,以给出一个接收确认位;第9个脉冲高电平期间,发送器收到这个确认位然后开始下一字节的传送,下一个字节的第一个脉冲低电平期间接收器释放SDA。每个字节需要9个脉冲,每次传送的字节数是不受限制的。I2C总线的数据传送格式是在I2C总线开始信号后,送出的第一字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”
24、表示发送,即主器件把信息写到所选择的从器件中;方向位为“1”表示主器件将从从器件读信息。格式如下:1010A2A1A0R/W注:前四位固定为1010。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)决定。发送完第一个字节后再开始发数据信号。响应数据传输必须带响应。相关的响应时钟脉冲由主机产生,当主器件发送完一字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,此时钟内主器件释放SDA线,一字节传送结束,而从器件的响应信号将SDA线拉成低电平,使SD
25、A在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。通常被寻址的接收器在接收到的每个字节后必须产生一个响应。当从机不能响应从机地址时,从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平主机产生一个停止或重复起始条件。完整的数据传送过程如图5所示。图5完整的数据传送过程I2C总线还具有广播呼叫地址用于寻址总线上所有器件的功能。若一个器件不需
26、要广播呼叫寻址中所提供的任何数据,则可以忽咯该地址不作响应。如果该器件需要广播呼叫寻址中按需提供的数据,则应对地址作出响应,其表现为一个接收器。3总线基本操作I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。参见图1。图1串行总线上的数据传送顺序3.1控制字节在起始条件之后,必须是器
27、件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。如图2所示。图2控制字节配置3.2写操作写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。关于页面写的地址、应答和数据传送的时序参见图3。图3页面写3.3读操作读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出
28、停止条件。图4顺序读4实例:X24C04与MCS-51单片机软硬件的实现X24C04是XICOR公司的CMOS4096位串行EEPROM,内部组织成5128位。16字节页面写。与MCS-51单片机接口如图5所示。由于SDA是漏极开路输出,且可以与任何数目的漏极开路或集电极开路输出“线或”(wire-Ored)连接。上拉电阻的选择可参考X24C04的数据手册。下面是通过I2C接口对X24C04进行单字节写操作的例程。流程图及源程序如下:图5X24C04与51单片机接口;名称:BSENT;描述:写字节;功能:写一个字节;调用程序:无;输入参数:A;输出参数:无BSEND:MOVR2,#08H;1字
29、节8位SENDA:CLRP3.2;RLCA;左移一位MOVP3.3,C;写一位SETBP3.2DJNZR2,SENDA;写完8个字节?CLRP3.2;应答信号SETBP3.3SETBP3.2RET图6流程图5结束语在I2C总线的应用中应注意的事项总结为以下几点:1)严格按照时序图的要求进行操作,2)若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻。3)程序中为配合相应的传输速率,在对口线操作的指令后可用NOP指令加一定的延时。4)为了减少意外的干扰信号将EEPROM内的数据改写可用外部写保护引脚(如果有),或者在EEPROM内部没有用的空间写入标志字,每次上电时或复位时做一次检测,
30、判断EEPROM是否被意外改写。关于IIC总线的操作注意事项1、对IIC总线的一次操作完之后,需要等待一段时间才能进行第二次操作。否则是启动不了总线的:)2、在时钟线(SCL)为高电平的时候,一定不能动数据线(SDA)状态,除非是启动或者结束总线型号容量器件/业面寻址字节可寻址位模块24C01128B(1010)(A2)(A1)(A0)(0或1)3128B24C02256B(1010)(A2)(A1)(A0)(0或1)3256B24C04512B(1010)(A2)(A1)(P0)(0或1)22X256B24C081024B(1010)(A2)(P1)(P0)(0或1)14X256B24C16
31、2048B(1010)(P2)(P1)(P0)(0或1)08X256B解析:IIC总线接口器件24C系列非易失性存储器与89C51接口采用软件模拟IIC。24C系列存储器器件地址统一为1010XXXX,不要问为什么,这是厂家出厂的时候规定好的了。至于24C的引脚功能和89C51的接口我就不多说了,本文的重点主要是如何应用。上面说了,器件的地址字节的高位是1010,那么低4位呢?先说最后一位吧,最后一位为0的时候表示89C51要写数据入存储器,1的时候表示要从存储器读数据。还剩下中三位A2,A1和A0。它们的高低电平取决于24C的A2,A1,A0是接高电平还是接地。A2,A1和A0有8个组合,因
32、此可以扩展8个相同的器件,根据A2、A1、A0的不同,一样的器件也会有不同的地址。那么是不是每一个24C都可以扩展8个呢?不是的。注意上表,24C01有三个可寻址位,A2,A1,A0,所以可以扩展8个,24C02也一样。而04则只可以扩展4个08只可以扩展2个,16就没有扩展了,只可以挂一片24C16。为什么呢?因为访问24C系列除了访问器件地址外,还要访问器件内的字节的地址。例如24C01,要对其操作,就先选选中它的地址,然后操作第一个字节或其他字节,这些字节也是有地址的,分模块,用一个字节表示,最多可以操作256个字节。24C01和24C02不大于256个字节,对其操作就简单得多了。但24
33、C04,08和16呢?他们都大于256个字节,怎么办?分模块。注意到上表的P0,P1,P3没有?把04分成两个模块,2X256B,08四个模块,16就八个模块。究竟怎么模块操作呢?拿24C08为例,有A2P1P0。A2只可以0或1,所以只能扩展2个24C08,其内有4个256字节的模块,要操作哪个模块取决于P1,P0的组合。例如,24C08的地址字节为1010000X第一个字节地址为0,第256个地址为255,如果地址字节是1010001X,那么第256个字节的地址为0,第512个字节的地址为255。就如此。再用24C08举例说明如何扩展,当两个24C08的A2脚分别接高电平和地的时候,就可以
34、了,这样就扩展了,他们的器件地址分别是1010000X和1010100X。当要读第一个(A2接地)24C08的的第一个模块的数据时候,单片机先发送地址字节10100001;当要把数据写进第二个(A2接高电平)24C08的第二个模块的时候,应发送10101010地址字节。不再说了,再说我疯了,看程序吧。这是对24C16操作的例子。*/复制内容到剪贴板代码:#include/*全局符号定义*/#defineWRITE0 xA0/*定义24C016的器件地址SLA和方向位W*/#defineREAD0 xA1/*定义24C04的器件地址SLA和方向位R*/#defineBLOCK_SIZE100/*
35、定义指定字节个数*/#defineucharunsignedchar#defineHIGH1#defineLOW0#defineFALSE0#defineTRUEFALSEsbitSCL=P34;/T0sbitSDA=P35;/T1ucharxdataEAROMImageBLOCK_SIZE=0;/*在外部RAM中定义发送存储映象单元*/voiddelayi2c(void);voidI_start(void)SCL=HIGH;delayi2c();SDA=LOW;delayi2c();SCL=LOW;delayi2c();voidI_stop(void)SDA=LOW;delayi2c();S
36、CL=HIGH;delayi2c();SDA=HIGH;delayi2c();SCL=LOW;delayi2c();/初始化voidI_init(void)SCL=LOW;I_stop();bitI_clock(void)bitsample;SCL=HIGH;delayi2c();sample=SDA;SCL=LOW;delayi2c();return(sample);/发送8位数据bitI_send(ucharI_data)uchari;/*发送8位数据*/for(i=0;i8;i+)SDA=(bit)(I_data&0 x80);I_data=I_data1;I_clock();/*请求应
37、答信号ACK*/SDA=HIGH;return(I_clock();/接受8位数据ucharI_receive(void)ucharI_data=0;registeruchari;for(i=0;i8;i+)I_data*=2;if(I_clock()I_data+;return(I_data);/应答voidI_Ack(void)SDA=LOW;I_clock();SDA=HIGH;voidwait_5ms(void)inti;for(i=0;i1000;i+);/向24C04写入器件地址和一个指定的字节地址。bitE_address(ucharpage,ucharAddress)I_sta
38、rt();if(I_send(WRITE+page)return(I_send(Address);elsereturn(FALSE);/参数的含义:从第几个模块(不超过3),模块中第几个字节(不超过255)/写到RAM映象的第几个字节和读的长度bitE_read_block(ucharpage,ucharaddr,uchararraypoint,ucharlongth)uchari;/*从地址0开始读取数据*/if(E_address(page,addr)/*发送重复启动信号*/I_start();if(I_send(READ+page)for(i=0;i=longth;i+)EAROMIma
39、gearraypoint+i=I_receive();if(i!=longth)I_Ack();elseI_clock();I_stop();return(TRUE);elseI_stop();return(FALSE);elseI_stop();return(FALSE);bitE_write_block(ucharpage,ucharaddr,uchararraypoint,ucharlongth)uchari;for(i=addr;i=addr+longth;i+)if(E_address(page,i)&I_send(EAROMImagearraypoint+i-addr)I_stop
40、();wait_5ms();elsereturn(FALSE);return(TRUE);/testvoidmain()EAROMImage39=0 xfe;SCON=0 x5a;TMOD=0 x20;TCON=0 x69;TH1=0 xfd;I_init();/I2C总线初始化P1=0 xFF;if(E_write_block(0,8,39,1)P1=0 xFE;/p10elseif(E_read_block(0,8,55,1)elseP1=P1&0 xFD;if(EAROMImage55=0 xfe)P1=P1&0 x0FB;while(1);HYPERLINK/smart_qiang/archive/2009/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小麦粉市场深度洞察
- 路基路面课程设计贾剑青
- 课程设计负反馈电路
- 人员培训与考核管理制度
- 火锅店餐厅管理制度
- 商务礼仪制度
- 湖北工程学院《深度学习》2023-2024学年期末试卷
- 湖北工程学院《电子测量》2022-2023学年期末试卷
- 四年级数学(四则混合运算带括号)计算题专项练习与答案汇编
- 书法课程设计
- 黑龙江省哈尔滨市第九中学2023-2024学年高三年级上册期中考试语文试题(解析版)
- 《工装夹具设计》课程标准
- 医院药房岗前培训
- 湘菜餐厅品牌策划方案
- 国内外质量认证标准对比与分析
- 2023年7月黑龙江高中学业水平合格性考试历史试卷真题(含答案详解)
- 郑州热力总公司招聘笔试题
- 姨妈巾新媒体运营方案
- 小学安全教育如何预防户外运动中的危险
- 《婚前卫生咨询》课件
- 助理全科医生培训工作经验总结
评论
0/150
提交评论