本帖最后由 jakey0225 于 2011-7-1 08:50 编辑
__interrupt rfserver(void)//SN2501B,外部中断0,下降沿触发
{
unsigned char lowtime,hightime,i,j;
if(FP00IRQ==1)
{ FP00IRQ=0;
T0C=0; //
FT0ENB=1; // 定时器开始计时,定时器每记一个数是64us
while(FP00==0);
FT0ENB=0;
lowtime=T0C; // 起始信号低电平时间
T0C=0;
FT0ENB=1;
while(FP00==1);//每次到这都死循环了,这是为什么呢,仿真发现上面低电平计数237,相当于近15ms
FT0ENB=0;
hightime=T0C; //起始信号高电平时间
if((lowtime>130)&&(lowtime<150)&&(hightime>60)&&(hightime<80))//判断是否是起始信号
{
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
rf=rf>>1;
T0C=0;
FT0ENB=1;
while(FP00==0);
FT0ENB=0;
lowtime=T0C;
T0C=0;
FT0ENB=1;
while(FP00==1);
FT0ENB=0;
hightime=T0C;
if((lowtime>5)&&(lowtime<10))i=j=8;
if((hightime>6)&&(hightime<10))rf&=0x7f;
else if((hightime>21)&&(hightime<30))rf|=0x80;
else i=j=8;
}
}
if(rf[2]==~rf[3])
i=9;
}
}
} |