⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tag.lst

📁 用C语言开发环境编写的nRF2401无线通信程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 219   1              Delay();        
 220   1              CLK1=1;            //   CLK1=1;
 221   1          Delay();
 222   1              CLK1=0;            //CLK1=0;
 223   1      
 224   1              P4=P4&CS0;         //CS=0; 4.3 1111 0111; ????¨?DD?ì
 225   1              P4=P4|CE1;         //CE=1; 4.2 0000 0100   ??¨¨??¤??¨???¨??
 226   1              Delay100();
 227   1      }
 228           void SetRxMode(void)
 229          {
 230   1        unsigned int i;
 231   1        P4=P4&CS0;       
 232   1        P4=P4&CE0;       
 233   1        CLK1=0;
 234   1        DATA=0;
 235   1      
 236   1        P4=P4|PWR_UP1;          //????????????
 237   1        for(i=0;i<10;i++)
 238   1              Delay100();
 239   1      
 240   1        P4=P4|CS1;           //????????????
 241   1        Delay100();
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 5   

 242   1      
 243   1          CLK1=0;     
 244   1              DATA =1;
 245   1              Delay();
 246   1      
 247   1              CLK1=1;           // CLK1=1;
 248   1              Delay();
 249   1      
 250   1              CLK1=0;//P4=P4&0XFE;   //CLK1=0;
 251   1              P4=P4&CS0;         //CS=0; 4.3 1111 0111; 
 252   1              P4=P4|CE1;         //CE=1; 4.2 0000 0100   ??¨¨??¤??¨???¨??
 253   1              Delay100();
 254   1              Delay100();
 255   1      
 256   1      }
 257          //进行Manchester编码
 258          void Manchester_fun(unsigned char *TxBuf)
 259          {
 260   1        unsigned char i,k=0;
 261   1        for (i=0;i<8;i++)
 262   1          {
 263   2                 if(TxBuf[i]==1)
 264   2                    {
 265   3                         Manchesterbuf[k]=1;
 266   3                         k++;
 267   3                          Manchesterbuf[k]=0;
 268   3                         k++;
 269   3                        }
 270   2                 else
 271   2                    {
 272   3                         Manchesterbuf[k]=0;
 273   3                         k++;
 274   3                          Manchesterbuf[k]=1;
 275   3                         k++;
 276   3                        }     
 277   2              }
 278   1      }
 279          //接收方通道硬件地址
 280          unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
 281          //nRF2401数据发送函数
 282          void nRF2401_TxPacket(unsigned char TxBuf[])
 283          {
 284   1       int i;
 285   1       unsigned char variable2;
 286   1       Manchester_fun(TxBuf);
 287   1       P4=P4|PWR_UP1;  
 288   1       P4=P4&CS0; 
 289   1       P4=P4&CE0;             //进入空闲模式
 290   1       CLK1=0;
 291   1       DATA=0;
 292   1       Delay();
 293   1      
 294   1       P4=P4|CE1;  //进入收发模式
 295   1       Delay100();
 296   1      
 297   1       for(i=0;i< (ADDR_W/8);i++)    //写入接收地址(按字节对齐)
 298   1              {
 299   2                      variable2=TxAddress[i];
 300   2                      ByteWrite(variable2);
 301   2              } 
 302   1       for(i=0;i<(DATA1_W/8);i++)    //写入需要发送的数据(按字节对齐)
 303   1              {
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 6   

 304   2                      variable2=Manchesterbuf[i];
 305   2                      ByteWrite(variable2);
 306   2              }
 307   1              P4=P4&CE0;       //CE置低使发送有效
 308   1              Delay100();
 309   1              Delay100();
 310   1      }
 311          
 312           
 313          
 314          unsigned int comparative_fun(unsigned char Readdatabuf[8],unsigned char  Txbuf[8])
 315          {
 316   1        unsigned  int i,flag=0;
 317   1        for(i=0;i<8;i++)
 318   1           {
 319   2                    if(Readdatabuf[i]>Txbuf[i])
 320   2                                {  
 321   3                                   flag=1;          //判断到接收的数据比自己的标签号大
 322   3                                   break;
 323   3                                 }
 324   2                        if(Readdatabuf[i]<Txbuf[i])  //判断到接收的数据比自己的标签号小
 325   2                                {  
 326   3                                   flag=2;
 327   3                                   break;
 328   3                                 }
 329   2               }  
 330   1        if(flag==1) 
 331   1         { return 1; }        //标签号小于接受的数据返回标志1                 
 332   1        else if (flag==2)
 333   1         { return 2;  }           //标签号大于接受的数据返回标志2         
 334   1        else if (flag==0)         
 335   1         { return 0;  }       //标签号相同返回标志0                           
 336   1                                                      
 337   1      
 338   1      }
 339          
 340          void Redadata_fun(unsigned char *Rxbuf,unsigned char *Readdatabuf)
 341          {               
 342   1        unsigned char i=0,k=0;
 343   1         for(i=0;i<16;i=i+2)
 344   1          {
 345   2                       if((Rxbuf[i]==1)&&(Rxbuf[i+1]==0))
 346   2                      {
 347   3                                      Readdatabuf[k]=1;  //收到的数据是下降沿,即为数据1;
 348   3                               }
 349   2                       else 
 350   2                              {       
 351   3                                      Readdatabuf[k]=0;       //收到的数据是上降沿,即为数据0;
 352   3                               }
 353   2                   k++;
 354   2              }
 355   1      }
 356          
 357          
 358          void main(void)
 359          {
 360   1       unsigned char Txbuf1[8]={1,0,1,0,1,0,1,1,},Rxbuf[16]; 
 361   1       unsigned char Txbuf2[8]={0,0,0,0,0,0,0,0,};
 362   1       unsigned char Txbuf3[8]={0,1,1,0,0,1,0,0,};
 363   1       unsigned char send_flag=0,recive_flag=0,LED=0X1C;
 364   1       unsigned int  countbit; 
 365   1       unsigned int *p=&countbit;
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 7   

 366   1       unsigned int over_flag=1,comparative_flag; 
 367   1       unsigned char Readdatabuf[8];
 368   1       
 369   1       unsigned long int  i,k;           
 370   1       WDTCN=0xde;          // 禁止看门狗定时器
 371   1       WDTCN=0xad;              
 372   1       SYSCLK_Init();           //初始化CPU;
 373   1       UART0_Init();             //配置串口
 374   1       Config2401();             //配置nRF2401; 
 375   1       
 376   1       P6=P6&LED_ON;  
 377   1       while(1)
 378   1         { 
 379   2                 
 380   2          while(over_flag==1)
 381   2          {    
 382   3                    SetRxMode();           //处于接收模式
 383   3                    P4=P4|CE1;         // 接收使能
 384   3                        for(i=0;i<250;i++) //延时等待接收数据    
 385   3                                      {
 386   4                                         for(k=0;k<50;k++)
 387   4                                         {
 388   5                                                      Delay100();
 389   5                                      }       
 390   4                                      
 391   4                                      }
 392   3                           while((P4&DR1)!=0)        //判断是否接收到数据 
 393   3                                {
 394   4                                              nrf2401_Rxpack(Rxbuf,p);          //读取数据;
 395   4                                          Redadata_fun(Rxbuf,Readdatabuf);  //把数据转换为没有编码的原始数据
 396   4                                              comparative_flag=comparative_fun(Readdatabuf,Txbuf3);   //接收到的数据与自己的数据进行比较
 397   4                                               for(k=0;k<50;k++)
 398   4                                              {
 399   5                                                        Delay100();
 400   5                                           }
 401   4                                               if(comparative_flag==1)        //再回应范围以内,发送数据
 402   4                                                       {        i=0;
 403   5                                                                while(i<500)
 404   5                                                               {      
 405   6                                                                         SetTxMode( ); 
 406   6                                                                         i++;
 407   6                                                                         P4=P4|CE1;
 408   6                                                                         nRF2401_TxPacket(Txbuf3);    //发送数据
 409   6                                                                         P6=P6|LED;   
 410   6                                                                         LED=LED+2;    
 411   6                                                                         P6=P6&LED; 
 412   6                                                                         for(k=0;k<6;k++)
 413   6                                                                         {
 414   7                                                                                      Delay100();
 415   7                                                                      }       
 416   6                                                               }
 417   5                                                      }
 418   4                                                if(comparative_flag==0)
 419   4                                              {  
 420   5                                                         over_flag=0;   //收到确认信息,over_flag=0; 失去活性
 421   5                                                      }
 422   4                                  P6=P6|LED_OFF; //0001 1100;¨¨?2??e         
 423   4                          }      
 424   3                }             
 425   2           
 426   2         }
 427   1      }
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 8   

 428          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1245    ----
   CONSTANT SIZE    =     42    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21      93
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -