|
烦请班竹,高手门进来帮我评评这个程序到底错在那里
大家好!请问谁能帮我看看这个程序错在那里了啊!编译OK了 可是就是解不了码
2262(3.3M)解码;
"1" 1.2ms-0.4ms-1.2ms-0.4ms
"0" 0.4ms-1.2ms-0.4ms-1.2ms
"f" 0.4ms-1.2ms-1.2ms-0.4ms
sync(同位码)0.4ms-12.4ms
找同位码:先搜索宽度为0.4MS的高电平,找到后确认,然后
检测低电平是否为12.4MS。
读代码字:找同位码后,在每次上升沿开始延时600us检测电
平,连续24次,放入3byte;
确认码字;连续两次一致,就确认此码有效#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar date[4],date1,i,flag,a;
sbit int0=P3^2;
sbit beep=P3^4;
void delay_100us(void)
{
unsigned char i=48;
while(--i);
}
void rx()
{a=0;
int0=1;
while(!int0)
{
delay_100us();
a++;
if(a>100)
{
flag=1;//同步码标志位
}
else{
a=0;
return;
}
if(flag)
{ a=0;
while(int0)
{
delay_100us();
a++;
if(a>4)//是否大于400us(判断600us)
{
a=0;
while(!int0)//针测电平的变化
{
delay_100us();
a++;
for(i=1;i<25;i++)
{if(a>8) //半字节传送
{ date[i/4]|=0x01;
date[i/4]<<=1;
}
else{
date[i/4]&=0xfe;
}
}
}
}
}
}
}
}
void main()
{ EA=1;
ET0=1;
while(1)
{
rx();//接收
//校码
if((date[1]|date[2])==(date[4]|date[5]))//地址码校验
{
if(date[3]==date[6])//数据码校验
{
beep=1;
}
}
}
} |
|