⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad_a.c

📁 仪器源码->基MSP430 OPEN/SHORT C代码,已成功用于工业自动控制 本仪器适应于各种邦定IC电路测试
💻 C
字号:
#include <msp430x13x.h>
#include "ad12_a.h"
#define max_val 1200  //(4096/2500)*900mV=1474.56  开路   750mV=1228.8
#define min_val 160  //(4096/2500)*250mV=409.6   短路     100mV=163.84

unsigned int ad_val[20];
unsigned char ad_count1;
unsigned int warp;
extern unsigned char open[] ;
extern unsigned char Short[] ;
unsigned char ad_count;
unsigned char check(unsigned char n);
extern void start_ad(void);
unsigned int max,min,ok;

unsigned int study[128];

unsigned long warp_bmp;    

unsigned int check_v[20];
int aaa;

void init_adc(void)
{
  ADC12CTL0&=~ENC;
  ADC12CTL0=ADC12ON;
  ADC12CTL0|=REFON;
  ADC12CTL0|=REF2_5V;
  ADC12CTL1=CONSEQ_0+SHP;
  
  ADC12MCTL0=SREF_1;
  ADC12IE=BIT0;
  ADC12CTL0|=ENC;
  ad_count1=0;
}

//|6SEL = 0x01                           P6SEL = 0x02            // 打开 AD 通道
//|不用设置CSTARTADD                       ADC12CTL1 |= CSTARTADD0  // 转换的首地址
//|ADC12MCTL1 = INCH_0(或不设置,缺省为0)  ADC12MCTL1 = INCH_1;     // 选择通道
//|while((ADC12IFG & BIT0)==0);            while((ADC12IFG & BIT1)==0); // 转换中
//|val = ADC12MEM0;                        val = ADC12MEM1;   

void init_adc_b(void)
{
  P6SEL=0XFF;
  ADC12CTL0&=~ENC;
  ADC12CTL0=ADC12ON;
  ADC12CTL0|=REFON;
  ADC12CTL0|=REF2_5V;
  ADC12CTL1=CONSEQ_0+SHP;
  
  ADC12CTL1 |= CSTARTADD0;    
  
  ADC12MCTL1=SREF_1;  
  ADC12MCTL1|=INCH_1;
  ADC12IE=BIT1+BIT0;
  ADC12CTL0|=ENC;
}


#pragma vector = ADC_VECTOR
__interrupt void adc(void)
{
  switch(ADC12IV)
  {
     case 0x02: break;
     case 0x04: break;
     case 0x06:
          ad_send.ad12=ADC12MEM0;

          ad_val[ad_count1]=ad_send.ad12;
          ad_count1++;
          if(ad_count1>=20)
          {
             int i;//,a;
             ad_count=1;
             ad_count1=0;  
             aaa=0;
             for(i=9;i<20;i++)
             {
               aaa=aaa+ad_val[i];
             }
             ad_send.ad12=aaa/11;
             aaa=10;
          } 
          else
          {
             ad_count=0;   
             start_ad();//起动AD转换
          }
          break;
     case 0x08:
          ad_send.ad12=ADC12MEM1;
          ad_count=1;
          break;          
     default: break;
  }
}


unsigned char check(unsigned char n)
{


   if(ad_send.ad12>max_val)//(4096/2500)*900mV=1474.56
   {
      return 2;  //开路
   }
   else if(ad_send.ad12<min_val)//(4096/2500)*250=409.6
   {
      return 1;
   }
   else
   {
      return 0;      
   }   
}

unsigned char checkb(unsigned char n)
{
    unsigned int max,min,ok;
    ok=study[n-1];
    max=ok+warp;
    min=warp;
     if(ok<=min)
        min=0;
     else        
        min=ok-warp;
    ok=ad_send.ad12;
    if(ok<=max && ok>=min)
    {
       for(ok=0;ok<40;ok++)
       {
          if(open[ok]==n) open[ok]=0;       
       }
       for(ok=0;ok<40;ok++)
       {
          if(Short[ok]==n) Short[ok]=0;       
       }             
    }
    else
    {//管脚电压不对(Pin power is wrong)
    
    return 1;
    
    }

    return 0;
}


void check_ad_val(void)
{
  
  unsigned char i;
  for(i=0;i<20;i++)
  {    
    start_ad();//起动AD转换
    while(ad_count==0); //等待数据采集完毕
    ad_count=0;//采集标志置零,为下一次采集作准备        
    check_v[i]=ad_send.ad12;  
  }  

    for(i=9;i<20;i++)
     {
        aaa=aaa+ad_val[i];
     }    
     ad_send.ad12=aaa/11;

}


unsigned int return_ad_val(void)
{
  

   return ad_send.ad12;
   
   
   
   
}



unsigned char check_128(unsigned char n)
{
//    unsigned int max,min,ok;

    
    ok=study[n-1];
    max=ok+warp_bmp;
    min=warp_bmp;
     if(ok<=min)
        min=0;
     else        
        min=ok-warp_bmp;
    ok=ad_send.ad12;
    if(ok<=max && ok>=min)
    {
        return 0;   
    }
    else
    {//管脚电压不对(Pin power is wrong)    
        return 1;    
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -