📄 nrf2401.lst
字号:
176 }
177 *************************************CE_Low END ********************************/
178 /*************************************nRF2401_ON START******************************/
179 void nRF2401_ON()
180 {
181 1 PWR_UP=1;
182 1 }
183 /*************************************nRF2401_ON END *******************************/
184 /*************************************nRF2401_OFF START*****************************/
185 //void nRF2401_OFF()
186 //{
187 // PWR_UP=0; // Set Power_Up low
188 //}
189 /*************************************nRF2401_OFF END ******************************/
190 /*************************************RXEN_HIGH START ******************************/
191 void RXEN_HIGH()
192 {
193 1 CE=0; //Set CE LOW
194 1 CS=1; //Set CS HIGH--confige mode
195 1 Data=1; //Set Data HIGH
196 1 DoSPIClock(); //Make one SPIClock cycle
197 1 CS=0; //Set CS LOW
198 1 CE=1; //Set CE HIGH--active mode
199 1 }
200 /*************************************RXEN_HIGH END *******************************/
201 /*************************************TXEN_LOW START ******************************/
202 void TXEN_LOW()
203 {
204 1 CE=0; //Set CE LOW
205 1 CS=1; //Set CS HIGH--confige mode
206 1 Data=0; //Set Data LOW
207 1 DoSPIClock(); //Make one SPIClock cycle
208 1 CS=0; //Set CS LOW
209 1 CE=1; //Set CE HIGH--active mode
210 1 }
211
212 /*************************************TXEN_LOW END *******************************/
213 /*************************************delay10 START ******************************/
214 void Delay10()
215 {
216 1 uchar x;
217 1 uchar y;
218 1 for(x=0;x<10;x++)
219 1 {
220 2 for(y=0;y<100;y++)
221 2 _nop_();
222 2 }
223 1 }
224 /*************************************delay10 END *******************************/
225 /*************************************delay100 START *****************************/
226 void delay100()
227 {
228 1 uchar x;
229 1 uchar y;
230 1 for(x=0;x<100;x++)
231 1 {
232 2 for(y=0;y<100;y++)
233 2 _nop_();
234 2 }
235 1 }
236 /*************************************delay100 END *******************************/
237 /*************************************ShockBurst START *****************************/
C51 COMPILER V7.08 NRF2401 03/12/2004 11:07:47 PAGE 5
238 void BuildShockWord()
239 {
240 1 TXData[0]=0xcc; //MSB ;RX receiver 1 address High byte
241 1 TXData[1]=0xcc; //MSB-1 ;RX receiver 1 address High byte
242 1 TXData[2]=0xcc; //MSB-2 ;RX receiver 1 address Low byte
243 1 TXData[3]=0xcc; //MSB-3 ;RX receiver 1 address Low byte
244 1 TXData[4]=Data1; //MSB-4 ;Data byte 9
245 1 TXData[5]=0x02; //MSB-5 ;Data byte 8
246 1 TXData[6]=0x03; //MSB-6 ;Data byte 7
247 1 TXData[7]=0x04; //MSB-7 ;Data byte 6
248 1 TXData[8]=0x05; //MSB-8 ;Data byte 5
249 1 TXData[9]=0x06; //MSB-9 ;Data byte 4
250 1 TXData[10]=0x07; //MSB-10 ;Data byte 3
251 1 TXData[11]=0x08; //MSB-11 ;Data byte 2
252 1 TXData[12]=0x09; //MSB-12 ;Data byte 1
253 1 TXData[13]=0x10; //MSB-13 ;Data byte 0
254 1 }
255 /************************************* BuildShockWord END *******************************/
256 /************************************* ShockBurst START *******************************/
257 void ShockBurst()
258 {
259 1 CS=0; //Pull CS low
260 1 CE=1; //Enable CE active mode
261 1 for (ByteCnt=0;ByteCnt<14;ByteCnt++)
262 1 {
263 2 tempi=TXData[ByteCnt];
264 2 for (BitCnt=0;BitCnt<8;BitCnt++)
265 2 {
266 3 if (bflag==1) //Check if first bit is HIGH
267 3 Data=1; //Set Data high
268 3 else
269 3 Data=0; //Set Data low
270 3 tempi=tempi<<1; //Left Shift to get next bit
271 3 DoSPIClock();
272 3 //SendData(); //Call SendData
273 3 }
274 2 }
275 1 CE=0; //Disable CE (TX Starts!)--standby mode
276 1 Data=0; //Set Data low
277 1 }
278 /************************************* ShockBurst END ***********************************/
279 /************************************* SendData START *******************************
280
281 void SendData()
282 {
283 for (BitCnt=0;BitCnt<8;BitCnt++)
284 {
285 if (bflag==1) //Check if first bit is HIGH
286 Data=1; //Set Data high
287 else
288 Data=0; //Set Data low
289 tempi=tempi<<1; //Left Shift to get next bit
290 DoSPIClock(); //Call "DoClock" to generate a clock pulse
291 }
292 }
293
294 ************************************** SendData END *************************************/
295 /************************************* CheckButtons START *******************************/
296 void CheckButtons()
297 {
298 1 P0=0xff;
299 1 Temp=P0&0x0f; //read key value from port P0
C51 COMPILER V7.08 NRF2401 03/12/2004 11:07:47 PAGE 6
300 1 if (Temp!=0x0f)
301 1 {
302 2 Temp=Temp<<4;
303 2 Data1=Temp; //put the button Data in dada package
304 2 P0=Data1; //Turn On the LED
305 2 TXEN_LOW(); //set TX mode
306 2 BuildShockWord();
307 2 ShockBurst();
308 2 delay100(); //delay for LED light
309 2 RXEN_HIGH();
310 2 P0=0xff; //close LED display
311 2
312 2 }
313 1 }
314 /************************************* CheckButtons END *********************************/
315 /************************************* ReceiveShock START *******************************/
316 void ReceiveShock()
317 {
318 1 Data=1; //Set Data tri state
319 1 Temp=0;
320 1 for (ByteCnt=0;ByteCnt<10;ByteCnt++)
321 1 {
322 2 for(BitCnt=0;BitCnt<8;BitCnt++)
323 2 {
324 3 Temp=Temp<<1; //shift left to receive next bit
325 3 CLK1=1; //set clock high
326 3 _nop_();
327 3 _nop_(); //wait one clk cycle
328 3 Data=1;
329 3 if(Data==1) //check if Data=high
330 3 Temp|=0x01; //yes - set bit high
331 3 CLK1=0; //set clock low
332 3 _nop_(); //wait one clk cycle
333 3 }
334 2 _nop_();
335 2 RXData[ByteCnt]=Temp;
336 2 DR1=1;
337 2 if(DR1!=1) //check if DR1 is not still high
338 2 {
339 3 _nop_();
340 3 P0=RXData[0]; //Turn On the LED
341 3 delay100();
342 3 P0=0xff;
343 3 }
344 2 }
345 1 }
346
347 /************************************* ReceiveShock END *********************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 515 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 ----
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 + -