最近做东西用到这个芯片,它是基于I2C总线的AD/DA转换芯片,使用起来很方便,写好子程序后方便以后调用,现将子程序分享给大家哦.
/*******************************************************************
DAC 变换, 转化函数
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送控制字节
if(ack==0)return(0);
SendByte(Val); //发送DAC的数值
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC发送字节[命令]数据函数
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC读字节数据函数
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)return(0);
c=RcvByte(); //读取数据0
Ack_I2c(1); //发送非就答位
Stop_I2c(); //结束总线
return(c);
}
DACconversion(PCF8591,0x40,DATA
ISendByte(PCF8591,0x41);
ADdata=IRcvByte(PCF8591); //ADC0 模数转换
PCF8591是根据I2C确定的地址0x90,我在主文件宏定义了,所以这么用.0x40,0x41是控制字,使用的时候配合I2C直接调用子程序即可.
iwxg
wxg1988 2012-3-6 16:36
用户420101 2012-3-1 18:04