|
void Timer2_ISR() interrupt 5
{
static state=0;
TF2=0;
switch(state)
{
case 0:
DA0=1;
DA1=0;
state++;
break;
case 1:
DA0=0;
DA1=0;
state++;
break;
case 2:
DA0=0;
DA1=1;
state++;
break;
case 3:
DA0=0;
DA1=0;
state=0;
DataPos++;
break;
default:break;
}
/*****************************/
if(DataPos>=PREWAIT)
{
AD0INT=0;
AD0BUSY=1;
while(!AD0INT);
switch(state)
{
case 0:
DC_RED=DC_RED+ADC0H;
AMX0SL=0x03; //Next channel=SignalRed
break;
case 1:
SampleRed[DataPos-PREWAIT]=ADC0H;
if(ADC0H>RED_MAX)
RED_MAX=ADC0H;
if(ADC0H<RED_MIN)
RED_MIN=ADC0H;
AMX0SL=0x01; //Next channel=DC_IRED
break;
case 2:
DC_IRED=DC_IRED+ADC0H;
AMX0SL=0x04; //Next channel=SignalIRed
break;
case 3:
SampleIRed[DataPos-PREWAIT]=ADC0H;
if(ADC0H>IRED_MAX)
IRED_MAX=ADC0H;
if(ADC0H<IRED_MIN)
IRED_MIN=ADC0H;
AMX0SL=0x00; //Next channel=DC_RED
break;
default:break;
}
}
/*****************************/
if(DataPos>=SAMPLESIZE+PREWAIT)
{
DC_RED/=SAMPLESIZE;
DC_IRED/=SAMPLESIZE;
TR2=0;
}
} |
|