?? ad04.c
字號(hào):
#include <C:\Documents and Settings\Administrator.MIRACLE-YKRBYQB\桌面\RTU\rtu.h>
extern unsigned char index;
extern unsigned int max,min;
extern unsigned long Liangcheng;
extern unsigned int OUTCH0,OUTCH1,OUTCH2,OUTCH3;
unsigned int A0results[Num_of_Results];
unsigned int A1results[Num_of_Results];
unsigned int A2results[Num_of_Results];
unsigned int A3results[Num_of_Results];
extern unsigned char i;
extern void StartADC(void);
/******************************************
***功能:啟動(dòng)一次轉(zhuǎn)換 ***
***入口:通道CHinx (0,1,2,4) ***
***出口:無(wú) ***
******************************************/
void StartADC(void )
{
long sum;
unsigned int i = 0;
unsigned char j;
unsigned long temp;
ADC12CTL0 &= ~ ENC;
ADC12CTL0 = ADC12ON+MSC+SHT0_2+REFON+REF2_5V; // Turn on ADC12, extend sampling time
ADC12CTL1 = SHP+CONSEQ_1; // Use sampling timer, repeated sequence
ADC12MCTL0 = SREF_1+INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = SREF_1+INCH_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = SREF_1+INCH_2; // ref+=AVcc, channel = A2
ADC12MCTL3 = SREF_1+INCH_3+EOS; // ref+=AVcc, channel = A3
for ( i=0; i<0x3600; i++);//for ( i=0; i<0x3600; i++);
ADC12IE = 0x08;
ADC12CTL0 |= ENC; // Enable conversions
i=0;
_EINT();
do{
ADC12CTL0 |= ADC12SC;
for ( j=0; j<20; j++);
i++;
}while(i<10);
ADC12CTL0 = 0;
sum = 0;max=0;min=4096;
for(i=0;i<8;i++) {
if(A0results[i]>max)max=A0results[i];//找出最大值
if(A0results[i]<min)min=A0results[i];//找出最小值
}
for(i=0;i<8;i++) sum += A0results[i];//求和
sum = sum - max - min;//減去一個(gè)最大值和最小值
OUTCH0 = OUTCH0_offset+(Liangcheng*(sum/6))/4095;//計(jì)算水位=量程X采樣平均值/2的12次方
sum = 0;max=0;min=4096;
for(i=0;i<8;i++) {
if(A1results[i]>max)max=A1results[i];
if(A1results[i]<min)min=A1results[i];
}
for(i=0;i<8;i++) sum += A1results[i];
sum = sum - max - min;
temp=sum/6;
if(temp<=0x333) temp=0x333;
if(temp>=4095) temp=4095;
temp=temp-0x333;
temp=Liangcheng*temp;
OUTCH1 = OUTCH1_offset+temp/(4095-0x333);
sum = 0;max=0;min=4096;
for(i=0;i<8;i++) {
if(A2results[i]>max)max=A2results[i];
if(A2results[i]<min)min=A2results[i];
}
for(i=0;i<8;i++) sum += A2results[i];
sum = sum - max - min;
OUTCH2 = OUTCH2_offset+(Liangcheng*(sum/6))/4095;
sum = 0;max=0;min=4096;
for(i=0;i<8;i++) {
if(A3results[i]>max)max=A3results[i];
if(A3results[i]<min)min=A3results[i];
}
for(i=0;i<8;i++) sum += A3results[i];
sum = sum - max - min;
OUTCH3 = OUTCH3_offset+(Liangcheng*(sum/6))/4095;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
A0results[index] = ADC12MEM0; // Move results, IFG is cleared
A1results[index] = ADC12MEM1; // Move results, IFG is cleared
A2results[index] = ADC12MEM2; // Move results, IFG is cleared
A3results[index] = ADC12MEM3; // Move results, IFG is cleared
index = (index+1)%Num_of_Results;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -