/** * NRF24L01+ 驱动头文件 (STC8H1K08 移植版, SDCC 兼容) * SPI 引脚: SCK=P1.5, CE=P1.6, IRQ=P1.7, CSN=P5.4, MISO=P1.3, MOSI=P1.4 * 使用 STC8H 硬件 SPI (SPI 默认引脚) */ #ifndef __NRF24_H__ #define __NRF24_H__ #include "STC8_SDCC.H" /* SDCC mcs51 模式下缺少的标准类型 */ typedef unsigned char uint8_t; typedef unsigned int uint16_t; typedef unsigned long uint32_t; /* ========== 引脚定义 (SDCC 语法) ========== */ __sbit __at(0x95) NRF_SCK; /* P1^5 */ __sbit __at(0x96) NRF_CE; /* P1^6 */ __sbit __at(0x97) NRF_IRQ; /* P1^7 */ __sbit __at(0xCC) NRF_CSN; /* P5^4 */ __sbit __at(0x93) NRF_MISO; /* P1^3 */ __sbit __at(0x94) NRF_MOSI; /* P1^4 */ /* ========== 寄存器地址 ========== */ #define NRF_CONFIG 0x00 #define NRF_EN_AA 0x01 #define NRF_EN_RXADDR 0x02 #define NRF_SETUP_AW 0x03 #define NRF_SETUP_RETR 0x04 #define NRF_RF_CH 0x05 #define NRF_RF_SETUP 0x06 #define NRF_STATUS 0x07 #define NRF_OBSERVE_TX 0x08 #define NRF_RPD 0x09 #define NRF_RX_ADDR_P0 0x0A #define NRF_RX_ADDR_P1 0x0B #define NRF_RX_ADDR_P2 0x0C #define NRF_RX_ADDR_P3 0x0D #define NRF_RX_ADDR_P4 0x0E #define NRF_RX_ADDR_P5 0x0F #define NRF_TX_ADDR 0x10 #define NRF_RX_PW_P0 0x11 #define NRF_RX_PW_P1 0x12 #define NRF_RX_PW_P2 0x13 #define NRF_RX_PW_P3 0x14 #define NRF_RX_PW_P4 0x15 #define NRF_RX_PW_P5 0x16 #define NRF_FIFO_STATUS 0x17 #define NRF_DYNPD 0x1C #define NRF_FEATURE 0x1D /* ========== 命令 ========== */ #define NRF_CMD_R_REGISTER 0x00 #define NRF_CMD_W_REGISTER 0x20 #define NRF_CMD_R_RX_PAYLOAD 0x61 #define NRF_CMD_W_TX_PAYLOAD 0xA0 #define NRF_CMD_FLUSH_TX 0xE1 #define NRF_CMD_FLUSH_RX 0xE2 #define NRF_CMD_REUSE_TX_PL 0xE3 #define NRF_CMD_NOP 0xFF /* ========== 状态标志 ========== */ #define NRF_STATUS_RX_DR 0x40 #define NRF_STATUS_TX_DS 0x20 #define NRF_STATUS_MAX_RT 0x10 /* ========== 配置常量 ========== */ #define NRF_RATE_250K 0x20 #define NRF_RATE_1M 0x00 #define NRF_RATE_2M 0x08 #define NRF_PA_MIN 0x00 #define NRF_PA_LOW 0x02 #define NRF_PA_HIGH 0x04 #define NRF_PA_MAX 0x06 #define NRF_ADDR_WIDTH 5 #define NRF_MAX_CHANNEL 125 #define NRF_PAYLOAD_SIZE 32 /* ========== 函数声明 ========== */ /* 底层 SPI */ uint8_t NRF_SPI_TransferByte(uint8_t dat); /* 寄存器操作 */ uint8_t NRF24L01_ReadReg(uint8_t reg); void NRF24L01_WriteReg(uint8_t reg, uint8_t value); void NRF24L01_ReadBuf(uint8_t reg, uint8_t *buf, uint8_t len); void NRF24L01_WriteBuf(uint8_t reg, const uint8_t *buf, uint8_t len); /* 初始化与检测 */ void NRF24L01_Init(void); uint8_t NRF24L01_Check(void); /* 配置 */ void NRF24L01_SetChannel(uint8_t ch); void NRF24L01_SetRXAddr(uint8_t pipe, const uint8_t *addr); /* 模式切换 */ void NRF24L01_RXMode(void); void NRF24L01_TXMode(void); /* 数据收发 */ uint8_t NRF24L01_RxPacket(uint8_t *data); uint8_t NRF24L01_IsDataReady(void); void NRF24L01_FlushRX(void); #endif /* __NRF24_H__ */