📄 ad_a.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 + -