- 44
- 0
- 约7.21千字
- 约 21页
- 2021-05-22 发布于北京
- 举报
第19讲 AD和DA PCF8591简介 芯片介绍 模块原理图 PCF8591的器件地址 PCF8591的控制寄存器 I2C总线的数据传送 起始信号 终止信号 字节传送与应答 PCF8591的写入 第一个字节是器件地址和读写控制 第二个字节被存到控制寄存器,用于控制器件功能。 第三个字节被存储到DAC数据寄存器,并使用片上D/A转换器转换成对应的模拟电压。(所以不输入D/A时,可以不用输入。) PCF8591发送一个字节的程序 /************************************************************ * 函数名 : Pcf8591_SendByte * 函数功能 : 写入一个控制命令 * 输入 : addr(器件地址),channel(转换通道) * 输出 : 无 ************************************************************/ bit PCF8591_SendByte(unsigned char addr,unsigned char channel) { Start_I2c(); //启动总线 I2C_SendByte(addr); //发送器件地址 if(ack==0)return(0); I2C_SendByte(0x40|channel); //发送控制字节 if(ack==0)return(0); Stop_I2c(); //结束总线 return(1); } PCF8591的读取 PCF8591读取一个字节的程序 /************************************************************ * 函数名 : PCF8591_RcvByte * 函数功能 : 读取一个转换值 * 输入 : * 输出 : dat ************************************************************/ unsigned char PCF8591_RcvByte(unsigned char addr) { unsigned char dat; Start_I2c(); //启动总线 I2C_SendByte(addr+1); //发送器件地址 if(ack==0)return(0); dat=I2C_RcvByte(); //读取数据 Ack_I2c(1); //发送非应答信号 Stop_I2c(); //结束总线 return(dat); } PCF8591发送一次转换的程序 /************************************************************ * 函数名 : Pcf8591_DaConversion * 函数功能 : PCF8591的输出端输出模拟量 * 输入 : addr(器件地址),channel(转换通道),value(转换的数值) * 输出 : 无 ******************* *****************************************/ bit Pcf8591_DaConversion(unsigned char addr,unsigned char channel, unsigned char Val) { Start_I2c(); //启动总线 I2C_SendByte(addr); //发送器件地址 if(ack==0)return(0); I2C_SendByte(0x40|channel); //发送控制字节 if(ack==0)return(0); I2C_SendByte(Val); //发送DAC的数值 if(ack==0)return(0); Stop_I2c(); //结束总线 return(1); } * * PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取
原创力文档

文档评论(0)