实验八 IIC通信协议

合集下载

iic通信协议

iic通信协议

iic通信协议
IIC通信协议全称为Inter-Integrated Circuit,即集
成电路互联总线,是一种全双工、串行、同步通信协议,由飞利浦公司于1982年开发。

该协议具有通讯线路简单、器件数
量少、通讯速率高、电源电压兼容性广、工作温度范围广等特点。

IIC协议使用两根线进行通讯,即时钟线SCL和数据线SDA,其中SCL由主设备(通常为微处理器)控制,用于同步
信号的传输;SDA是由主设备和从设备共享的数据线,用于传
输数据。

IIC协议中没有特定的从设备数量限制,多个从设备
可以共享同一根SDA线。

在IIC通信中,主设备向从设备发送消息,从设备进行
响应。

主设备在通信开始时发出起始信号,告诉从设备通信即将开始。

然后主设备通过总线发送地址码,用于选择要进行通信的从设备。

从设备在收到地址码后,进行应答,表示自己可以进行通信。

然后主设备发送数据到从设备。

每当主设备发送完一个
字节的数据后,从设备会发送一个应答信号确认接收到数据。

在发送完所有数据后,主设备会发送停止信号,表示通信结束。

IIC通信协议还可以支持高速模式和扩展模式。

高速模式提高了通信速率,但设备兼容性和通信长度受到限制;扩展模式则可以支持多主设备访问同一总线。

总之,IIC通信协议是一种简单、灵活、可靠的通信协议,
在很多应用中被广泛应用,如数字电路控制、传感器控制、LCD显示控制等领域。

IIC通信协议

IIC通信协议

IIC通信协议协议名称:IIC通信协议一、介绍IIC(Inter-Integrated Circuit)通信协议是一种用于短距离数字通信的串行总线协议。

它由飞利浦公司于1982年推出,旨在实现在数字集成电路之间的高速、简单、低成本的通信。

本协议规定了IIC总线的物理层和数据链路层的规范,确保了不同设备之间的互操作性和兼容性。

二、协议规范1. 物理层规范IIC总线使用两根线进行通信,分别为SDA(Serial Data Line)和SCL(Serial Clock Line)线。

SDA线用于数据传输,而SCL线用于时钟同步。

这两根线都是双向的,并且通过上拉电阻连接到正电源。

2. 数据链路层规范IIC总线采用主从结构,其中主设备负责发起通信,而从设备则被动地响应通信请求。

通信过程中,主设备通过发送起始信号来启动通信,然后发送地址和读/写位,最后发送数据和接收应答。

3. 通信流程(1)起始信号:主设备将SDA线从高电平拉低,然后再拉低SCL线,表示发起通信。

(2)地址和读/写位:主设备发送从设备的地址,并指明读或写操作。

(3)数据传输:主设备发送数据,从设备接收并发送应答信号。

若从设备成功接收到数据,则拉低SDA线作为应答;否则,保持SDA线为高电平表示无应答。

(4)终止信号:主设备在完成通信后,将SDA线从低电平拉高,再拉高SCL 线,表示终止通信。

4. 时序要求IIC通信协议的时序要求如下:(1)起始信号:SDA线保持高电平时,SCL线由高电平转为低电平。

(2)数据传输:SDA线上的数据必须在SCL线为低电平时保持稳定,直到SCL线变为高电平。

(3)应答信号:应答信号由被动设备在SCL线为低电平时拉低SDA线发送。

(4)终止信号:SDA线保持低电平时,SCL线由低电平转为高电平。

三、应用范围IIC通信协议广泛应用于各种数字集成电路之间的通信,特别适用于连接多个从设备到单个主设备的场景。

常见的应用包括传感器、存储器、显示器、温度控制器等。

iic通信协议

iic通信协议

iic通信协议IIC通信协议又称为I2C通信协议,是一种双线制的串行通信协议。

IIC通信协议在多种电路设计中被广泛应用,它可以提供高效、快速、便捷的数据传输,同时还能降低系统成本和设计复杂度。

一、IIC通信协议的基本原理IIC通信协议是一种基于主从式通信的协议,主设备控制整个通信过程,从设备根据主设备的指示进行数据交换。

通常,IIC通信由两个数据线:SDA(数据线)、SCL(同步时钟线)和两个电源线:VDD(正电源)和GND(接地)组成。

在IIC通信协议中,主设备所在信道被称为“总线(bus)”,从设备所在信道被称为“节点(node)”,主往往掌控着总线的所有操作。

二、IIC通信协议的工作流程IIC协议在通信过程中分为两个阶段:地址传输阶段和数据传输阶段。

1. 地址传输阶段地址传输阶段的任务是使主设备和从设备之间进行联系。

主设备首先向总线发送一个起始信号(Start),然后跟着8位地址和一个读写位。

在IIC通信协议中,7位的地址长度可以表示128个从设备地址,倒数第8位为读写位,用于区分主设备是要读数据还是写数据。

读操作时,该位置为高电平;写操作时,该位置为低电平。

当从设备的地址被主设备成功识别后,从设备将发送一个应答信号(ACK)。

若设备没有成功识别,或者操作错误,从设备不发送应答信号(NACK),主设备通常会停止通信进程并结束操作(Stop)。

2. 数据传输阶段通过地址阶段后,主设备和从设备即可开始数据传输。

在数据传输过程中,SDA线作为数据传输线,SCL线作为时钟信号线。

主设备向从设备传输数据时,从设备需要响应相应的应答位,并在数据传输结束后发送一个停止位(Stop)。

在IIC通信协议传输期间,当主设备需要发送数据给从设备时,在Start和SlaveAddress指令之间,可以携带若干个数据字节,这些数据字节将在主设备向从设备发送完它们以后,从设备必须发送响应(ACK)。

I2C主机在发送完每一个数据字节之后,会等待从设备的应答信号响应(ACK);如果从设备没有回应应答信号(NACK)或准备就绪(ACK),I2C主机将不会继续发送数据,而是结束数据传输操作。

IIC通信协议

IIC通信协议

IIC通信协议协议名称:IIC通信协议一、引言IIC通信协议是一种串行通信协议,用于在集成电路之间进行数据传输。

本协议旨在规范IIC通信的数据格式、传输速率、地址分配和错误处理等方面的要求,以确保各种设备之间的互操作性和稳定性。

二、定义1. IIC总线:指由串行数据线(SDA)和串行时钟线(SCL)组成的双线制总线。

2. 主设备:指能够发起IIC通信的设备,负责控制总线上的数据传输。

3. 从设备:指响应主设备请求的设备,负责接收和发送数据。

4. 起始条件:指主设备将总线上的SDA线从高电平拉低,而SCL线保持高电平的状态。

5. 停止条件:指主设备将总线上的SDA线从低电平拉高,而SCL线保持高电平的状态。

三、通信流程1. 主设备发送起始条件。

2. 主设备发送从设备地址和读/写位。

3. 从设备响应主设备的地址和读/写位。

4. 主设备或从设备发送数据。

5. 主设备或从设备接收数据。

6. 主设备发送停止条件。

四、数据格式1. 地址格式:从设备地址由7位二进制数表示,最高位为0表示写操作,为1表示读操作。

2. 数据格式:每个字节由8位二进制数表示,以大端模式传输。

数据传输可以是单字节或多字节。

五、传输速率1. 标准模式:传输速率为100 kbit/s。

2. 快速模式:传输速率为400 kbit/s。

3. 高速模式:传输速率为3.4 Mbit/s。

六、地址分配1. 从设备地址由7位二进制数表示,范围从0000000(0x00)到1111111(0x7F)。

2. 保留地址:0000xxx(0x00-0x07)和1111xxx(0xF8-0xFF)为保留地址,不可分配给从设备。

七、错误处理1. 总线冲突:当多个设备同时发送数据时,可能会导致总线冲突。

冲突检测由主设备负责,发生冲突时主设备将停止数据传输。

2. 超时处理:当设备在传输过程中未能及时响应时,主设备将停止数据传输并进行错误处理。

3. 错误标志:主设备和从设备在传输过程中可以通过特定的标志位表示传输过程中的错误。

iic通信协议原理

iic通信协议原理

IIC通信协议原理1. 概述IIC(Inter-Integrated Circuit)通信协议是一种用于集成电路之间进行串行通信的协议。

它是由飞利浦公司(现在的恩智浦半导体)在上世纪80年代提出的,被广泛应用于各种电子设备中。

本文将详细介绍IIC通信协议的原理及其应用。

2. IIC通信协议的基本原理IIC通信协议采用了两根线进行通信,分别是SCL(Serial Clock)和SDA (Serial Data)线。

SCL线由主设备控制,用于提供时钟信号,而SDA线用于数据的传输。

IIC通信协议采用了主从结构,其中主设备负责发起通信和控制整个通信过程,从设备则负责响应主设备的指令并提供数据。

3. IIC通信协议的工作流程IIC通信协议的工作流程如下:3.1 主设备发送起始信号主设备发送起始信号,即在SCL线为高电平的情况下,SDA线由高电平切换到低电平。

这个信号表示通信的开始。

3.2 主设备发送设备地址和读写位主设备发送设备地址和读写位,设备地址用于指定通信的从设备,读写位用于指示是读操作还是写操作。

设备地址是一个7位的二进制数,表示从设备的唯一标识。

3.3 主设备发送数据如果是写操作,主设备接着发送要写入从设备的数据;如果是读操作,主设备发送数据后,会切换到接收模式,并等待从设备发送数据。

3.4 从设备响应从设备接收到主设备发送的数据后,会发送响应信号。

如果从设备成功接收并处理了数据,它会发送一个应答信号,即在SCL线为高电平的情况下,SDA线由低电平切换到高电平。

如果从设备未能正确接收或处理数据,它会发送一个非应答信号。

3.5 主设备停止通信主设备在完成通信后,发送停止信号,即在SCL线为高电平的情况下,SDA线由低电平切换到高电平。

这个信号表示通信的结束。

4. IIC通信协议的特点IIC通信协议具有以下特点:4.1 速度快IIC通信协议采用了串行通信,数据传输速度相对较快。

具体的传输速度取决于SCL线的频率,通常可以达到几百kHz甚至几MHz。

IIC通信协议

IIC通信协议

IIC通信协议【协议名称】:IIC通信协议【协议简介】:IIC通信协议(Inter-Integrated Circuit)是一种用于在集成电路(IC)之间进行数据传输的串行通信协议。

它由飞利浦公司(现在的恩智浦半导体)在1982年推出,旨在解决多个IC之间通信的问题。

IIC通信协议被广泛应用于各种电子设备中,如计算机、手机、电视、汽车等。

【协议目的】:本协议旨在规定IIC通信协议的标准格式,确保各设备在进行IIC通信时能够准确、高效地传输数据,实现设备之间的互联互通。

【协议内容】:一、通信原理1. IIC通信协议采用两根线进行数据传输,分别为时钟线(SCL)和数据线(SDA)。

2. SCL线由主设备控制,用于发送时钟信号,规定了数据传输的时序。

3. SDA线用于传输数据,包括地址和数据内容。

4. 通信过程中,数据的传输是以字节为单位进行的,每个字节包括8个位(bit)。

二、通信模式1. IIC通信协议支持两种通信模式:主模式和从模式。

2. 主模式:由主设备(如微处理器)发起通信,并控制通信过程。

3. 从模式:由从设备(如传感器、存储器)被动地响应主设备的命令,并传输数据。

三、通信过程1. 主设备发起通信时,首先发送起始信号(Start)。

2. 主设备发送从设备地址和读/写标志位,用于选择通信的从设备。

3. 从设备接收到地址后,根据读/写标志位进行相应的操作。

4. 通信过程中,主设备发送和接收数据时,从设备通过应答信号(ACK)确认数据的接收情况。

5. 数据传输完成后,主设备发送停止信号(Stop)。

四、数据传输1. IIC通信协议支持单字节传输和多字节传输。

2. 单字节传输:主设备发送一个字节的数据,从设备接收并进行相应操作。

3. 多字节传输:主设备发送多个字节的数据,从设备按顺序接收并进行相应操作。

4. 在多字节传输中,主设备可以选择是否在每个字节的传输后发送应答信号。

五、错误处理1. 在通信过程中,如果从设备无法响应或数据传输错误,主设备可以发送重复起始信号(Repeated Start)重新开始通信。

IIC通信协议

IIC通信协议

IIC通信协议协议名称:IIC通信协议一、引言IIC通信协议是一种用于短距离数字通信的串行总线通信协议。

本协议旨在规范IIC通信协议的使用方式,确保各设备之间的数据传输的可靠性和一致性。

二、定义1. IIC总线:指两根信号线,即串行数据线(SDA)和串行时钟线(SCL)。

2. 主设备:指发起IIC通信的设备,负责控制总线上的数据传输。

3. 从设备:指被主设备控制的设备,负责接收和发送数据。

三、通信流程1. 总线初始化主设备通过向SCL线发送时钟信号来初始化总线。

初始化过程中,主设备将SDA线拉高,然后发送起始信号,标志着通信的开始。

2. 寻址主设备发送一个包含从设备地址和读/写位的字节来寻址从设备。

从设备地址由7位二进制数表示,最高位为0表示写操作,为1表示读操作。

3. 数据传输主设备向从设备发送数据时,将数据位逐个发送到SDA线上,并通过SCL线的时钟信号同步传输。

从设备接收到数据后,发送应答信号,表示数据接收成功。

4. 停止信号主设备发送停止信号来结束通信。

停止信号由将SDA线从低电平拉到高电平,然后将SCL线拉高形成。

四、数据格式1. 起始信号:SDA线从高电平拉到低电平,SCL线保持高电平。

2. 数据位:在SCL线为低电平时,SDA线上的数据保持稳定,直到SCL线变为高电平。

3. 应答信号:在主设备发送完一个字节的数据后,从设备需要发送一个应答信号。

应答信号由将SDA线拉低形成。

4. 停止信号:SDA线从低电平拉到高电平,SCL线保持高电平。

五、错误处理1. 总线忙错误:如果主设备在发送起始信号前检测到SDA线为低电平,则表示总线正忙,主设备需要等待总线空闲后再次尝试。

2. 应答错误:如果主设备在发送完一个字节的数据后未收到从设备的应答信号,则表示应答错误,主设备可以选择重发数据或中断通信。

六、电气特性1. 电压:通信线路上的电压应在0V至5V之间。

2. 高电平:通信线路上的高电平应大于等于2.1V。

iic通信协议

iic通信协议

iic通信协议IIC通信协议概述IIC是一种基于串行通信的总线标准,全称为Inter-Integrated Circuit(集成电路间总线),是由飞利浦公司(现在已改名为恩智浦半导体公司)于1982年推出的一种串行通信协议,广泛应用于数字系统之间短距离数据通信。

IIC 采用两根信号线(串行数据线SDA和串行时钟线SCL)进行通信,支持多主机和多从机的结构,具有简单、灵活、可靠的特点,在各种数字电路中得到了广泛应用。

IIC通信协议的工作原理IIC通信协议采用两根信号线(SDA和SCL)进行通信,其中SDA用于数据传输,SCL用于同步时序。

IIC总线可以同时挂接多个主设备和从设备,主设备和从设备之间通过SDA和SCL信号线进行数据交换。

在IIC总线中,主设备有唯一的控制权,控制总线的访问,从设备只有收到主设备的控制后才可以进行数据的传输。

IIC通信协议中的主设备和从设备在IIC总线中,主设备和从设备各有一些特点。

