void call_user_sent()
{
static bit data_flag=0;
static unsigned char a=0,b=0,c=0;
TRISB5=1;
TRISB2=0;
if(!data_flag) //起始头
{
c++;
if(c==1) RB2=0;
if(c==41) RB2=1;
if(c>=51)
{
c=0;
data_flag=1;
}
}
if(data_flag) //数据开始
{
c++;
if(c==1) RB2=0;
if(c==4)
{
if(a==0)
{
if((send_user[a]&0x80)!=0) RB2=1;
}
else if(a!=0)
{
if((send_user[a]&0x08)!=0) RB2=1;
}
}
if(c==7)
{
if(a==0)
{
if((send_user[a]&0x80)==0) RB2=1;
}
else if(a!=0)
{
if((send_user[a]&0x08)==0) RB2=1;
}
}
if(c>=10)
{
c=0;
b++;
send_user[a]<<=1;
if((a==0)&&(b>=8))
{
b=0;
a++;
}
if((a!=0)&&(b>=4))
{
b=0;
a++;
if(a>=CODELEN)
{
a=0;
data_flag=0;
sent_user_flag=0;
}
}
}
}
}
void call_user_rece()
{
static bit hl;
static bit hl_flag;
static unsigned char low=0,high=0,count=0;
static unsigned char temp=0,rece_flag=0;
static unsigned char p,q;
TRISB5=1;
TRISB2=1;
hl=RB5;
if(hl)
{
if(!hl_flag)
{
hl_flag=1;
low=count;
count=0;
}
else count++;
}
else
{
if(hl_flag)
{
hl_flag=0;
high=count;
count=0;
if(rece_flag)
{
temp<<=1;
if((4<9))
{
temp=temp|0x00;
}
else if((0<4))
{
temp=temp|0x01;
}
q++;
if((p==0)&&(q>=8))
{
q=0;
rece_user[p]=temp;
p++;
}
if((p!=0)&&(q>=4))
{
q=0;
rece_user[p]=temp&0x0f;
p++;
if(p>=CODELEN)
{
p=0;
rece_flag=0;
if((0xee==rece_user[0])||(0xfa==rece_user[0]))
{
Alarm(); //报警
}
rece_user_proc=1; //执行接收处理函数
}
}
}
else
{
if(high>30)
{
p=0;
q=0;
temp=0;
rece_flag=1;
}
}
}
else count++;
}
}
上一篇:喜欢单片机的同学快来看啊,过来人的经验告白
下一篇:按键检测非阻塞代码(2种模式)
推荐阅读最新更新时间:2024-10-30 06:50