?? 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 + -