由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--;
}
}
評論