TI的CC2530單片機檢測不同類型的方波

之前僅檢測過一個引腳上一種方波信號,現在要再引腳上區分三種不同的波形。着實頭大了好一會兒。

要檢測的三種波形如下圖所示:


每種波形的持續長度爲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;
		}			
	}
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章