📄 nrf24l01+̤
字号:
C51 COMPILER V7.00 NRF24L01 04/05/2010 10:41:29 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE NRF24L01
OBJECT MODULE PLACED IN nRF24L01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE nRF24L01.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"nRF24L01.h"
2
3
4 //uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址
5 uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0xb2,0xb2,0xb3,0xb4,0x01};
6 //uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x02,0xb4,0xb3,0xb2,0xb1};
7
8 uchar RX_BUF[TX_PLOAD_WIDTH];
9 uchar TX_BUF[TX_PLOAD_WIDTH]=
10 {
11 0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,
12 0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
13 0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,
14 0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
15 };
16 uchar flag,status;
17 uchar DATA = 0x01;
18
19 uchar bdata sta;
20 sbit RX_DR = sta^6;
21 sbit TX_DS = sta^5;
22 sbit MAX_RT = sta^4;
23 /**************************************************/
24
25 /**************************************************
26 函数: init_io()
27
28 描述:
29 初始化IO
30 /**************************************************/
31 void init_io(void)
32 {
33 1 CE = 0; // 待机
34 1 CSN = 1; // SPI禁止
35 1 SCK = 0; // SPI时钟置低
36 1 IRQ = 1; // 中断复位
37 1 LED = 0x00; // 关闭指示灯
38 1 }
39 /**************************************************/
40
41 /**************************************************
42 函数:delay_ms()
43
44 描述:
45 延迟x毫秒
46 /**************************************************/
47 void delay_ms(uchar x)
48 {
49 1 uchar i, j;
50 1 i = 0;
51 1 for(i=0; i<x; i++)
52 1 {
53 2 j = 250;
54 2 while(--j);
55 2 j = 250;
C51 COMPILER V7.00 NRF24L01 04/05/2010 10:41:29 PAGE 2
56 2 while(--j);
57 2 }
58 1 }
59 /**************************************************/
60
61 /**************************************************
62 函数:SPI_RW()
63
64 描述:
65 根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
66 读出一字节
67 /**************************************************/
68 uchar SPI_RW(uchar byte)
69 {
70 1 uchar i;
71 1 for(i=0; i<8; i++) // 循环8次
72 1 {
73 2 MOSI = (byte & 0x80); // byte最高位输出到MOSI
74 2 byte <<= 1; // 低一位移位到最高位
75 2 SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
76 2 byte |= MISO; // 读MISO到byte最低位
77 2 SCK = 0; // SCK置低
78 2 }
79 1 return(byte); // 返回读出的一字节
80 1 }
81 /**************************************************/
82
83 /**************************************************
84 函数:SPI_RW_Reg()
85
86 描述:
87 写数据value到reg寄存器
88 /**************************************************/
89 uchar SPI_RW_Reg(uchar reg, uchar value)
90 {
91 1 uchar status;
92 1 CSN = 0; // CSN置低,开始传输数据
93 1 status = SPI_RW(reg); // 选择寄存器,同时返回状态字
94 1 SPI_RW(value); // 然后写数据到该寄存器
95 1 CSN = 1; // CSN拉高,结束数据传输
96 1 return(status); // 返回状态寄存器
97 1 }
98 /**************************************************/
99
100 /**************************************************
101 函数:SPI_Read()
102
103 描述:
104 从reg寄存器读一字节
105 /**************************************************/
106 uchar SPI_Read(uchar reg)
107 {
108 1 uchar reg_val;
109 1 CSN = 0; // CSN置低,开始传输数据
110 1 SPI_RW(reg); // 选择寄存器
111 1 reg_val = SPI_RW(0); // 然后从该寄存器读数据
112 1 CSN = 1; // CSN拉高,结束数据传输
113 1 return(reg_val); // 返回寄存器数据
114 1 }
115 /**************************************************/
116
117 /**************************************************
C51 COMPILER V7.00 NRF24L01 04/05/2010 10:41:29 PAGE 3
118 函数:SPI_Read_Buf()
119
120 描述:
121 从reg寄存器读出bytes个字节,通常用来读取接收通道
122 数据或接收/发送地址
123 /**************************************************/
124 uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
125 {
126 1 uchar status, i;
127 1 CSN = 0; // CSN置低,开始传输数据
128 1 status = SPI_RW(reg); // 选择寄存器,同时返回状态字
129 1 for(i=0; i<bytes; i++)
130 1 pBuf[i] = SPI_RW(0); // 逐个字节从nRF24L01读出
131 1 CSN = 1; // CSN拉高,结束数据传输
132 1 return(status); // 返回状态寄存器
133 1 }
134 /**************************************************/
135
136 /**************************************************
137 函数:SPI_Write_Buf()
138
139 描述:
140 把pBuf缓存中的数据写入到nRF24L01,通常用来写入发
141 射通道数据或接收/发送地址
142 /**************************************************/
143 uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
144 {
145 1 uchar status, i;
146 1 CSN = 0; // CSN置低,开始传输数据
147 1 status = SPI_RW(reg); // 选择寄存器,同时返回状态字
148 1 for(i=0; i<bytes; i++)
149 1 SPI_RW(pBuf[i]); // 逐个字节写入nRF24L01
150 1 CSN = 1; // CSN拉高,结束数据传输
151 1 return(status); // 返回状态寄存器
152 1 }
153 /**************************************************/
154
155 /**************************************************
156 函数:RX_Mode()
157
158 描述:
159 这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
160 /**************************************************/
161 void RX_Mode(void)
162 {
163 1 CE = 0;
164 1 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -