📄 fasong.lst
字号:
146 1
147 1 CSN = 0; // CSN low, initialize SPI communication...
148 1 SPI_RW(reg); // Select register to read from..
149 1 reg_val = SPI_RW(0); // ..then read registervalue
150 1 CSN = 1; // CSN high, terminate SPI communication
151 1
152 1 return(reg_val); // return register value
153 1 }
154 /****************************************************************************************************/
155 /*功能:NRF24L01读写寄存器函数
156 /****************************************************************************************************/
157 uint SPI_RW_Reg(uchar reg, uchar value)
158 {
159 1 uint status;
160 1
161 1 CSN = 0; // CSN low, init SPI transaction
162 1 status = SPI_RW(reg); // select register
163 1 SPI_RW(value); // ..and write value to it..
164 1 CSN = 1; // CSN high again
165 1
166 1 return(status); // return nRF24L01 status uchar
167 1 }
168 /****************************************************************************************************/
169 /*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
170 /*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
171 /****************************************************************************************************/
172 uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
173 {
174 1 uint status,uchar_ctr;
175 1
176 1 CSN = 0; // Set CSN low, init SPI tranaction
177 1 status = SPI_RW(reg); // Select register to write to and read status uchar
C51 COMPILER V7.06 FASONG 06/14/2008 14:42:06 PAGE 4
178 1
179 1 for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
180 1 pBuf[uchar_ctr] = SPI_RW(0); //
181 1
182 1 CSN = 1;
183 1
184 1 return(status); // return nRF24L01 status uchar
185 1 }
186 /*********************************************************************************************************
187 /*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
188 /*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数
189 /*********************************************************************************************************
-/
190 uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
191 {
192 1 uint status,uchar_ctr;
193 1
194 1 CSN = 0; //SPI使能
195 1 status = SPI_RW(reg);
196 1 for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
197 1 SPI_RW(*pBuf++);
198 1 CSN = 1; //关闭SPI
199 1 return(status); //
200 1 }
201 /****************************************************************************************************/
202 /*函数:void SetRX_Mode(void)
203 /*功能:数据接收配置
204 /****************************************************************************************************/
205 void SetRX_Mode(void)
206 {
207 1 CE=0;
208 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收
209 1 CE = 1;
210 1 inerDelay_us(130);
211 1 }
212 /******************************************************************************************************/
213 /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
214 /*功能:数据读取后放如rx_buf接收缓冲区中
215 /******************************************************************************************************/
216 unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
217 {
218 1 unsigned char revale=0;
219 1 sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
220 1 if(RX_DR) // 判断是否接收到数据
221 1 {
222 2 CE = 0; //SPI使能
223 2 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
224 2 revale =1; //读取数据完成标志
225 2 }
226 1 SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
227 1 return revale;
228 1 }
229 /*********************************************************************************************************
-**
230 /*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
231 /*功能:发送 tx_buf中数据
232 /*********************************************************************************************************
-*/
233 void nRF24L01_TxPacket(unsigned char * tx_buf)
234 {
235 1 CE=0; //StandBy I模式
236 1 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
C51 COMPILER V7.06 FASONG 06/14/2008 14:42:06 PAGE 5
237 1 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
238 1 // SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
239 1 CE=1; //置高CE,激发数据发送
240 1 inerDelay_us(10);
241 1 }
242 //************************************主函数************************************************************
243 void main(void)
244 {
245 1 uchar temp =0;
246 1 init_NRF24L01() ;
247 1 led0=0;led1=0;led2=0;led3=0;
248 1 P0=0x00;
249 1 nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data
250 1 Delay(6000);
251 1 P0=0xBF;
252 1 while(1)
253 1 {
254 2 if(temp<4)
255 2 {
256 3 switch(temp)
257 3 {
258 4 case 1:
259 4 P0= 0xBF;
260 4 break;
261 4 case 2:
262 4 P0= 0xf7;
263 4
264 4 break;
265 4 case 3:
266 4 P0= 0xFE;
267 4
268 4 break;
269 4 default: break;
270 4 }
271 3 }
272 2 if(temp==3)
273 2 {
274 3 temp=0;
275 3 }
276 2 nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data
277 2 Delay(20000);
278 2 SPI_RW_Reg(WRITE_REG+STATUS,0XFF);
279 2 temp++;
280 2 }
281 1
282 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 482 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -