单片机教程-51系列单片机读写IIC总线(28)

合集下载

51单片机的I2C底层驱动程序(IO口模拟)

51单片机的I2C底层驱动程序(IO口模拟)

51单片机的I2C底层驱动程序(IO口模拟)/*Title:I2C for 80C51Author:yuyouliang51单片机(本人使用STC89C52单片机,12T模式)的I2C驱动程序,使用逻辑分析仪对该协议进行分析,发现波形比较美观,SCL 的频率在70KHz左右(11.0592M晶振),低于标准的100K,可以适应大多数的I2C器件。

如果感觉速度过快或过慢,可以自行修改延时。

希望可以给读者一个参考,给读者一些帮助!*//*i2c.h文件 */#ifndef __I2C_H_#define __I2C_H_sbit SCL = P2^1;sbit SDA = P2^0;void start_i2c(); //启动I2C总线:SCL高电平期间,SDA由高变低void stop_i2c(); //停止I2C总线:SCL高电平期间,SDA由低变高void send_i2c(unsigned char c); //主机发送一个字节,先发送最高位unsigned char receive_i2c(); //主机接收一个字节,先接收最高位void master_ack(bit ack); //主机非应答信号(填参数0)或应答信号(填参数1)void slave_ack(); //等待从机应答信号#endif/* i2c.c文件 */#include#include#include#define nop() _nop_()void start_i2c() //启动I2C总线:SCL高电平期间,SDA由高变低{SDA=1;SCL=1;nop();nop();nop();nop();SDA=0;SCL=0;}void stop_i2c() //停止I2C总线,SCL高电平期间,SDA由低变高{SDA=0;SCL=1;nop();nop();nop();nop();SDA=1;}void slave_ack() //等待从机应答信号,如果从机迟迟没有应答,则结束总线。

实验八 51系列单片机IIC

实验八 51系列单片机IIC
8.3 I2C总线器件的寻址方式
I2C总线上的所有器件连接在一个公共的总线上,因此,主器件在进行数据传输前选择需要通信的从器件,即进行总线寻址。 I2C总线上所有外围器件都需要有惟一的地址,由器件地址和引脚地址两部分组成,共7位。器件地址是I2C器件固有的地址编码,器件出厂时就已经给定,不可更改。引脚地址是由I2C总线外围器件的地址引脚(A2,A1,A0)决定,根据其在电路中接电源正极、接地或悬空的不同,形成不同的地址代码。引脚地址数也决定了同一种器件可接入总线的最大数目。 地址位与一个方向位共同构成I2C总线器件寻址字节。寻址字节的格式如表所示。方向位(R/)规定了总线上的主器件与外围器件(从器件)的数据传输送方向。当方向位R/=1,表示主器件读取从器件中的数据;R/=0,表示主器件向从器件发送数据。
从地址中读取一个字节的数据
INT8U read_random(INT8U RomAddress) { INT8U Read_data; I_Start(); I_Write8Bit(WriteDeviceAddress); I_TestAck(); I_Write8Bit(RomAddress); I_TestAck(); I_Start(); I_Write8Bit(ReadDeviceAddress); I_TestAck(); Read_data=I_Read8Bit(); I_NoAck(); I_Stop(); return (Read_data); }
8.4.1 串行EEPROM存储器简介
串行EEPROM存储器是一种采用串行总线的存储器,这类存储器具有体积小、功耗低、允许工作电压范围宽等特点。目前,单片机系统中使用较多的EEPROM芯片是24系列串行EEPROM。其具有型号多、容量大、支持I2C总线协议、占用单片机I/O端口少,芯片扩展方便、读写简单等优点。 目前,Atmel、MicroChip、National等公司均提供各种型号的I2C总线接口的串行EEPROM存储器。下面以Atmel公司的产品为例进行介绍。 AT24C01/02/04/08系列是Atmel公司典型的I2C串行总线的EEPROM。这里以AT24C08为例介绍。AT24C08具有1024×8位的存储容量,工作于从器件模式,可重复擦写100万次,数据可以掉电保存100年。8引脚DIP封装的AT24C08的封装结构,如图所示。

51单片机汇编语言入门教程

51单片机汇编语言入门教程

51单片机汇编语言入门教程什么是51单片机
51单片机指的是英特尔公司推出的一种单片机芯片种类,其名字为“AT89S52”。

后来,这种芯片因其使用广泛,被人们简称为“51单片机”。

为什么要研究汇编语言
研究汇编语言能够让我们更好地理解机器是如何执行指令的,
从而更好地优化程序,提高程序运行效率。

汇编语言基础知识
数据类型
- 字节:一个字节是8位二进制数,可以表示0~255之间的数。

- 字:一个字是16位二进制数,可以表示0~之间的数。

- 双字:一个双字是32位二进制数,可以表示0~之间的数。

指令集
51单片机有大约100条汇编指令,这些指令可以完成各种操作,如运算、数据传输、中断处理等。

寄存器
51单片机有4个8位的通用寄存器(寄存器0~3)和2个16
位的通用寄存器(DPTR和PC)。

程序结构
51单片机只有一种程序结构——线性结构。

程序从0地址开始执行,一条一条地执行,直到程序结束。

编写第一个汇编程序
以下是一个简单的汇编程序示例:
ORG 0H ;设置程序起始地址为0H
MOV P1, #55H ;将55H赋值给P1口
END ;程序结束指令
这个程序的作用是将55H赋值给P1口。

总结
通过学习本教程,我们了解了基本的汇编语言知识,包括数据
类型、指令集、寄存器、程序结构以及编写程序的基本步骤。

希望
这份教程可以帮助初学者顺利掌握51单片机汇编语言编程的基础。

51单片机 引脚 读 写 函数

51单片机 引脚 读 写 函数

51单片机引脚读写函数51单片机是一种常见的微控制器,它有多个引脚用于连接外部设备和执行各种功能。

在使用51单片机时,我们通常需要编写读取和写入引脚的函数来控制外部设备或与其他设备进行通信。

首先,让我们来看看如何编写一个读取引脚状态的函数。

在51单片机的编程中,我们可以使用特定的语言(比如C语言)来编写这样的函数。

一个简单的读取引脚状态的函数可能如下所示:c.int readPin(int pinNumber) {。

return P0 & (1 << pinNumber);}。

在这个函数中,我们使用了P0寄存器来读取引脚的状态。

我们通过将1左移pinNumber位来创建一个掩码,然后使用按位与操作来获取该引脚的状态。

这个函数可以根据具体的引脚编号来读取相应引脚的状态。

接下来,让我们来看看如何编写一个写入引脚状态的函数。

一个简单的写入引脚状态的函数可能如下所示:c.void writePin(int pinNumber, int value) {。

if (value == 1) {。

P0 |= (1 << pinNumber);} else {。

P0 &= ~(1 << pinNumber);}。

}。

在这个函数中,我们同样使用了P0寄存器来写入引脚的状态。

根据传入的value参数,我们使用按位或操作或按位与非操作来设置或清除相应的引脚位。

需要注意的是,以上的示例函数是针对51单片机的特定引脚操作的示例,实际使用时需要根据具体的引脚编号和端口寄存器进行相应的修改。

同时,还需要考虑到引脚的输入输出模式、上下拉电阻等其他因素。

总之,编写51单片机引脚的读写函数需要考虑到具体的引脚编号、端口寄存器的操作以及引脚的输入输出模式等因素,以确保准确可靠地控制引脚的状态。

希望这个回答能够帮助你更好地理解51单片机引脚的读写函数。

51单片机读写内部EEPROM详解

51单片机读写内部EEPROM详解
uchar dat;
ISP_CONTR=0x81;
ISP_CMD= 0x01;/用户可以对"Data Flash/EEPROM区"进行字节读ISP_ADDRL = addr;
ISP_ADDRH=addr>>8;
EA= 0;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
dat=ISP_DATA;
Q0();
return dat;
}//取出数据
//关闭ISP/IAP
/*
函数:关闭ISP/lAP操作
*/
void Q0()
ISP_CONTR= 0;关闭IAP功能
ISP_CMD=0;/待机模式,无ISP操作
ISP_TRIG=0;关闭IAP功能,清与ISP有关的特殊功能寄存器}
/*
STC89C52R内部EEPROM羊细地址表:
#define uint unsigned int
#endif
/**********************************
PIN口定义
**********************************
#define LCD1602_DATAPINS P0
sbit LCD1602_E二P 2八7;
xcx(0x2002,6);//对EEPROM区2002h写入6
*/
/*
函数:擦除某一扇区(每个扇区512字节)
入口:addr=某一扇区首地址
*/
void cc(uint addr)
//打开IAP功能(ISP_CONTR.7)=允许编程改变Flash设置Flash操作等待时 间
//0x83(晶振v5M)0x82(晶振v10M)0x81(晶振v20M)0x80(晶振<40M)

51单片机内部EEPROM读写

51单片机内部EEPROM读写

51单⽚机内部EEPROM读写#include <reg52.h>#include <intrins.h>//定义类型,⽅便代码移植typedef unsigned char UINT8;typedef unsigned int UINT16;typedef unsigned long UINT32;typedef char INT8;typedef int INT16;typedef long INT32;static UINT8 i=0;/*定义寄存器 ISP*/sfr ISP_DATA= 0xe2; // Flash数据寄存器sfr ISP_ADDRH= 0xe3;// Flash⾼字节地址寄存器sfr ISP_ADDRL= 0xe4;// Flash低字节地址寄存器sfr ISP_CMD= 0xe5;// Flash命令模式寄存器sfr ISP_TRIG= 0xe6;// Flash命令触发寄存器sfr ISP_CONTR= 0xe7;// ISP/IAP 控制寄存器#define NOP() _nop_()#define EEPROM_START_ADDRESS 0X2000#define LED_PORT P2//微秒级延时void DelayNus(UINT16 t){UINT16 d=0;d=t;do{NOP();}while(--d > 0);}//毫秒级延时void DelayNms(UINT16 t){do{DelayNus(1000);}while(--t > 0);}//EEPROM使能void EEPROMEnable(void){ISP_CONTR=0x81;//使能并设置好等待时间}//EEPROM禁⽤void EEPROMDisable(void){ISP_CONTR=0x00;//禁⽌EEPROMISP_CMD = 0X00;//⽆ISP操作ISP_TRIG = 0X00;//清零ISP_ADDRH = 0X00;//清零ISP_ADDRL = 0X00;//清零}//eeprom 设置读写地址(相对地址)void EEPROMSetAddress(UINT16 addr){addr+=EEPROM_START_ADDRESS;//初始化地址ISP_ADDRH=(UINT8)(addr>>8);//设置读写地址⾼字节ISP_ADDRL=(UINT8) addr; //设置读写地址低字节}//EEPROM启动void EEPROMStart(void){ISP_TRIG=0x46;ISP_TRIG=0xB9;}//EEPROM读取单个字节UINT8 EEPROMReadByte(UINT16 addr){ISP_DATA=0X00;ISP_CMD=0X01;EEPROMEnable();EEPROMSetAddress(addr);EEPROMStart();DelayNus(10);//读取⼀个字节需要10usEEPROMDisable();return (ISP_DATA);}//EEPROM写⼊单个字节UINT8 EEPROMWriteByte(UINT16 addr,UINT8 byte) {EEPROMEnable();ISP_CMD=0X02;EEPROMSetAddress(addr);ISP_DATA=byte;EEPROMStart();DelayNus(60);EEPROMDisable();}//EEPROM扇区擦除UINT8 EEPROMSectorErase(UINT16 addr){ISP_CMD=0X03;EEPROMEnable();EEPROMSetAddress(addr);EEPROMStart();DelayNus(10);//EEPROMDisable();}void main(void){EEPROMSectorErase(0);EEPROMWriteByte(0,0x0f);i=EEPROMReadByte(0);LED_PORT = i;while(1);}现象:。

I2C总线读写程序通用

I2C总线读写程序通用

//==========================头文件加载===============================#include <reg52.h> //加载52系列单片机头文件//===========================端口声明================================sbit CLK=P3^6; //74hc574时钟信号线sbit G=P2^4; //74hc574使能sbit IIC_SDA=P2^6; //声明IIC总线的数据线接在单片机的P2。

5端口。

sbit IIC_SCL=P2^5; //声明IIC总线的时钟线接在单片机的P2。

7端口。

unsigned char tabl[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0BF,0x8C};//0,1,2,3,4,5,6,7,8,9,-,P//===========================函数声明================================ void display(unsigned char aa);void delay(unsigned int t);void delay_IIC(void);void IIC_Init(void);void IIC_start(void);void IIC_stop(void);bit IIC_Tack(void);void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data);unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr);void IIC_write_byte(unsigned char Data);unsigned char IIC_read_byte(void);//============================主函数================================= void main() //主函数{unsigned char Data=2,addr=0x01;//—-——-—--—————————-——--————-系统初始化——-—-—--—-—-—————-—---———-IIC_Init();//初始化IIC总线。

STC51单片机普通IO口模拟IIC(I2C)接口通讯的程序代码

STC51单片机普通IO口模拟IIC(I2C)接口通讯的程序代码

STC51单片机普通IO口模拟IIC(I2C)接口通讯的程序代码STC 51单片机普通IO口模拟IIC(I2C)接口通讯的程序代码原文:(改自周立功软件包)#include <reg51.h>#include <intrins.h>#define uchar unsigned char /*宏定义*/#define uint unsigned intextern void Delay1us(unsigned char );sbit SDA=P1^6; /*模拟I2C数据传送位*/sbit SCL=P1^7; /*模拟I2C时钟控制位*/bit ack; /*应答标志位*//************************************************************** *****起动总线函数函数原型: void Start_I2c();功能: 启动I2C总线,即发送I2C起始条件.*************************************************************** *****/void Start_I2c(){SDA=1; /*发送起始条件的数据信号*/Delay1us(1);SCL=1;Delay1us(5); /*起始条件建立时间大于4.7us,延时*/SDA=0; /*发送起始信号*/Delay1us(5); /* 起始条件锁定时间大于4μs*/SCL=0; /*钳住I2C总线,准备发送或接收数据 */Delay1us(2);}/************************************************************** *****结束总线函数函数原型: void Stop_I2c();功能: 结束I2C总线,即发送I2C结束条件.*************************************************************** *****/void Stop_I2c(){SDA=0; /*发送结束条件的数据信号*/Delay1us(1); /*发送结束条件的时钟信号*/SCL=1; /*结束条件建立时间大于4us*/Delay1us(5);SDA=1; /*发送I2C总线结束信号*/Delay1us(4);}/*******************************************************************字节数据发送函数函数原型: void SendByte(uchar c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0)发送数据正常,ack=1; ack=0表示被控器无应答或损坏。

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

