找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3995|回复: 2
打印 上一主题 下一主题
收起左侧

单片机之间通信(类红外发送与接收)

[复制链接]
跳转到指定楼层
楼主
ID:51024 发表于 2014-8-10 12:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


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++;        
          }                                 

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72495 发表于 2015-1-20 08:35 | 只看该作者
学习了
回复

使用道具 举报

板凳
ID:159270 发表于 2017-2-25 23:52 | 只看该作者
菜鸟,看不明
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表