PIC16f1937 nRF24L01

发布者:EtherealGlow最新更新时间:2016-09-22 来源: eefocus关键字:PIC16f1937  nRF24L01 手机看文章 扫描二维码
随时随地手机看文章
以下是NRF24L01的测试程序

功能:主机按一下按键,发送一次数据,对应的LED指示灯会闪一下;从机接收到信号后对应的LED指示灯会闪一下;

HOST:

//#include
#include
//const rom unsigned int CONFIG=0x0101;
#define uint8 unsigned char
#define uint16 unsigned int


__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_OFF&MCLRE_ON&CP_OFF
         &BOREN_OFF&CLKOUTEN_OFF&IESO_OFF&FCMEN_OFF);
__CONFIG(WRT_OFF&VCAPEN_OFF&PLLEN_OFF&STVREN_OFF&BORV_19&LVP_OFF);
#define CSN  RE1
#define IRQ  RE0
#define CE   RE2
#define MOSI RC4
#define MISO RC5
#define SCK  RC3
#define BACK_LED RC1
#define KEY  RB7


#define TX_ADR_WIDTH   5
#define RX_ADR_WIDTH   5
#define RX_PLOAD_WIDTH 32
#define TX_PLOAD_WIDTH 32
uint8 TX_ADDRESS[TX_ADR_WIDTH]={0X34,0X43,0X10,0X10,0X01};
uint8 RX_ADDRESS[RX_ADR_WIDTH]={0X34,0X43,0X10,0X10,0X01};
uint8 Tx_Buf[TX_PLOAD_WIDTH]={0xff,0xee,0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa,0xbb,
                               0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa,0xbb
                             ,0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xee,0xff};

uint8 sta=0;//NRF24L01状态

/***********************寄存器指令***********************/
#define READ_REG      0X00    //读寄存器指令
#define WRITE_REG     0X20    //写寄存器指令
#define RD_RX_PLOAD   0X61    //读取接收数据指令
#define WR_TX_PLOAD   0XA0    //写待发数据指令
#define FLUSH_TX      0XE1    //清除发送FIFO指令
#define FLUSH_RX      0XE2    //清除接收FIFO指令
#define REUSE_TX_PL   0XE3    //定义重复装载数据指令
//#define NOP           0XFF    //保留
/***********************寄存器地址***********************/
#define CONFIG        0X00    //配置收发状态,CRC校验及收发响应方式
#define EN_AA         0X01    //自动应答功能设置
#define EN_RXADDR     0X02    //可用信道设置
#define SETUP_AW      0X03    //收发地址宽度设置
#define SETUP_RETR    0X04    //自动重发功能设置
#define RF_CH         0X05    //工作频率设置
#define RF_SETUP      0X06    //发送速率,功耗功能设置
#define STATUS        0X07    //状态寄存器
#define OBSERVE_TX    0X08    //发送监测功能
#define CD            0X09    //地址检测
#define RX_ADDR_P0    0X0A    //频道0接收数据地址
#define RX_ADDR_P1    0X0B    //频道1接收数据地址
#define RX_ADDR_P2    0X0C    //频道2接收数据地址
#define RX_ADDR_P3    0X0D    //频道3接收数据地址
#define RX_ADDR_P4    0X0E    //频道4接收数据地址
#define RX_ADDR_P5    0X0F    //频道5接收数据地址
#define TX_ADDR       0X10    //发送地址寄存器
#define RX_PW_P0      0x11    // 接收频道0接收数据有效数据长度
#define RX_PW_P1      0x12    // 接收频道1接收数据有效数据长度
#define RX_PW_P2      0x13    // 接收频道2接收数据有效数据长度
#define RX_PW_P3      0x14    // 接收频道3接收数据有效数据长度
#define RX_PW_P4      0x15    // 接收频道4接收数据有效数据长度
#define RX_PW_P5      0x16    // 接收频道5接收数据有效数据长度
#define FIFO_STATUS   0X17    //FIFO栈入栈出状态寄存器设置
#define MAX_RT        0X10    //MAX_RTD在第5位|
#define TX_DS         0X20    //TX_DS在第6位  | 在读回STATUS时与其相与,就知道该位是否为1
#define RX_DR         0X40    //RX_DR在第7位  |

 

void delay(uint16 us)
{
    while(us--);
}

/*****************************************************************/

