之前僅檢測過一個引腳上一種方波信號,現在要再引腳上區分三種不同的波形。着實頭大了好一會兒。
要檢測的三種波形如下圖所示:
每種波形的持續長度爲500us,時間間隔爲10ms.
比如我們在P0_2上檢測這個波形,首先要對P0_2進行初始化操作,允許中斷檢測,這裏就不詳細介紹了。
從三種波形圖來看,起始都是高電平,然後拉低爲低電平之後,開始產生波形,因此首先通過中斷檢測到下降沿,則表示波形開始。
區分原理如下:
1. 從低電平到高電平,說明波形開始。
2. 延時到位置1,如果還是低電平,則表示波形1.
延時到位置2,如果還是低電平,則表示波形2.
延時到位置3,爲高電平,且延時到位置4爲低電平,則爲波形3.
3. 重複2的檢測,知道持續出現700us左右的高電平,表示波形結束。
當然這個持續時間可以根據自己需求來定義。
注意:延時函數必須非常準確,可參考我的另一博客:延時函數
參考代碼如下:
bool over=false;
uint8 btype=0;
if(Status2==0||(P0IFG&BV(0))>0)
{
while(!over){
//檢測波形
while(Status2==0);//如果2一直爲低電平,則直到檢測到高電平結束
Delay_us_New(75);//延時100us
if(Status2==0){
Delay_us_New(90);
if(Status2==1)
btype=1;
Delay_us_New(75);
Delay_us_New(75);
Delay_us_New(75);
}
else
{
Delay_us_New(130); //延時170微妙
if(Status2==0){
btype=2;
Delay_us_New(75);
Delay_us_New(75);
}
else
{
Delay_us_New(130);
Delay_us_New(75);
if(Status2==0)
btype=3;
}
}
//670us左右仍是高電平
Delay_us_New(75);
Delay_us_New(75);
if(Status2!=0){
//表示波形結束
over=true;
}
}
}