打印

PT2260的24个高脉冲是怎样存到数组中去的.

[复制链接]
1065|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jzfbbs|  楼主 | 2014-11-10 11:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
代码如下:
#include <stc12.h>#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit RF=P2^5;        //射频解调信号输入
uchar dat[2][3];  //解码过程中临时数组
uchar s_k;     //窄脉冲宽度
void delay(unsigned int ms)   //此处换用不同单片机需调整参数
{
  unsigned char h;
  while(ms--)
    {
          for(h=0;h<80;h++);
    }
}
void delay_1ms(uint x)    //1毫秒延时(禁用中断1ms,开启中断1.7ms)
{
        uchar b,c;
        for(x;x>0;x--)
                {
                        for(b=8;b>0;b--)
                                {
                                        for(c=215;c>0;c--);
                                }
                }
}
//============================接收解码部分========================================//
void RF_decode()          
{
        uchar ii=0,j=0,k=0,rep=0;
          uint h_k=0; uchar s;          //短脉冲宽度
             
//-------------------------------数据接收-----------------------------------------
  s_k=0;
  while(RF && s_k<250)         //检测头信号前一个高脉冲的宽度
  {
         delay(1);//0.36ms       
         s_k++;
        }
   while(!RF)
   {
                 delay(1);
                h_k++;
        } //检测头脉冲的宽度         
   if(((s_k*24)<h_k)&&(h_k<(s_k*38)))   //引导码宽度是窄脉冲的32倍 24/38
   {       
      for(rep=0;rep<2;rep++)//两次检测         
      {  
             for(ii=0;ii<3;ii++)//3字节
               {
                        for(k=0;k<8;k++)//每个字节8位
                        {                                     
                                   j=0;
                                        while(RF&&j<245)
                                        {
                                          delay(1);
                                          j++;
                                        }//
                                   if(j>(s_k-s_k/2-s_k/3)&&j<(s_k*2))
                                        dat[rep][ii]&=~(1<<((7-k)));
                    else if(j>(s_k*2)&&j<(s_k*5))
                   dat[rep][ii]|=(1<<(7-k));
                   else
                    return;//乱码退出       
                        j=0;
                                while(!RF&&j<150)
                      {
                       delay(2);
                       j++;
                      }      //跳过低电平                                  
                      }//for(K)
         }

相关帖子

沙发
jzfbbs|  楼主 | 2014-11-10 11:31 | 只看该作者
图片.

使用特权

评论回复
板凳
jzfbbs|  楼主 | 2014-11-10 11:33 | 只看该作者
第三个高电平到来时执行以下程序:if(j>(s_k-s_k/2-s_k/3)&&j<(s_k*2))
                                dat[rep][ii]&=~(1<<((7-k)));
第四个高电平到来时执行以下程序: else if(j>(s_k*2)&&j<(s_k*5))
                                dat[rep][ii]|=(1<<(7-k));
请问:dat[rep][ii]&=~(1<<((7-k)));      dat[rep][ii]|=(1<<(7-k)); 这两个代码中,此时是什么值?

使用特权

评论回复
地板
jzfbbs|  楼主 | 2014-11-10 11:35 | 只看该作者
for(k=0;k<8;k++)//每个字节8位
                        {                                      
                                   j=0;
                                        while(RF&&j<245)
                                        {
                                          delay(1);
                                          j++;
                                        }//
                                   if(j>(s_k-s_k/2-s_k/3)&&j<(s_k*2))
                                        dat[rep][ii]&=~(1<<((7-k)));
                    else if(j>(s_k*2)&&j<(s_k*5))
                   dat[rep][ii]|=(1<<(7-k));
                   else
                    return;//乱码退出        
                        j=0;
                                while(!RF&&j<150)
                      {
这些代码执行完后,数组里面装的是什么值?  各位高手解答一下啊.

使用特权

评论回复
5
乐逍遥808| | 2014-11-11 19:40 | 只看该作者
学习中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

387

帖子

3

粉丝