void SpiInit()
{
     TRISC=0X20;//设置RC3/SCK,RC5/SDO为输出
     ANSELE=0X00;
     TRISE=0X01;//IRQ为输入,CE,CSN为输出
     //SSPSTAT=0XC0;
     //SSPCON3=0X00;
     //SSPCON1=0X20;     //CKE=1,CKP=0;主模式,时钟为FOSC/4
     //GIE=1;
     //PEIE=1;
     CSN=1;
}
/*uint8 SPI_RW(uint8 data)//通过SPI写一个字节
{     uint8 status;
      CSN=0;
      SSPBUF=data;
      while(!BF);//当SSPBUF被读取后BF清0
      status=SSPBUF;
      SSPIF=0;
      CSN=1;
      return(status);
}*/
uint8 SPI_RW(uint8 byte)
{
 uint8  bit_ctr; 
 //DI();
    for(bit_ctr=0;bit_ctr<8;bit_ctr++)    // output 8-bit
    {
     if(byte & 0x80) 
      MOSI = 1;
     else 
      MOSI = 0;
     byte = (byte << 1);             // shift next bit into MSB..
     SCK = 1;                   // Set nRF24L01_SCK high..
     if(MISO) byte |= 1;
                NOP();NOP();NOP();NOP();
     SCK = 0;              // ..then set nRF24L01_SCK low again
                NOP();NOP();NOP();NOP();
    }
    //EI();
    return(byte);                 // return read byte
}
/*uint8 SPI_Read()   //通过SPI读一个字节
{
      CSN=0;
      SSPBUF=0X00;//读一个字节前必需先写入一个字节
      while(!BF);
      CSN=1;
      return(SSPBUF);
}*/
uint8 SPI_Read(uint8 reg)
{
      uint8 reg_val;
      CSN=0;
      SPI_RW(reg);
      reg_val=SPI_RW(0);
      CSN=1;
      return(reg_val);
}
uint8 SPI_RW_Reg(uint8 reg,uint8 value)//向寄存器写一个字节,同时返回状态字
{
      uint8 status;
      CSN=0;
      status=SPI_RW(reg);
      SPI_RW(value);
      CSN=1;
      return(status);
}
uint8 SPI_Write_Buf(uint8 reg,uint8 *pBuf,uint8 bytes)//向寄存器写入一个字符串
{
      uint8 status,byte_ctr;
      CSN=0;
      status=SPI_RW(reg);
      for(byte_ctr=0;byte_ctr       {
            SPI_RW(*pBuf++);
      }
      CSN=1;
      return(status);
}
/***************************以上为SPI通讯程序**********************************/
/******************************************************************************/
//发送模式代码
void TX_MODE(void)
{
     CE=0;
     SPI_RW_Reg(FLUSH_TX,0X00);
     SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
     SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
     SPI_RW_Reg(WRITE_REG+EN_AA,0X01);
     SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01);
     SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X00);//禁止重发
     SPI_RW_Reg(WRITE_REG+RF_CH,40);
     SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);
     SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);
     SPI_RW_Reg(WRITE_REG+CONFIG,0X0e);
     CE=1;
     delay(50000);
}
void Transmit(uint8 *tx_buf)
{
     CE=0;
     SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
     SPI_RW_Reg(FLUSH_TX,0X00);
     SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
     SPI_RW_Reg(WRITE_REG+CONFIG,0X0E);
     CE=1;
     delay(100);
}
void main()
{
     uint8 back=100;
     OSCCON=0X60;
     delay(100);
     //TRISA=0X00;
     SpiInit();
     TRISB=0X80;
     KEY=1;
     CE=0;
     CSN=1;
     SCK=0;
     IRQ=1;
     BACK_LED=0;
     //delay(50000);
  /* while(1)
   {  //back=0x02;
     CE=0;
     SPI_RW_Reg(WRITE_REG+EN_AA,0X03);
     back=SPI_Read(EN_AA);
     if(back==0x03)
     {
           BACK_LED=1;
     }
     else
     {
           BACK_LED=0;
     }
     delay(50000);
   }*/ 
     TX_MODE();
     Transmit(Tx_Buf);
     delay(50000);
     sta=SPI_Read(READ_REG+STATUS);
      SPI_RW_Reg(WRITE_REG+STATUS,sta);//STATUS清0
     CE=0;
     while(1)
     {
          if(KEY==0)
          {
              delay(1000);
              if(KEY==0)
              {
                  while(KEY==0);
                  BACK_LED=1;
                  delay(50000);
                  BACK_LED=0;
                  //TX_MODE();
                  Transmit(Tx_Buf);
                  delay(50000);
                  sta=SPI_Read(READ_REG+STATUS);
                  SPI_RW_Reg(WRITE_REG+STATUS,sta);//STATUS清0
                  CE=0;
              }
          }
     }
     /*{
         
          delay(100);
          sta=SPI_Read(READ_REG+STATUS);
          if(sta&TX_DS)
          {
                BACK_LED=1;
                delay(1000);
                SPI_RW_Reg(WRITE_REG+STATUS,sta);//STATUS清0
          }
          if(sta&MAX_RT)
          {
                BACK_LED=0;
                delay(1000);
                SPI_RW_Reg(WRITE_REG+STATUS,sta);//STATUS清0
          }
          delay(50000);
          BACK_LED=0;
          delay(50000);
          
     }*/
}

 

 

SLAVE:

//#include
#include
#define uint8 unsigned char
#define uint16 unsigned int

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_OFF&MCLRE_ON&CP_OFF
         &BOREN_OFF&CLKOUTEN_OFF&IESO_OFF&FCMEN_OFF);
__CONFIG(WRT_OFF&VCAPEN_OFF&PLLEN_OFF&STVREN_OFF&BORV_19&LVP_OFF);
#define CSN  RE1
#define IRQ  RE0
#define CE   RE2
#define MOSI RC4
#define MISO RC5
#define SCK  RC3
#define BACK_LED RC1


#define TX_ADR_WIDTH   5
#define RX_ADR_WIDTH   5
#define RX_PLOAD_WIDTH 32
#define TX_PLOAD_WIDTH 32
uint8 TX_ADDRESS[TX_ADR_WIDTH]={0X34,0X43,0X10,0X10,0X01};
uint8 RX_ADDRESS[RX_ADR_WIDTH]={0X34,0X43,0X10,0X10,0X01};
uint8 Tx_Buf[TX_PLOAD_WIDTH]={0xff,0xee,0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa,0xbb,
                               0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xaa,0xbb
                             ,0x11,0x22,0x33,0xaa,0xbb,0x11,0x22,0x33,0xee,0xff};
uint8 Rx_Buf[RX_PLOAD_WIDTH];

uint8 sta=0;//NRF24L01状态

/***********************寄存器指令***********************/
#define READ_REG      0X00    //读寄存器指令
#define WRITE_REG     0X20    //写寄存器指令
#define RD_RX_PLOAD   0X61    //读取接收数据指令
#define WR_TX_PLOAD   0XA0    //写待发数据指令
#define FLUSH_TX      0XE1    //清除发送FIFO指令
#define FLUSH_RX      0XE2    //清除接收FIFO指令
#define REUSE_TX_PL   0XE3    //定义重复装载数据指令
//#define NOP           0XFF    //保留
/***********************寄存器地址***********************/
#define CONFIG        0X00    //配置收发状态,CRC校验及收发响应方式
#define EN_AA         0X01    //自动应答功能设置
#define EN_RXADDR     0X02    //可用信道设置
#define SETUP_AW      0X03    //收发地址宽度设置
#define SETUP_RETR    0X04    //自动重发功能设置
#define RF_CH         0X05    //工作频率设置
#define RF_SETUP      0X06    //发送速率,功耗功能设置
#define STATUS        0X07    //状态寄存器
#define OBSERVE_TX    0X08    //发送监测功能
#define CD            0X09    //地址检测
#define RX_ADDR_P0    0X0A    //频道0接收数据地址
#define RX_ADDR_P1    0X0B    //频道1接收数据地址
#define RX_ADDR_P2    0X0C    //频道2接收数据地址
#define RX_ADDR_P3    0X0D    //频道3接收数据地址
#define RX_ADDR_P4    0X0E    //频道4接收数据地址
#define RX_ADDR_P5    0X0F    //频道5接收数据地址
#define TX_ADDR       0X10    //发送地址寄存器
#define RX_PW_P0      0x11    // 接收频道0接收数据有效数据长度
#define RX_PW_P1      0x12    // 接收频道1接收数据有效数据长度
#define RX_PW_P2      0x13    // 接收频道2接收数据有效数据长度
#define RX_PW_P3      0x14    // 接收频道3接收数据有效数据长度
#define RX_PW_P4      0x15    // 接收频道4接收数据有效数据长度
#define RX_PW_P5      0x16    // 接收频道5接收数据有效数据长度
#define FIFO_STATUS   0X17    //FIFO栈入栈出状态寄存器设置
#define MAX_RT        0X10    //MAX_RTD在第5位|
#define TX_DS         0X20    //TX_DS在第6位  | 在读回STATUS时与其相与,就知道该位是否为1
#define RX_DR         0X40    //RX_DR在第7位  |

 

void delay(uint16 us)//延时函数
{
    while(us--);
}

/*****************************************************************/

