?? nrf905.lst
字號:
134 1 nrf905_SpiRW(CRC16_EN | XOF_16MHz); //CRC16模式使能,晶體振蕩器頻率16MHz
135 1 SET(PORTB,CSN); // Disable Spi
136 1 }
137
138 uchar nrf905_SpiRW(uchar val)
139 {uchar temp;
140 1
141 1 SPDR=val;
142 1 while ((SPSR&(1<<SPIF))==0);
143 1 temp=SPDR;
144 1 return temp;
145 1 }
146
147 //PwrDown->StandBy
148 void nrf905_StandBy()
149 {
150 1 SET(PORTB,PWR);
151 1 CLR(PORTB,TRXCE);
152 1 CLR(PORTB,TX_EN);
153 1 }
154
155 //->PwrDown
156 void nrf905_Off()
157 {
158 1 CLR(PORTB,PWR);
159 1 }
160
161 //->ShockBurst Send
162 void nrf905_TxOn()
163 {
164 1 SET(PORTB,PWR);
165 1 SET(PORTB,TX_EN);
166 1 CLR(PORTB,TRXCE);
167 1 }
168
169 //->ShockBurst Send
170 void nrf905_TxSend()
171 {
172 1 SET(PORTB,TRXCE);
173 1 DelayUs(20);//>10us
174 1 CLR(PORTB,TRXCE);//只發送一次
175 1 }
176
C51 COMPILER V7.06 NRF905 03/28/2008 15:03:59 PAGE 4
177 //->ShockBurst Recv
178 void nrf905_RxOn()
179 {
180 1 SET(PORTB,PWR);
181 1 CLR(PORTB,TX_EN);//maybe first
182 1 SET(PORTB,TRXCE);
183 1 }
184
185 //初始化nrf905
186 void nrf905_Init()
187 {
188 1 nrf905_StandBy();
189 1 DelayMs(10);//!!!must >3ms
190 1 nrf905_Config();
191 1
192 1 nrf905_SpiTest();//test...
193 1 nrf905_RxOn();
194 1 }
195
196 //測試:通過讀配置,判斷SPI操作是否正確
197 void nrf905_SpiTest()
198 {uchar i;
199 1 CLR(PORTB,CSN);
200 1 nrf905_SpiRW(RC); //讀配置
201 1 for (i=0;i<10;i++)
202 1 {
203 2 RxBuf[i]= nrf905_SpiRW(0);//read from nrf905
204 2 }
205 1 SET(PORTB,CSN);
206 1 }
207
208 //寫Tx地址
209 void nrf905_SetTxAddr()
210 {
211 1 CLR(PORTB,CSN);
212 1 nrf905_SpiRW(WTA); //寫Tx地址
213 1 nrf905_SpiRW(TX_ADDRESS_0);
214 1 nrf905_SpiRW(TX_ADDRESS_1);
215 1 nrf905_SpiRW(TX_ADDRESS_2);
216 1 nrf905_SpiRW(TX_ADDRESS_3);
217 1 SET(PORTB,CSN);
218 1 }
219
220 //寫Tx數據
221 void nrf905_SetData()
222 {uchar i;
223 1
224 1 CLR(PORTB,CSN);
225 1 nrf905_SpiRW(WTP); //寫TxPayload
226 1 for (i=0;i<SIZE;i++)
227 1 {
228 2 nrf905_SpiRW(TxBuf[i]);
229 2 }
230 1
231 1 SET(PORTB,CSN);
232 1 }
233
234 //等待發送結束
235 void nrf905_WaitSended()
236 {
237 1 while ((PIND&(1<<DR))==0);
238 1 }
C51 COMPILER V7.06 NRF905 03/28/2008 15:03:59 PAGE 5
239
240 //發送TxBuf中的數據
241 void nrf905_SendData()
242 {
243 1 nrf905_TxOn();//切換到發送模式
244 1 nrf905_SetTxAddr();//寫發送地址
245 1 nrf905_SetData();//寫數據
246 1 nrf905_TxSend();//啟動發送
247 1 nrf905_WaitSended();//等待發送結束
248 1
249 1 }
250
251 //測試直接重新發送上次寫入的數據
252 void nrf905_SendAgain()
253 {
254 1 nrf905_TxOn();
255 1 nrf905_TxSend();
256 1 nrf905_WaitSended();
257 1
258 1 }
259
260 //讀出接收到的數據
261 void nrf905_ReadData()
262 {
263 1 uchar i;
264 1
265 1 CLR(PORTB,CSN);
266 1 nrf905_SpiRW(RRP); //讀RxPayload
267 1 for (i=0;i<SIZE;i++)
268 1 {
269 2 RxBuf[i]=nrf905_SpiRW(0);//read...
270 2 }
271 1
272 1 SET(PORTB,CSN);
273 1
274 1 }
C51 COMPILATION COMPLETE. 2 WARNING(S), 1 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -