|
发表于 2010-2-8 15:27:43
|
显示全部楼层
我有一个51开发板,在学习红外时,就是那个延时一直看不懂,搞了好久,如下原码
REM()interrupt 0 using 1
{
unsigned int x,y;
unsigned char a,b,c,remdata1[4];
for(x=0;!remin&&x<0x180;x++); //引导码 ->为什么是0x180
if(x<0x100||x>0x160) goto remout; ->为什么是0x160
for(y=0;remin&&y<0x180;y++);
if(y<0x100||y>0x160) goto remout;
TF0=TH0=TL0=a=b=c=0,TR0=1;
do //每一次循环读一字节
{while(b<8)//每个循环读一位
{while(!TF0&&!remin);if(TF0)goto remout;
while(remin);if(TF0)goto remout;
a>>=1;if(TH0>6)a|=0x80;TH0=TL0=0;b++;
}b=0;remdata1[c]=a;a=0;
}
while(c++<3); // 地址吗效验
// if(remdata1[0]==remdata1[1]){if(remdata1[2]==~remdata1[3])rdata=remdata1[2];}// 指令校验
if(remdata1[2]==~remdata1[3])rdata=remdata1[2];
remout:
;
} |
|