/*void SpiInit()
{
     TRISC=0XD7;//设置RC3/SCK,RC5/SDO为输出
     TRISE=0X01;//IRQ为输入,CE,CSN为输出
     SSPSTAT=0XC0;
     SSPCON3=0X00;
     SSPCON1=0X20;     //CKE=1,CKP=0;主模式,时钟为FOSC/4
     GIE=1;
     PEIE=1;
     CSN=1;
}
uint8 SPI_RW(uint8 data)//通过SPI写一个字节
{     uint8 status;
      CSN=0;
      SSPBUF=data;
      while(!BF);//当SSPBUF被读取后BF清0
      status=SSPBUF;
      SSPIF=0;
      CSN=1;
      return(status);
}*/
void SpiInit()
{
     TRISC=0X20;//设置RC3/SCK,RC5/SDO为输出
     ANSELE=0X00;
     TRISE=0X01;//IRQ为输入,CE,CSN为输出
     //SSPSTAT=0XC0;
     //SSPCON3=0X00;
     //SSPCON1=0X20;     //CKE=1,CKP=0;主模式,时钟为FOSC/4
     //GIE=1;
     //PEIE=1;
     CSN=1;
}

uint8 SPI_RW(uint8 byte)
{
 uint8  bit_ctr; 
 //DI();
    for(bit_ctr=0;bit_ctr<8;bit_ctr++)    // output 8-bit
    {
     if(byte & 0x80) 
      MOSI = 1;
     else 
      MOSI = 0;
     byte = (byte << 1);             // shift next bit into MSB..
     SCK = 1;                   // Set nRF24L01_SCK high..
     if(MISO) byte |= 1;
                NOP();NOP();NOP();NOP();
     SCK = 0;              // ..then set nRF24L01_SCK low again
                NOP();NOP();NOP();NOP();
    }
    //EI();
    return(byte);           
}
/*uint8 SPI_Read()   //通过SPI读一个字节
{
      CSN=0;
      SSPBUF=0X00;//读一个字节前必需先写入一个字节
      while(!BF);
      CSN=1;
      return(SSPBUF);
}*/
uint8 SPI_Read(uint8 reg)
{
      uint8 reg_val;
      CSN=0;
      SPI_RW(reg);
      reg_val=SPI_RW(0);
      CSN=1;
      return(reg_val);
}
uint8 SPI_RW_Reg(uint8 reg,uint8 value)//向寄存器写一个字节,同时返回状态字
{
      uint8 status;
      CSN=0;
      status=SPI_RW(reg);
      SPI_RW(value);
      CSN=1;
      return(status);
}
uint8 SPI_Write_Buf(uint8 reg,uint8 *pBuf,uint8 bytes)//向寄存器写入一个字符串
{
      uint8 status,byte_ctr;
      CSN=0;
      status=SPI_RW(reg);
      for(byte_ctr=0;byte_ctr       {
            SPI_RW(*pBuf++);
      }
      CSN=1;
      return(status);
}
/***************************以上为SPI通讯程序**********************************/
/******************************************************************************/
//接收模式代码
void RX_MODE(void)
{
     CE=0;
     SPI_RW_Reg(FLUSH_TX,0X00);
     //SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
     SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
     SPI_RW_Reg(WRITE_REG+EN_AA,0X01);
     SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01);
     //SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X1a);
     SPI_RW_Reg(WRITE_REG+RF_CH,40);
     SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);
     SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);
     SPI_RW_Reg(WRITE_REG+CONFIG,0X0f);
     CE=1;
     delay(50000);
}
uint8 SPI_Read_Buf(uint8 reg,uint8 *pBuf,uint8 uchars)
{
     uint8 status,uchar_ctr;
     CSN=0;
     status=SPI_RW(reg);
     for(uchar_ctr=0;uchar_ctr      {
          pBuf[uchar_ctr]=SPI_RW(0);
     }
     CSN=1;
     return(status);
}
uint8 nRF24l01_RxPacket(uint8 *rx_buf)
{
     uint8 revale=0;
     sta=SPI_Read(STATUS);
     if(sta&RX_DR)
     {
           SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);
           revale=1;
     }
     SPI_RW_Reg(WRITE_REG+STATUS,sta);
     return(revale);
}
void main()
{
     uint8 recv=0;
     //delay(1);
     //TRISA=0X00;
     OSCCON=0X60;//set clock 
     delay(100);
     SpiInit();
     CE=0;
     CSN=1;
     SCK=0;
     IRQ=1;
     BACK_LED=0;
     RX_MODE();
     while(1)
     {
          if(nRF24l01_RxPacket(Rx_Buf))
          {
               //PORTA=0XFE;
               BACK_LED=1;
               delay(50000);
               BACK_LED=0;
               delay(30);
          }
     }
}