28.4 小结
• 本章详细介绍了I2C串行总线的工作原理、结构以 及寻址方式等,并对I2C串行总线的数据传输进行 了详细的介绍。本章还给出了采用普通的51系列 单片机模拟读写I2C串行总线的汇编语言和C语言 的代码。最后通过一个具体的实例,讲解了单片 机读写I2C总线外围器件的电路设计以及程序设计。 I2C串行总线具有接口简单,体积小等优点,在实 际电路设计中经常使用。熟练掌握本章,可以控 制大部分的I2C总线外围器件,大大扩展了51系列 单片机的使用范围。
28.2.6 总线数据位
• 在I2C总线启动后或应答信号后的第1~8个时钟脉 冲,对应于要传送字节的8位数据,数据位由低到 高传送。 • I2C总线上的数据是伴随着时钟脉冲,一位一位地 传送的,每位数据占一个时钟脉冲。在时钟线SCL 高电平期间,数据线SDA的状态就表示要传送的数 据,高电平为数据1,低电平为数据0。在数据传 送时,数据线上数据的改变在时钟线为低电平时 完成,而时钟线为高电平时,数据线必须保持稳 定,否则数据线上的任何变化都会被当作起始或 终止信号,而致使数据传输停止。
• • • • • • • • • •
28.2.3 应答信号
应答信号用于表明数据传输的结束。I2C总线数据传送时,每传送 一个字节数据后都必须有应答信号。应答信号从主器件产生。主 器件在第9个时钟位上释放数据总线,使其处于高电平状态,此时 从器件输出低电平拉低数据总线为应答信号。 • 如果采用汇编语言进行程序设计,则发送应答位子程序示例如下: • ACK: CLR P1.1 ; P1.1=0,SDA=0 • SETB P1.0 ; P1.0=1,SCL=1 • NOP • NOP • CLR P1.0 ; P1.0=0 , SCL=0 • NOP • NOP • SETB P1.1 ; P1.1=1 , SDA=1 • RET •
• •
28.3.2 电路设计
• 这里给出单片机AT89S52读写AT24C08的电路图, 如图所示。
28.3.3 程序设计
• 这里采用Keil C51语言编写程序。具体操作步骤如下:
28.3.4 仿真分析
• Keil μVison3集成开发环境提供了很好的信号仿 真功能,下面就利用其进行I2C串行总线的时序仿 真分析。具体操作步骤如下:
28.2.8 读数据
• I2C总线进行读数据时,数据传输的开始以主器件 发出起始信号为准,然后发送寻址字节。寻址字 节共8位,高7位是被寻址的从器件地址,最低一 位是方向位,方向位表示主器件与从器件之间的 数据传送方向,方向位为“1”时表示主器件从从 器件中接收数据(读)。在寻址字节后是将要传 送的数据字节与应答位,数据可以多字节连续发 送。在数据传送完毕后,主器件必须发送终止信 号已释放总线控制权。如果主器件希望继续占用 总线,则可以不产生终止信号,马上再次发送起 始信号,并对另一从器件进行寻址,便可进行新 的数据传送。
28.2.4 非应答信号
• 非应答信号用于数据传输出现异常而无法完成时。 在传送完一个字节数据后,在第9个时钟位上从器 件输出高电平为非应答信号。非应答信号的产生 有两种情况。 • 当从器件正在进行其他处理而无法接收总线上的 数据时,从器件不产生应答,此时从器件释放总 线,将数据线置为高电平。这样,主器件可产生 一个停止信号来终止总线数据传输。 • 当主器件接收来自从器件的数据时,接收到最后 一个数据字节后,必须给从器件发送一个非应答 信号,使从器件释放数据总线。这样,主器件才 可以发送停止信号,从而终止数据传送。
28.3 51单片机读写EEPROM
• I2C总线接口器件以体积小、接口简单、读写操作 方便等优点,使其在单片机系统中有着广泛的应 用。目前常用于存储系统必要的参数,如密码、 启动代码、设备标识等。例如,计算机主板中的 BIOS就使用的是一个带有I2C总线的EEPROM,其中 保存了系统得重要信息和系统参数的设置程序。 • 目前USB接口及其设备越来越被广泛使用,大有取 代其他老式接口的趋势。然而,如何区分计算机 上连接的众多USB外围设备呢?其实绝大部分的 USB接口芯片都通过上电读一个带有I2C总线的串 行EEPROM,来载入该设备的ID(包括Vendor ID、 Product ID和Device ID),根据这些ID来区分各 个USB设备,并加载相应的驱动程序。
28.1.2 I2C总线的电气结构和负载能力
• I2C总线的SCL和SDA端口输出为漏极开路,因此使用时上必 须连接上拉电阻。不同型号的器件对上拉电阻的要求不同, 可参考具体器件的数据手册。上拉电阻的大小与电源电压、 传输速率等有关系。 • I2C总线的传输速率可以支持100kHz和400kHz两种,对于 100kHz的速率一般采用10KΩ的上拉电阻,对于400kHz的速 率一般采用2KΩ的上拉电阻。 • I2C总线上的外围扩展器件都是属于电压型负载的CMOS器件, 因此总线上的器件数量不是由电流负载能力决定,而是由 电容负载能力确定。I2C总线上每一个节点器件的接口都有 一定的等效电容,这会造成信号传输的延迟。通常I2C总线 的负载能力为400pF(通过驱动扩展可达4000pF),据此可 计算出总线长度及连接器件的数量。
28.2.1 起始信号
• • • • • • • • • • • 起始信号用于开始I2C总线通信。在时钟线SCL为高电平期间,数 据线SDA上出现由高电平向低电平变化的下降沿时,被认为是起始 信号。起始信号出现以后,才可以进行寻址或数据传输等。 如果采用汇编语言进行程序设计,则其程序示例如下: START: SETB P1.1 ; P1.1=1,SDA=1 SETB P1.0 ; P1.0=1,SCL=1 NOP ;延时 NOP CLR P1.1 ; P1.1=0,SDA=0 NOP NOP CLR P1.0 ; P1.0=0 , SCL=0 RET
第28章 51系列单片机读写I2C总线
• I2C总线是Philips公司推出的一种双向二线制总线,全称为 芯片间总线(Inter Integrate Circuit BUS)。其在芯片 间使用两根连线实现全双工同步数据传送,一条数据线 (SDA)和一条串行时钟线(SCL),可以很方便地构成外 围器件扩展系统。 • I2C总线是很简单方便的芯片间串行扩展总线。使用I2C总线 可以直接和具有I2C总线接口的单片机通信,也可以和各种 类型的外围器件进行通信,如存储器、A/D、D/A、键盘、 LCD等。目前Philips、Atmel、Maxim以及其他集成电路制 造商推出了很多基于I2C总线的单片机和外围器件,如24系 列E2PROM、串行实时时钟芯片DS1302、USB2.0芯片 CY7C68013A等。 • 本章主要介绍了I2C总线的工作原理、结构以及寻址方式, 并重点介绍了数据传输协议以及程序实现。这些程序均以 子程序的形式提供,便于读者调用。最后通过具体的实例, 介绍如何使用单片机读写具有I2C总线接口的E2PROM。
28.2.7 写数据
• I2C总线协议规定了完整的数据传送格式。按照协 议规定,数据传输的开始以主器件发出起始信号 为准,然后发送寻址字节。寻址字节共8位,高7 位是被寻址的从器件地址,最低一位是方向位, 方向位表示主器件与从器件之间的数据传送方向, 方向位为“0”时表示主器件向从器件发送数据 (写)。在寻址字节后是将要传送的数据字节与 应答位,数据可以多字节连续发送。在数据传送 完毕后,主器件必须发送终止信号已释放总线控 制权。如果主器件希望继续占用总线,则可以不 产生终止信号,马上再次发送起始信号,并对另 一从器件进行寻址,便可进行新的数据传送。
28.2.2 终止信号
• 终止信号用于终止I2C总线通信。在时钟线SCL为高电平期间,数 据线SDA上出现由低电平到高电平变化的上升沿时,被认为是终止 信号。终止信号一出现,所有总线操作都结束,主从器件释放总 线控制权。 如果采用汇编语言进行程序设计,则其程序示例如下: STOP: CLR P1.1 ; P1.1=0,SDA=0 SETB P1.0 ; P1.0=1,SCL=1 NOP NOP SETB P1.1 ; P1.1=1,SDA=1 NOP NOP CLR P1.0 ; P1.0=0,SCL=0 RET
28.3.1 串行EEPROM存储器简介
• 串行EEPROM存储器是一种采用串行总线的存储器,这类存储器具有体积小、 功耗低、允许工作电压范围宽等特点。目前,单片机系统中使用较多的 EEPROM芯片是24系列串行EEPROM。其具有型号多、容量大、支持I2C总线协 议、占用单片机I/O端口少,芯片扩展方便、读写简单等优点。 目前,Atmel、MicroChip、National等公司均提供各种型号的I2C总线接口 的串行EEPROM存储器。下面以Atmel公司的产品为例进行介绍。 AT24C01/02/04/08系列是Atmel公司典型的I2C串行总线的EEPROM。这里以 AT24C08为例介绍。AT24C08具有1024×8位的存储容量,工作于从器件模 式,可重复擦写100万次,数据可以掉电保存100年。8引脚DIP封装的 AT24C08的封装结构,如图所示。
28.1.3 I2C总线器件的寻址方式
• I2C总线上的所有器件连接在一个公共的总线上,因此,主 器件在进行数据传输前选择需要通信的从器件,即进行总 线寻址。 • I2C总线上所有外围器件都需要有惟一的地址,由器件地址 和引脚地址两部分组成,共7位。器件地址是I2C器件固有的 地址编码,器件出厂时就已经给定,不可更改。引脚地址 是由I2C总线外围器件的地址引脚(A2,A1,A0)决定,根 据其在电路中接电源正极、接地或悬空的不同,形成不同 的地址代码。引脚地址数也决定了同一种器件可接入总线 的最大数目。 • 地址位与一个方向位共同构成I2C总线器件寻址字节。寻址 字节的格式如表所示。方向位(R/)规定了总线上的主器 件与外围器件(从器件)的数据传输送方向。当方向位 R/=1,表示主器件读取从器件中的数据;R/=0,表示主器 件向从器件发送数据。
相关文档
最新文档