一,蓝桥杯板子上有关iic的外设
挂在iic总线上的外设主要是e2prom-24C02和可编程逻辑电阻MSP4017。有关iic的基本原理个人感觉就是两根总线一条传数据即SDA和时钟线SCL。有关iic的相关文件官方有提供。
二,24C02芯片
1.写操作(时序图和参考代码)
void iic_24c02_write(unsigned char *pucbuff,unsigned char ucAddr,unsigned char ucNum)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(ucAddr);
I2CWaitAck();
while(ucNum--)
{
I2CSendByte(*pucbuff++);
I2CWaitAck();
}
I2CStop();
delay1(500);
}
2.读操作(时序图和源码)
void iic_24c02_read(unsigned char *pucbuff,unsigned char ucAddr,unsigned char ucNum)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(ucAddr);
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
while(ucNum--)
{
*pucbuff++ = I2CReceiveByte();
if(ucNum)
I2CSendAck();
else
I2CSendNotAck();
}
I2CStop();
}
3.有关设备地址的值计算
由原理图可以知道,a2,a1,a0都接地了,所以都为零,所以读地址为a1,写地址为a0。
三,MSP4017可编程逻辑电阻
1,原理
电阻的阻值和输入的N值是成正相关的,可调节的最大阻值是100k,结合N的取值范围,倍数关系是0.78740。下图是设备地址的计算方法。
2,写操作
void Write_register(unsigned char value)
{
I2CStart();
I2CSendByte(0x5E);
I2CWaitAck();
I2CSendByte(value);
I2CWaitAck();
I2CStop();
}
3,读操作
unsigned char Read_register(void)
{
unsigned char value;
I2CStart();
I2CSendByte(0x5f);
I2CWaitAck();
value=I2CReceiveByte();
I2CSendNotAck();
I2CStop();
return value;
}
4,与3.3伏电压之间的转换
3.3*((0.7874*RES_4017)/(0.7874*RES_4017+10))
为什么加10,因为涉及到和10k电阻的分压。