• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

数字音量控制器TDA7449

各位有没用过TDA7449这款IC?此IC是I2C控制方式的.由于本人初用此款IC出现以下问题:发送数据后其SDA没回应答信号.不知是什么问题,请有用过的多多交流下!!多谢!!!附近件有源程序
//以下是TDA7449D——I2C程序
#include
#include
#include "ls.h"
unchar bit_flag;
//=======以下是启动I2C===============   
void I2C_start(void)
     {
SDA_3H;
delay_nus(5);
SCL_3H;
delay_nus(5);
SDA_3L;
delay_nus(5);
SCL_3L;
}

//=======以下是停止I2C===============   
void I2C_stop(void)
     {
SDA_3L;
delay_nus(5);
SCL_3H;
delay_nus(5);
SDA_3H;
delay_nus(5);
SCL_3L;

}
//=======向I2C写数据后 读I2C回应0为OK  1为错误要重写===============   
void I2C_ACK(void)
     {
DDRB&=0xFB;//设PB2为输入
PORTB|=0x4;//设PB2为上拉
delay_nus(5);
SCL_3H;
delay_nus(5);
bit_flag=0;//清标志
if(PINB&0x4) bit_flag=1;
// yu:goto yu;
DDRB|=0x4;//设PB2为输出
//PORTB&=0xFB;//设PB2输出为0
delay_nus(5);
SCL_3L;
}
//=======向I2C读数据后向I2C回应0为正确===============
void i2c_mack (void)
{
//SDA_1L;
//SDA_2L;
SDA_3L;
asm("nop");
//SCL_1H;
//SCL_2H;
SCL_3H;
asm("nop");
//SCL_1L;
//SCL_2L;
SCL_3L;
}
//=======向I2C读数据后向I2C回应0为错误===============
void i2c_mnack (void)
{
//SDA_1H;
//SDA_2H;
SDA_3H;
asm("nop");
//SCL_1H;
//SCL_2H;
//SCL_3H;
asm("nop");
//SCL_1L;
//SCL_2L;
SCL_3L;
}
//===================向I2C写8位数据==================
void I2C_wrbyt(unchar byte_data)
     {
      unchar i;
      for(i=0;i<8;i++)
         {
           if(byte_data&0x80)
              {        
  SDA_3H;
              delay_nus(5);               
  SCL_3H;
  delay_nus(5);               
  SCL_3L;
              delay_nus(5);
              }
          else
              {              
  SDA_3L;
              delay_nus(5);            
  SCL_3H;
              delay_nus(5);              
  SCL_3L;
              delay_nus(5);
              }
           byte_data<<=1;
           delay_nus(5);
         }
}

//==================向I2C写数据=======================

void wr_nbyte(unchar COMMAN,unchar DATA)//写音量指令
       {            //数据             指令
  
cl:I2C_start();//启动I2C
   I2C_wrbyt(0x88);//写入芯片地址
   I2C_ACK();
   if(bit_flag!=0)goto cl;
   I2C_wrbyt(COMMAN);//指令输入选择
   I2C_ACK();
   if(bit_flag!=0)goto cl;
   I2C_wrbyt(DATA);
   I2C_ACK();
   if(bit_flag!=0)goto cl;
   I2C_stop();//结束I2C
   //================
     }
全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法