关键字:PIC16f1937  nRF24L01 引用地址:PIC16f1937 nRF24L01

上一篇:PICC编程的位操作示例程序
下一篇:PIC 寄存器不能赋值问题

推荐阅读最新更新时间:2024-03-16 15:11

基于nRF24L01和PIC16F877无线数据传输系统设计
  引言   在工业控制现场, 常常需要采集大量的现场数据, 如温度、湿度、气压等, 并将这些数据传输到主机进行处理,由主机根据处理的结果, 将控制信号传输给现场执行模块进行各种操作。可以看出数据从采集设备到处理终端,监测控制指令从处理终端到采集设备,均需经过传输过程这一重要环节。当数据采集点处于运动状态,或者所处的环境不允许铺设电缆,采集设备必须与终端设备分离,此时只能通过无线方式进行数据传输。基于此,本文设计了一个无线数据传输系统,它应用Microchip公司的PIC16F877单片机控制Nordic公司的无线数字传输芯片nRF24L01 ,通过无线方式进行数据双向传输。实验结果证明:该系统使用灵活、成本低廉,可方便地嵌入到
[单片机]
基于<font color='red'>nRF24L01</font>和PIC16F877无线数据传输系统设计
AVR单片机nRF24L01发送接收驱动程序
#include iom16v.h #include macros.h #include 12864.h //------------------------------------------------------------------------------ //spi标志 #define DDR_SPI DDRB #define DD_MOSI 5 #define DD_MISO 6 #define DD_SCK 7 #define DD_SS 4 #define CE PB3 #define IRQ PB2 //--------------------------------NRF24L01接口定义------
[单片机]
nrf24l01 2.4GHZ无线发射接收模块接收程序
发射程序是用51写的 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define TX_ADR_WIDTH 5 #define TX_PLOAD_WIDTH 4 // SPI(nRF24L01) commands #define READ_REG 0x00 #define WRITE_REG 0x20 #define RD_RX_PLOAD 0x61 #define WR_TX_PLOAD 0xA0 #define FLUSH_TX 0xE1 #define
[单片机]
51单片机 nrf24l01收发
引脚图 引脚1:GND,接地端;引脚2:VCC,1.9V~3.6V 引脚3:CE, NRF24L01模式控制端 引脚4:CSN,片选信号 引脚5:SCK,SPI时钟输入端 引脚6:MOSI,SPI数据输入端 引脚7:MISO,SPI数据输出端 引脚8:IRQ,中断输出端,低电平使能,即中断输出低电平 对于电源不要超过3.6V,否则可能损坏芯片 对于端口引脚,可以耐压5V,即可以接TTL端口 发送端 #include reg51.h #define uchar unsigned char #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 #define
[单片机]
51单片机 <font color='red'>nrf24l01</font>收发
Mini2440 NRF24L01无线模块驱动
为了和jihuaLi 完成智能家居系统,我移植了这个驱动,不管写的如何,总结一下是很有必要的。 NRF24L01使用SPI总线与主机通信,没有SPI端口的设备可以使用IO口进行模拟。 关于SPI: SPI是一种四线串行总线, SCLK: 串行时钟线 MOSI: 总线主机输出/ 从机输入 MISO: 总线主机输入/ 从机输出; SS: 从机使能 数据传输方式 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿
[单片机]
Mini2440 <font color='red'>NRF24L01</font>无线模块驱动
基于MSP430F2012和nRF24L01低功耗RFID定位设计方案
  射频识别(RFID)技术是采用无线射频的方式实现双向数据交换并识别身份,RFID定位正是利用了这一识别特性,利用阅读器和标签之间的通信信号强度等参数进行空间的定位。   RFID标签按供电方式分为有源和无源2种[1],无源标签通过捕获阅读器发射的电磁波获取能量,具有成本低、尺寸小的优势;有源标签通常采用电池供电,具有通信距离远、读取速度快、可靠性好等优点[2],但为了满足煤矿井下定位,需要考虑低功耗设计以增强电池的续航能力。本文从有源标签的设计理念出发,针对小范围空间RFID定位的需求,根据低功耗、高效率的原则进行RFID标签的设计,并阐述了其硬件组成、软件流程和防冲突能力。   2.系统硬件设计   2.1 系统结构
[单片机]
基于MSP430F2012和<font color='red'>nRF24L01</font>低功耗RFID定位设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved