[mw_shl_code=c,true]void EXTI3_IRQHandler(void)
{
u8 Tim=0,Ok=0,Data,Num=0;
while(1)
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
{
Tim=HW_jssj();//?????????????????±??,Tim??20us????
if(Tim>=330) break;//??????????????
if(Tim>=216 && Tim<324) //4.32ms-6.48ms
{
Ok=1;//????????????
}
else if(Tim>=16 && Tim<=24) //320us-480us
{
Data=1;//???????? 1
}
else if(Tim>=56 && Tim<84) //1.12ms-1.68ms
{
Data=0;//???????? 0
}
if(Ok==1)
{
hw_jsm<<=1;
hw_jsm+=Data;
if(Num>=32)
{
hw_jsbz=1;
break;
}
}
Num++;
}
}
EXTI_ClearITPendingBit(EXTI_Line3);
}[/mw_shl_code]
代码附上 检测低电平的时间来确定起始信号(低电平持续5.4ms)、0(低电平持续1.4ms)、1(低电平持续0.4ms),时序上已预留20%的余量,外部中断采用下降沿触发。 |