主设备:1.主设备可以向从设备发送数据,也可以从从设备接收数据。

2.主设备控制总线的开始和结束,可以对总线进行读写操作。

3.主设备拥有总线访问权限,一般由CPU或MCU等主控芯片担任。

从设备:1.从设备只能在主设备的控制下进行读写操作,不能发送数据。

2.从设备需要等待主设备发起总线访问请求后才能向主设备发送数据。

3.从设备只是提供数据,不控制总线的访问。

IIC通信协议中的总线开始和总线结束总线开始和总线结束是IIC通信协议中非常重要的两个概念,这两个概念是用于控制总线访问的。

总线开始:1.总线开始表示主设备要向从设备发送数据。

2.总线开始由主设备发起。

3.总线开始的过程,主设备会先拉低SDA信号线,然后再拉低SCL信号线,表示要开始发送数据。

总线结束:1.总线结束表示从设备已经接收到了主设备发送的数据。

2.总线结束由主设备发起。

3.总线结束的过程,主设备会先拉低SDA信号线,然后再让SCL信号线变为高电平,表示已经完成了一次数据传输。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八I2C通信协议一、实验目的:1、培养学生阅读资料的能力;2、加深学生对I2C总线通信协议的理解;3、加强学生对模块化编程的理解;二、实验环境:1、硬件环境:PC机一台、单片机实验板一块、母头串口交叉线、USB电源线;2、软件环境:keil uVision2集成开发环境;STC-ISP下载上位机软件;三、实验原理:要学会I2C通信协议的编程,关键是要看懂并掌握其时序图,理解对I2C通信协议相关子程序的实验编写。

I2C通信协议的总线时序图如下所示:I2C总线时序图I2C相关子程序的详细介绍1、起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

2、结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

起始信号和结束信号的时序图如下所示:起始信号和结束信号的时序图起始信号的流程如下:1、SCL和SDA拉高,保持时间约为0.6us-4us;2、拉低SDA,保持时间为约为0.6us-4us;3、拉低时钟线结束信号的流程如下:1、SCL置高电平,SDA置低电平,保持时间约为0.6us-4us2、SDA拉高,保持时间约为1.2-4us;应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。

CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。

若未收到应答信号,由判断为受控单元出现故障。

应答信号的时序图如下所示:应答时序图发送时的应答信号;**********应答信号**********ACK: SETB SDA ;数据线置高SETB SCL ;时钟线置高ACALL DELAYJB SDA,$ ;等待数据线变低ACALL DELAYCLR SCL ;时钟线置低RET注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。

具体的程序如下:ACK: MOV R4,#00HSETB SDASETB SCLLOP0: JNB SDA,LOPDJNZ R4,LOP0 ;循环255次LOP: ACALL DELCLR SCLRET接收时的应答信号ACK1: CLR SDA ;数据线置低SETB SCL ;时钟线置高NOPNOPCLR SCL ;时钟线置低SETB SDA ;数据线置高RET3、字节的发送和接收写周期时序图一字节数据发送子程序,流程如下:图6-22 发送子程序流程图(2)一字节数据接收子程序,流程如下:图6-23 接收子程序流程图7、写操作(1)字节写图6-24 字节写时序图流程如下:图6-25 字节写的流程图(2)页写图6-26 页写时序图页写流程如下:8、读操作(1)选择读图6-28 选择读时序图图6-29 NO ACK时序图(2)连续读图6-30 连续读时序图四、实验原理图:I2C总线电路图五、实验例题:例题一编写一程序,实现I2C的指定字节读写,用24C08来记录单片机复位或者开机的次数,并将复位或者开机的次数显示在数码管上。

程序分析本程序利用单片机复位时程序总是从0000H开始执行的特性。

用24C08的一个单元来存储开机的次数,程序一开始就将次数读出来,加上本次的开机,显示在数码管上。

再将加1之后的数据存入24c08的对应单元。

