首页 » 技术SOS » 通信技术 » 求24L01源程序,能收发的,我一直调不通呀,谢谢了

求24L01源程序,能收发的,我一直调不通呀,谢谢了

菜鸟
2011-04-04 23:17:04
需要资料可以找我 他给的参考源代码 #include // sbit MISO =P1^3; sbit MOSI =P1^4; sbit SCK =P1^5; sbit CE =P1^6; sbit CSN =P3^7; sbit IRQ =P1^2; sbit LED2 =P3^5; sbit LED1 =P3^4; sbit KEY1 =P3^0; sbit KEY2 =P3^1; // SPI(nRF24L01)commands #define READ_REG 0x00// Define readcommand toregister #define WRITE_REG0x20 // Define write command toregister #define RD_RX_PLOAD 0x61 // Define RX payload register address #define WR_TX_PLOAD 0xA0 // Define TXpayload register address #define FLUSH_TX0xE1 // Define flush TXregister command #define FLUSH_RX 0xE2 // Define flush RX register command #define REUSE_TX_PL 0xE3 // Define reuse TXpayload register command #define NOP 0xFF // Define No Operation, might be used to readstatus register //***************************************************// // SPI(nRF24L01)registers(addresses) #define CONFIG 0x00// 'Config' register address #define EN_AA 0x01// 'Enable Auto Acknowledgment' register address #define EN_RXADDR 0x02// 'Enabled RX addresses' register address #define SETUP_AW0x03// 'Setup addresswidth' register address #define SETUP_RETR0x04// 'Setup Auto. Retrans' register address #define RF_CH 0x05// 'RF channel' register address #define RF_SETUP 0x06// 'RF setup' register address #define STATUS0x07 // 'Status' register address #define OBSERVE_TX0x08// 'Observe TX'register address #define CD 0x09 // 'Carrier Detect' register address #define RX_ADDR_P00x0A// 'RX addresspipe0' register address #define RX_ADDR_P10x0B// 'RX addresspipe1'register address #define RX_ADDR_P20x0C// 'RX addresspipe2'register address #define RX_ADDR_P30x0D// 'RX addresspipe3' register address #define RX_ADDR_P40x0E// 'RX addresspipe4'register address #define RX_ADDR_P50x0F // 'RX address pipe5'register address #define TX_ADDR 0x10 // 'TX address' register address #define RX_PW_P00x11 // 'RX payload width, pipe0'register address #define RX_PW_P10x12 // 'RX payload width, pipe1'register address #define RX_PW_P20x13 // 'RX payload width, pipe2'register address #define RX_PW_P30x14 // 'RX payload width, pipe3'register address #define RX_PW_P40x15 // 'RX payload width, pipe4'register address #define RX_PW_P50x16 // 'RX payload width, pipe5'register address #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address //------------------------------------------------------------ // 写一个字节到24L01,同时读出一个字节 uchar SPI_RW(uchar byte) { uchar bit_ctr; for(bit_ctr=0;bit_ctr
关键词: 24L01 , 无线模块  

最佳回复

专家
2011-04-06 10:31:52
1楼

确实发不了那么多字符,你发个邮箱过来,我给你发过去

需求发布人评语:   谢谢
专家
2011-04-05 09:43:35
2楼

没有完整的么?

菜鸟
2011-04-05 14:22:07
3楼

有,好像这个有字数限制

专家
2011-04-06 10:31:03
4楼

//C51模拟 #include #define BYTE_BIT0 0x01 #define BYTE_BIT1 0x02 #define BYTE_BIT2 0x04 #define BYTE_BIT3 0x08 #define BYTE_BIT4 0x10 #define BYTE_BIT5 0x20 #define BYTE_BIT6 0x40 #define BYTE_BIT7 0x80 //RF2401对应的引脚 sbit PWR_UP=P1^6; sbit CE =P1^2; // sbit DR2 =P3^5; //暂时没用到 // sbit CLK2=P3^4; // sbit OUT2=P3^3; sbit CS =P1^1; sbit DR1 =P1^0; sbit CLK1 =P3^7; sbit DATA =P3^3; sbit LED0 =P3^4; sbit LED1 =P3^5; sbit KEY0 =P3^0; sbit KEY1 =P3^1; /* RF2401 configuration 保存2401的配置信息 芯片测试用,无需修改 */ #define TEST_2 0x8E //MSB D143--D136 #define TEST_1 0x08 //MSB D135--D128 #define TEST_0 0x1C //MSB D127--D120 /* 注意DATAx_W + ADDRx_W + CRC的值必须小于256! 单个数据包的大小必须小于32字节(256位) */ #define DATA2_W 0x10 //0x10=2字节 频道2发送/接收数据长度(单位:Bit) #define DATA1_W 0xE0 //0xE0=28字节 频道1发送/接收数据长度(单位:Bit) /* 注意:2401忽略ADDR中超过ADDR_W设定宽度的那些位,同时地址不能全部设置为0 //频道2接收地址 频道2未启用 */ #define ADDR2_4 0x00 #define ADDR2_3 0x1C #define ADDR2_2 0xCC #define ADDR2_1 0xCC #define ADDR2_0 0xCC //频道1接收地址(当前模块地址) 只用到频道1 #define ADDR1_4 0x00 #define ADDR1_3 0xCC #define ADDR1_2 0xCC #define ADDR1_1 0xCC #define ADDR1_0 0xCC #define ADDR_W 0x10 //0x10=2字节 发送/接收地址宽度(单位:Bit) #define CRC_L 0x01 //CRC模式:0:8位,1:16位 #define CRC_EN 0x01 //CRC校验:0:禁用,1:启用 #define RX2_EN 0x00 //双频道功能 0:禁用,1:启用 #define CM 0x01 //0:Direct mode 1:ShockBurst mode #define RFDR_SB 0x00 //传输速率 0:250kbps,1:1Mbps (250kbps距离较远) #define XO_F 0x03 //16M RF2401晶振频率 /* D12 D11 D10 晶振频率(MHZ) 0 0 0 4 0 0 1 8 0 1 0 12 0 1 1 16 1 0 0 20 */ #define RF_PWR 0x03 //信号发射功率 /* D9 D8 P[dBm] 0 0 -20 0 1 -10 1 0 -5 1 1 0 */ #define RF_CH 0x02 //Channel RF频率设置 Channel=2400MHZ+RF_CH*1.0MHZ #define RXEN 0x00 //0:Tx,1:Rx 程序会通过SetTxMode/SetRxMode重新设置此参数 //将设置信息组合成每个字节的数据信息 #define RFConfig_Bit0 TEST_2 #define RFConfig_Bit1 TEST_1 #define RFConfig_Bit2 TEST_0 #define RFConfig_Bit3 DATA2_W #define RFConfig_Bit4 DATA1_W #define RFConfig_Bit5 ADDR2_4 #define RFConfig_Bit6 ADDR2_3 #define RFConfig_Bit7 ADDR2_2 #define RFConfig_Bit8 ADDR2_1 #define RFConfig_Bit9 ADDR2_0 #define RFConfig_Bit10 ADDR1_4 #define RFConfig_Bit11 ADDR1_3 #define RFConfig_Bit12 ADDR1_2 #define RFConfig_Bit13 ADDR1_1 #define RFConfig_Bit14 ADDR1_0 #define RFConfig_Bit15 (ADDR_W0) { led0_count--; LED0=0; } else LED0=1; if(led1_count0) { led1_count--; LED1=0; } else LED1=1; } //end while(1) } /*可用最长数据字节数说明: ShockBurest RF数据包不能超过32字节,有效字节数=32-ADDR_W-CRC,在 本演示程序中,ADDR_W为2字节(0x10),CRC为2字节,所以DATA1_W=0xE0,即28字节,如果需要更宽的地址, 可以增加地址宽度,减少数据宽度*/