微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 SPI nRF24L01 无线简单程序 1

51单片机 SPI nRF24L01 无线简单程序 1

时间:11-19 来源:互联网 点击:

;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           

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top