一般来说IIC器件的内部寄存器地址都是8位的,这样在进行读写操作时,发送完器件地址之后直接发送一个字节的寄存器地址,然后即可以进行读写。但是有的器件内部寄存器是按照16位地址编排的,例如一些EEPROM器件,由于存储的数据量较大就会需要较大的寻址空间,对于这种的器件的内部寄存器寻址就需要多个字节的地址,也就是在发送完器件地址之后需要发送多个寄存器地址字节,具体实现如下程序所示:

u8 IIC_Read2(u8 device,u16 addr)
{
	u8 temp;
	IIC_Start();
	IIC_SendByte(device);
	IIC_Wait_Ack();
	IIC_SendByte((u8)(addr >> 8));
	IIC_Wait_Ack();
	IIC_SendByte((u8)addr);
	IIC_Wait_Ack();
	IIC_Start();
	IIC_SendByte(device+1);
	IIC_Wait_Ack();
	temp = IIC_ReadByte();
	IIC_NAck();//发送nACK
	IIC_Stop();
	return temp;
}
通过程序可以看到发送完器件地址device之后先后发送了寄存器地址的高字节和低字节,然后再进行读取。