之前仅检测过一个引脚上一种方波信号,现在要再引脚上区分三种不同的波形。着实头大了好一会儿。
要检测的三种波形如下图所示:
每种波形的持续长度为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;
}
}
}