我用MSP430的DAC输出一个锯齿波电压,然后用ADC进行单通道多次采样,可是这两部分进行初始化的时候都会对ADC12CTL0进行设置,会不会互有影响,下面是部分程序。
#include <msp430x16x.h>
#include "Config.h" //开发板配置头文件,主要配置IO端口信息
#include <stdio.h>
uint TEMP=0; //ADC值暂存变量
uchar count=0;
//***********************************************************************
// DAC初始化
//***********************************************************************
void DAC12_Init(void)
{
DAC12_0CTL |= DAC12CALON; //启动校验DAC
while((DAC12_0CTL & DAC12CALON) != 0){_NOP();}//等待校验完成
ADC12CTL0 = REFON + REF2_5V; // 参考电压为内部2.5v
DAC12_0CTL = DAC12AMP_5 + DAC12IR + DAC12LSEL_0;//控制寄存器设置,自动更新数据,内基准为满量程
DAC12_0CTL |= DAC12SREF_0;
DAC12_0CTL |= DAC12ENC; // 启动DAC模块(DAC12LSEL_0时此句可以省,这里设置为1)
DAC12_0DAT = 0x0000; //DAC初值为0,更新这个寄存器就可以更改DAC输出数据
}
//*************************************************************************
// ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
void ADC_Init()
{
P6SEL|=0x01; //选择ADC通道
ADC12CTL0|= ADC12ON+ MSC + SHT0_2 + REF2_5V + REFON; //ADC电源控制开,16个CLK,内部基准2.5V
ADC12CTL1|= SHP + CONSEQ_2 + ADC12SSEL1 + ADC12SSEL0; //SMCLK做时钟源
ADC12MCTL0= SREF0 + INCH_0; //参考控制位及通道选择,这里选择通道0
ADC12IE|= 0x01; //中断允许
ADC12CTL0|= ENC; //使能转换器
}
//*************************************************************************
// ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{uchar buf[10];
uchar j;
uint result[10];
result[count]=ADC12MEM0; //读取ADC转换值,存入暂存区
count++;
while(count>10)
{
count=0;
for(j=0;j<10;j++)
{
TEMP+=result[j]; //求和,10次转换的结果相加
}
TEMP=TEMP/10; //求平均值
//读取ADC转换值
sprintf((char*)buf,"%d\r\n",TEMP);
Print_Str(buf);
}
}
//*************************************************************************
// 主程序
//*************************************************************************
void main(void)
{ uchar buf[10];
uint i;
WDT_Init(); //看门狗初始化
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
ADC_Init();
DAC12_Init(); //初始化DAC12 //初始化ADC配置
_EINT(); //使能中断
ADC12CTL0 |= ADC12SC; //开启转换
while(1)
{
for(i=300;i<1930;i=i+5) //连续转换,输出电压从小到大
{
// P5OUT &= ~BIT4; //DAC片选信号置低
DAC12_0DAT = i; //数据写入寄存器,写入激活DAC转换
delay_ms(5);//验证是否是阶梯型
}
}