用AD12实现两路转化的核心程序

来源:互联网 发布:电棍在淘宝怎么搜 编辑:程序博客网 时间:2024/06/05 19:16

//*************************************************************************
// ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
void ADC_Init()
{
  P6SEL|=BIT0+BIT1; //选择ADC通道,设置对应IO口的功能模式
 
  ADC12CTL0&=~ENC;//清除标志位
 
  ADC12CTL0|= ADC12ON + SHT0_2 + REF2_5V + REFON+MSC; //ADC电源控制开,16个CLK,内部基准2.5V
  ADC12CTL1=SHP+CONSEQ_1+CSTARTADD_0;            //SMCLK做时钟源
 
  ADC12MCTL0= SREF_1 + INCH_0;
  ADC12MCTL1=INCH_1+SREF_1+EOS;//参考控制位及通道选择
  ADC12IE|= 0x03;                                 //中断允许
  ADC12CTL0|= ENC;                                //使能转换器
}

//*************************************************************************
// ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  uchar j;
  while((ADC12CTL0&0x01)==1);           //如果ADC忙,则等待,否则读取ADC转换数值
  Flag = 1 ;
  ADresult0=ADC12MEM0;//转换结果寄存器给ADresult0
  volttem0=((long)ADresult0*250)/4095;//计算实际电压
  ADresult1=ADC12MEM1;
  volttem1=((long)ADresult1*250)/4095;
  volt0=volttem0;
  volt1=volttem1;
 
 
  Data_do(volt0);                        //处理ADC值,用于显示
  for(j=0;j<50;j++)
  {
    Display(A1,A2,A3,A4);               //显示ADC的数据
  }
  delay_ms(1000);
  Data_do(volt1);                        //处理ADC值,用于显示
  for(j=0;j<50;j++)
  {
    Display(A1,A2,A3,A4);               //显示ADC的数据
  }delay_ms(1000);
}

//***********************************************************************
//            主程序
//***********************************************************************
void main(void)
{
  WDT_Init();                         //看门狗初始化
  Clock_Init();                       //时钟初始化
  Port_Init();                        //端口初始化,用于控制IO口输入或输出
  Close_LED();                        //LED数码管先关闭
  ADC_Init();                         //初始化ADC配置
  _EINT();                            //使能中断
  Flag=1;                             //标志位先置1
 
  while(1)
  {
    while(Flag==1)
    {
      ADC12CTL0 |= ADC12SC;           //开启转换
      ADC12CTL0 &= ~ADC12SC;          //清零
      Flag=0;                         //清零标志位
    }
  }