STC12单片机SPI多对一nrf24l01程序 联系客服

发布时间 : 星期日 文章STC12单片机SPI多对一nrf24l01程序更新完毕开始阅读b3f459a3f90f76c661371a74

}

//发送超时时 8位LED灯 bit4 = 1 灯灭

Delay(150);

SPI_RW_Reg(WRITE_REG + STATUS,sta);

ES=0; //发送时关闭中断 SBUF=0xaa;

while(!TI); //等待发送完成,发送完成后TI为1 TI=0; ES=1;

}

}

Delay(10);

/////////////////接收

#include #include

typedef unsigned char uchar; #define uint unsigned int

//****************************************IO端口定义***************************************

sfr SPCTL = 0xCE; //SPI Control Register SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0000,0100

sfr SPSTAT = 0xCD; //SPI Status Register SPIF WCOL - - - - - - 00xx,xxxx

sfr SPDAT = 0xCF;

sbit CE =P1^0; sbit CSN =P1^1; sbit IRQ =P1^2; sbit led = P1^3;

//****************************************************************************************** uchar bdata sta; //状态标志 sbit RX_DR =sta^6; sbit TX_DS =sta^5; sbit MAX_RT =sta^4;

//*********************************************NRF24L01************************************* #define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width

#define TX_PLOAD_WIDTH 32 // 32 uints TX payload #define RX_PLOAD_WIDTH 32 // 32 uints TX payload

uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址 uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址 uchar

code

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};//发送数据

uchar Rx_Buf[RX_PLOAD_WIDTH];//接收数据

//***************************************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 // 保留

//*************************************SPI(nRF24L01)寄

****************************************************

#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栈入栈出状态寄存器设置 /******************************************

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

//长延时

void Delay(unsigned int s) {

unsigned int i,j;

for(i=0;i<1000;i++)for(j=0;j

//短延时

void delay_ms(unsigned int x) {

unsigned int i,j; i=0;

for(i=0;i

j=108; while(j--); } }

/************初始化5A spi***************/ void Init_SPI() {

SPDAT=0; //初始化数据寄存器 SPSTAT=0XC0; //清除状态寄存器

SPCTL=0XD2;//设置为主机模式 主频不能超过2M

//忽略SS 使能spi MSB SCLK空闲为0 第一个时钟边沿开始采集 spi通信的频率为CUP_CLK/16 }

//SPDAT 读写一个字节 //TxData:要写入的字节 //返回值:读取到的字节

uchar SPI_ReadWriteByte(uchar TxData) {

//发送一个byte

SPDAT=TxData;

while((SPSTAT&0x80)==0); SPSTAT=0XC0;

//返回收到的数据

//清除状态寄存器

return SPDAT;

}

//读取SPI寄存器值 //reg:要读的寄存器

uchar SPI_Read_Reg(uchar reg) {

uchar reg_val;

CSN = 0; //使能SPI传输

SPI_ReadWriteByte(reg); //发送寄存器号

reg_val=SPI_ReadWriteByte(0xFF);//读取寄存器内容 CSN = 1; //禁止SPI传输 }

// 向寄存器REG写一个字节,同时返回状态字节 reg寄存器地址 value写入的数据 uchar SPI_RW_Reg (uchar reg,uchar value) { }

//写一个数据包

uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) {

uchar status,byte_ctr; CSN = 0;

status=SPI_ReadWriteByte(reg);

for(byte_ctr=0; byte_ctr

//读一个数据包

uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) {

uchar status; CSN=0;

status=SPI_ReadWriteByte(reg);//发送寄存器号 SPI_ReadWriteByte(value); //写入寄存器的值 CSN=1;

return(status);

return(reg_val); //返回状态值