**决战2021年单片机蓝桥杯笔记(1)**IIC PCF8591 AT24C02

这篇博客介绍了在蓝桥杯单片机竞赛中,如何使用I2C通信协议与PCF8591数模转换器和AT24C02存储器进行交互。通过初始化函数和数据读写函数的详细代码展示,阐述了逐次逼近型ADC PCF8591的转换速率与I2C速度的关系,以及AT24C02的存储地址操作。
摘要由CSDN通过智能技术生成

**决战2021年单片机蓝桥杯笔记(1)**IIC PCF8591 AT24C02
I2C作为一种多用于板内同步串行通信方式,有一根SCL时钟线负责收发双方的时钟节拍,和一根SDA数据线负责传输数据,I2C时序的程序编写网上的资料是很丰富的了,作为蓝桥杯比赛为重点我就不展开说,在蓝桥杯官方单片机数据资源包里面有I2C底层驱动代码的参考历程,可以直接调用分为以下六个函数
void IIC_Start(void);
void IIC_Stop(void);
bit IIC_WaitAck(void);
void IIC_SendAck(bit ackbit);
void IIC_SendByte(unsigned char byt);
unsigned char IIC_RecByte(void);
在国信长天单片机板载的资源中我们主要用到PCF8591数模转换器和AT24C02需要用到I2C的通信协议来实现相应功能。
PCF8591的ADC是逐次逼近型的(微妙级别)转换速率属于中速,比积分型的ADC转换时间要快(毫秒级别),但是慢于并行/串行的ADC(纳秒级),但是I2C的速度有限,所以PCF8591的转换速度瓶颈就在于I2C的速度,PCF8591涉及的原理知识:
在这里插入图片描述
以下是两个对PCF8591函数的编写
//pcf8591的初始化
void init_pcf8591()
{
IIC_Start();
IIC_SendByte(0x90); //mcu写入 器件地址
IIC_WaitAck();
IIC_SendByte(0x03); //写入控制字节 电位器Rb2接到AIN1,通道1;控制寄存器应写入:0x01。
//光敏传感器接到AIN3,通道3;控制寄存器应写入:0x03。
IIC_WaitAck;
IIC_Stop();
}

//从PCF8591上读取数据
unsigned char read_pcf8591()
{
unsigned char datas;
IIC_Start();
IIC_SendByte(0x91); //读取电压值 1是读取
IIC_WaitAck();
datas=IIC_RecByte();
IIC_WaitAck();
IIC_Stop();
return datas;
}
AT24C02一共256个字节的存储空间,储存地址从0x00到0xFF,因此在使用IIC通信协议的时候就会涉及到器件的地址与数据储存地址两次MCU发送写入的地址消息后才开始传输数据,AT24C02涉及的原理知识:
在这里插入图片描述
以下是两个对AT24C02函数的编写:
//24c02的初始化
void wirte_at24c02(unsigned char addr,unsigned char dat)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(addr);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}

unsigned char Read_24C02(unsigned char addr)
{
unsigned char tmp;
//进行一个伪写操作
IIC_Start(); //IIC总线起始信号
IIC_SendByte(0xa0); //24C02写设备地址
IIC_WaitAck(); //等待从机应答
IIC_SendByte(addr); //内存自己地址
IIC_WaitAck(); //等待从机应答
//进行字节读操作
IIC_Start(); //IIC总线起始信号
IIC_SendByte(0xa1); //24C02读设备地址
IIC_WaitAck(); //等待从机应答
tmp = IIC_RecByte(); //读取目标数据
IIC_WaitAck(); //等待从机应答
IIC_Stop(); //IIC总线停止信号
return tmp;
}
参考网址资料链接:https://www.pianshen.com/article/8509208326/
https://www.pianshen.com/article/8509208326/

好了今天的笔记就更新到这里啦,大家下期见88

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值