程序代码;************************************************************************** ;****程序功能:实现对24C08的字节读写,用24C08记录开机次数,显示在数码管上;****程序编写: 李代勇;****编写日期: 2007/2/04;************************************************************************** ;************************************************************************** ;初始化数据设置;************************************************************************** SDA EQU P1.7 ;定义数据线为P1.7(实验板上已固定,不可更改)SCL EQU P1.6 ;定义始终线为P1.6I2C_Addr EQU 10H ;定义地址缓冲区,存储要读写24C08的单元地址I2C_Data EQU 12H ;用于缓冲要读写的数据D_BUF0 EQU 55H ;数码管显示缓冲区(个位)D_BUF1 EQU 56H ;数码管显示缓冲区(十位)D_BUF2 EQU 57H ;数码管显示缓冲区(百位)FLAG BIT 00H ;定义标志位,确定百位是否等于0,不等于0置1;************************************************************************** ;程序段:主程序;************************************************************************** ORG 0000HLJMP STARTORG 0030HSTART: MOV SP,#70HMOV I2C_Data ,#00HMOV I2C_Addr,#0FHACALL I2C_READMOV I2C_Data ,A ;读出数据INC I2C_DataMOV I2C_Addr ,#0FH ;更新数据ACALL I2C_WRITELCALL DATAEDIT ;数据加工WAIT: LCALL DISPLAY ;显示数据AJMP W AIT;************************************************************************** ;函数名称:DA TAEDIT;输入参数:I2C_Data;输出参数:D_BUF0,D_BUF1,D_BUF2;函数功能:处理数据,确定每一位数码管要显示的数字,; 因为01,只要求显示1,10只要求显示10(而不是显示010); 101要求显示101;************************************************************************** DA TAEDIT:MOV A,I2C_DataMOV B,#100DIV ABJZ L1 ;根据百位是否等于0确定百位的显示MOV D_BUF2,A ;百位不等于0,直接显示百位的数字SETB FLAG ;百位不等于0,标志位置1AJMP NEXL1: MOV D_BUF2,#25 ;百位等于0,对百位赋一个超过段码个数的值NEX: MOV A,B ;对十位数的处理MOV B,#10DIV AB ;根据十位是否等于0确定十位的显示JZ L2L3: MOV D_BUF1,A ; 十位等于0,百位不等于0,显示十位的数字AJMP NEX1L2: JB FLAG,L3 ;十位等于0,判断百位是否也为0MOV D_BUF1,#22 ;百位、十位等于0,十位赋超过段码个数的值NEX1: MOV D_BUF0,B ;个位的赋值RET;************************************************************************** ;函数名称:DISPLAY;输入参数:D_BUF0,D_BUF1,D_BUF2;输出参数:无;占用资源:R6,R7,R0;函数功能:将D_BUF0,D_BUF1,D_BUF2显示在数码管上;************************************************************************** DISPLAY:MOV R6,#3MOV R7,#0FEHMOV DPTR,#TABMOV R0,#D_BUF0LOPP1: MOV A,@R0MOVC A,@A+DPTRMOV P0,AMOV P2,R7LCALL DELAY5MS ;动态扫描延时,消除余辉效应INC R0MOV A,R7RL AMOV R7,ADJNZ R6,LOPP1NOPRET;************************************************************************** ;函数名称:DELAY5MS;输入参数:无;输出参数:无;占用资源:60H,61H,62H;函数功能:延时5MS(24MHz晶振);************************************************************************** DELAY5MS:MOV 60H,#1DDD2: MOV 61H,#20DDD1: MOV 62H,#248DJNZ 62H,$DJNZ 61H,DDD1DJNZ 60H,DDD2RET;************************************************************************** ;函数名称:I2C_WRITE;输入参数:I2C_Addr,I2C_data;输出参数:无;函数功能:24C08字节写,将I2Cdata写入24C08的Address地址单元;************************************************************************** I2C_WRITE:I2C_WRITE_A:ACALL I2C_STARTMOV A,#10100000BLCALL I2C_SEND8BITLCALL I2C_ACKJC I2C_WRITE_ARS_ADDR:MOV A,I2C_AddrLCALL I2C_SEND8BITLCALL I2C_ACKJC RS_ADDRRS_DATA:MOV A,I2C_DataLCALL I2C_SEND8BITLCALL I2C_ACKJC RS_DATALCALL I2C_STOPLCALL DELAY10MSRET;************************************************************************** ;函数名称:I2C_READ;输入参数:I2C_Addr;输出参数:I2C_Data;函数功能:24C08指定字节读,将24C08的Address地址单元的内容读到I2Cdata;************************************************************************** I2C_READ:I2C_READ_A:LCALL I2C_STARTMOV A,#10100000BLCALL I2C_SEND8BITLCALL I2C_ACKJC I2C_READ_ARS_ADDR2:MOV A,I2C_AddrLCALL I2C_SEND8BITLCALL I2C_ACKJC RS_ADDR2LCALL I2C_STARTREAD_ADDR:MOV A,#10100001BLCALL I2C_SEND8BITLCALL I2C_ACKJC READ_ADDRACALL I2C_RECEIVE8BITMOV I2C_Data ,AACALL I2C_ACKLCALL I2C_STOPRET;************************************************************************** ;函数名称:I2C_START;输入参数:无;输出参数:无;函数功能:实现24C08启动时序的编写;************************************************************************** I2C_START:SETB SCLSETB SDANOP ;TSU:STA 延时时间最少0.6us,另外还有一个值为4usNOPCLR SDANOP ;THD:STA 延时时间最少0.6us,另外还有一个值为4usNOPCLR SCLNOPNOPNOPRET;************************************************************************** ;函数名称:I2C_STOP;输入参数:无;输出参数:无;函数功能:实现24C08停止时序的编写;**************************************************************************I2C_STOP:CLR SDASETB SCLNOP ;TSU:STO 延时时间最少0.6us,另外还有一个值为4usNOPSETB SDANOP ;TBUF 新的发送开始前的总线空闲时间,1.2us,还有一个为4.7us NOPNOPRET;************************************************************************** ;函数名称:I2C_ACK;输入参数:无;输出参数:C;函数功能:实现24C08应答时序的编写;************************************************************************** I2C_ACK:SETB SDASETB SCLNOPNOPJB SDA,I2C_ACK0CLR CAJMP I2C_ACK_ENDI2C_ACK0:SETB CI2C_ACK_END:CLR SCLRET;**************************************************************************;函数名称:I2C_SEND8BIT;输入参数:A;输出参数:无;函数功能:24C08发送8位数据;************************************************************************** I2C_SEND8BIT:MOV B,#08HI2C_SEND8BIT_A:RLC AMOV SDA,CSETB SCLNOPNOPCLR SCLDJNZ B,I2C_SEND8BIT_ARET;************************************************************************** ;函数名称:I2C_RECEIVE8BIT;输入参数:无;输出参数:A;函数功能:24C08接收8位数据;************************************************************************** I2C_RECEIVE8BIT:MOV B,#08HCLR ASETB SDAI2C_RECEIVE8IT_A:SETB SCLNOPNOPRLC ACLR SCLDJNZ B,I2C_RECEIVE8IT_ARET;************************************************************************** ;函数名称:DELAY10MS;输入参数:无;输出参数:无;函数功能:实现10MS延时(24MHz晶振);************************************************************************** DELAY10MS:MOV 40H,#2D2: MOV 41H,#20D1: MOV 42H,#248DJNZ 42H,$DJNZ 41H,D1DJNZ 40H,D2RET;************************************************************************** ; 共阴级数码管段码数据表;************************************************************************** TAB: DB 3FH;0DB 06H;1DB 5BH;2DB 4FH;3DB 66H;4DB 6DH;5DB 7DH;6DB 07H;7DB 6FH;9END六、练习题:1、上面的例题是针对指定字节读的,每个单元所存数据为0-255,请编写一段程序,要求能存储开机次数在0-65536次。

相关文档
最新文档