51单片机PCF8951芯片的A/D和D/A

pcf8951

原理图

在这里插入图片描述

在一个完整的单片机系统中, A/D 转换芯片往往是必不可少的。在与 CPU 的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 PCF8591 是具有 I2C 总线接口的 8 位 A/D 及 D/A 转
换器,有 4 路 A/D 转换输入, 1 路 D/A 模拟输出。
PCF8591 采用典型的 I2C 总线接口器件寻址方法,即总线地址由器件地址、引脚地址和方向
位组成。飞利浦公司规定 A/D 器件地址为 1001。引脚地址为 A2、 A1、 A0,其值由用户选择,因
此 I2C 系统中最多可接 8 个具有 I2C 总线接口的 A/D 器件。地址的最后一位为方向位 R/W,当主
控器对 A/D 器件进行读操作时为 1,进行写操作时为 0。总线操作时,由器件地址、引脚地址和
方向位组成的从地址为主控器发送的第一字节。
控制字节用于实现器件的各种功能,如模拟信号由哪几个通道输入等。控制字节存放在控制
寄存器中,总线操作时为主控器发送的第二字节。

D7D6D5D4D3D2D1D0
0xxx0xxx

D1和D0为AD通道编号

D1D0对应通道
00通道0
01通道1
10通道2
11通道3

D2 是自动增益选择(1 有效);
D5 和 D4 是模拟量输入选择: 00—四路单端输入、 01—三路差分输入、 10—两两单端与一路差分、 11—两路差分;
D6 是模拟输出允许(1 有效)。

代码

/*************************************************
函数功能:AD输入
*************************************************/
uchar Pca_Adin(uchar pca)
{
	uchar vlot;
	
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(0x40|pca);
	IIC_WaitAck();
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	vlot = IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	
	return vlot;
}
/*************************************************
函数功能:DA输出
*************************************************/
void Out_DAC(unsigned char Digital)
{
	IIC_Start();          //打开iic
	IIC_SendByte(0x90);器件寻址,方向上是写(写命令)
	IIC_WaitAck();       //等待应答
	IIC_SendByte(0x40);  //打开输出通道
	IIC_WaitAck();       //等待应答
	IIC_SendByte(Digital);//输出值255 = 5v;
	IIC_WaitAck();
	IIC_Stop();
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值