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

📄 24e1_repeater.lst

📁 NRF24E1的信号中继程序,可使得传输距离更远,可用与做工业数据传输.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 206   1      }
 207          
 208          /*****************************************************************************************
 209          //函数名:TimerInit()
 210          //输入:无
 211          //输出:无
 212          //功能描述:定时器0初始化
 213          /*****************************************************************************************/
 214          void TimerInit(void)
 215          {
 216   1              timer[0] = timer[1] = 0;
 217   1      
 218   1              TR0 = 0;
 219   1              TMOD &= ~0x03;
 220   1              TMOD |= 0x01;                               // mode 1
 221   1              CKCON |= 0x08;                              // T0M = 1 (/4 timer clock)
 222   1              t0lrel = 0x60;                              // 1KHz tick...
 223   1              t0hrel = 0xF0;                              // ... = 65536-16e6/(4*1e3) = F060h
 224   1              TF0 = 0;                                    // Clear any pending Timer0 interrupts
 225   1              TR0 = 1;                                    // Start Timer0
 226   1              ET0 = 1;                                    // Enable Timer0 interrupt
 227   1      }
 228          
 229          /*****************************************************************************************
 230          //函数名:ResetTimer(int8u n)
 231          //输入:要复位的计时器
 232          //输出:无
 233          //功能描述:复位计时器
 234          /*****************************************************************************************/
 235          void ResetTimer(int8u n)
 236          {
 237   1              ET0 = 0;                                    // Disable Timer0 interrupt
 238   1              timer[n & 0x01] = 0;                        // Clear timer[n]
 239   1              ET0 = 1;                                    // Enable Timer0 interrupt
 240   1      }
 241          /*****************************************************************************************
C51 COMPILER V7.08   24E1_REPEATER                                                         11/17/2006 16:36:46 PAGE 5   

 242          //函数名:ReadTimer()
 243          //输入:要读的计时器
 244          //输出:读出值
 245          //功能描述:读计时器
 246          /*****************************************************************************************/
 247          unsigned ReadTimer(int8u n)
 248          {
 249   1              unsigned tmp;
 250   1              ET0 = 0;                                    // Disable Timer0 interrupt
 251   1              tmp = timer[n];                             // Clear timer[n]
 252   1              ET0 = 1;                                    // Enable Timer0 interrupt
 253   1              return tmp;
 254   1      }
 255          
 256          /*****************************************************************************************
 257          //函数名:SciInit()
 258          //输入:无
 259          //输出:无
 260          //功能描述:串口初始化
 261          /*****************************************************************************************/
 262          void SciInit(void)
 263          {
 264   1              TH1 = 0xe6;      // 9600@16MHz (when T1M=1 and SMOD=1)
 265   1              CKCON |= 0x10;  // T1M=1 (/4 timer clock)
 266   1              PCON = 0x80;    // SMOD=1 (double baud rate)
 267   1              SCON = 0x52;    // Serial mode1, enable receiver
 268   1              TMOD = 0x20;    // Timer1 8bit auto reload 
 269   1              TR1 = 1;        // Start timer1
 270   1              P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
 271   1              P0_DIR &= 0x0F;        //led p0.4  p0.5 output
 272   1              P0_DIR |= 0x48;    // P0.3 is input  p0.6 input
 273   1              ES = 0;
 274   1              EA=1;
 275   1      }
 276          
 277          
 278          /*****************************************************************************************
 279          //函数名:SetRxMode()
 280          //输入:无
 281          //输出:无
 282          //功能描述:转为接收模式
 283          /*****************************************************************************************/
 284          void SetRxMode(void)
 285          {
 286   1              int8u ch;
 287   1              CS = 1;
 288   1              Delay100us(0);
 289   1              ch = FRESELE << 1;
 290   1              SpiReadWrite(ch | 0x01);
 291   1              CS = 0;
 292   1      }
 293          /*****************************************************************************************
 294          //函数名:SetTxMode()
 295          //输入:无
 296          //输出:无
 297          //功能描述:转为发送模式
 298          /*****************************************************************************************/
 299          void SetTxMode(void)
 300          {
 301   1              int8u ch;
 302   1              CS = 1;
 303   1              Delay100us(0);
C51 COMPILER V7.08   24E1_REPEATER                                                         11/17/2006 16:36:46 PAGE 6   

 304   1              ch = FRESELE << 1;
 305   1              SpiReadWrite(ch);
 306   1              CS = 0;
 307   1      }
 308          /*****************************************************************************************
 309          //函数名:SendC()
 310          //输入:发送的数据
 311          //输出:无
 312          //功能描述:串口初始化
 313          /*****************************************************************************************/
 314          void SendCh(char c)
 315          {
 316   1              TI = 0;
 317   1              SBUF = c;
 318   1              while(!TI);
 319   1              TI = 0;
 320   1      }
 321          
 322          /*****************************************************************************************
 323          //函数名:Nrf24E1Init()
 324          //输入:无
 325          //输出:无
 326          //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
 327          /*****************************************************************************************/
 328          void Nrf24E1Init()
 329          {
 330   1              int8u i;
 331   1              SPICLK = 0;                                 // Max SPI clock
 332   1              SPI_CTRL = 0x02;                            // Connect internal SPI controller to Radio
 333   1              CE = 0;
 334   1              CS = 1;                                     // RF SPI CS = 1
 335   1              Delay100us(0);
 336   1              SpiReadWrite(0x00);                         // We are not using the DuoCeiver functionallity
 337   1              for(i=1;i<15;i++)
 338   1              {
 339   2                      SpiReadWrite(RFConfig[i]);
 340   2              }
 341   1              CS = 0;
 342   1      
 343   1              Delay100us(30);  
 344   1      }
 345          
 346          
 347          /*****************************************************************************************
 348          //函数名:Nrf24E1Init()
 349          //输入:无
 350          //输出:无
 351          //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
 352          /*****************************************************************************************/
 353          void Nrf24E1Init2()
 354          {
 355   1              int8u i;
 356   1              SPICLK = 0;                                 // Max SPI clock
 357   1              SPI_CTRL = 0x02;                            // Connect internal SPI controller to Radio
 358   1              CE = 0;
 359   1              CS = 1;                                     // RF SPI CS = 1
 360   1              Delay100us(0);
 361   1              SpiReadWrite(0x00);                         // We are not using the DuoCeiver functionallity
 362   1              for(i=1;i<15;i++)
 363   1              {
 364   2                      SpiReadWrite(RFConfig2[i]);
 365   2              }
C51 COMPILER V7.08   24E1_REPEATER                                                         11/17/2006 16:36:46 PAGE 7   

 366   1              CS = 0;
 367   1      
 368   1              Delay100us(30);  
 369   1      }
 370          
 371          /*****************************************************************************************
 372          //函数名:int8u WaitAck(void)
 373          //输入:无
 374          //输出:返回应答信号
 375          //功能描述:等待应答,并返回应答信号
 376          /*****************************************************************************************/
 377          int8u WaitAck(void)
 378          {
 379   1          int8u ack;
 380   1          SetRxMode();
 381   1          CE = 1;
 382   1          ResetTimer(0);
 383   1          while(DR1 == 0)
 384   1          {
 385   2              if (ReadTimer(0) > 10)                    // 3ms time-out/10MS
 386   2              {
 387   3                  CE = 0;
 388   3                  return 0;
 389   3              }
 390   2          }
 391   1          ack = SpiReadWrite(0);
 392   1          while(DR1)
 393   1          {
 394   2              SpiReadWrite(0);
 395   2          }
 396   1          CE = 0;
 397   1          return ack;
 398   1      }
 399          
 400          /*****************************************************************************************
 401          //函数名:TransmitPacket(int8u *pBuf)
 402          //输入:发送的数据
 403          //输出:无
 404          //功能描述:发送发送缓冲区的数据
 405          /*****************************************************************************************/
 406          /*****************************************************************************************
 407          //函数名:TransmitPacket(int8u *pBuf)
 408          //输入:发送的数据
 409          //输出:无
 410          //功能描述:发送发送缓冲区的数据
 411          /*****************************************************************************************/
 412          TransmitPacket(int8u *pBuf,int8u crc)
 413          {
 414   1              int8u i;
 415   1      
 416   1              SetTxMode();
 417   1              CE = 1;
 418   1              Delay100us(1);
 419   1      

⌨️ 快捷键说明

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