**************************************************
来历:网上
改写:bluefeel
时刻:10-03-13
单位:桂林理工大学
/**************************************************/
改写:bluefeel
时刻:10-03-13
单位:桂林理工大学
/**************************************************/
#include
#include
#include
#define uchar unsigned char
/***************************************************/
#define TX_ADR_WIDTH 5 // 5字节宽度的发送/接纳地址
#define TX_PLOAD_WIDTH 4 // 数据通道有用数据宽度
#define LED P2
#define TX_ADR_WIDTH 5 // 5字节宽度的发送/接纳地址
#define TX_PLOAD_WIDTH 4 // 数据通道有用数据宽度
#define LED P2
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 界说一个静态发送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
ucharflag;
uchar DATA = 0x01;
uchar bdatasta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT =sta^4;
/**************************************************/
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
ucharflag;
uchar DATA = 0x01;
uchar bdatasta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT =sta^4;
/**************************************************/
/**************************************************
函数: init_io()
函数: init_io()
描绘:
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待机
CSN = 1; // SPI制止
SCK = 0; // SPI时钟置低
IRQ = 1; // 中止复位
LED = 0xff; // 封闭指示灯
}
/**************************************************/
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待机
CSN = 1; // SPI制止
SCK = 0; // SPI时钟置低
IRQ = 1; // 中止复位
LED = 0xff; // 封闭指示灯
}
/**************************************************/
/**************************************************
函数:delay_ms()
函数:delay_ms()
描绘:
推迟x毫秒
/**************************************************/
void delay_ms(uchar x)
{
uchar i, j;
i = 0;
for(i=0; i {
j = 250;
while(–j);
j = 250;
while(–j);
}
}
/**************************************************/
推迟x毫秒
/**************************************************/
void delay_ms(uchar x)
{
uchar i, j;
i = 0;
for(i=0; i
j = 250;
while(–j);
j = 250;
while(–j);
}
}
/**************************************************/
/**************************************************
函数:SPI_RW()
函数:SPI_RW()
描绘:
依据SPI协议,写一字节数据到nRF24L01,一起从nRF24L01
读出一字节
/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循环8次
{
MOSI = (byte & 0x80); // byte最高位输出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,一起从MISO输出1位数据
byte |= MISO; // 读MISO到byte最低位
SCK = 0; // SCK置低
}
return(byte); // 回来读出的一字节
}
/**************************************************/
依据SPI协议,写一字节数据到nRF24L01,一起从nRF24L01
读出一字节
/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循环8次
{
MOSI = (byte & 0x80); // byte最高位输出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,一起从MISO输出1位数据
byte |= MISO; // 读MISO到byte最低位
SCK = 0; // SCK置低
}
return(byte); // 回来读出的一字节
}
/**************************************************/
/**************************************************
函数:SPI_RW_Reg()
函数:SPI_RW_Reg()
描绘:
写数据value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,开端传输数据
status = SPI_RW(reg); // 挑选寄存器,一起回来状况字
SPI_RW(value); // 然后写数据到该寄存器
CSN = 1; // CSN拉高,完毕数据传输
return(status); // 回来状况寄存器
}
/**************************************************/
写数据value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,开端传输数据
status = SPI_RW(reg); // 挑选寄存器,一起回来状况字
SPI_RW(value); // 然后写数据到该寄存器
CSN = 1; // CSN拉高,完毕数据传输
return(status); // 回来状况寄存器
}
/**************************************************/
/**************************************************
函数:SPI_Read()
函数:SPI_Read()
描绘:
从reg寄存器读一字节
/**************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,开端传输数据
SPI_RW(reg); // 挑选寄存器
reg_val = SPI_RW(0); // 然后从该寄存器读数据
CSN = 1; // CSN拉高,完毕数据传输
return(reg_val); // 回来寄存器数据
}
/**************************************************/
从reg寄存器读一字节
/**************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,开端传输数据
SPI_RW(reg); // 挑选寄存器
reg_val = SPI_RW(0); // 然后从该寄存器读数据
CSN = 1; // CSN拉高,完毕数据传输
return(reg_val); // 回来寄存器数据
}
/**************************************************/
/**************************************************
函数:SPI_Read_Buf()
函数:SPI_Read_Buf()
描绘:
从reg寄存器读出bytes个字节,一般用来读取接纳通道
数据或接纳/发送地址
/**************************************************/
uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,开端传输数据
status = SPI_RW(reg); // 挑选寄存器,一起回来状况字
for(i=0; i pBuf[i] = SPI_RW(0); // 逐一字节从nRF24L01读出
CSN = 1; // CSN拉高,完毕数据传输
return(status); // 回来状况寄存器
}
从reg寄存器读出bytes个字节,一般用来读取接纳通道
数据或接纳/发送地址
/**************************************************/
uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,开端传输数据
status = SPI_RW(reg); // 挑选寄存器,一起回来状况字
for(i=0; i
CSN = 1; // CSN拉高,完毕数据传输
return(status); // 回来状况寄存器
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/318524.html