51单片机 SPI nRF24L01 无线简单程序 1
;192 SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除TX_DS或MAX_RT中断标志193 IRQ = 1;194 if(TX_DS)195 return(0x00);196 else197 return(0xff);198 }199 200 /**************************************************201 函数:CheckButtons()202 描述:203 检查按键是否按下,按下则发送一字节数据204 /**************************************************/205 void CheckButtons()206 {207 P3 = 0x00;208 if(!(P3 & 0x01)) // 读取P3^0状态209 {210 delay_ms(20);211 if(!(P3 & 0x01)) // 读取P3^0状态212 {213 TX_BUF[0] = ~DATA; // 数据送到缓存214 TX_Mode(TX_BUF); // 把nRF24L01设置为发送模式并发送数据215 LED = ~DATA; // 数据送到LED显示216 Check_ACK(1); // 等待发送完毕,清除TX FIFO217 delay_ms(250);218 delay_ms(250);219 LED = 0xff; // 关闭LED220 RX_Mode(); // 设置为接收模式221 while(!(P3 & 0x01));DATA <= 1;223 if(!DATA)224 DATA = 0x01;225 }226 }227 }228 229 /**************************************************230 函数:main()231 232 描述:233 主函数234 /**************************************************/235 void main(void)236 {237 init_io(); // 初始化IO238 RX_Mode(); // 设置为接收模式239 while(1)240 {241 CheckButtons(); // 按键扫描242 sta = SPI_Read(STATUS); // 读状态寄存器243 if(RX_DR) // 判断是否接受到数据244 {245 SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); // 从RX FIFO读出数据246 flag = 1;247 }248 SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除RX_DS中断标志249 if(flag) // 接受完成250 {251 flag = 0; // 清标志252 LED = RX_BUF[0]; // 数据送到LED显示253 delay_ms(250);254 delay_ms(250);255 LED = 0xff; // 关闭LED256 }257 }258 }259 /**************************************************/
1 // BYTE type definition2 #ifndef _BYTE_DEF_3 #define _BYTE_DEF_4 typedef unsigned char BYTE;5 #endif /* _BYTE_DEF_ */6 7 // Define interface to nRF24L018 #ifndef _SPI_PIN_DEF_9 #define _SPI_PIN_DEF_10 sbit CE = P1^2;11 sbit CSN= P1^3;12 sbit SCK= P1^1;13 sbit MOSI= P1^4;14 sbit MISO= P1^0;15 sbit IRQ = P1^5;16 #endif17 18 // Macro to read SPI Interrupt flag19 //#define WAIT_SPIF (!(SPI0CN & 0x80)) // SPI interrupt flag(礐 platform dependent)20 21 // Declare SW/HW SPI modes22 //#define SW_MODE 0x0023 //#define HW_MODE 0x0124 25 // Define nRF24L01 interrupt flags26 //#define MAX_RT 0x10 // Max #of TX retrans interrupt27 //#define TX_DS 0x20 // TX data sent interrupt28 //#define RX_DR 0x40 // RX data received29 30 //#define SPI_CFG 0x40 // SPI Configuration register value31 //#define SPI_CTR 0x01 // SPI Control register values32 //#define SPI_CLK 0x00 // SYSCLK/2*(SPI_CLK+1) == > 12MHz / 2 = 6MHz33 //#define SPI0E 0x02 // SPI Enable in XBR0 register34 35 //****************************************************************//36 // SPI(nRF24L01) commands37 #define READ_REG 0x00 // Define read command to register38 #define WRITE_REG 0x20 // Define write command to register39 #define RD_RX_PLOAD 0x61 // Define RX payload register address40 #define WR_TX_PLOAD 0xA0 // Define TX payload register address41 #define FLUSH_TX 0xE1 // Define flush TX register command42 #define FLUSH_RX 0xE2 // Define flush RX register command43 #define REUSE_TX_PL 0xE3 // Define reuse TX payload register command44 #define NOP 0xFF // Define No Operation, might be used to read status register45 46 //***************************************************//47 // SPI(nRF24L01) registers(addresses)48 #define CONFIG 0x00 // Config register address49 #define EN_AA 0x01 // Enable Auto Acknowledgment register address50 #define EN_RXADDR 0x02 // Enabled RX addresses register address51 #define SETUP_AW 0x03 // Setup address width register address52 #define SETUP_RETR 0x04 // Setup Auto. Retrans register address53 #define RF_CH 0x05 // RF channel register address54 #define RF_SETUP 0x06 // RF setup register address55 #define STATUS 0x07 // Status register address56 #define OBSERVE_TX 0x08 // Observe TX register address57 #define CD
51单片机SPInRF24L0 相关文章:
- 51单片机 SPI nRF24L01无线 可以放在2个单片机里实现通信(11-19)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)