现在想实现的是先用DAC12的P6.6口输出数字模拟电压,再用ADC12的P6.0口采样并用1602液晶显示,程序如何用C语言写出来,while(1)里应该怎么写?
单片机是430f1611
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
现在想实现的是先用DAC12的P6.6口输出数字模拟电压,再用ADC12的P6.0口采样并用1602液晶显示,程序如何用C语言写出来,while(1)里应该怎么写?
单片机是430f1611
ADC的代码见附件,DAC就比较简单了,当然端口需要改一下。
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
ADC12CTL0 = REF2_5V + REFON; // Internal 2.5V ref on
DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // Internal ref gain 1
DAC12_0DAT = 0x0666; // 1V
}
在DAC12_0DAT里设置需要转换的电压值,硬件上把两个端口连起来。初始化完进LPM模式,ADC转换完成后会产生中断,可以在中断里把ADC采样值显示在液晶屏上。当然这个方法就比较多样了。
void ADC_init(void)
{
P6SEL |= 0x01;
ADC12CTL0=REF2_5V+REFON;
ADC12CTL0 &= ~ENC;
ADC12CTL0|=ADC12ON+SHT0_2+MSC;
ADC12CTL1=SHP+CONSEQ_2;
ADC12IE=0x01;
ADC12CTL0 |= ENC;
}
void DAC_init(void)
{
ADC12CTL0|=REF2_5V+REFON;
DAC12_0CTL=DAC12IR+DAC12AMP_5+DAC12ENC+DAC12LSEL_1;
DAC12_0CTL |= DAC12CALON;
while(DAC12_0CTL & DAC12CALON==DAC12CALON);
}
后来我问了别人,发现是ADC12与DAC12的初始化有问题,上面是更正过后的代码,标颜色的地方是问题所在