求助:PT8211-16位音频DA编程疑问

2020-01-25 15:12发布


小弟刚学51单片机,蛋痛地从老式VCD上拆下一块PT8211来玩。找到对应文档,貌似很容易驱动的样子,于是有了下面的程序。
为了调试方便,驱动函数只操作高8位,低8位置0。
问题来了:
输入127的时候得到约3.682V最高电压,
输入128时得到最低电压1.241V,
输入0时得到约2.470V,
输入255时得到2.460V.
VCC为4.92V.

按我的理解应该是输入0时,输出电压最小且为0V,输入255时输出电压最大且等于VCC.为什么会出现我的这种情况呢?是我的函数错误还是我理解文档错误,又或者这类音频双DA就是这样设计的呢?
求高人指点一二,拜谢!附上我的函数和找到的说明档.

#include <reg52.h>
//#include "Time.h"
//#include <intrins.h>
//#define NOP _nop_();_nop_();_nop_();_nop_();_nop_()
sbit BCK=P3^6;
sbit WS=P3^5;
sbit DIN=P3^4;
/*双16位D/A芯片,这里当8位用*/
void PT8211_Write(unsigned char R_dat,L_dat)
{
    unsigned char i=0;
        WS=0;                                                  //右声道输入
        for(i=0;i<8;i++)
    {
                BCK=0;
            if(R_dat&0x80)                          //比较高位,是1送1,是0送0
                {
                        DIN=1;
                }
                else
                {
                    DIN=0;
                }
                R_dat=R_dat<<1;
                BCK=1;                                           //BCK上升沿送入数据
        }
        for(i=0;i<8;i++){BCK=0;DIN=0;BCK=1;}          //低8位全置零

        WS=1;                                                  //左声道输入

        for(i=0;i<8;i++)
    {
                BCK=0;
            if(L_dat&0x80)                           //if((L_dat>>7)&0x01)
                {
                        DIN=1;
                }
                else
                {
                    DIN=0;
                }
                L_dat=L_dat<<1;
                BCK=1;
        }
           for(i=0;i<8;i++){BCK=0;DIN=0;BCK=1;}                 //低8位全置零
}





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。