由STC12C5A50S2与NOKIA1100液晶屏构成的袖珍示波器
//if(BUF_Wps>=ADCBUFSIZE)BUF_Wps=0;
if(SampState==0)//预采数据
{
//if(ADC_Cnt ADC_Cnt++; //数据个数加1
BUF_Cnt++;
if(ADC_Cnt>=TrigPs)//触发位置
{
if(TrigEdge==0)//上升沿触发
SampState=1;
else //下降沿触发
SampState=2;
}
}
//------------------------上升沿状态为1-2-3,下降沿状态为2-1-3
else if(SampState==1)
{
if(ad<=TrigLevel)//低于触发电平
{
if(TrigEdge==0)//上升沿触发
SampState=2;
else //下降沿触发
SampState=3;
//if(ADC_Cnt ADC_Cnt++;//数据个数加1
BUF_Cnt++;
}
else//否则读取队列,ADC_Cnt,BUF_Cnt就不加了
{
BUF_Rps++;
if(BUF_Rps>=ADCBUFSIZE)BUF_Rps=0;
}
}
else if(SampState==2)
{
if(ad>TrigLevel)//高于触发电平
{
if(TrigEdge==0)//上升沿触发
SampState=3;
else //下降沿触发
SampState=1;
//if(ADC_Cnt ADC_Cnt++;//数据个数加1
BUF_Cnt++;
}
else//否则读取队列,ADC_Cnt,BUF_Cnt就不加了
{
BUF_Rps++;
if(BUF_Rps>=ADCBUFSIZE)BUF_Rps=0;
}
}
else if(SampState==3)//已触发
{
ADC_Cnt++; //数据个数加1
BUF_Cnt++;
if(ADC_Cnt>=ADCBUFSIZE)//采了足够的数据
{
SampState=4;
TR0=0;
}
}
if((TrigMode==0)&&(SampState<3))//自动触发处理
{
if(TrigWait==0)//等待时间低位
{
if(TrigWaitH)//等待时间高位
{
TrigWaitH--;
}
else
{
SampState=3;
}
}
TrigWait--;
}
if(TrigCh==0)//通道1触发
{
if(ChEnable & BIT(1))//通道2使能
{
while(ADC_CONTR&BIT(3));//等待通道1转换完成
//while(!(ADC_CONTR&BIT(4)));
ad=ADC_RES;//读通道1
ADC_CONTR=(0xE8|ADCH1);//选通道1
ADCBuf[1][BUF_Wps]=ad;//循环存储数据
}
}
else
{
if(ChEnable & BIT(0))//通道1使能
{
while(ADC_CONTR&BIT(3));//等待通道1转换完成
//while(!(ADC_CONTR&BIT(4)));
ad=ADC_RES;//读通道1
ADC_CONTR=(0xE8|ADCH2);//选通道2
ADCBuf[0][BUF_Wps]=ad;//循环存储数据
}
}
//写指针下移
BUF_Wps++;
if(BUF_Wps>=ADCBUFSIZE)BUF_Wps=0;
}
else
{
T0EXC--;
}
}
评论