关于MSP430F169的DAC12使用问题

在使用MSP430F169 DAC12的时候发现一个问题,在向DAC12_0DAT或DAC12_1DAT写入数据后,单步运行时能输出预设电压,但是程序整体运行后,输出电压就降为0。DAC12输出后跟了一个电压跟随器的。有人碰到过这个问题吗?怎么解决的?谢谢!

2 个回复

  • 请您试试看看是不是哪里需要增加延时, 单步调试可能给了足够时间;另外建议您在线调试时,设置断点, 一步步查

    If a post answers your question, please mark it with the "verify answer" button.

    若是回复解决了您的问题,请点击“是”确认答案。谢谢!

  • 回复 Susan Yang:

    应该不是延时的问题。下面是源码。到While(1);此处的断点停止时有输出;如果这里没有设置断点,一直运行就没有。当暂停程序运行时又有输出。

    涉及DAC的源码:
    void init_DAC(void)
    {
    ADC12CTL0 = REF2_5V + REFON; //开启内部参考源 2.5v 必须有;以供DA使用

    DAC12_0CTL = DAC12SREF_2 + DAC12IR;
    DAC12_0CTL |= DAC12LSEL_1 + DAC12AMP_7;

    DAC12_0CTL |= DAC12CALON; // 启动校验
    while((DAC12_0CTL & DAC12CALON) != 0); // 等待效验完成
    DAC12_0CTL |= DAC12ENC;

    DAC12_1CTL = DAC12SREF_2 + DAC12IR;
    DAC12_1CTL |= DAC12LSEL_1 + DAC12AMP_7;
    DAC12_1CTL |= DAC12ENC;

    DAC12_1CTL |= DAC12CALON; // 启动校验
    while((DAC12_1CTL & DAC12CALON) != 0); // 等待效验完成
    }


    //----------------------------------------------------------------
    //-- Initiate DAC12 ----------------------------------------------
    //----------------------------------------------------------------
    void DAC_output(unsigned char index, unsigned int dac_val)
    {
    switch(index)
    {
    case 0:
    DAC12_0DAT = dac_val;
    break;
    case 1:
    DAC12_1DAT = dac_val;
    break;
    default:
    break;
    }
    }

    void main(void)
    {
    init_DAC();
    DAC_output(0, 0x0788);
    DAC_output(1, 0x0B9A);
    while(1);
    }